Skip to content

Commit a69fc66

Browse files
committed
test(06-01): harden source-mode red contract coverage
1 parent ca65538 commit a69fc66

2 files changed

Lines changed: 46 additions & 9 deletions

File tree

tests/parametric/test_ffe/test_source_modes.py

Lines changed: 44 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -242,9 +242,11 @@ def test_malformed_warm(self, test_library: APMLibrary, mock_cdn: MockCDNServer)
242242
mock_cdn.set_fixture("malformed_warm")
243243
_wait_for_status(
244244
mock_cdn,
245-
lambda current: current["fixture"] == "malformed_warm"
246-
and current["requests_total"] > requests_before
247-
and current["last_status_code"] == 200,
245+
lambda current: (
246+
current["fixture"] == "malformed_warm"
247+
and current["requests_total"] > requests_before
248+
and current["last_status_code"] == 200
249+
),
248250
"malformed_warm response",
249251
)
250252
_assert_expected_value(_evaluate(test_library))
@@ -258,9 +260,11 @@ def test_unchanged_etag_304(self, test_library: APMLibrary, mock_cdn: MockCDNSer
258260
mock_cdn.set_fixture("unchanged_etag_304")
259261
status = _wait_for_status(
260262
mock_cdn,
261-
lambda current: current["fixture"] == "unchanged_etag_304"
262-
and current["last_status_code"] == 304
263-
and current["last_if_none_match"] is not None,
263+
lambda current: (
264+
current["fixture"] == "unchanged_etag_304"
265+
and current["last_status_code"] == 304
266+
and current["last_if_none_match"] is not None
267+
),
264268
"unchanged_etag_304 conditional request",
265269
)
266270
_assert_expected_value(_evaluate(test_library))
@@ -291,6 +295,18 @@ def test_bad_to_good_cold_recovery(self, test_library: APMLibrary, mock_cdn: Moc
291295
_assert_expected_value(_evaluate(test_library))
292296
assert status["last_source_mode"] == "cdn"
293297

298+
@parametrize("library_env", [{"source_mode": "cdn", "fixture": "error_500_to_good"}], indirect=True)
299+
def test_500_to_good_cold_recovery(self, test_library: APMLibrary, mock_cdn: MockCDNServer) -> None:
300+
assert test_library.ffe_start(), "failed to start FFE provider for error_500_to_good"
301+
302+
status = _wait_for_status(
303+
mock_cdn,
304+
lambda current: current["status_codes"][-2:] == [500, 200],
305+
"error_500_to_good 500 to 200 recovery",
306+
)
307+
_assert_expected_value(_evaluate(test_library))
308+
assert status["last_source_mode"] == "cdn"
309+
294310
@parametrize("library_env", [{"source_mode": "cdn", "fixture": "bad_to_unchanged"}], indirect=True)
295311
def test_bad_to_unchanged_cold_preserves_not_ready(self, test_library: APMLibrary, mock_cdn: MockCDNServer) -> None:
296312
assert test_library.ffe_start(), "failed to start FFE provider for bad_to_unchanged"
@@ -334,10 +350,29 @@ def test_delayed_no_overlap(self, test_library: APMLibrary, mock_cdn: MockCDNSer
334350

335351
status = _wait_for_status(
336352
mock_cdn,
337-
lambda current: current["fixture"] == "delayed_no_overlap"
338-
and current["in_flight"] == 0
339-
and current["max_in_flight"] >= 1,
353+
lambda current: (
354+
current["fixture"] == "delayed_no_overlap"
355+
and current["in_flight"] == 0
356+
and current["max_in_flight"] >= 1
357+
),
340358
"delayed_no_overlap completion",
341359
)
342360
assert status["max_in_flight"] == 1
343361
assert status["last_source_mode"] == "cdn"
362+
363+
def test_mock_cdn_status_is_metadata_only(self, mock_cdn: MockCDNServer) -> None:
364+
status = mock_cdn.status()
365+
assert set(status) == {
366+
"fixture",
367+
"requests_total",
368+
"in_flight",
369+
"max_in_flight",
370+
"last_if_none_match",
371+
"last_auth_present",
372+
"last_source_mode",
373+
"last_status_code",
374+
"status_codes",
375+
}
376+
assert "ufc" not in status
377+
assert "payload" not in status
378+
assert "body" not in status

utils/docker_fixtures/_mock_cdn.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
"explicit_source_mode",
2929
"delayed_no_overlap",
3030
"bad_to_good",
31+
"error_500_to_good",
3132
"bad_to_unchanged",
3233
"good_to_bad",
3334
"good_to_unchanged",
@@ -43,6 +44,7 @@
4344
FIXTURE_DIR = REPO_ROOT / "tests" / "parametric" / "test_ffe" / "fixtures"
4445
RESPONSE_SEQUENCES = {
4546
"bad_to_good": (RETRYABLE_STATUS_CODE, HTTPStatus.OK),
47+
"error_500_to_good": (HTTPStatus.INTERNAL_SERVER_ERROR, HTTPStatus.OK),
4648
"bad_to_unchanged": (RETRYABLE_STATUS_CODE, HTTPStatus.NOT_MODIFIED),
4749
"good_to_bad": (HTTPStatus.OK, RETRYABLE_STATUS_CODE),
4850
"good_to_unchanged": (HTTPStatus.OK, HTTPStatus.NOT_MODIFIED),

0 commit comments

Comments
 (0)