mirror of
https://github.com/containers/podman-compose.git
synced 2025-04-10 01:49:09 +02:00
Allow setting an argument list as x-podman.pod_args to override the default value `--infra=false --share=`. `--pod-args` passed on the command line takes precedence over the value set in docker-compose.yml; the values are not merged. Fixes #1057. Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
181 lines
5.6 KiB
Python
181 lines
5.6 KiB
Python
# SPDX-License-Identifier: GPL-2.0
|
|
|
|
import json
|
|
import os
|
|
import unittest
|
|
|
|
from tests.integration.test_utils import RunSubprocessMixin
|
|
|
|
|
|
def base_path():
|
|
"""Returns the base path for the project"""
|
|
return os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(__file__))))
|
|
|
|
|
|
def test_path():
|
|
"""Returns the path to the tests directory"""
|
|
return os.path.join(base_path(), "tests/integration")
|
|
|
|
|
|
def podman_compose_path():
|
|
"""Returns the path to the podman compose script"""
|
|
return os.path.join(base_path(), "podman_compose.py")
|
|
|
|
|
|
class TestPodmanComposePodArgs(unittest.TestCase, RunSubprocessMixin):
|
|
def load_pod_info(self, pod_name):
|
|
output, _ = self.run_subprocess_assert_returncode([
|
|
"podman",
|
|
"pod",
|
|
"inspect",
|
|
pod_name,
|
|
])
|
|
pod_info = json.loads(output.decode('utf-8'))
|
|
# Podman 5.0 changed pod inspect to always output a list.
|
|
# Check type to support both old and new version.
|
|
if isinstance(pod_info, list):
|
|
return pod_info[0]
|
|
return pod_info
|
|
|
|
def run_pod_args_test(self, config, args, expected):
|
|
"""
|
|
Helper to run podman up with a docker-compose.yml config, additional
|
|
(--pod-args) arguments and compare the CreateCommand of the resulting
|
|
pod with an expected value
|
|
"""
|
|
pod_name = "pod_" + config
|
|
command_up = (
|
|
[
|
|
"python3",
|
|
os.path.join(base_path(), "podman_compose.py"),
|
|
"-f",
|
|
os.path.join(
|
|
base_path(),
|
|
"tests",
|
|
"integration",
|
|
"pod_args",
|
|
config,
|
|
"docker-compose.yml",
|
|
),
|
|
]
|
|
+ args
|
|
+ [
|
|
"up",
|
|
"--no-start",
|
|
]
|
|
)
|
|
|
|
try:
|
|
self.run_subprocess_assert_returncode(command_up)
|
|
|
|
pod_info = self.load_pod_info(pod_name)
|
|
self.assertEqual(
|
|
pod_info['CreateCommand'],
|
|
["podman", "pod", "create", "--name=" + pod_name] + expected,
|
|
)
|
|
|
|
finally:
|
|
command_rm_pod = ["podman", "pod", "rm", pod_name]
|
|
self.run_subprocess_assert_returncode(command_rm_pod)
|
|
|
|
def test_x_podman_pod_args_unset_unset(self):
|
|
"""
|
|
Test that podman-compose will use the default pod-args when unset in
|
|
both docker-compose.yml and command line
|
|
"""
|
|
self.run_pod_args_test(
|
|
"custom_pod_args_unset",
|
|
[],
|
|
["--infra=false", "--share="],
|
|
)
|
|
|
|
def test_x_podman_pod_args_unset_empty(self):
|
|
"""
|
|
Test that podman-compose will use empty pod-args when unset in
|
|
docker-compose.yml and passing an empty value on the command line
|
|
"""
|
|
self.run_pod_args_test(
|
|
"custom_pod_args_unset",
|
|
["--pod-args="],
|
|
[],
|
|
)
|
|
|
|
def test_x_podman_pod_args_unset_set(self):
|
|
"""
|
|
Test that podman-compose will use the passed pod-args when unset in
|
|
docker-compose.yml and passing a non-empty value on the command line
|
|
"""
|
|
self.run_pod_args_test(
|
|
"custom_pod_args_unset",
|
|
["--pod-args=--infra=false --share= --cpus=1"],
|
|
["--infra=false", "--share=", "--cpus=1"],
|
|
)
|
|
|
|
def test_x_podman_pod_args_empty_unset(self):
|
|
"""
|
|
Test that podman-compose will use empty pod-args when set to an
|
|
empty value in docker-compose.yml and unset on the command line
|
|
"""
|
|
self.run_pod_args_test(
|
|
"custom_pod_args_empty",
|
|
[],
|
|
[],
|
|
)
|
|
|
|
def test_x_podman_pod_args_empty_empty(self):
|
|
"""
|
|
Test that podman-compose will use empty pod-args when set to an
|
|
empty value in both docker-compose.yml and command line
|
|
"""
|
|
self.run_pod_args_test(
|
|
"custom_pod_args_empty",
|
|
["--pod-args="],
|
|
[],
|
|
)
|
|
|
|
def test_x_podman_pod_args_empty_set(self):
|
|
"""
|
|
Test that podman-compose will use the passed pod-args when set to an
|
|
empty value in docker-compose.yml and passing a non-empty value on the
|
|
command line
|
|
"""
|
|
self.run_pod_args_test(
|
|
"custom_pod_args_empty",
|
|
["--pod-args=--infra=false --share= --cpus=1"],
|
|
["--infra=false", "--share=", "--cpus=1"],
|
|
)
|
|
|
|
def test_x_podman_pod_args_set_unset(self):
|
|
"""
|
|
Test that podman-compose will use the set pod-args when set to a
|
|
non-empty value in docker-compose.yml and unset on the command line
|
|
"""
|
|
self.run_pod_args_test(
|
|
"custom_pod_args_set",
|
|
[],
|
|
["--infra=false", "--share=", "--cpus=2"],
|
|
)
|
|
|
|
def test_x_podman_pod_args_set_empty(self):
|
|
"""
|
|
Test that podman-compose will use empty pod-args when set to a
|
|
non-empty value in docker-compose.yml and passing an empty value on
|
|
the command line
|
|
"""
|
|
self.run_pod_args_test(
|
|
"custom_pod_args_set",
|
|
["--pod-args="],
|
|
[],
|
|
)
|
|
|
|
def test_x_podman_pod_args_set_set(self):
|
|
"""
|
|
Test that podman-compose will use the passed pod-args when set to a
|
|
non-empty value in both docker-compose.yml and command line
|
|
"""
|
|
self.run_pod_args_test(
|
|
"custom_pod_args_set",
|
|
["--pod-args=--infra=false --share= --cpus=1"],
|
|
["--infra=false", "--share=", "--cpus=1"],
|
|
)
|