mirror of
https://github.com/ansible-collections/community.docker.git
synced 2026-07-29 11:55:04 +00:00
Reformat code with black and isort.
This commit is contained in:
@@ -2,53 +2,66 @@
|
||||
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
from __future__ import (absolute_import, division, print_function)
|
||||
from __future__ import absolute_import, division, print_function
|
||||
|
||||
|
||||
__metaclass__ = type
|
||||
|
||||
import pytest
|
||||
|
||||
from ansible_collections.community.docker.plugins.modules.docker_container_copy_into import parse_modern, parse_octal_string_only
|
||||
from ansible_collections.community.docker.plugins.modules.docker_container_copy_into import (
|
||||
parse_modern,
|
||||
parse_octal_string_only,
|
||||
)
|
||||
|
||||
|
||||
@pytest.mark.parametrize("input, expected", [
|
||||
('0777', 0o777),
|
||||
('777', 0o777),
|
||||
('0o777', 0o777),
|
||||
('0755', 0o755),
|
||||
('755', 0o755),
|
||||
('0o755', 0o755),
|
||||
('0644', 0o644),
|
||||
('644', 0o644),
|
||||
('0o644', 0o644),
|
||||
(' 0644 ', 0o644),
|
||||
(' 644 ', 0o644),
|
||||
(' 0o644 ', 0o644),
|
||||
('-1', -1),
|
||||
])
|
||||
@pytest.mark.parametrize(
|
||||
"input, expected",
|
||||
[
|
||||
("0777", 0o777),
|
||||
("777", 0o777),
|
||||
("0o777", 0o777),
|
||||
("0755", 0o755),
|
||||
("755", 0o755),
|
||||
("0o755", 0o755),
|
||||
("0644", 0o644),
|
||||
("644", 0o644),
|
||||
("0o644", 0o644),
|
||||
(" 0644 ", 0o644),
|
||||
(" 644 ", 0o644),
|
||||
(" 0o644 ", 0o644),
|
||||
("-1", -1),
|
||||
],
|
||||
)
|
||||
def test_parse_string(input, expected):
|
||||
assert parse_modern(input) == expected
|
||||
assert parse_octal_string_only(input) == expected
|
||||
|
||||
|
||||
@pytest.mark.parametrize("input", [
|
||||
0o777,
|
||||
0o755,
|
||||
0o644,
|
||||
12345,
|
||||
123456789012345678901234567890123456789012345678901234567890,
|
||||
])
|
||||
@pytest.mark.parametrize(
|
||||
"input",
|
||||
[
|
||||
0o777,
|
||||
0o755,
|
||||
0o644,
|
||||
12345,
|
||||
123456789012345678901234567890123456789012345678901234567890,
|
||||
],
|
||||
)
|
||||
def test_parse_int(input):
|
||||
assert parse_modern(input) == input
|
||||
with pytest.raises(TypeError, match=f"^must be an octal string, got {input}L?$"):
|
||||
parse_octal_string_only(input)
|
||||
|
||||
|
||||
@pytest.mark.parametrize("input", [
|
||||
1.0,
|
||||
755.5,
|
||||
[],
|
||||
{},
|
||||
])
|
||||
@pytest.mark.parametrize(
|
||||
"input",
|
||||
[
|
||||
1.0,
|
||||
755.5,
|
||||
[],
|
||||
{},
|
||||
],
|
||||
)
|
||||
def test_parse_bad_type(input):
|
||||
with pytest.raises(TypeError, match="^must be an octal string or an integer, got "):
|
||||
parse_modern(input)
|
||||
@@ -56,11 +69,14 @@ def test_parse_bad_type(input):
|
||||
parse_octal_string_only(input)
|
||||
|
||||
|
||||
@pytest.mark.parametrize("input", [
|
||||
"foo",
|
||||
"8",
|
||||
"9",
|
||||
])
|
||||
@pytest.mark.parametrize(
|
||||
"input",
|
||||
[
|
||||
"foo",
|
||||
"8",
|
||||
"9",
|
||||
],
|
||||
)
|
||||
def test_parse_bad_value(input):
|
||||
with pytest.raises(ValueError):
|
||||
parse_modern(input)
|
||||
|
||||
@@ -2,14 +2,18 @@
|
||||
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
from __future__ import (absolute_import, division, print_function)
|
||||
from __future__ import absolute_import, division, print_function
|
||||
|
||||
|
||||
__metaclass__ = type
|
||||
|
||||
import pytest
|
||||
|
||||
from ansible_collections.community.docker.plugins.modules.docker_image import ImageManager
|
||||
|
||||
from ansible_collections.community.docker.plugins.module_utils.image_archive import api_image_id
|
||||
from ansible_collections.community.docker.plugins.module_utils.image_archive import (
|
||||
api_image_id,
|
||||
)
|
||||
from ansible_collections.community.docker.plugins.modules.docker_image import (
|
||||
ImageManager,
|
||||
)
|
||||
|
||||
from ..test_support.docker_image_archive_stubbing import (
|
||||
write_imitation_archive,
|
||||
@@ -18,7 +22,7 @@ from ..test_support.docker_image_archive_stubbing import (
|
||||
|
||||
|
||||
def assert_no_logging(msg):
|
||||
raise AssertionError(f'Should not have logged anything but logged {msg}')
|
||||
raise AssertionError(f"Should not have logged anything but logged {msg}")
|
||||
|
||||
|
||||
def capture_logging(messages):
|
||||
@@ -34,76 +38,81 @@ def tar_file_name(tmpdir):
|
||||
Return the name of a non-existing tar file in an existing temporary directory.
|
||||
"""
|
||||
|
||||
return tmpdir.join('foo.tar')
|
||||
return tmpdir.join("foo.tar")
|
||||
|
||||
|
||||
def test_archived_image_action_when_missing(tar_file_name):
|
||||
fake_name = 'a:latest'
|
||||
fake_id = 'a1'
|
||||
fake_name = "a:latest"
|
||||
fake_id = "a1"
|
||||
|
||||
expected = f'Archived image {fake_name} to {tar_file_name}, since none present'
|
||||
expected = f"Archived image {fake_name} to {tar_file_name}, since none present"
|
||||
|
||||
actual = ImageManager.archived_image_action(assert_no_logging, tar_file_name, fake_name, api_image_id(fake_id))
|
||||
actual = ImageManager.archived_image_action(
|
||||
assert_no_logging, tar_file_name, fake_name, api_image_id(fake_id)
|
||||
)
|
||||
|
||||
assert actual == expected
|
||||
|
||||
|
||||
def test_archived_image_action_when_current(tar_file_name):
|
||||
fake_name = 'b:latest'
|
||||
fake_id = 'b2'
|
||||
fake_name = "b:latest"
|
||||
fake_id = "b2"
|
||||
|
||||
write_imitation_archive(tar_file_name, fake_id, [fake_name])
|
||||
|
||||
actual = ImageManager.archived_image_action(assert_no_logging, tar_file_name, fake_name, api_image_id(fake_id))
|
||||
actual = ImageManager.archived_image_action(
|
||||
assert_no_logging, tar_file_name, fake_name, api_image_id(fake_id)
|
||||
)
|
||||
|
||||
assert actual is None
|
||||
|
||||
|
||||
def test_archived_image_action_when_invalid(tar_file_name):
|
||||
fake_name = 'c:1.2.3'
|
||||
fake_id = 'c3'
|
||||
fake_name = "c:1.2.3"
|
||||
fake_id = "c3"
|
||||
|
||||
write_irrelevant_tar(tar_file_name)
|
||||
|
||||
expected = f'Archived image {fake_name} to {tar_file_name}, overwriting an unreadable archive file'
|
||||
expected = f"Archived image {fake_name} to {tar_file_name}, overwriting an unreadable archive file"
|
||||
|
||||
actual_log = []
|
||||
actual = ImageManager.archived_image_action(
|
||||
capture_logging(actual_log),
|
||||
tar_file_name,
|
||||
fake_name,
|
||||
api_image_id(fake_id)
|
||||
capture_logging(actual_log), tar_file_name, fake_name, api_image_id(fake_id)
|
||||
)
|
||||
|
||||
assert actual == expected
|
||||
|
||||
assert len(actual_log) == 1
|
||||
assert actual_log[0].startswith('Unable to extract manifest summary from archive')
|
||||
assert actual_log[0].startswith("Unable to extract manifest summary from archive")
|
||||
|
||||
|
||||
def test_archived_image_action_when_obsolete_by_id(tar_file_name):
|
||||
fake_name = 'd:0.0.1'
|
||||
old_id = 'e5'
|
||||
new_id = 'd4'
|
||||
fake_name = "d:0.0.1"
|
||||
old_id = "e5"
|
||||
new_id = "d4"
|
||||
|
||||
write_imitation_archive(tar_file_name, old_id, [fake_name])
|
||||
|
||||
expected = f'Archived image {fake_name} to {tar_file_name}, overwriting archive with image {old_id} named {fake_name}'
|
||||
actual = ImageManager.archived_image_action(assert_no_logging, tar_file_name, fake_name, api_image_id(new_id))
|
||||
expected = f"Archived image {fake_name} to {tar_file_name}, overwriting archive with image {old_id} named {fake_name}"
|
||||
actual = ImageManager.archived_image_action(
|
||||
assert_no_logging, tar_file_name, fake_name, api_image_id(new_id)
|
||||
)
|
||||
|
||||
assert actual == expected
|
||||
|
||||
|
||||
def test_archived_image_action_when_obsolete_by_name(tar_file_name):
|
||||
old_name = 'hi'
|
||||
new_name = 'd:0.0.1'
|
||||
fake_id = 'd4'
|
||||
old_name = "hi"
|
||||
new_name = "d:0.0.1"
|
||||
fake_id = "d4"
|
||||
|
||||
write_imitation_archive(tar_file_name, fake_id, [old_name])
|
||||
|
||||
expected = f'Archived image {new_name} to {tar_file_name}, overwriting archive with image {fake_id} named {old_name}'
|
||||
actual = ImageManager.archived_image_action(assert_no_logging, tar_file_name, new_name, api_image_id(fake_id))
|
||||
expected = f"Archived image {new_name} to {tar_file_name}, overwriting archive with image {fake_id} named {old_name}"
|
||||
actual = ImageManager.archived_image_action(
|
||||
assert_no_logging, tar_file_name, new_name, api_image_id(fake_id)
|
||||
)
|
||||
|
||||
print(f'actual : {actual}')
|
||||
print(f'expected : {expected}')
|
||||
print(f"actual : {actual}")
|
||||
print(f"expected : {expected}")
|
||||
assert actual == expected
|
||||
|
||||
@@ -2,20 +2,26 @@
|
||||
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
from __future__ import (absolute_import, division, print_function)
|
||||
from __future__ import absolute_import, division, print_function
|
||||
|
||||
|
||||
__metaclass__ = type
|
||||
|
||||
import pytest
|
||||
|
||||
from ansible_collections.community.docker.plugins.modules.docker_image_build import _quote_csv
|
||||
from ansible_collections.community.docker.plugins.modules.docker_image_build import (
|
||||
_quote_csv,
|
||||
)
|
||||
|
||||
|
||||
@pytest.mark.parametrize("input, expected", [
|
||||
('', ''),
|
||||
(' ', '" "'),
|
||||
(',', '","'),
|
||||
('"', '""""'),
|
||||
('\rhello, "hi" !\n', '"\rhello, ""hi"" !\n"'),
|
||||
])
|
||||
@pytest.mark.parametrize(
|
||||
"input, expected",
|
||||
[
|
||||
("", ""),
|
||||
(" ", '" "'),
|
||||
(",", '","'),
|
||||
('"', '""""'),
|
||||
('\rhello, "hi" !\n', '"\rhello, ""hi"" !\n"'),
|
||||
],
|
||||
)
|
||||
def test__quote_csv(input, expected):
|
||||
assert _quote_csv(input) == expected
|
||||
|
||||
@@ -4,31 +4,40 @@
|
||||
|
||||
"""Unit tests for docker_network."""
|
||||
|
||||
from __future__ import (absolute_import, division, print_function)
|
||||
from __future__ import absolute_import, division, print_function
|
||||
|
||||
|
||||
__metaclass__ = type
|
||||
|
||||
import pytest
|
||||
|
||||
from ansible_collections.community.docker.plugins.modules.docker_network import validate_cidr
|
||||
from ansible_collections.community.docker.plugins.modules.docker_network import (
|
||||
validate_cidr,
|
||||
)
|
||||
|
||||
|
||||
@pytest.mark.parametrize("cidr,expected", [
|
||||
('192.168.0.1/16', 'ipv4'),
|
||||
('192.168.0.1/24', 'ipv4'),
|
||||
('192.168.0.1/32', 'ipv4'),
|
||||
('fdd1:ac8c:0557:7ce2::/64', 'ipv6'),
|
||||
('fdd1:ac8c:0557:7ce2::/128', 'ipv6'),
|
||||
])
|
||||
@pytest.mark.parametrize(
|
||||
"cidr,expected",
|
||||
[
|
||||
("192.168.0.1/16", "ipv4"),
|
||||
("192.168.0.1/24", "ipv4"),
|
||||
("192.168.0.1/32", "ipv4"),
|
||||
("fdd1:ac8c:0557:7ce2::/64", "ipv6"),
|
||||
("fdd1:ac8c:0557:7ce2::/128", "ipv6"),
|
||||
],
|
||||
)
|
||||
def test_validate_cidr_positives(cidr, expected):
|
||||
assert validate_cidr(cidr) == expected
|
||||
|
||||
|
||||
@pytest.mark.parametrize("cidr", [
|
||||
'192.168.0.1',
|
||||
'192.168.0.1/34',
|
||||
'192.168.0.1/asd',
|
||||
'fdd1:ac8c:0557:7ce2::',
|
||||
])
|
||||
@pytest.mark.parametrize(
|
||||
"cidr",
|
||||
[
|
||||
"192.168.0.1",
|
||||
"192.168.0.1/34",
|
||||
"192.168.0.1/asd",
|
||||
"fdd1:ac8c:0557:7ce2::",
|
||||
],
|
||||
)
|
||||
def test_validate_cidr_negatives(cidr):
|
||||
with pytest.raises(ValueError) as e:
|
||||
validate_cidr(cidr)
|
||||
|
||||
@@ -2,7 +2,9 @@
|
||||
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
from __future__ import (absolute_import, division, print_function)
|
||||
from __future__ import absolute_import, division, print_function
|
||||
|
||||
|
||||
__metaclass__ = type
|
||||
|
||||
import pytest
|
||||
@@ -22,16 +24,18 @@ def docker_module_mock(mocker):
|
||||
docker_errors_module_mock = mocker.MagicMock()
|
||||
docker_errors_module_mock.APIError = APIErrorMock
|
||||
mock_modules = {
|
||||
'docker': docker_module_mock,
|
||||
'docker.utils': docker_utils_module_mock,
|
||||
'docker.errors': docker_errors_module_mock,
|
||||
"docker": docker_module_mock,
|
||||
"docker.utils": docker_utils_module_mock,
|
||||
"docker.errors": docker_errors_module_mock,
|
||||
}
|
||||
return mocker.patch.dict('sys.modules', **mock_modules)
|
||||
return mocker.patch.dict("sys.modules", **mock_modules)
|
||||
|
||||
|
||||
@pytest.fixture(autouse=True)
|
||||
def docker_swarm_service():
|
||||
from ansible_collections.community.docker.plugins.modules import docker_swarm_service
|
||||
from ansible_collections.community.docker.plugins.modules import (
|
||||
docker_swarm_service,
|
||||
)
|
||||
|
||||
return docker_swarm_service
|
||||
|
||||
@@ -39,9 +43,9 @@ def docker_swarm_service():
|
||||
def test_retry_on_out_of_sequence_error(mocker, docker_swarm_service):
|
||||
run_mock = mocker.MagicMock(
|
||||
side_effect=APIErrorMock(
|
||||
message='',
|
||||
message="",
|
||||
response=None,
|
||||
explanation='rpc error: code = Unknown desc = update out of sequence',
|
||||
explanation="rpc error: code = Unknown desc = update out of sequence",
|
||||
)
|
||||
)
|
||||
manager = docker_swarm_service.DockerServiceManager(client=None)
|
||||
@@ -53,7 +57,7 @@ def test_retry_on_out_of_sequence_error(mocker, docker_swarm_service):
|
||||
|
||||
def test_no_retry_on_general_api_error(mocker, docker_swarm_service):
|
||||
run_mock = mocker.MagicMock(
|
||||
side_effect=APIErrorMock(message='', response=None, explanation='some error')
|
||||
side_effect=APIErrorMock(message="", response=None, explanation="some error")
|
||||
)
|
||||
manager = docker_swarm_service.DockerServiceManager(client=None)
|
||||
manager.run = run_mock
|
||||
@@ -63,62 +67,57 @@ def test_no_retry_on_general_api_error(mocker, docker_swarm_service):
|
||||
|
||||
|
||||
def test_get_docker_environment(mocker, docker_swarm_service):
|
||||
env_file_result = {'TEST1': 'A', 'TEST2': 'B', 'TEST3': 'C'}
|
||||
env_dict = {'TEST3': 'CC', 'TEST4': 'D'}
|
||||
env_file_result = {"TEST1": "A", "TEST2": "B", "TEST3": "C"}
|
||||
env_dict = {"TEST3": "CC", "TEST4": "D"}
|
||||
env_string = "TEST3=CC,TEST4=D"
|
||||
|
||||
env_list = ['TEST3=CC', 'TEST4=D']
|
||||
expected_result = sorted(['TEST1=A', 'TEST2=B', 'TEST3=CC', 'TEST4=D'])
|
||||
env_list = ["TEST3=CC", "TEST4=D"]
|
||||
expected_result = sorted(["TEST1=A", "TEST2=B", "TEST3=CC", "TEST4=D"])
|
||||
mocker.patch.object(
|
||||
docker_swarm_service, 'parse_env_file', return_value=env_file_result
|
||||
docker_swarm_service, "parse_env_file", return_value=env_file_result
|
||||
)
|
||||
mocker.patch.object(
|
||||
docker_swarm_service,
|
||||
'format_environment',
|
||||
side_effect=lambda d: [f'{key}={value}' for key, value in d.items()],
|
||||
"format_environment",
|
||||
side_effect=lambda d: [f"{key}={value}" for key, value in d.items()],
|
||||
)
|
||||
# Test with env dict and file
|
||||
result = docker_swarm_service.get_docker_environment(
|
||||
env_dict, env_files=['dummypath']
|
||||
env_dict, env_files=["dummypath"]
|
||||
)
|
||||
assert result == expected_result
|
||||
# Test with env list and file
|
||||
result = docker_swarm_service.get_docker_environment(
|
||||
env_list,
|
||||
env_files=['dummypath']
|
||||
env_list, env_files=["dummypath"]
|
||||
)
|
||||
assert result == expected_result
|
||||
# Test with env string and file
|
||||
result = docker_swarm_service.get_docker_environment(
|
||||
env_string, env_files=['dummypath']
|
||||
env_string, env_files=["dummypath"]
|
||||
)
|
||||
assert result == expected_result
|
||||
|
||||
assert result == expected_result
|
||||
# Test with empty env
|
||||
result = docker_swarm_service.get_docker_environment(
|
||||
[], env_files=None
|
||||
)
|
||||
result = docker_swarm_service.get_docker_environment([], env_files=None)
|
||||
assert result == []
|
||||
# Test with empty env_files
|
||||
result = docker_swarm_service.get_docker_environment(
|
||||
None, env_files=[]
|
||||
)
|
||||
result = docker_swarm_service.get_docker_environment(None, env_files=[])
|
||||
assert result == []
|
||||
|
||||
|
||||
def test_get_nanoseconds_from_raw_option(docker_swarm_service):
|
||||
value = docker_swarm_service.get_nanoseconds_from_raw_option('test', None)
|
||||
value = docker_swarm_service.get_nanoseconds_from_raw_option("test", None)
|
||||
assert value is None
|
||||
|
||||
value = docker_swarm_service.get_nanoseconds_from_raw_option('test', '1m30s535ms')
|
||||
value = docker_swarm_service.get_nanoseconds_from_raw_option("test", "1m30s535ms")
|
||||
assert value == 90535000000
|
||||
|
||||
value = docker_swarm_service.get_nanoseconds_from_raw_option('test', 10000000000)
|
||||
value = docker_swarm_service.get_nanoseconds_from_raw_option("test", 10000000000)
|
||||
assert value == 10000000000
|
||||
|
||||
with pytest.raises(ValueError):
|
||||
docker_swarm_service.get_nanoseconds_from_raw_option('test', [])
|
||||
docker_swarm_service.get_nanoseconds_from_raw_option("test", [])
|
||||
|
||||
|
||||
def test_has_dict_changed(docker_swarm_service):
|
||||
@@ -126,50 +125,17 @@ def test_has_dict_changed(docker_swarm_service):
|
||||
{"a": 1},
|
||||
{"a": 1},
|
||||
)
|
||||
assert not docker_swarm_service.has_dict_changed(
|
||||
{"a": 1},
|
||||
{"a": 1, "b": 2}
|
||||
)
|
||||
assert docker_swarm_service.has_dict_changed(
|
||||
{"a": 1},
|
||||
{"a": 2, "b": 2}
|
||||
)
|
||||
assert docker_swarm_service.has_dict_changed(
|
||||
{"a": 1, "b": 1},
|
||||
{"a": 1}
|
||||
)
|
||||
assert not docker_swarm_service.has_dict_changed(
|
||||
None,
|
||||
{"a": 2, "b": 2}
|
||||
)
|
||||
assert docker_swarm_service.has_dict_changed(
|
||||
{},
|
||||
{"a": 2, "b": 2}
|
||||
)
|
||||
assert docker_swarm_service.has_dict_changed(
|
||||
{"a": 1},
|
||||
{}
|
||||
)
|
||||
assert docker_swarm_service.has_dict_changed(
|
||||
{"a": 1},
|
||||
None
|
||||
)
|
||||
assert not docker_swarm_service.has_dict_changed(
|
||||
{},
|
||||
{}
|
||||
)
|
||||
assert not docker_swarm_service.has_dict_changed(
|
||||
None,
|
||||
None
|
||||
)
|
||||
assert not docker_swarm_service.has_dict_changed(
|
||||
{},
|
||||
None
|
||||
)
|
||||
assert not docker_swarm_service.has_dict_changed(
|
||||
None,
|
||||
{}
|
||||
)
|
||||
assert not docker_swarm_service.has_dict_changed({"a": 1}, {"a": 1, "b": 2})
|
||||
assert docker_swarm_service.has_dict_changed({"a": 1}, {"a": 2, "b": 2})
|
||||
assert docker_swarm_service.has_dict_changed({"a": 1, "b": 1}, {"a": 1})
|
||||
assert not docker_swarm_service.has_dict_changed(None, {"a": 2, "b": 2})
|
||||
assert docker_swarm_service.has_dict_changed({}, {"a": 2, "b": 2})
|
||||
assert docker_swarm_service.has_dict_changed({"a": 1}, {})
|
||||
assert docker_swarm_service.has_dict_changed({"a": 1}, None)
|
||||
assert not docker_swarm_service.has_dict_changed({}, {})
|
||||
assert not docker_swarm_service.has_dict_changed(None, None)
|
||||
assert not docker_swarm_service.has_dict_changed({}, None)
|
||||
assert not docker_swarm_service.has_dict_changed(None, {})
|
||||
|
||||
|
||||
def test_has_list_changed(docker_swarm_service):
|
||||
@@ -192,65 +158,45 @@ def test_has_list_changed(docker_swarm_service):
|
||||
|
||||
# Check list sorting
|
||||
assert not docker_swarm_service.has_list_changed([1, 2], [2, 1])
|
||||
assert docker_swarm_service.has_list_changed(
|
||||
[1, 2],
|
||||
[2, 1],
|
||||
sort_lists=False
|
||||
)
|
||||
assert docker_swarm_service.has_list_changed([1, 2], [2, 1], sort_lists=False)
|
||||
|
||||
# Check type matching
|
||||
assert docker_swarm_service.has_list_changed([None, 1], [2, 1])
|
||||
assert docker_swarm_service.has_list_changed([2, 1], [None, 1])
|
||||
assert docker_swarm_service.has_list_changed(
|
||||
"command --with args",
|
||||
['command', '--with', 'args']
|
||||
"command --with args", ["command", "--with", "args"]
|
||||
)
|
||||
assert docker_swarm_service.has_list_changed(
|
||||
['sleep', '3400'],
|
||||
['sleep', '3600'],
|
||||
sort_lists=False
|
||||
["sleep", "3400"], ["sleep", "3600"], sort_lists=False
|
||||
)
|
||||
|
||||
# List comparisons with dictionaries
|
||||
assert not docker_swarm_service.has_list_changed(
|
||||
[{'a': 1}],
|
||||
[{'a': 1}],
|
||||
sort_key='a'
|
||||
[{"a": 1}], [{"a": 1}], sort_key="a"
|
||||
)
|
||||
|
||||
assert not docker_swarm_service.has_list_changed(
|
||||
[{'a': 1}, {'a': 2}],
|
||||
[{'a': 1}, {'a': 2}],
|
||||
sort_key='a'
|
||||
[{"a": 1}, {"a": 2}], [{"a": 1}, {"a": 2}], sort_key="a"
|
||||
)
|
||||
|
||||
with pytest.raises(Exception):
|
||||
docker_swarm_service.has_list_changed(
|
||||
[{'a': 1}, {'a': 2}],
|
||||
[{'a': 1}, {'a': 2}]
|
||||
[{"a": 1}, {"a": 2}], [{"a": 1}, {"a": 2}]
|
||||
)
|
||||
|
||||
# List sort checking with sort key
|
||||
assert not docker_swarm_service.has_list_changed(
|
||||
[{'a': 1}, {'a': 2}],
|
||||
[{'a': 2}, {'a': 1}],
|
||||
sort_key='a'
|
||||
[{"a": 1}, {"a": 2}], [{"a": 2}, {"a": 1}], sort_key="a"
|
||||
)
|
||||
assert docker_swarm_service.has_list_changed(
|
||||
[{'a': 1}, {'a': 2}],
|
||||
[{'a': 2}, {'a': 1}],
|
||||
sort_lists=False
|
||||
[{"a": 1}, {"a": 2}], [{"a": 2}, {"a": 1}], sort_lists=False
|
||||
)
|
||||
|
||||
assert docker_swarm_service.has_list_changed(
|
||||
[{'a': 1}, {'a': 2}, {'a': 3}],
|
||||
[{'a': 2}, {'a': 1}],
|
||||
sort_key='a'
|
||||
[{"a": 1}, {"a": 2}, {"a": 3}], [{"a": 2}, {"a": 1}], sort_key="a"
|
||||
)
|
||||
assert docker_swarm_service.has_list_changed(
|
||||
[{'a': 1}, {'a': 2}],
|
||||
[{'a': 1}, {'a': 2}, {'a': 3}],
|
||||
sort_lists=False
|
||||
[{"a": 1}, {"a": 2}], [{"a": 1}, {"a": 2}, {"a": 3}], sort_lists=False
|
||||
)
|
||||
|
||||
# Additional dictionary elements
|
||||
@@ -263,7 +209,7 @@ def test_has_list_changed(docker_swarm_service):
|
||||
{"src": 1, "dst": 2, "protocol": "tcp"},
|
||||
{"src": 1, "dst": 2, "protocol": "udp"},
|
||||
],
|
||||
sort_key='dst'
|
||||
sort_key="dst",
|
||||
)
|
||||
assert not docker_swarm_service.has_list_changed(
|
||||
[
|
||||
@@ -274,7 +220,7 @@ def test_has_list_changed(docker_swarm_service):
|
||||
{"src": 1, "dst": 2, "protocol": "udp"},
|
||||
{"src": 1, "dst": 3, "protocol": "tcp"},
|
||||
],
|
||||
sort_key='dst'
|
||||
sort_key="dst",
|
||||
)
|
||||
assert docker_swarm_service.has_list_changed(
|
||||
[
|
||||
@@ -287,7 +233,7 @@ def test_has_list_changed(docker_swarm_service):
|
||||
{"src": 1, "dst": 2, "protocol": "tcp"},
|
||||
{"src": 3, "dst": 4, "protocol": "tcp"},
|
||||
],
|
||||
sort_key='dst'
|
||||
sort_key="dst",
|
||||
)
|
||||
assert docker_swarm_service.has_list_changed(
|
||||
[
|
||||
@@ -298,7 +244,7 @@ def test_has_list_changed(docker_swarm_service):
|
||||
{"src": 1, "dst": 2, "protocol": "tcp"},
|
||||
{"src": 1, "dst": 2, "protocol": "udp"},
|
||||
],
|
||||
sort_key='dst'
|
||||
sort_key="dst",
|
||||
)
|
||||
assert docker_swarm_service.has_list_changed(
|
||||
[
|
||||
@@ -309,206 +255,148 @@ def test_has_list_changed(docker_swarm_service):
|
||||
{"src": 1, "dst": 2, "protocol": "udp"},
|
||||
{"src": 1, "dst": 2, "protocol": "tcp"},
|
||||
],
|
||||
sort_key='dst'
|
||||
sort_key="dst",
|
||||
)
|
||||
assert not docker_swarm_service.has_list_changed(
|
||||
[{'id': '123', 'aliases': []}],
|
||||
[{'id': '123'}],
|
||||
sort_key='id'
|
||||
[{"id": "123", "aliases": []}], [{"id": "123"}], sort_key="id"
|
||||
)
|
||||
|
||||
|
||||
def test_have_networks_changed(docker_swarm_service):
|
||||
assert not docker_swarm_service.have_networks_changed(
|
||||
None,
|
||||
None
|
||||
assert not docker_swarm_service.have_networks_changed(None, None)
|
||||
|
||||
assert not docker_swarm_service.have_networks_changed([], None)
|
||||
|
||||
assert not docker_swarm_service.have_networks_changed([{"id": 1}], [{"id": 1}])
|
||||
|
||||
assert docker_swarm_service.have_networks_changed(
|
||||
[{"id": 1}], [{"id": 1}, {"id": 2}]
|
||||
)
|
||||
|
||||
assert not docker_swarm_service.have_networks_changed(
|
||||
[],
|
||||
None
|
||||
[{"id": 1}, {"id": 2}], [{"id": 1}, {"id": 2}]
|
||||
)
|
||||
|
||||
assert not docker_swarm_service.have_networks_changed(
|
||||
[{'id': 1}],
|
||||
[{'id': 1}]
|
||||
[{"id": 1}, {"id": 2}], [{"id": 2}, {"id": 1}]
|
||||
)
|
||||
|
||||
assert not docker_swarm_service.have_networks_changed(
|
||||
[{"id": 1}, {"id": 2, "aliases": []}], [{"id": 1}, {"id": 2}]
|
||||
)
|
||||
|
||||
assert docker_swarm_service.have_networks_changed(
|
||||
[{'id': 1}],
|
||||
[{'id': 1}, {'id': 2}]
|
||||
[{"id": 1}, {"id": 2, "aliases": ["alias1"]}], [{"id": 1}, {"id": 2}]
|
||||
)
|
||||
|
||||
assert docker_swarm_service.have_networks_changed(
|
||||
[{"id": 1}, {"id": 2, "aliases": ["alias1", "alias2"]}],
|
||||
[{"id": 1}, {"id": 2, "aliases": ["alias1"]}],
|
||||
)
|
||||
|
||||
assert not docker_swarm_service.have_networks_changed(
|
||||
[{'id': 1}, {'id': 2}],
|
||||
[{'id': 1}, {'id': 2}]
|
||||
[{"id": 1}, {"id": 2, "aliases": ["alias1", "alias2"]}],
|
||||
[{"id": 1}, {"id": 2, "aliases": ["alias1", "alias2"]}],
|
||||
)
|
||||
|
||||
assert not docker_swarm_service.have_networks_changed(
|
||||
[{'id': 1}, {'id': 2}],
|
||||
[{'id': 2}, {'id': 1}]
|
||||
[{"id": 1}, {"id": 2, "aliases": ["alias1", "alias2"]}],
|
||||
[{"id": 1}, {"id": 2, "aliases": ["alias2", "alias1"]}],
|
||||
)
|
||||
|
||||
assert not docker_swarm_service.have_networks_changed(
|
||||
[{"id": 1, "options": {}}, {"id": 2, "aliases": ["alias1", "alias2"]}],
|
||||
[{"id": 1}, {"id": 2, "aliases": ["alias2", "alias1"]}],
|
||||
)
|
||||
|
||||
assert not docker_swarm_service.have_networks_changed(
|
||||
[
|
||||
{'id': 1},
|
||||
{'id': 2, 'aliases': []}
|
||||
{"id": 1, "options": {"option1": "value1"}},
|
||||
{"id": 2, "aliases": ["alias1", "alias2"]},
|
||||
],
|
||||
[
|
||||
{'id': 1},
|
||||
{'id': 2}
|
||||
]
|
||||
{"id": 1, "options": {"option1": "value1"}},
|
||||
{"id": 2, "aliases": ["alias2", "alias1"]},
|
||||
],
|
||||
)
|
||||
|
||||
assert docker_swarm_service.have_networks_changed(
|
||||
[
|
||||
{'id': 1},
|
||||
{'id': 2, 'aliases': ['alias1']}
|
||||
{"id": 1, "options": {"option1": "value1"}},
|
||||
{"id": 2, "aliases": ["alias1", "alias2"]},
|
||||
],
|
||||
[
|
||||
{'id': 1},
|
||||
{'id': 2}
|
||||
]
|
||||
)
|
||||
|
||||
assert docker_swarm_service.have_networks_changed(
|
||||
[
|
||||
{'id': 1},
|
||||
{'id': 2, 'aliases': ['alias1', 'alias2']}
|
||||
{"id": 1, "options": {"option1": "value2"}},
|
||||
{"id": 2, "aliases": ["alias2", "alias1"]},
|
||||
],
|
||||
[
|
||||
{'id': 1},
|
||||
{'id': 2, 'aliases': ['alias1']}
|
||||
]
|
||||
)
|
||||
|
||||
assert not docker_swarm_service.have_networks_changed(
|
||||
[
|
||||
{'id': 1},
|
||||
{'id': 2, 'aliases': ['alias1', 'alias2']}
|
||||
],
|
||||
[
|
||||
{'id': 1},
|
||||
{'id': 2, 'aliases': ['alias1', 'alias2']}
|
||||
]
|
||||
)
|
||||
|
||||
assert not docker_swarm_service.have_networks_changed(
|
||||
[
|
||||
{'id': 1},
|
||||
{'id': 2, 'aliases': ['alias1', 'alias2']}
|
||||
],
|
||||
[
|
||||
{'id': 1},
|
||||
{'id': 2, 'aliases': ['alias2', 'alias1']}
|
||||
]
|
||||
)
|
||||
|
||||
assert not docker_swarm_service.have_networks_changed(
|
||||
[
|
||||
{'id': 1, 'options': {}},
|
||||
{'id': 2, 'aliases': ['alias1', 'alias2']}],
|
||||
[
|
||||
{'id': 1},
|
||||
{'id': 2, 'aliases': ['alias2', 'alias1']}
|
||||
]
|
||||
)
|
||||
|
||||
assert not docker_swarm_service.have_networks_changed(
|
||||
[
|
||||
{'id': 1, 'options': {'option1': 'value1'}},
|
||||
{'id': 2, 'aliases': ['alias1', 'alias2']}],
|
||||
[
|
||||
{'id': 1, 'options': {'option1': 'value1'}},
|
||||
{'id': 2, 'aliases': ['alias2', 'alias1']}
|
||||
]
|
||||
)
|
||||
|
||||
assert docker_swarm_service.have_networks_changed(
|
||||
[
|
||||
{'id': 1, 'options': {'option1': 'value1'}},
|
||||
{'id': 2, 'aliases': ['alias1', 'alias2']}],
|
||||
[
|
||||
{'id': 1, 'options': {'option1': 'value2'}},
|
||||
{'id': 2, 'aliases': ['alias2', 'alias1']}
|
||||
]
|
||||
)
|
||||
|
||||
|
||||
def test_get_docker_networks(docker_swarm_service):
|
||||
network_names = [
|
||||
'network_1',
|
||||
'network_2',
|
||||
'network_3',
|
||||
'network_4',
|
||||
"network_1",
|
||||
"network_2",
|
||||
"network_3",
|
||||
"network_4",
|
||||
]
|
||||
networks = [
|
||||
network_names[0],
|
||||
{'name': network_names[1]},
|
||||
{'name': network_names[2], 'aliases': ['networkalias1']},
|
||||
{'name': network_names[3], 'aliases': ['networkalias2'], 'options': {'foo': 'bar'}},
|
||||
{"name": network_names[1]},
|
||||
{"name": network_names[2], "aliases": ["networkalias1"]},
|
||||
{
|
||||
"name": network_names[3],
|
||||
"aliases": ["networkalias2"],
|
||||
"options": {"foo": "bar"},
|
||||
},
|
||||
]
|
||||
network_ids = {
|
||||
network_names[0]: '1',
|
||||
network_names[1]: '2',
|
||||
network_names[2]: '3',
|
||||
network_names[3]: '4',
|
||||
network_names[0]: "1",
|
||||
network_names[1]: "2",
|
||||
network_names[2]: "3",
|
||||
network_names[3]: "4",
|
||||
}
|
||||
parsed_networks = docker_swarm_service.get_docker_networks(
|
||||
networks,
|
||||
network_ids
|
||||
)
|
||||
parsed_networks = docker_swarm_service.get_docker_networks(networks, network_ids)
|
||||
assert len(parsed_networks) == 4
|
||||
for i, network in enumerate(parsed_networks):
|
||||
assert 'name' not in network
|
||||
assert 'id' in network
|
||||
assert "name" not in network
|
||||
assert "id" in network
|
||||
expected_name = network_names[i]
|
||||
assert network['id'] == network_ids[expected_name]
|
||||
assert network["id"] == network_ids[expected_name]
|
||||
if i == 2:
|
||||
assert network['aliases'] == ['networkalias1']
|
||||
assert network["aliases"] == ["networkalias1"]
|
||||
if i == 3:
|
||||
assert network['aliases'] == ['networkalias2']
|
||||
assert network["aliases"] == ["networkalias2"]
|
||||
if i == 3:
|
||||
assert 'foo' in network['options']
|
||||
assert "foo" in network["options"]
|
||||
# Test missing name
|
||||
with pytest.raises(TypeError):
|
||||
docker_swarm_service.get_docker_networks([{'invalid': 'err'}], {'err': 1})
|
||||
docker_swarm_service.get_docker_networks([{"invalid": "err"}], {"err": 1})
|
||||
# test for invalid aliases type
|
||||
with pytest.raises(TypeError):
|
||||
docker_swarm_service.get_docker_networks(
|
||||
[{'name': 'test', 'aliases': 1}],
|
||||
{'test': 1}
|
||||
[{"name": "test", "aliases": 1}], {"test": 1}
|
||||
)
|
||||
# Test invalid aliases elements
|
||||
with pytest.raises(TypeError):
|
||||
docker_swarm_service.get_docker_networks(
|
||||
[{'name': 'test', 'aliases': [1]}],
|
||||
{'test': 1}
|
||||
[{"name": "test", "aliases": [1]}], {"test": 1}
|
||||
)
|
||||
# Test for invalid options type
|
||||
with pytest.raises(TypeError):
|
||||
docker_swarm_service.get_docker_networks(
|
||||
[{'name': 'test', 'options': 1}],
|
||||
{'test': 1}
|
||||
[{"name": "test", "options": 1}], {"test": 1}
|
||||
)
|
||||
# Test for invalid networks type
|
||||
with pytest.raises(TypeError):
|
||||
docker_swarm_service.get_docker_networks(
|
||||
1,
|
||||
{'test': 1}
|
||||
)
|
||||
docker_swarm_service.get_docker_networks(1, {"test": 1})
|
||||
# Test for non existing networks
|
||||
with pytest.raises(ValueError):
|
||||
docker_swarm_service.get_docker_networks(
|
||||
[{'name': 'idontexist'}],
|
||||
{'test': 1}
|
||||
)
|
||||
docker_swarm_service.get_docker_networks([{"name": "idontexist"}], {"test": 1})
|
||||
# Test empty values
|
||||
assert docker_swarm_service.get_docker_networks([], {}) == []
|
||||
assert docker_swarm_service.get_docker_networks(None, {}) is None
|
||||
# Test invalid options
|
||||
with pytest.raises(TypeError):
|
||||
docker_swarm_service.get_docker_networks(
|
||||
[{'name': 'test', 'nonexisting_option': 'foo'}],
|
||||
{'test': '1'}
|
||||
[{"name": "test", "nonexisting_option": "foo"}], {"test": "1"}
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user