From 044709e3f3b3c98affae7c0daefb6285ffc97342 Mon Sep 17 00:00:00 2001 From: yucheng Date: Wed, 23 Sep 2026 20:51:37 +0000 Subject: [PATCH] test(otel v2): drop legacy covers markers from the internal-spans audit cells Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> --- .../test_otel_tenant_internal_spans.py | 46 ------------------- .../test_otel_tenant_internal_spans_chaos.py | 4 -- 2 files changed, 50 deletions(-) diff --git a/tests/integration/observability/test_otel_tenant_internal_spans.py b/tests/integration/observability/test_otel_tenant_internal_spans.py index e85f73130d3..d1589588a14 100644 --- a/tests/integration/observability/test_otel_tenant_internal_spans.py +++ b/tests/integration/observability/test_otel_tenant_internal_spans.py @@ -308,7 +308,6 @@ def _candidate( yield candidate -@pytest.mark.covers("other.observability.otel.tenant_internal_spans.h1_team_exclude_chat_completions_openai_sync") def test_team_exclude_chat_completions_openai_sync(gateway: Gateway, audit_sinks: SpanSinks, langfuse_vars: dict[str, JsonValue]) -> None: with gateway.scenario() as scenario: model: Final = _audit_model(scenario, gateway.upstream_url) @@ -326,7 +325,6 @@ def test_team_exclude_chat_completions_openai_sync(gateway: Gateway, audit_sinks _assert_upstream_saw(gateway.upstream_url, nonce) -@pytest.mark.covers("other.observability.otel.tenant_internal_spans.h2_team_exclude_chat_completions_stream_async") def test_team_exclude_chat_completions_stream_openai_async(gateway: Gateway, audit_sinks: SpanSinks, langfuse_vars: dict[str, JsonValue]) -> None: with gateway.scenario() as scenario: model: Final = _audit_model(scenario, gateway.upstream_url) @@ -344,7 +342,6 @@ def test_team_exclude_chat_completions_stream_openai_async(gateway: Gateway, aud _assert_upstream_saw(gateway.upstream_url, nonce) -@pytest.mark.covers("other.observability.otel.tenant_internal_spans.h3_team_exclude_messages_anthropic_sync") def test_team_exclude_messages_anthropic_sync(gateway: Gateway, audit_sinks: SpanSinks, langfuse_vars: dict[str, JsonValue]) -> None: with gateway.scenario() as scenario: model: Final = _audit_model(scenario, gateway.upstream_url) @@ -362,7 +359,6 @@ def test_team_exclude_messages_anthropic_sync(gateway: Gateway, audit_sinks: Spa _assert_upstream_saw(gateway.upstream_url, nonce) -@pytest.mark.covers("other.observability.otel.tenant_internal_spans.h4_team_exclude_messages_stream_anthropic_async") def test_team_exclude_messages_stream_anthropic_async(gateway: Gateway, audit_sinks: SpanSinks, langfuse_vars: dict[str, JsonValue]) -> None: with gateway.scenario() as scenario: model: Final = _audit_model(scenario, gateway.upstream_url) @@ -393,7 +389,6 @@ def test_team_exclude_messages_stream_anthropic_async(gateway: Gateway, audit_si _assert_upstream_saw(gateway.upstream_url, nonce) -@pytest.mark.covers("other.observability.otel.tenant_internal_spans.h5_team_exclude_responses_openai_sync") def test_team_exclude_responses_api(gateway: Gateway, audit_sinks: SpanSinks, langfuse_vars: dict[str, JsonValue]) -> None: with gateway.scenario() as scenario: model: Final = _audit_model(scenario, gateway.upstream_url) @@ -413,7 +408,6 @@ def test_team_exclude_responses_api(gateway: Gateway, audit_sinks: SpanSinks, la _assert_upstream_saw(gateway.upstream_url, nonce) -@pytest.mark.covers("other.observability.otel.tenant_internal_spans.h6_team_exclude_responses_stream_httpx") def test_team_exclude_responses_stream(gateway: Gateway, audit_sinks: SpanSinks, langfuse_vars: dict[str, JsonValue]) -> None: with gateway.scenario() as scenario: model: Final = _audit_model(scenario, gateway.upstream_url) @@ -434,7 +428,6 @@ def test_team_exclude_responses_stream(gateway: Gateway, audit_sinks: SpanSinks, _assert_upstream_saw(gateway.upstream_url, nonce) -@pytest.mark.covers("other.observability.otel.tenant_internal_spans.h7_team_include_explicit") def test_team_include_explicit_delivers_full_trace(gateway: Gateway, audit_sinks: SpanSinks, langfuse_vars: dict[str, JsonValue]) -> None: with gateway.scenario() as scenario: model: Final = _audit_model(scenario, gateway.upstream_url) @@ -450,7 +443,6 @@ def test_team_include_explicit_delivers_full_trace(gateway: Gateway, audit_sinks _assert_full(_trace_spans(audit_sinks.tenant, tenant_trace)) -@pytest.mark.covers("other.observability.otel.tenant_internal_spans.h8_var_absent_defaults_include") def test_var_absent_defaults_to_include(gateway: Gateway, audit_sinks: SpanSinks, langfuse_vars: dict[str, JsonValue]) -> None: with gateway.scenario() as scenario: model: Final = _audit_model(scenario, gateway.upstream_url) @@ -468,7 +460,6 @@ def _key_logging_entry(callback_vars: Mapping[str, JsonValue], callback_name: st return [{"callback_name": callback_name, "callback_vars": dict(callback_vars)}] -@pytest.mark.covers("other.observability.otel.tenant_internal_spans.h9_key_var_exclude_no_team") def test_key_level_exclude_without_team_callbacks(gateway: Gateway, audit_sinks: SpanSinks, langfuse_vars: dict[str, JsonValue]) -> None: with gateway.scenario() as scenario: model: Final = _audit_model(scenario, gateway.upstream_url) @@ -484,7 +475,6 @@ def test_key_level_exclude_without_team_callbacks(gateway: Gateway, audit_sinks: _assert_full(_trace_spans(audit_sinks.operator, operator_trace)) -@pytest.mark.covers("other.observability.otel.tenant_internal_spans.h10_key_include_beats_team_exclude") def test_key_include_wins_over_team_exclude(gateway: Gateway, audit_sinks: SpanSinks, langfuse_vars: dict[str, JsonValue]) -> None: with gateway.scenario() as scenario: model: Final = _audit_model(scenario, gateway.upstream_url) @@ -501,7 +491,6 @@ def test_key_include_wins_over_team_exclude(gateway: Gateway, audit_sinks: SpanS _assert_full(_trace_spans(audit_sinks.tenant, tenant_trace)) -@pytest.mark.covers("other.observability.otel.tenant_internal_spans.h11_key_exclude_beats_team_include") def test_key_exclude_wins_over_team_include(gateway: Gateway, audit_sinks: SpanSinks, langfuse_vars: dict[str, JsonValue]) -> None: with gateway.scenario() as scenario: model: Final = _audit_model(scenario, gateway.upstream_url) @@ -518,7 +507,6 @@ def test_key_exclude_wins_over_team_include(gateway: Gateway, audit_sinks: SpanS _assert_excluded(_trace_spans(audit_sinks.tenant, tenant_trace)) -@pytest.mark.covers("other.observability.otel.tenant_internal_spans.h12_two_destinations_independent_filters") def test_langfuse_exclude_arize_include_split(gateway: Gateway, audit_sinks: SpanSinks, langfuse_vars: dict[str, JsonValue]) -> None: with gateway.scenario() as scenario: model: Final = _audit_model(scenario, gateway.upstream_url) @@ -541,7 +529,6 @@ def test_langfuse_exclude_arize_include_split(gateway: Gateway, audit_sinks: Spa assert arize_trace == langfuse_trace -@pytest.mark.covers("other.observability.otel.tenant_internal_spans.h13_llm_only_scope_with_exclude") def test_llm_only_scope_under_exclude_keeps_model_span(gateway: Gateway, audit_sinks: SpanSinks, langfuse_vars: dict[str, JsonValue]) -> None: with gateway.scenario() as scenario: model: Final = _audit_model(scenario, gateway.upstream_url) @@ -568,7 +555,6 @@ def test_llm_only_scope_under_exclude_keeps_model_span(gateway: Gateway, audit_s assert all("gen_ai.operation.name" in span["attributes"] for span in group), names -@pytest.mark.covers("other.observability.otel.tenant_internal_spans.h14_additive_mode_exclude") def test_additive_mode_operator_full_tenant_excluded(gateway: Gateway, audit_sinks: SpanSinks, langfuse_vars: dict[str, JsonValue], otel_audit_config: AuditConfigWriter, tmp_path: Path) -> None: with _candidate(gateway, tmp_path, audit_sinks, otel_audit_config, settings={"otel_tenant_destination_mode": "additive"}) as candidate: with candidate.scenario() as scenario: @@ -586,7 +572,6 @@ def test_additive_mode_operator_full_tenant_excluded(gateway: Gateway, audit_sin _assert_excluded(_trace_spans(audit_sinks.tenant, tenant_trace)) -@pytest.mark.covers("other.observability.otel.tenant_internal_spans.h15_operator_sink_untouched") def test_operator_sink_keeps_internal_spans_under_exclude(gateway: Gateway, audit_sinks: SpanSinks, langfuse_vars: dict[str, JsonValue]) -> None: with gateway.scenario() as scenario: model: Final = _audit_model(scenario, gateway.upstream_url) @@ -605,7 +590,6 @@ def test_operator_sink_keeps_internal_spans_under_exclude(gateway: Gateway, audi assert any("auth" in name or "redis" in name or "postgres" in name for name in internal_names), internal_names -@pytest.mark.covers("other.observability.otel.tenant_internal_spans.h16_guardrail_span_kept_under_exclude") def test_guardrail_span_survives_exclude(gateway: Gateway, audit_sinks: SpanSinks, langfuse_vars: dict[str, JsonValue], otel_audit_config: AuditConfigWriter, tmp_path: Path) -> None: guardrail_name: Final = f"audit-filter-{uuid.uuid4().hex[:8]}" config: Final = yaml.safe_load(otel_audit_config(tmp_path, {}).read_text()) @@ -658,7 +642,6 @@ def test_guardrail_span_survives_exclude(gateway: Gateway, audit_sinks: SpanSink assert kept is not None, f"guardrail span missing at tenant sink: {tenant_spans}" -@pytest.mark.covers("other.observability.otel.tenant_internal_spans.d1_env_exclude_applies") def test_env_exclude_applies_when_var_absent(gateway: Gateway, audit_sinks: SpanSinks, langfuse_vars: dict[str, JsonValue], otel_audit_config: AuditConfigWriter, tmp_path: Path) -> None: with _candidate(gateway, tmp_path, audit_sinks, otel_audit_config, env={"LITELLM_OTEL_TENANT_INTERNAL_SPANS": "exclude"}) as candidate: with candidate.scenario() as scenario: @@ -673,7 +656,6 @@ def test_env_exclude_applies_when_var_absent(gateway: Gateway, audit_sinks: Span _assert_excluded(_trace_spans(audit_sinks.tenant, tenant_trace)) -@pytest.mark.covers("other.observability.otel.tenant_internal_spans.d2_var_include_beats_env_exclude") def test_var_include_beats_env_exclude(gateway: Gateway, audit_sinks: SpanSinks, langfuse_vars: dict[str, JsonValue], otel_audit_config: AuditConfigWriter, tmp_path: Path) -> None: with _candidate(gateway, tmp_path, audit_sinks, otel_audit_config, env={"LITELLM_OTEL_TENANT_INTERNAL_SPANS": "exclude"}) as candidate: with candidate.scenario() as scenario: @@ -688,7 +670,6 @@ def test_var_include_beats_env_exclude(gateway: Gateway, audit_sinks: SpanSinks, _assert_full(_trace_spans(audit_sinks.tenant, tenant_trace)) -@pytest.mark.covers("other.observability.otel.tenant_internal_spans.d3_setting_exclude_applies") def test_litellm_setting_exclude_applies_when_var_absent(gateway: Gateway, audit_sinks: SpanSinks, langfuse_vars: dict[str, JsonValue], otel_audit_config: AuditConfigWriter, tmp_path: Path) -> None: with _candidate(gateway, tmp_path, audit_sinks, otel_audit_config, settings={"otel_tenant_internal_spans": "exclude"}) as candidate: with candidate.scenario() as scenario: @@ -703,7 +684,6 @@ def test_litellm_setting_exclude_applies_when_var_absent(gateway: Gateway, audit _assert_excluded(_trace_spans(audit_sinks.tenant, tenant_trace)) -@pytest.mark.covers("other.observability.otel.tenant_internal_spans.d4_setting_include_beats_env_exclude") def test_setting_include_beats_env_exclude(gateway: Gateway, audit_sinks: SpanSinks, langfuse_vars: dict[str, JsonValue], otel_audit_config: AuditConfigWriter, tmp_path: Path) -> None: with _candidate(gateway, tmp_path, audit_sinks, otel_audit_config, env={"LITELLM_OTEL_TENANT_INTERNAL_SPANS": "exclude"}, settings={"otel_tenant_internal_spans": "include"} ) as candidate: @@ -719,7 +699,6 @@ def test_setting_include_beats_env_exclude(gateway: Gateway, audit_sinks: SpanSi _assert_full(_trace_spans(audit_sinks.tenant, tenant_trace)) -@pytest.mark.covers("other.observability.otel.tenant_internal_spans.d5_env_whitespace_case_exclude") def test_env_exclude_with_whitespace_and_case(gateway: Gateway, audit_sinks: SpanSinks, langfuse_vars: dict[str, JsonValue], otel_audit_config: AuditConfigWriter, tmp_path: Path) -> None: with _candidate(gateway, tmp_path, audit_sinks, otel_audit_config, env={"LITELLM_OTEL_TENANT_INTERNAL_SPANS": " EXCLUDE "}) as candidate: with candidate.scenario() as scenario: @@ -734,7 +713,6 @@ def test_env_exclude_with_whitespace_and_case(gateway: Gateway, audit_sinks: Spa _assert_excluded(_trace_spans(audit_sinks.tenant, tenant_trace)) -@pytest.mark.covers("other.observability.otel.tenant_internal_spans.d6_env_bogus_falls_back_include") def test_env_bogus_value_falls_back_to_include(gateway: Gateway, audit_sinks: SpanSinks, langfuse_vars: dict[str, JsonValue], otel_audit_config: AuditConfigWriter, tmp_path: Path) -> None: with _candidate(gateway, tmp_path, audit_sinks, otel_audit_config, env={"LITELLM_OTEL_TENANT_INTERNAL_SPANS": "bogus"}) as candidate: with candidate.scenario() as scenario: @@ -749,7 +727,6 @@ def test_env_bogus_value_falls_back_to_include(gateway: Gateway, audit_sinks: Sp _assert_full(_trace_spans(audit_sinks.tenant, tenant_trace)) -@pytest.mark.covers("other.observability.otel.tenant_internal_spans.d7_empty_setting_falls_through_env") def test_empty_setting_falls_through_to_env(gateway: Gateway, audit_sinks: SpanSinks, langfuse_vars: dict[str, JsonValue], otel_audit_config: AuditConfigWriter, tmp_path: Path) -> None: with _candidate(gateway, tmp_path, audit_sinks, otel_audit_config, env={"LITELLM_OTEL_TENANT_INTERNAL_SPANS": "exclude"}, settings={"otel_tenant_internal_spans": ""} ) as candidate: @@ -770,7 +747,6 @@ def _bad_var_rejected(response: httpx.Response) -> None: assert INTERNAL_SPANS_VAR in response.text or "callback" in response.text, response.text -@pytest.mark.covers("other.observability.otel.tenant_internal_spans.s1_int_value_rejected") def test_callback_var_int_rejected(gateway: Gateway, langfuse_vars: dict[str, JsonValue]) -> None: with gateway.scenario() as scenario: team_id: Final = scenario.team() @@ -778,7 +754,6 @@ def test_callback_var_int_rejected(gateway: Gateway, langfuse_vars: dict[str, Js _bad_var_rejected(response) -@pytest.mark.covers("other.observability.otel.tenant_internal_spans.s2_list_value_rejected") def test_callback_var_list_rejected(gateway: Gateway, langfuse_vars: dict[str, JsonValue]) -> None: with gateway.scenario() as scenario: team_id: Final = scenario.team() @@ -788,7 +763,6 @@ def test_callback_var_list_rejected(gateway: Gateway, langfuse_vars: dict[str, J _bad_var_rejected(response) -@pytest.mark.covers("other.observability.otel.tenant_internal_spans.s3_empty_value_rejected") def test_callback_var_empty_string_rejected(gateway: Gateway, langfuse_vars: dict[str, JsonValue]) -> None: with gateway.scenario() as scenario: team_id: Final = scenario.team() @@ -796,7 +770,6 @@ def test_callback_var_empty_string_rejected(gateway: Gateway, langfuse_vars: dic _bad_var_rejected(response) -@pytest.mark.covers("other.observability.otel.tenant_internal_spans.s4_oversized_value_rejected") def test_callback_var_oversized_string_rejected(gateway: Gateway, langfuse_vars: dict[str, JsonValue]) -> None: with gateway.scenario() as scenario: team_id: Final = scenario.team() @@ -804,7 +777,6 @@ def test_callback_var_oversized_string_rejected(gateway: Gateway, langfuse_vars: _bad_var_rejected(response) -@pytest.mark.covers("other.observability.otel.tenant_internal_spans.s5_case_sensitive_rejected") def test_callback_var_case_sensitive_rejected(gateway: Gateway, langfuse_vars: dict[str, JsonValue]) -> None: with gateway.scenario() as scenario: team_id: Final = scenario.team() @@ -812,7 +784,6 @@ def test_callback_var_case_sensitive_rejected(gateway: Gateway, langfuse_vars: d _bad_var_rejected(response) -@pytest.mark.covers("other.observability.otel.tenant_internal_spans.s6_same_value_twice_accepted") def test_same_internal_spans_value_on_second_entry_accepted(gateway: Gateway, audit_sinks: SpanSinks, langfuse_vars: dict[str, JsonValue]) -> None: with gateway.scenario() as scenario: model: Final = _audit_model(scenario, gateway.upstream_url) @@ -836,7 +807,6 @@ def test_same_internal_spans_value_on_second_entry_accepted(gateway: Gateway, au _assert_excluded(_trace_spans(audit_sinks.tenant, tenant_trace)) -@pytest.mark.covers("other.observability.otel.tenant_internal_spans.s7_conflicting_value_rejected") def test_conflicting_internal_spans_value_rejected(gateway: Gateway, langfuse_vars: dict[str, JsonValue]) -> None: with gateway.scenario() as scenario: team_id: Final = scenario.team() @@ -851,7 +821,6 @@ def test_conflicting_internal_spans_value_rejected(gateway: Gateway, langfuse_va assert INTERNAL_SPANS_VAR in second.text, second.text -@pytest.mark.covers("other.observability.otel.tenant_internal_spans.s8_non_otel_callback_rejected") def test_internal_spans_on_non_otel_callback_rejected(gateway: Gateway) -> None: with gateway.scenario() as scenario: team_id: Final = scenario.team() @@ -865,7 +834,6 @@ def test_internal_spans_on_non_otel_callback_rejected(gateway: Gateway) -> None: assert "callback" in response.text, response.text -@pytest.mark.covers("other.observability.otel.tenant_internal_spans.s9_newrelic_accepts_var") def test_internal_spans_on_newrelic_accepted(gateway: Gateway) -> None: with gateway.scenario() as scenario: team_id: Final = scenario.team() @@ -882,7 +850,6 @@ def test_internal_spans_on_newrelic_accepted(gateway: Gateway) -> None: assert "newrelic" in data.get("success_callbacks", []) or "newrelic" in data.get("failure_callbacks", []), data -@pytest.mark.covers("other.observability.otel.tenant_internal_spans.s10_unauthenticated_callback_post") def test_unauthenticated_callback_post_rejected(gateway: Gateway, langfuse_vars: dict[str, JsonValue]) -> None: with httpx.Client(base_url=str(gateway.client.base_url), timeout=15, trust_env=False) as client: response: Final = client.post( @@ -891,7 +858,6 @@ def test_unauthenticated_callback_post_rejected(gateway: Gateway, langfuse_vars: assert response.status_code == 401, f"expected 401, got {response.status_code}: {response.text}" -@pytest.mark.covers("other.observability.otel.tenant_internal_spans.s11_key_generate_bogus_rejected") def test_key_generate_bogus_internal_spans_rejected(gateway: Gateway, langfuse_vars: dict[str, JsonValue]) -> None: response: Final = gateway.request( "POST", "/key/generate", {"metadata": {"logging": _key_logging_entry({**langfuse_vars, INTERNAL_SPANS_VAR: "bogus"})}} @@ -899,7 +865,6 @@ def test_key_generate_bogus_internal_spans_rejected(gateway: Gateway, langfuse_v assert response.status_code == 400, f"expected 400, got {response.status_code}: {response.text}" -@pytest.mark.covers("other.observability.otel.tenant_internal_spans.s12_key_update_bogus_rejected") def test_key_update_bogus_internal_spans_rejected(gateway: Gateway, langfuse_vars: dict[str, JsonValue]) -> None: with gateway.scenario() as scenario: key: Final = scenario.key() @@ -911,7 +876,6 @@ def test_key_update_bogus_internal_spans_rejected(gateway: Gateway, langfuse_var assert response.status_code == 400, f"expected 400, got {response.status_code}: {response.text}" -@pytest.mark.covers("other.observability.otel.tenant_internal_spans.s13_team_update_unvalidated_drops_destination") def test_team_update_bogus_internal_spans_drops_destination(gateway: Gateway, audit_sinks: SpanSinks, langfuse_vars: dict[str, JsonValue]) -> None: with gateway.scenario() as scenario: model: Final = _audit_model(scenario, gateway.upstream_url) @@ -965,21 +929,18 @@ def _sink_status_flow( configure_sink(audit_sinks.tenant, status=200) -@pytest.mark.covers("other.observability.otel.tenant_internal_spans.s14_tenant_sink_403_caller_unaffected") def test_tenant_sink_403_does_not_break_caller( gateway: Gateway, audit_sinks: SpanSinks, langfuse_vars: dict[str, JsonValue] ) -> None: _sink_status_flow(gateway, audit_sinks, langfuse_vars, 403) -@pytest.mark.covers("other.observability.otel.tenant_internal_spans.s15_tenant_sink_404_caller_unaffected") def test_tenant_sink_404_does_not_break_caller( gateway: Gateway, audit_sinks: SpanSinks, langfuse_vars: dict[str, JsonValue] ) -> None: _sink_status_flow(gateway, audit_sinks, langfuse_vars, 404) -@pytest.mark.covers("other.observability.otel.tenant_internal_spans.s16_upstream_500_under_exclude") def test_upstream_500_under_exclude_keeps_internal_spans_back(gateway: Gateway, audit_sinks: SpanSinks, langfuse_vars: dict[str, JsonValue]) -> None: upstream_model: Final = "audit-chat" httpx.post( @@ -1014,7 +975,6 @@ def test_upstream_500_under_exclude_keeps_internal_spans_back(gateway: Gateway, httpx.delete(f"{gateway.upstream_url}/__scripts/{upstream_model}", trust_env=False, timeout=15) -@pytest.mark.covers("other.observability.otel.tenant_internal_spans.s17_unrelated_key_unaffected") def test_unrelated_key_unaffected_by_tenant_sink_failure(gateway: Gateway, audit_sinks: SpanSinks) -> None: configure_sink(audit_sinks.tenant, status=403) try: @@ -1027,7 +987,6 @@ def test_unrelated_key_unaffected_by_tenant_sink_failure(gateway: Gateway, audit configure_sink(audit_sinks.tenant, status=200) -@pytest.mark.covers("other.observability.otel.tenant_internal_spans.s18_key_health_with_exclude_team") def test_key_health_with_excluded_team_callback(gateway: Gateway, langfuse_vars: dict[str, JsonValue]) -> None: with gateway.scenario() as scenario: team_id: Final = scenario.team() @@ -1038,7 +997,6 @@ def test_key_health_with_excluded_team_callback(gateway: Gateway, langfuse_vars: assert response.status_code == 200, f"/key/health failed: {response.status_code} {response.text}" -@pytest.mark.covers("other.observability.otel.tenant_internal_spans.e1_var_update_takes_effect_within_ttl") def test_callback_var_update_include_to_exclude_takes_effect(gateway: Gateway, audit_sinks: SpanSinks, langfuse_vars: dict[str, JsonValue]) -> None: with gateway.scenario() as scenario: model: Final = _audit_model(scenario, gateway.upstream_url) @@ -1082,7 +1040,6 @@ def test_callback_var_update_include_to_exclude_takes_effect(gateway: Gateway, a assert trace is not None, "exclude never took effect within the cache TTL" -@pytest.mark.covers("other.observability.otel.tenant_internal_spans.e2_callback_delete_stops_tenant_export") def test_callback_delete_stops_tenant_export(gateway: Gateway, audit_sinks: SpanSinks, langfuse_vars: dict[str, JsonValue]) -> None: with gateway.scenario() as scenario: model: Final = _audit_model(scenario, gateway.upstream_url) @@ -1113,7 +1070,6 @@ def test_callback_delete_stops_tenant_export(gateway: Gateway, audit_sinks: Span assert not leaked, f"tenant sink still received spans after callback delete: {leaked}" -@pytest.mark.covers("other.observability.otel.tenant_internal_spans.e3_identical_requests_export_once") def test_identical_requests_export_exactly_once(gateway: Gateway, audit_sinks: SpanSinks, langfuse_vars: dict[str, JsonValue]) -> None: with gateway.scenario() as scenario: model: Final = _audit_model(scenario, gateway.upstream_url) @@ -1147,7 +1103,6 @@ def test_identical_requests_export_exactly_once(gateway: Gateway, audit_sinks: S assert len(operator_matching) == 1, f"operator exported {response_id} {len(operator_matching)} times" -@pytest.mark.covers("other.observability.otel.tenant_internal_spans.e4_concurrent_requests_excluded_once") def test_concurrent_requests_all_excluded_once(gateway: Gateway, audit_sinks: SpanSinks, langfuse_vars: dict[str, JsonValue]) -> None: with gateway.scenario() as scenario: @@ -1179,7 +1134,6 @@ def test_concurrent_requests_all_excluded_once(gateway: Gateway, audit_sinks: Sp assert workers, "no process attribution on tenant spans" -@pytest.mark.covers("other.observability.otel.tenant_internal_spans.e5_failure_only_entry_anchors_no_destination") def test_failure_only_callback_entry_anchors_no_destination(gateway: Gateway, audit_sinks: SpanSinks, langfuse_vars: dict[str, JsonValue]) -> None: with gateway.scenario() as scenario: model: Final = _audit_model(scenario, gateway.upstream_url) diff --git a/tests/integration/observability/test_otel_tenant_internal_spans_chaos.py b/tests/integration/observability/test_otel_tenant_internal_spans_chaos.py index 8b8ecdfab89..32e8b6ccf5e 100644 --- a/tests/integration/observability/test_otel_tenant_internal_spans_chaos.py +++ b/tests/integration/observability/test_otel_tenant_internal_spans_chaos.py @@ -96,7 +96,6 @@ def _wait_trace_count(sink_url: str, call_ids: list[str | None], seconds: float) return result -@pytest.mark.covers("other.observability.otel.tenant_internal_spans.c1_frozen_sink_delivers_after_resume") def test_frozen_tenant_sink_receives_every_span_after_resume(gateway: Gateway, audit_sinks: SpanSinks, langfuse_vars: dict[str, JsonValue]) -> None: pid: Final = sink_pid(audit_sinks.tenant) with gateway.scenario() as scenario: @@ -125,7 +124,6 @@ def test_frozen_tenant_sink_receives_every_span_after_resume(gateway: Gateway, a assert _classes(group)["internal"] == 0, f"internal spans leaked for {call_id}" -@pytest.mark.covers("other.observability.otel.tenant_internal_spans.c3_slow_sink_no_duplicates") def test_slow_tenant_sink_exports_each_span_once(gateway: Gateway, audit_sinks: SpanSinks, langfuse_vars: dict[str, JsonValue]) -> None: configure_sink(audit_sinks.tenant, delay_seconds=2.0) try: @@ -152,7 +150,6 @@ def test_slow_tenant_sink_exports_each_span_once(gateway: Gateway, audit_sinks: configure_sink(audit_sinks.tenant, delay_seconds=0.0) -@pytest.mark.covers("other.observability.otel.tenant_internal_spans.c4_proxy_restart_keeps_serving") def test_proxy_restart_mid_burst_keeps_serving(gateway: Gateway, audit_sinks: SpanSinks, langfuse_vars: dict[str, JsonValue], otel_audit_config: AuditConfigWriter, tmp_path: Path) -> None: path: Final = otel_audit_config(tmp_path, {}) overrides: Final = {"LITELLM_OTEL_V2": "1", "ARIZE_HTTP_ENDPOINT": audit_sinks.arize} @@ -198,7 +195,6 @@ def test_proxy_restart_mid_burst_keeps_serving(gateway: Gateway, audit_sinks: Sp assert eventually(landed, bool, seconds=40), "post-restart trace never reached the operator sink" -@pytest.mark.covers("other.observability.otel.tenant_internal_spans.c5_worker_kill_survivor_serves") def test_killing_one_worker_leaves_serving( gateway: Gateway, audit_sinks: SpanSinks,