podman-compose/tests/integration/test_podman_compose_network_scoped_aliases.py
Songmin Li 55642247e3 Add integration test for network scoped aliases
Signed-off-by: Songmin Li <lisongmin@protonmail.com>
2024-12-21 22:52:37 +02:00

85 lines
2.4 KiB
Python

# SPDX-License-Identifier: GPL-2.0
# pylint: disable=redefined-outer-name
import os
import unittest
from tests.integration.test_podman_compose import podman_compose_path
from tests.integration.test_podman_compose import test_path
from tests.integration.test_utils import RunSubprocessMixin
class TestPodmanComposeNetworkScopedAliases(RunSubprocessMixin, unittest.TestCase):
@staticmethod
def compose_file():
"""Returns the path to the compose file used for this test module"""
return os.path.join(test_path(), "network_scoped_aliases", "docker-compose.yaml")
def test_network_scoped_aliases(self):
try:
self.up()
self.verify()
finally:
self.down()
def up(self):
up_cmd = [
"coverage",
"run",
podman_compose_path(),
"-f",
self.compose_file(),
"up",
"-d",
"--force-recreate",
]
self.run_subprocess_assert_returncode(up_cmd)
def down(self):
down_cmd = [
"coverage",
"run",
podman_compose_path(),
"-f",
self.compose_file(),
"kill",
"-a",
]
self.run_subprocess(down_cmd)
def verify(self):
expected_results = [
("utils-net0", "web1", ["172.19.3.11"]),
("utils-net0", "secure-web", ["172.19.3.11"]),
("utils-net0", "insecure-web", []),
("utils-net1", "web1", ["172.19.4.11"]),
("utils-net1", "secure-web", []),
("utils-net1", "insecure-web", ["172.19.4.11"]),
]
for utils, service, expected_result in expected_results:
cmd = [
podman_compose_path(),
"-f",
self.compose_file(),
"exec",
utils,
"nslookup",
service,
]
out, _, _ = self.run_subprocess(cmd)
addresses = self.parse_dnslookup(out.decode())
self.assertEqual(addresses, expected_result)
def parse_dnslookup(self, output):
lines = output.splitlines()
addresses = []
for line in lines:
if line.startswith("Address"):
addr = line.split(":", 1)[1].strip()
if ":" not in addr:
addresses.append(addr)
return list(sorted(set(addresses)))