-
Notifications
You must be signed in to change notification settings - Fork 124
Expand file tree
/
Copy pathtest_manifest.py
More file actions
98 lines (74 loc) · 3.18 KB
/
test_manifest.py
File metadata and controls
98 lines (74 loc) · 3.18 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
import json
import os
from typing import Generator
from unittest.mock import patch
import pytest
from python_on_whales import DockerClient, Image
from python_on_whales.components.manifest.cli_wrapper import (
ManifestList,
ManifestListInspectResult,
)
from python_on_whales.test_utils import get_all_jsons, random_name
@pytest.fixture
def manifest(docker_client: DockerClient) -> Generator[ManifestList, None, None]:
manifest_name = random_name()
# utilizing old, pre-manifest-list images
images = ["busybox:1.26", "busybox:1.27.1"]
docker_client.image.pull(images)
with docker_client.manifest.create(manifest_name, images) as my_manifest:
yield my_manifest
docker_client.image.remove(images)
@pytest.fixture
def platform_variant_manifest(
docker_client: DockerClient, request: pytest.FixtureRequest
) -> Image:
image_with_platform_variant = "arm32v7/busybox:1.35"
def remove_docker_image():
docker_client.image.remove(image_with_platform_variant)
request.addfinalizer(remove_docker_image)
docker_client.image.pull(
image_with_platform_variant, quiet=True, platform="linux/arm/v7"
)
return docker_client.image.inspect(image_with_platform_variant)
@pytest.mark.parametrize("json_file", get_all_jsons("manifests"))
def test_load_json(json_file):
json_as_txt = json_file.read_text()
ManifestListInspectResult(**json.loads(json_as_txt))
# we could do more checks here if needed
@pytest.mark.skipif(
os.environ.get("CI", "false") == "true",
reason="The creation of manifest doesn't work in github actions for some reason",
)
def test_manifest_create_remove(docker_client: DockerClient, manifest: ManifestList):
assert isinstance(manifest, ManifestList)
@pytest.mark.skipif(
os.environ.get("CI", "false") == "true",
reason="The creation of manifest doesn't work in github actions for some reason",
)
def test_manifest_annotate(docker_client: DockerClient, manifest: ManifestList):
docker_client.manifest.annotate(
manifest.name, "busybox:1.26", os="linux", arch="arm64"
)
assert manifest.manifests[0].platform.os == "linux"
assert manifest.manifests[0].platform.architecture == "arm64"
def test_manifest_platform_variant(platform_variant_manifest: Image):
assert "linux" in repr(platform_variant_manifest.os)
assert "arm" in repr(platform_variant_manifest.architecture)
assert "v7" in repr(platform_variant_manifest.variant)
@pytest.mark.parametrize("insecure", [False, True])
def test_manifest_inspect_insecure_flag(docker_client: DockerClient, insecure: bool):
ref = "busybox:latest"
fake_json = {
"schemaVersion": 2,
"mediaType": "application/vnd.docker.distribution.manifest.list.v2+json",
"manifests": [],
}
with patch("python_on_whales.components.manifest.cli_wrapper.run") as mock_run:
mock_run.return_value = json.dumps(fake_json)
manifest: ManifestList = docker_client.manifest.inspect(ref, insecure=insecure)
assert manifest.insecure == insecure
cmd = list(mock_run.call_args[0][0])
if insecure:
assert "--insecure" in cmd
else:
assert "--insecure" not in cmd