mirror of
https://github.com/containers/podman-compose.git
synced 2025-08-10 06:07:50 +02:00
Implement x-podman.pod_args to override --pod-args default
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>
This commit is contained in:
180
tests/integration/pod_args/test_podman_compose_pod_args.py
Normal file
180
tests/integration/pod_args/test_podman_compose_pod_args.py
Normal file
@ -0,0 +1,180 @@
|
||||
# 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"],
|
||||
)
|
Reference in New Issue
Block a user