<?xml version="1.0" encoding="utf-8"?><testsuites name="pytest tests"><testsuite name="pytest" errors="0" failures="1" skipped="4" tests="43" time="1232.515" timestamp="2026-11-01T23:15:03.359735+00:00" hostname="ai-gateway-controller-group0b9d472be7a8d164fdd9c08c1c28c334-pod"><testcase classname="tests.test_api_keys.TestAPIKeySubscriptionPhases" name="test_create_key_for_pending_subscription" time="41.859" /><testcase classname="tests.test_api_keys.TestAPIKeySubscriptionPhases" name="test_reject_key_for_unreconciled_subscription" time="17.709" /><testcase classname="tests.test_negative_security.TestAuthPolicyRemoval" name="test_authpolicy_deletion_revokes_access" time="20.725" /><testcase classname="tests.test_subscription.TestSubscriptionEnforcement" name="test_auth_pass_no_subscription_gets_403" time="3.890" /><testcase classname="tests.test_subscription.TestSubscriptionEnforcement" name="test_rate_limit_exhaustion_gets_429" time="25.773" /><testcase classname="tests.test_subscription.TestSubscriptionEnforcement" name="test_models_endpoint_exempt_from_rate_limiting" time="31.591" /><testcase classname="tests.test_subscription.TestMultipleSubscriptionsPerModel" name="test_user_in_one_of_two_subscriptions_gets_200" time="11.697" /><testcase classname="tests.test_subscription.TestUnlimitedSubscription" name="test_unlimited_and_token_rate_limits_are_mutually_exclusive" time="0.619" /><testcase classname="tests.test_subscription.TestUnlimitedSubscription" name="test_unlimited_key_is_not_rate_limited" time="19.404" /><testcase classname="tests.test_subscription.TestUnlimitedSubscription" name="test_unlimited_subscriptions_share_one_wasm_limit" time="0.155"><skipped type="pytest.skip" message="no Kuadrant WasmPlugin for gateway maas-default-gateway">/workspace/source/test/maas-e2e/test/e2e/tests/test_subscription.py:941: no Kuadrant WasmPlugin for gateway maas-default-gateway</skipped></testcase><testcase classname="tests.test_subscription.TestUnlimitedSubscription" name="test_unlimited_usage_is_metered" time="26.912" /><testcase classname="tests.test_subscription.TestAllUnlimitedModel" name="test_all_unlimited_model_is_not_denied" time="34.415" /><testcase classname="tests.test_subscription.TestMultipleAuthPoliciesPerModel" name="test_two_auth_policies_or_logic" time="28.072" /><testcase classname="tests.test_subscription.TestMultipleAuthPoliciesPerModel" name="test_delete_one_auth_policy_other_still_works" time="3.609" /><testcase classname="tests.test_subscription.TestCascadeDeletion" name="test_delete_subscription_rebuilds_trlp" time="26.668" /><testcase classname="tests.test_subscription.TestCascadeDeletion" name="test_trlp_persists_during_multi_subscription_deletion" time="41.129" /><testcase classname="tests.test_subscription.TestCascadeDeletion" name="test_delete_last_subscription_denies_access" time="20.127" /><testcase classname="tests.test_subscription.TestCascadeDeletion" name="test_unconfigured_model_denied_by_gateway_auth" time="0.841" /><testcase classname="tests.test_subscription.TestRateLimitIdentityGenerations" name="test_legacy_and_short_identities_coexist" time="37.428" /><testcase classname="tests.test_subscription.TestManagedAnnotation" name="test_authpolicy_managed_false_prevents_update" time="0.319"><skipped type="pytest.skip" message="gateway-only mode: per-model AuthPolicy is not created">/workspace/source/test/maas-e2e/test/e2e/tests/test_subscription.py:1728: gateway-only mode: per-model AuthPolicy is not created</skipped></testcase><testcase classname="tests.test_subscription.TestManagedAnnotation" name="test_trlp_managed_false_prevents_update" time="2.749" /><testcase classname="tests.test_subscription.TestE2ESubscriptionFlow" name="test_e2e_with_access_but_no_subscription_gets_403" time="17.171" /><testcase classname="tests.test_subscription.TestE2ESubscriptionFlow" name="test_e2e_single_subscription_auto_selects" time="122.664" /><testcase classname="tests.test_subscription.TestE2ESubscriptionFlow" name="test_e2e_group_based_auth_but_no_subscription_gets_403" time="16.908" /><testcase classname="tests.test_subscription.TestStatusReporting" name="test_subscription_degraded_trlp_blocks_inference" time="103.975" /><testcase classname="tests.test_subscription.TestDegradedSubscriptionFiltering" name="test_failed_subscription_blocks_inference" time="29.048" /><testcase classname="tests.test_models_endpoint.TestModelsEndpoint" name="test_single_subscription_auto_select" time="117.257" /><testcase classname="tests.test_models_endpoint.TestModelsEndpoint" name="test_explicit_subscription_header" time="1.583" /><testcase classname="tests.test_models_endpoint.TestModelsEndpoint" name="test_models_filtered_by_subscription" time="1.944" /><testcase classname="tests.test_models_endpoint.TestModelsEndpoint" name="test_different_modelrefs_same_model_id" time="97.380" /><testcase classname="tests.test_models_endpoint.TestModelsEndpoint" name="test_empty_model_list" time="14.248" /><testcase classname="tests.test_models_endpoint.TestModelsEndpoint" name="test_central_models_endpoint_exempt_from_rate_limiting" time="30.483" /><testcase classname="tests.test_tenant.TestTenantLifecycle" name="test_payload_processing_deployed_with_active_tenant" time="6.893" /><testcase classname="tests.test_tenant.TestTenantLifecycle" name="test_payload_processing_and_pre_processing_resources" time="0.254"><skipped type="pytest.skip" message="default payload-processing is praxis-extproc; MaasTenantConfig.spec.payloadProcessing.resources is MaaS IPP-only">/workspace/source/test/maas-e2e/test/e2e/tests/test_tenant.py:401: default payload-processing is praxis-extproc; MaasTenantConfig.spec.payloadProcessing.resources is MaaS IPP-only</skipped></testcase><testcase classname="tests.test_aitenant_lifecycle.TestAITenantRevocationOperandsSerial" name="test_aitenant_delete_completes_after_cleanup_serviceaccount_removed" time="62.037" /><testcase classname="tests.test_tenant_namespace_discovery.TestTenantDiscoveryDormantMode" name="test_dormant_mode_ignores_labeled_namespace" time="0.449"><skipped type="pytest.skip" message="Dormant-mode test mutates controller flags; set ENABLE_TENANT_DISCOVERY_DORMANT_E2E=true">/workspace/source/test/maas-e2e/test/e2e/tests/test_tenant_namespace_discovery.py:359: Dormant-mode test mutates controller flags; set ENABLE_TENANT_DISCOVERY_DORMANT_E2E=true</skipped></testcase><testcase classname="tests.test_multi_tenant_maas_api.TestPerTenantMaaSAPI" name="test_dual_listeners_keep_one_authconfig_per_route_rule" time="50.047"><failure message="AssertionError: Expected exactly one Ready and Available non-deleting Authorino AuthConfig per rule for odh-ai-gateway-infra/maas-api-route-e2e-authcfg-http-2474f7; got {'rule-1': [('09ff7eb1bdb54b62b95f244436a221c5ae4b6169dcd8a72056a8ca56adea762c', '74a3380e-2e0b-4786-aa5f-598f67f07890', True), ('14a9ab7e1d36eab083c1717648d8fd0d25645065fb0947cc156a505af1fd78b9', 'e7c164f2-69c2-4426-8770-cab6fbc835f6', True)], 'rule-2': [('0fa8e2695f08e22d7e52c68a8e7008770a04ac2af4d1c9698593d037b72f7622', '36940...&#10;[+2 more lines; full report in element text]">self = &lt;test_multi_tenant_maas_api.TestPerTenantMaaSAPI object at 0x7f3b8b230310&gt;
dual_listener_tenant_case = {'suffix': '2474f7', 'tenant_ns': 'ai-tenant-e2e-authcfg-http-2474f7', 'tenant_label_name': 'e2e-authcfg-http-2474f7', 'gateway_name': 'e2e-authcfg-http-2474f7', ...}

    @pytest.mark.nightly
    @pytest.mark.serial
    def test_dual_listeners_keep_one_authconfig_per_route_rule(self, dual_listener_tenant_case):
        """One stable Authorino AuthConfig per rule when both listeners attach the route."""
        case = dual_listener_tenant_case
        gateway = wait_for_json(
            "gateway",
            case["gateway_name"],
            GATEWAY_NAMESPACE,
            predicate=lambda obj: {"http", "https"}
            &lt;= _gateway_listener_names_with_routes(obj),
            timeout=180,
        )
        listeners = {
            listener.get("name"): listener
            for listener in (gateway.get("spec") or {}).get("listeners") or []
        }
        assert {"http", "https"} &lt;= set(listeners), (
            f"{case['gateway_name']} must have both HTTP and HTTPS listeners, got {listeners!r}"
        )
        assert listeners["http"].get("protocol") == "HTTP" and listeners["http"].get("port") == 80
        assert listeners["https"].get("protocol") == "HTTPS" and listeners["https"].get("port") == 443
        assert listeners["http"].get("hostname") == listeners["https"].get("hostname"), (
            f"Test setup must use a shared hostname across listeners: {listeners!r}"
        )
    
        route_name = _tenant_api_names(case)["httproute"]
        route = wait_for_json(
            "httproute",
            route_name,
            INFRA_NAMESPACE,
            predicate=lambda obj: _route_accepted_by_gateway(obj, case["gateway_name"]),
            timeout=180,
        )
        authconfigs_by_rule = _wait_for_stable_route_authconfigs(route)
        rules = (route.get("spec") or {}).get("rules") or []
        expected_rules = {f"rule-{index}" for index in range(1, len(rules) + 1)}
        assert set(authconfigs_by_rule) == expected_rules
