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]