From e45b5d5063ecfdf1392c1eec22fbc023db9ec1a3 Mon Sep 17 00:00:00 2001 From: Monika Kairaityte Date: Thu, 3 Apr 2025 20:14:00 +0300 Subject: [PATCH] tests/integration: Automate manual `volumes_merge` test Signed-off-by: Monika Kairaityte --- tests/integration/volumes_merge/__init__.py | 1 + .../test_podman_compose_volumes_merge.py | 75 +++++++++++++++++++ 2 files changed, 76 insertions(+) create mode 100644 tests/integration/volumes_merge/__init__.py create mode 100644 tests/integration/volumes_merge/test_podman_compose_volumes_merge.py diff --git a/tests/integration/volumes_merge/__init__.py b/tests/integration/volumes_merge/__init__.py new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/tests/integration/volumes_merge/__init__.py @@ -0,0 +1 @@ + diff --git a/tests/integration/volumes_merge/test_podman_compose_volumes_merge.py b/tests/integration/volumes_merge/test_podman_compose_volumes_merge.py new file mode 100644 index 0000000..6512d1e --- /dev/null +++ b/tests/integration/volumes_merge/test_podman_compose_volumes_merge.py @@ -0,0 +1,75 @@ +# SPDX-License-Identifier: GPL-2.0 + +import json +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 + + +def compose_yaml_path(compose_name): + """ "Returns the path to the compose file used for this test module""" + base_path = os.path.join(test_path(), "volumes_merge/") + return os.path.join(base_path, compose_name) + + +class TestComposeVolumesMerge(unittest.TestCase, RunSubprocessMixin): + def test_volumes_merge(self): + # test if additional compose file overrides host path and access mode of a volume + try: + self.run_subprocess_assert_returncode([ + podman_compose_path(), + "-f", + compose_yaml_path("docker-compose.yaml"), + "-f", + compose_yaml_path("docker-compose.override.yaml"), + "up", + "-d", + ]) + + out, _ = self.run_subprocess_assert_returncode([ + "podman", + "exec", + "-ti", + "volumes_merge_web_1", + "cat", + "/var/www/html/index.html", + "/var/www/html/index2.html", + "/var/www/html/index3.html", + ]) + self.assertEqual( + out, + b"The file from docker-compose.override.yaml\r\n" + b"The file from docker-compose.override.yaml\r\n" + b"The file from docker-compose.override.yaml\r\n", + ) + + out, _ = self.run_subprocess_assert_returncode([ + "podman", + "inspect", + "volumes_merge_web_1", + ]) + volumes_info = json.loads(out.decode('utf-8'))[0] + binds_info = volumes_info["HostConfig"]["Binds"] + binds_info.sort() + + file_path = os.path.join(test_path(), "volumes_merge/override.txt") + expected = [ + f'{file_path}:/var/www/html/index.html:ro,rprivate,rbind', + f'{file_path}:/var/www/html/index2.html:rw,rprivate,rbind', + f'{file_path}:/var/www/html/index3.html:rw,rprivate,rbind', + ] + self.assertEqual(binds_info, expected) + finally: + out, _ = self.run_subprocess_assert_returncode([ + podman_compose_path(), + "-f", + compose_yaml_path("docker-compose.yaml"), + "-f", + compose_yaml_path("docker-compose.override.yaml"), + "down", + "-t", + "0", + ])