2023-05-06 07:00:46 +02:00
|
|
|
import copy
|
|
|
|
import os
|
|
|
|
import argparse
|
|
|
|
import yaml
|
|
|
|
from podman_compose import normalize_service, PodmanCompose
|
|
|
|
|
|
|
|
|
|
|
|
test_cases_simple = [
|
|
|
|
({"test": "test"}, {"test": "test"}),
|
|
|
|
({"build": "."}, {"build": {"context": "."}}),
|
|
|
|
({"build": "./dir-1"}, {"build": {"context": "./dir-1"}}),
|
|
|
|
({"build": {"context": "./dir-1"}}, {"build": {"context": "./dir-1"}}),
|
|
|
|
(
|
|
|
|
{"build": {"dockerfile": "dockerfile-1"}},
|
|
|
|
{"build": {"dockerfile": "dockerfile-1"}},
|
|
|
|
),
|
|
|
|
(
|
|
|
|
{"build": {"context": "./dir-1", "dockerfile": "dockerfile-1"}},
|
|
|
|
{"build": {"context": "./dir-1", "dockerfile": "dockerfile-1"}},
|
|
|
|
),
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
|
|
def test_normalize_service_simple():
|
|
|
|
for test_case, expected in copy.deepcopy(test_cases_simple):
|
|
|
|
test_original = copy.deepcopy(test_case)
|
|
|
|
test_case = normalize_service(test_case)
|
|
|
|
test_result = expected == test_case
|
|
|
|
if not test_result:
|
|
|
|
print("test: ", test_original)
|
|
|
|
print("expected: ", expected)
|
|
|
|
print("actual: ", test_case)
|
|
|
|
assert test_result
|
|
|
|
|
|
|
|
|
|
|
|
test_cases_sub_dir = [
|
|
|
|
({"test": "test"}, {"test": "test"}),
|
|
|
|
({"build": "."}, {"build": {"context": "./sub_dir/."}}),
|
|
|
|
({"build": "./dir-1"}, {"build": {"context": "./sub_dir/dir-1"}}),
|
|
|
|
({"build": {"context": "./dir-1"}}, {"build": {"context": "./sub_dir/dir-1"}}),
|
|
|
|
(
|
|
|
|
{"build": {"dockerfile": "dockerfile-1"}},
|
|
|
|
{"build": {"context": "./sub_dir", "dockerfile": "dockerfile-1"}},
|
|
|
|
),
|
|
|
|
(
|
|
|
|
{"build": {"context": "./dir-1", "dockerfile": "dockerfile-1"}},
|
|
|
|
{"build": {"context": "./sub_dir/dir-1", "dockerfile": "dockerfile-1"}},
|
|
|
|
),
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
|
|
def test_normalize_service_with_sub_dir():
|
|
|
|
for test_case, expected in copy.deepcopy(test_cases_sub_dir):
|
|
|
|
test_original = copy.deepcopy(test_case)
|
|
|
|
test_case = normalize_service(test_case, sub_dir="./sub_dir")
|
|
|
|
test_result = expected == test_case
|
|
|
|
if not test_result:
|
|
|
|
print("test: ", test_original)
|
|
|
|
print("expected: ", expected)
|
|
|
|
print("actual: ", test_case)
|
|
|
|
assert test_result
|
|
|
|
|
|
|
|
|
|
|
|
test_cases_merges = [
|
|
|
|
({}, {}, {}),
|
|
|
|
({}, {"test": "test"}, {"test": "test"}),
|
|
|
|
({"test": "test"}, {}, {"test": "test"}),
|
|
|
|
({"test": "test-1"}, {"test": "test-2"}, {"test": "test-2"}),
|
|
|
|
({}, {"build": "."}, {"build": {"context": "."}}),
|
|
|
|
({"build": "."}, {}, {"build": {"context": "."}}),
|
|
|
|
({"build": "./dir-1"}, {"build": "./dir-2"}, {"build": {"context": "./dir-2"}}),
|
|
|
|
({}, {"build": {"context": "./dir-1"}}, {"build": {"context": "./dir-1"}}),
|
|
|
|
({"build": {"context": "./dir-1"}}, {}, {"build": {"context": "./dir-1"}}),
|
|
|
|
(
|
|
|
|
{"build": {"context": "./dir-1"}},
|
|
|
|
{"build": {"context": "./dir-2"}},
|
|
|
|
{"build": {"context": "./dir-2"}},
|
|
|
|
),
|
|
|
|
(
|
|
|
|
{},
|
|
|
|
{"build": {"dockerfile": "dockerfile-1"}},
|
|
|
|
{"build": {"dockerfile": "dockerfile-1"}},
|
|
|
|
),
|
|
|
|
(
|
|
|
|
{"build": {"dockerfile": "dockerfile-1"}},
|
|
|
|
{},
|
|
|
|
{"build": {"dockerfile": "dockerfile-1"}},
|
|
|
|
),
|
|
|
|
(
|
|
|
|
{"build": {"dockerfile": "./dockerfile-1"}},
|
|
|
|
{"build": {"dockerfile": "./dockerfile-2"}},
|
|
|
|
{"build": {"dockerfile": "./dockerfile-2"}},
|
|
|
|
),
|
|
|
|
(
|
|
|
|
{"build": {"dockerfile": "./dockerfile-1"}},
|
|
|
|
{"build": {"context": "./dir-2"}},
|
|
|
|
{"build": {"dockerfile": "./dockerfile-1", "context": "./dir-2"}},
|
|
|
|
),
|
|
|
|
(
|
|
|
|
{"build": {"dockerfile": "./dockerfile-1", "context": "./dir-1"}},
|
|
|
|
{"build": {"dockerfile": "./dockerfile-2", "context": "./dir-2"}},
|
|
|
|
{"build": {"dockerfile": "./dockerfile-2", "context": "./dir-2"}},
|
|
|
|
),
|
|
|
|
(
|
|
|
|
{"build": {"dockerfile": "./dockerfile-1"}},
|
|
|
|
{"build": {"dockerfile": "./dockerfile-2", "args": ["ENV1=1"]}},
|
|
|
|
{"build": {"dockerfile": "./dockerfile-2", "args": ["ENV1=1"]}},
|
|
|
|
),
|
|
|
|
(
|
|
|
|
{"build": {"dockerfile": "./dockerfile-2", "args": ["ENV1=1"]}},
|
|
|
|
{"build": {"dockerfile": "./dockerfile-1"}},
|
|
|
|
{"build": {"dockerfile": "./dockerfile-1", "args": ["ENV1=1"]}},
|
|
|
|
),
|
|
|
|
(
|
|
|
|
{"build": {"dockerfile": "./dockerfile-2", "args": ["ENV1=1"]}},
|
|
|
|
{"build": {"dockerfile": "./dockerfile-1", "args": ["ENV2=2"]}},
|
|
|
|
{"build": {"dockerfile": "./dockerfile-1", "args": ["ENV1=1", "ENV2=2"]}},
|
|
|
|
),
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
|
|
def test__parse_compose_file_when_multiple_composes() -> None:
|
|
|
|
for test_input, test_override, expected_result in copy.deepcopy(test_cases_merges):
|
|
|
|
compose_test_1 = {"services": {"test-service": test_input}}
|
|
|
|
compose_test_2 = {"services": {"test-service": test_override}}
|
|
|
|
dump_yaml(compose_test_1, "test-compose-1.yaml")
|
|
|
|
dump_yaml(compose_test_2, "test-compose-2.yaml")
|
|
|
|
|
|
|
|
podman_compose = PodmanCompose()
|
|
|
|
set_args(podman_compose, ["test-compose-1.yaml", "test-compose-2.yaml"])
|
|
|
|
|
|
|
|
podman_compose._parse_compose_file() # pylint: disable=protected-access
|
|
|
|
|
|
|
|
actual_compose = {}
|
|
|
|
if podman_compose.services:
|
|
|
|
podman_compose.services["test-service"].pop("_deps")
|
|
|
|
actual_compose = podman_compose.services["test-service"]
|
|
|
|
if actual_compose != expected_result:
|
|
|
|
print("compose: ", test_input)
|
|
|
|
print("override: ", test_override)
|
2023-06-11 07:19:14 +02:00
|
|
|
print("expected: ", expected_result)
|
|
|
|
print("actual: ", actual_compose)
|
|
|
|
|
2023-05-06 07:00:46 +02:00
|
|
|
compose_expected = expected_result
|
|
|
|
|
|
|
|
assert compose_expected == actual_compose
|
|
|
|
|
|
|
|
|
|
|
|
def set_args(podman_compose: PodmanCompose, file_names: list[str]) -> None:
|
|
|
|
podman_compose.global_args = argparse.Namespace()
|
|
|
|
podman_compose.global_args.file = file_names
|
|
|
|
podman_compose.global_args.project_name = None
|
|
|
|
podman_compose.global_args.env_file = None
|
|
|
|
podman_compose.global_args.profile = []
|
|
|
|
podman_compose.global_args.in_pod = True
|
2023-06-11 07:19:14 +02:00
|
|
|
podman_compose.global_args.no_normalize = True
|
2023-05-06 07:00:46 +02:00
|
|
|
|
|
|
|
|
|
|
|
def dump_yaml(compose: dict, name: str) -> None:
|
|
|
|
with open(name, "w", encoding="utf-8") as outfile:
|
|
|
|
yaml.safe_dump(compose, outfile, default_flow_style=False)
|
|
|
|
|
|
|
|
|
|
|
|
def test_clean_test_yamls() -> None:
|
|
|
|
test_files = ["test-compose-1.yaml", "test-compose-2.yaml"]
|
|
|
|
for file in test_files:
|
|
|
|
if os.path.exists(file):
|
|
|
|
os.remove(file)
|