podman-compose/tests/integration/up_down/test_podman_compose_up_down.py
Frank Stettner d80c31f578 tests/integration: Add tests for up and down command
Refs #387

Signed-off-by: Frank Stettner <frank-stettner@gmx.net>
2025-04-08 13:53:27 +02:00

560 lines
18 KiB
Python

# SPDX-License-Identifier: GPL-2.0
"""
test_podman_compose_up_down.py
Tests the podman compose up and down commands used to create and remove services.
"""
import os
import unittest
from tests.integration.test_utils import RunSubprocessMixin
from tests.integration.test_utils import podman_compose_path
from tests.integration.test_utils import test_path
class TestPodmanCompose(unittest.TestCase, RunSubprocessMixin):
up_cmd = [
"coverage",
"run",
podman_compose_path(),
"-f",
os.path.join(test_path(), "up_down", "docker-compose.yml"),
"up",
"-d",
"--force-recreate",
]
def setUp(self):
"""
Retag the debian image before each test to no mess with the other integration tests when
testing the `--rmi` argument
"""
tag_cmd = [
"podman",
"tag",
"docker.io/library/debian:bookworm-slim",
"docker.io/library/debian:up-down-test",
]
self.run_subprocess_assert_returncode(tag_cmd)
@classmethod
def tearDownClass(cls):
"""
Ensures that the images that were created for this tests will be removed
"""
rmi_cmd = [
"podman",
"rmi",
"--force",
"--ignore",
"podman-compose-up-down-test",
"docker.io/library/debian:up-down-test",
]
cls().run_subprocess_assert_returncode(rmi_cmd)
def test_down(self):
down_cmd = [
"coverage",
"run",
podman_compose_path(),
"-f",
os.path.join(test_path(), "up_down", "docker-compose.yml"),
"down",
"--timeout",
"0",
]
try:
self.run_subprocess_assert_returncode(self.up_cmd)
self.run_subprocess_assert_returncode([
"podman",
"container",
"exists",
"up_down_web1_1",
])
self.run_subprocess_assert_returncode([
"podman",
"container",
"exists",
"up_down_web2_1",
])
self.run_subprocess_assert_returncode([
"podman",
"volume",
"exists",
"up_down_web1_vol",
])
self.run_subprocess_assert_returncode([
"podman",
"volume",
"exists",
"up_down_web2_vol",
])
finally:
self.run_subprocess_assert_returncode(down_cmd)
self.run_subprocess_assert_returncode(
["podman", "container", "exists", "up_down_web1_1"], 1
)
self.run_subprocess_assert_returncode(
["podman", "container", "exists", "up_down_web2_1"], 1
)
self.run_subprocess_assert_returncode(["podman", "volume", "exists", "up_down_web1_vol"])
self.run_subprocess_assert_returncode(["podman", "volume", "exists", "up_down_web2_vol"])
self.run_subprocess_assert_returncode([
"podman",
"image",
"exists",
"podman-compose-up-down-test",
])
self.run_subprocess_assert_returncode([
"podman",
"image",
"exists",
"docker.io/library/debian:up-down-test",
])
def test_down_with_volumes(self):
down_cmd = [
"coverage",
"run",
podman_compose_path(),
"-f",
os.path.join(test_path(), "up_down", "docker-compose.yml"),
"down",
"--volumes",
"--timeout",
"0",
]
try:
self.run_subprocess_assert_returncode(self.up_cmd)
self.run_subprocess_assert_returncode([
"podman",
"container",
"exists",
"up_down_web1_1",
])
self.run_subprocess_assert_returncode([
"podman",
"container",
"exists",
"up_down_web2_1",
])
self.run_subprocess_assert_returncode([
"podman",
"volume",
"exists",
"up_down_web1_vol",
])
self.run_subprocess_assert_returncode([
"podman",
"volume",
"exists",
"up_down_web2_vol",
])
finally:
self.run_subprocess_assert_returncode(down_cmd)
self.run_subprocess_assert_returncode(
["podman", "container", "exists", "up_down_web1_1"], 1
)
self.run_subprocess_assert_returncode(
["podman", "container", "exists", "up_down_web2_1"], 1
)
self.run_subprocess_assert_returncode(["podman", "volume", "exists", "up_down_web1_vol"], 1)
self.run_subprocess_assert_returncode(["podman", "volume", "exists", "up_down_web2_vol"], 1)
self.run_subprocess_assert_returncode([
"podman",
"image",
"exists",
"podman-compose-up-down-test",
])
self.run_subprocess_assert_returncode([
"podman",
"image",
"exists",
"docker.io/library/debian:up-down-test",
])
def test_down_without_orphans(self):
down_cmd = [
"coverage",
"run",
podman_compose_path(),
"-f",
os.path.join(test_path(), "up_down", "docker-compose-orphans.yml"),
"down",
"--volumes",
"--timeout",
"0",
]
try:
self.run_subprocess_assert_returncode(self.up_cmd)
self.run_subprocess_assert_returncode([
"podman",
"container",
"exists",
"up_down_web1_1",
])
self.run_subprocess_assert_returncode([
"podman",
"container",
"exists",
"up_down_web2_1",
])
self.run_subprocess_assert_returncode([
"podman",
"volume",
"exists",
"up_down_web1_vol",
])
self.run_subprocess_assert_returncode([
"podman",
"volume",
"exists",
"up_down_web2_vol",
])
finally:
self.run_subprocess_assert_returncode(down_cmd)
self.run_subprocess_assert_returncode(
["podman", "container", "exists", "up_down_web1_1"], 1
)
self.run_subprocess_assert_returncode(["podman", "container", "exists", "up_down_web2_1"])
self.run_subprocess_assert_returncode(["podman", "volume", "exists", "up_down_web1_vol"], 1)
self.run_subprocess_assert_returncode(["podman", "volume", "exists", "up_down_web2_vol"])
self.run_subprocess_assert_returncode([
"podman",
"image",
"exists",
"podman-compose-up-down-test",
])
self.run_subprocess_assert_returncode([
"podman",
"image",
"exists",
"docker.io/library/debian:up-down-test",
])
# Cleanup orphaned container
down_all_cmd = [
"coverage",
"run",
podman_compose_path(),
"-f",
os.path.join(test_path(), "up_down", "docker-compose.yml"),
"down",
"--volumes",
"--timeout",
"0",
]
self.run_subprocess_assert_returncode(down_all_cmd)
self.run_subprocess_assert_returncode(
["podman", "container", "exists", "up_down_web2_1"], 1
)
self.run_subprocess_assert_returncode(["podman", "volume", "exists", "up_down_web2_vol"], 1)
def test_down_with_orphans(self):
down_cmd = [
"coverage",
"run",
podman_compose_path(),
"-f",
os.path.join(test_path(), "up_down", "docker-compose-orphans.yml"),
"down",
"--volumes",
"--remove-orphans",
"--timeout",
"0",
]
try:
self.run_subprocess_assert_returncode(self.up_cmd)
self.run_subprocess_assert_returncode([
"podman",
"container",
"exists",
"up_down_web1_1",
])
self.run_subprocess_assert_returncode([
"podman",
"container",
"exists",
"up_down_web2_1",
])
self.run_subprocess_assert_returncode([
"podman",
"volume",
"exists",
"up_down_web1_vol",
])
self.run_subprocess_assert_returncode([
"podman",
"volume",
"exists",
"up_down_web2_vol",
])
finally:
self.run_subprocess_assert_returncode(down_cmd)
self.run_subprocess_assert_returncode(
["podman", "container", "exists", "up_down_web1_1"], 1
)
self.run_subprocess_assert_returncode(
["podman", "container", "exists", "up_down_web2_1"], 1
)
self.run_subprocess_assert_returncode(["podman", "volume", "exists", "up_down_web1_vol"], 1)
self.run_subprocess_assert_returncode(["podman", "volume", "exists", "up_down_web2_vol"], 1)
self.run_subprocess_assert_returncode([
"podman",
"image",
"exists",
"podman-compose-up-down-test",
])
self.run_subprocess_assert_returncode([
"podman",
"image",
"exists",
"docker.io/library/debian:up-down-test",
])
def test_down_with_images_default(self):
down_cmd = [
"coverage",
"run",
podman_compose_path(),
"-f",
os.path.join(test_path(), "up_down", "docker-compose.yml"),
"down",
"--rmi",
"--timeout",
"0",
]
try:
self.run_subprocess_assert_returncode(self.up_cmd)
self.run_subprocess_assert_returncode([
"podman",
"container",
"exists",
"up_down_web1_1",
])
self.run_subprocess_assert_returncode([
"podman",
"container",
"exists",
"up_down_web2_1",
])
self.run_subprocess_assert_returncode([
"podman",
"volume",
"exists",
"up_down_web1_vol",
])
self.run_subprocess_assert_returncode([
"podman",
"volume",
"exists",
"up_down_web2_vol",
])
finally:
self.run_subprocess_assert_returncode(down_cmd)
self.run_subprocess_assert_returncode(
["podman", "container", "exists", "up_down_web1_1"], 1
)
self.run_subprocess_assert_returncode(
["podman", "container", "exists", "up_down_web2_1"], 1
)
self.run_subprocess_assert_returncode(["podman", "volume", "exists", "up_down_web1_vol"])
self.run_subprocess_assert_returncode(["podman", "volume", "exists", "up_down_web2_vol"])
self.run_subprocess_assert_returncode(
["podman", "image", "exists", "podman-compose-up-down-test"], 1
)
self.run_subprocess_assert_returncode(
["podman", "image", "exists", "docker.io/library/debian:up-down-test"], 1
)
def test_down_with_images_all(self):
down_cmd = [
"coverage",
"run",
podman_compose_path(),
"-f",
os.path.join(test_path(), "up_down", "docker-compose.yml"),
"down",
"--rmi",
"all",
"--timeout",
"0",
]
try:
self.run_subprocess_assert_returncode(self.up_cmd)
self.run_subprocess_assert_returncode([
"podman",
"container",
"exists",
"up_down_web1_1",
])
self.run_subprocess_assert_returncode([
"podman",
"container",
"exists",
"up_down_web2_1",
])
self.run_subprocess_assert_returncode([
"podman",
"volume",
"exists",
"up_down_web1_vol",
])
self.run_subprocess_assert_returncode([
"podman",
"volume",
"exists",
"up_down_web2_vol",
])
finally:
self.run_subprocess_assert_returncode(down_cmd)
self.run_subprocess_assert_returncode(
["podman", "container", "exists", "up_down_web1_1"], 1
)
self.run_subprocess_assert_returncode(
["podman", "container", "exists", "up_down_web2_1"], 1
)
self.run_subprocess_assert_returncode(["podman", "volume", "exists", "up_down_web1_vol"])
self.run_subprocess_assert_returncode(["podman", "volume", "exists", "up_down_web2_vol"])
self.run_subprocess_assert_returncode(
["podman", "image", "exists", "podman-compose-up-down-test"], 1
)
self.run_subprocess_assert_returncode(
["podman", "image", "exists", "docker.io/library/debian:up-down-test"], 1
)
def test_down_with_images_all_and_orphans(self):
down_cmd = [
"coverage",
"run",
podman_compose_path(),
"-f",
os.path.join(test_path(), "up_down", "docker-compose-orphans.yml"),
"down",
"--volumes",
"--remove-orphans",
"--rmi",
"all",
"--timeout",
"0",
]
try:
self.run_subprocess_assert_returncode(self.up_cmd)
self.run_subprocess_assert_returncode([
"podman",
"container",
"exists",
"up_down_web1_1",
])
self.run_subprocess_assert_returncode([
"podman",
"container",
"exists",
"up_down_web2_1",
])
self.run_subprocess_assert_returncode([
"podman",
"volume",
"exists",
"up_down_web1_vol",
])
self.run_subprocess_assert_returncode([
"podman",
"volume",
"exists",
"up_down_web2_vol",
])
finally:
self.run_subprocess_assert_returncode(down_cmd)
self.run_subprocess_assert_returncode(
["podman", "container", "exists", "up_down_web1_1"], 1
)
self.run_subprocess_assert_returncode(
["podman", "container", "exists", "up_down_web2_1"], 1
)
self.run_subprocess_assert_returncode(["podman", "volume", "exists", "up_down_web1_vol"], 1)
self.run_subprocess_assert_returncode(["podman", "volume", "exists", "up_down_web2_vol"], 1)
self.run_subprocess_assert_returncode(
["podman", "image", "exists", "podman-compose-up-down-test"], 1
)
self.run_subprocess_assert_returncode(
["podman", "image", "exists", "docker.io/library/debian:up-down-test"], 1
)
def test_down_with_images_local(self):
down_cmd = [
"coverage",
"run",
podman_compose_path(),
"-f",
os.path.join(test_path(), "up_down", "docker-compose.yml"),
"down",
"--rmi",
"local",
"--timeout",
"0",
]
try:
self.run_subprocess_assert_returncode(self.up_cmd)
self.run_subprocess_assert_returncode([
"podman",
"container",
"exists",
"up_down_web1_1",
])
self.run_subprocess_assert_returncode([
"podman",
"container",
"exists",
"up_down_web2_1",
])
self.run_subprocess_assert_returncode([
"podman",
"volume",
"exists",
"up_down_web1_vol",
])
self.run_subprocess_assert_returncode([
"podman",
"volume",
"exists",
"up_down_web2_vol",
])
finally:
self.run_subprocess_assert_returncode(down_cmd)
self.run_subprocess_assert_returncode(
["podman", "container", "exists", "up_down_web1_1"], 1
)
self.run_subprocess_assert_returncode(
["podman", "container", "exists", "up_down_web2_1"], 1
)
self.run_subprocess_assert_returncode(["podman", "volume", "exists", "up_down_web1_vol"])
self.run_subprocess_assert_returncode(["podman", "volume", "exists", "up_down_web2_vol"])
self.run_subprocess_assert_returncode(
["podman", "image", "exists", "podman-compose-up-down-test"], 1
)
self.run_subprocess_assert_returncode([
"podman",
"image",
"exists",
"docker.io/library/debian:up-down-test",
])