community.docker/tests/unit/plugins/modules/test_docker_image.py
Felix Fontein 1f2817fa20
Prepare 5.0.0 (#1123)
* Bump version to 5.0.0-a1.

* Drop support for ansible-core 2.15 and 2.16.

* Remove Python 2 and early Python 3 compatibility.
2025-10-05 20:22:50 +02:00

114 lines
3.2 KiB
Python

# Copyright 2022 Red Hat | Ansible
# 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)
__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 ..test_support.docker_image_archive_stubbing import (
write_imitation_archive,
write_irrelevant_tar,
)
def assert_no_logging(msg):
raise AssertionError('Should not have logged anything but logged %s' % msg)
def capture_logging(messages):
def capture(msg):
messages.append(msg)
return capture
@pytest.fixture
def tar_file_name(tmpdir):
"""
Return the name of a non-existing tar file in an existing temporary directory.
"""
return tmpdir.join('foo.tar')
def test_archived_image_action_when_missing(tar_file_name):
fake_name = 'a:latest'
fake_id = 'a1'
expected = 'Archived image %s to %s, since none present' % (fake_name, tar_file_name)
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'
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))
assert actual is None
def test_archived_image_action_when_invalid(tar_file_name):
fake_name = 'c:1.2.3'
fake_id = 'c3'
write_irrelevant_tar(tar_file_name)
expected = 'Archived image %s to %s, overwriting an unreadable archive file' % (fake_name, tar_file_name)
actual_log = []
actual = ImageManager.archived_image_action(
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')
def test_archived_image_action_when_obsolete_by_id(tar_file_name):
fake_name = 'd:0.0.1'
old_id = 'e5'
new_id = 'd4'
write_imitation_archive(tar_file_name, old_id, [fake_name])
expected = 'Archived image %s to %s, overwriting archive with image %s named %s' % (
fake_name, tar_file_name, old_id, 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'
write_imitation_archive(tar_file_name, fake_id, [old_name])
expected = 'Archived image %s to %s, overwriting archive with image %s named %s' % (
new_name, tar_file_name, fake_id, old_name
)
actual = ImageManager.archived_image_action(assert_no_logging, tar_file_name, new_name, api_image_id(fake_id))
print('actual : %s', actual)
print('expected : %s', expected)
assert actual == expected