Skip to content

Commit

Permalink
Add integration test for network scoped aliases
Browse files Browse the repository at this point in the history
Signed-off-by: Songmin Li <[email protected]>
  • Loading branch information
lisongmin authored and p12tic committed Dec 18, 2024
1 parent 22454fc commit 681d636
Show file tree
Hide file tree
Showing 2 changed files with 117 additions and 0 deletions.
33 changes: 33 additions & 0 deletions tests/integration/network_scoped_aliases/docker-compose.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
---
networks:
net0:
ipam:
config:
- subnet: "172.19.3.0/24"
net1:
ipam:
config:
- subnet: "172.19.4.0/24"
services:
web1:
image: busybox
command: ["/bin/busybox", "httpd", "-f", "-h", "/tmp", "-p", "8001"]
networks:
net0:
ipv4_address: "172.19.3.11"
aliases:
- secure-web
net1:
ipv4_address: "172.19.4.11"
aliases:
- insecure-web
utils-net0:
image: busybox
command: ["/bin/busybox", "httpd", "-f", "-h", "/tmp", "-p", "8001"]
networks:
- net0
utils-net1:
image: busybox
command: ["/bin/busybox", "httpd", "-f", "-h", "/tmp", "-p", "8001"]
networks:
- net1
84 changes: 84 additions & 0 deletions tests/integration/test_podman_compose_network_scoped_aliases.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
# 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)))

0 comments on commit 681d636

Please sign in to comment.