-
Notifications
You must be signed in to change notification settings - Fork 489
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add integration test for network scoped aliases
Signed-off-by: Songmin Li <[email protected]>
- Loading branch information
Showing
2 changed files
with
117 additions
and
0 deletions.
There are no files selected for viewing
33 changes: 33 additions & 0 deletions
33
tests/integration/network_scoped_aliases/docker-compose.yaml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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
84
tests/integration/test_podman_compose_network_scoped_aliases.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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))) |