&gt;       assert all(
            len(observations) == 1 and observations[0][2]
            for observations in authconfigs_by_rule.values()
        ), (
            f"Expected exactly one Ready and Available non-deleting Authorino "
            f"AuthConfig per rule for "
            f"{INFRA_NAMESPACE}/{route_name}; got {authconfigs_by_rule!r}"
        )
E       AssertionError: Expected exactly one Ready and Available non-deleting Authorino AuthConfig per rule for odh-ai-gateway-infra/maas-api-route-e2e-authcfg-http-2474f7; got {'rule-1': [('09ff7eb1bdb54b62b95f244436a221c5ae4b6169dcd8a72056a8ca56adea762c', '74a3380e-2e0b-4786-aa5f-598f67f07890', True), ('14a9ab7e1d36eab083c1717648d8fd0d25645065fb0947cc156a505af1fd78b9', 'e7c164f2-69c2-4426-8770-cab6fbc835f6', True)], 'rule-2': [('0fa8e2695f08e22d7e52c68a8e7008770a04ac2af4d1c9698593d037b72f7622', '36940ff2-8414-4505-8947-7b6946d291f2', True), ('55d3f4e4db0b5f6db431fd55cc5aa5ba66f40a9070b170422e00b1af105df536', '6f8e9bd5-be83-469d-aba3-dad4853c1e68', True)], 'rule-4': [('644f3d984b7739bbfa957ba652f35e93b383dfb281349bedc3937de23cd0f6b9', '58c01e4f-7621-4f70-9ad5-17767c2375d5', True), ('fc8e55083809f5f2c755467bdd68c4db76c866c00674713b1fbee73109507c78', '79952de2-0e19-4b2a-a2a8-c7c91afe4c14', True)], 'rule-3': [('687b80171301270331a4a5c892106184a7290cfaecfb44b51d71e7849d288c2b', '5f39a431-6eb1-48dc-9882-178ba470671b', True), ('e825d10026ad541168acfc49b07de1f330653d47550edec1cce54f863772ee5c', '415a856f-23aa-4abb-a257-f203ac82e784', True)], 'rule-5': [('a46550f5583ee6660d4937a9e919b6dca3c15997ba78ba645dec3d9ddd86f675', '15f3cae9-e945-4971-bf13-d8dae7d5235d', True), ('c8c7755f7999f05ef431d2b93755e9c547debddd30f7cf51c6921c8594f80571', '62807d7c-8138-4597-904f-c283863f1019', True)], 'rule-6': [('b253289df7a17166253b1d480e1edc1c79f9490ffd785c5d28a2960e8b1ac1a7', 'ee13187a-546b-4a17-9260-9987123639e2', True), ('d8c9d2f21536b77d0504ad5a0298c51887ed937c4c1e5fe13693d76d74681be9', 'a07c9b60-8f4c-4749-b0d0-23a4445774f0', True)]}
E       assert False
E        +  where False = all(&lt;generator object TestPerTenantMaaSAPI.test_dual_listeners_keep_one_authconfig_per_route_rule.&lt;locals&gt;.&lt;genexpr&gt; at 0x7f3b8b4597e0&gt;)

test/maas-e2e/test/e2e/tests/test_multi_tenant_maas_api.py:381: AssertionError</failure></testcase><testcase classname="tests.test_multi_tenant_maas_api.TestPerTenantMaaSAPI" name="test_dual_listener_wasm_envoyfilter_generation_stays_stable" time="93.591" /><testcase classname="tests.test_embedding_inference.TestEmbeddingDefaultDeny" name="test_embedding_default_deny_403" time="0.519" /><testcase classname="tests.test_embedding_inference.TestEmbeddingPathRouting" name="test_embedding_path_based_200" time="13.761" /><testcase classname="tests.test_embedding_inference.TestEmbeddingPathRouting" name="test_embedding_bbr_llmisvc_200" time="0.712" /><testcase classname="tests.test_embedding_inference.TestEmbeddingGovernance" name="test_embedding_trlp_429" time="23.127" /><testcase classname="tests.test_embedding_inference.TestEmbeddingGovernance" name="test_embedding_with_governance_200" time="32.209" /></testsuite></testsuites>