Skript test_check_container_image_reference_parity.py
Automaticky generovaná dokumentace skriptu scripts/test_check_container_image_reference_parity.py.
Funkce
- _compose()
Popis není k dispozici.
- test_cross_fix_reports_missing_prod_literal_when_not_whitelisted()
Ověří chybu pro literální repo bez produkčního literálu i whitelistu.
- test_cross_fix_allows_whitelisted_dev_only_repo()
Potvrdí, že explicitně whitelisted dev-only repo nevrací chybu.
- test_cross_fix_updates_mismatched_repo_present_in_prod()
Při fix režimu přepíše pin na produkční referenci, pokud repo existuje v prod.
- test_cross_fix_skips_non_literal_images_without_error()
Neliterální image musí zůstat mimo cross-file porovnání bez falešné chyby.
- test_cross_fix_deduplicates_missing_prod_repo_errors()
Stejné chybějící repo v jednom consumer compose má být nahlášeno jen jednou.
- test_cross_fix_uses_dockerfile_source_for_repo_alignment()
Repo může být srovnáno podle lokálního Dockerfile zdroje pravdy.
- test_cross_fix_reports_dockerfile_source_drift()
Drift vůči Dockerfile source of truth musí vrátit chybu.
Zdrojový kód
1from pathlib import Path
2
3from scripts.check_container_image_reference_parity import apply_compose_cross_fix
4
5
6def _compose(*services):
7 return {"services": {name: {"image": image} for name, image in services}}
8
9
10def test_cross_fix_reports_missing_prod_literal_when_not_whitelisted():
11 """Ověří chybu pro literální repo bez produkčního literálu i whitelistu."""
12 consumer = _compose(("cadvisor", "gcr.io/cadvisor/cadvisor:v0.55.1"))
13
14 errors, modified = apply_compose_cross_fix(
15 consumer,
16 Path("docker-compose-dev-local-db.yml"),
17 {},
18 {},
19 fix=False,
20 verbose=False,
21 )
22
23 assert modified is False
24 assert len(errors) == 1
25 assert "whitelist" in errors[0]
26 assert "gcr.io/cadvisor/cadvisor" in errors[0]
27
28
29def test_cross_fix_allows_whitelisted_dev_only_repo():
30 """Potvrdí, že explicitně whitelisted dev-only repo nevrací chybu."""
31 consumer = _compose(("pgadmin", "dpage/pgadmin4:latest"))
32
33 errors, modified = apply_compose_cross_fix(
34 consumer,
35 Path("docker-compose-dev-local-db-all-containers.yml"),
36 {},
37 {},
38 fix=False,
39 verbose=False,
40 )
41
42 assert errors == []
43 assert modified is False
44
45
46def test_cross_fix_updates_mismatched_repo_present_in_prod():
47 """Při fix režimu přepíše pin na produkční referenci, pokud repo existuje v prod."""
48 consumer = _compose(("grafana", "grafana/grafana-enterprise:11.0.0"))
49 prod_map = {"grafana/grafana-enterprise": "grafana/grafana-enterprise:12.4.2"}
50
51 errors, modified = apply_compose_cross_fix(
52 consumer,
53 Path("docker-compose-dev-local-db.yml"),
54 prod_map,
55 {},
56 fix=True,
57 verbose=False,
58 )
59
60 assert errors == []
61 assert modified is True
62 assert consumer["services"]["grafana"]["image"] == "grafana/grafana-enterprise:12.4.2"
63
64
65def test_cross_fix_skips_non_literal_images_without_error():
66 """Neliterální image musí zůstat mimo cross-file porovnání bez falešné chyby."""
67 consumer = _compose(("web", "${amcr_image}"), ("redis", "redis:8.4.0"))
68 prod_map = {"redis": "redis:8.4.0"}
69
70 errors, modified = apply_compose_cross_fix(
71 consumer,
72 Path("docker-compose-dev-local-db.yml"),
73 prod_map,
74 {},
75 fix=False,
76 verbose=False,
77 )
78
79 assert errors == []
80 assert modified is False
81
82
83def test_cross_fix_deduplicates_missing_prod_repo_errors():
84 """Stejné chybějící repo v jednom consumer compose má být nahlášeno jen jednou."""
85 consumer = _compose(
86 ("cadvisor-a", "gcr.io/cadvisor/cadvisor:v0.55.1"),
87 ("cadvisor-b", "gcr.io/cadvisor/cadvisor:v0.55.1"),
88 )
89
90 errors, modified = apply_compose_cross_fix(
91 consumer,
92 Path("docker-compose-dev-local-db.yml"),
93 {},
94 {},
95 fix=False,
96 verbose=False,
97 )
98
99 assert modified is False
100 assert len(errors) == 1
101
102
103def test_cross_fix_uses_dockerfile_source_for_repo_alignment():
104 """Repo může být srovnáno podle lokálního Dockerfile zdroje pravdy."""
105 consumer = _compose(("redis", "redis:8.4.0"))
106
107 errors, modified = apply_compose_cross_fix(
108 consumer,
109 Path("docker-compose-dev-local-db.yml"),
110 {},
111 {"redis": "redis:8.4.0"},
112 fix=False,
113 verbose=False,
114 )
115
116 assert errors == []
117 assert modified is False
118
119
120def test_cross_fix_reports_dockerfile_source_drift():
121 """Drift vůči Dockerfile source of truth musí vrátit chybu."""
122 consumer = _compose(("redis", "redis:8.6.2"))
123
124 errors, modified = apply_compose_cross_fix(
125 consumer,
126 Path("docker-compose-dev-local-db.yml"),
127 {},
128 {"redis": "redis:8.4.0"},
129 fix=False,
130 verbose=False,
131 )
132
133 assert modified is False
134 assert len(errors) == 1
135 assert "Dockerfile source" in errors[0]