<?xml version="1.0" encoding="utf-8"?><testsuites name="pytest tests"><testsuite name="pytest" errors="16" failures="3" skipped="27" tests="285" time="3250.026" timestamp="2026-11-03T19:47:01.660316+00:00" hostname="maas-group-test-dtcbk-e2e-maas-openshift-pod"><testcase classname="tests.test_aitenant_lifecycle.TestAITenantLifecycle" name="test_aitenant_delete_cleans_maas_resources_and_preserves_user_objects" time="44.473" /><testcase classname="tests.test_aitenant_lifecycle.TestAITenantLifecycle" name="test_aitenant_create_bootstrap_resources" time="39.440" /><testcase classname="tests.test_aitenant_lifecycle.TestAITenantLifecycle" name="test_aitenant_migrates_and_removes_legacy_tenant" time="39.810" /><testcase classname="tests.test_aitenant_lifecycle.TestAITenantLifecycle" name="test_aitenant_rejected_outside_ai_tenants_namespace" time="9.442" /><testcase classname="tests.test_aitenant_lifecycle.TestAITenantLifecycle" name="test_default_aitenant_bootstraps_maas_tenant_config_without_gateway_mutation" time="2.296" /><testcase classname="tests.test_aitenant_lifecycle.TestAITenantLifecycle" name="test_aitenant_delete_releases_tenantconfig_finalizer" time="39.259" /><testcase classname="tests.test_aitenant_lifecycle.TestAITenantLifecycle" name="test_aitenant_derives_non_default_tenant_namespace" time="34.863" /><testcase classname="tests.test_api_keys.TestAPIKeyCRUD" name="test_list_api_keys" time="82.484" /><testcase classname="tests.test_api_keys.TestAPIKeyBulkOperations" name="test_bulk_revoke_other_user_forbidden" time="0.107" /><testcase classname="tests.test_api_keys.TestAPIKeyBulkOperations" name="test_bulk_revoke_dry_run" time="0.764" /><testcase classname="tests.test_api_keys.TestAPIKeyBulkOperations" name="test_bulk_revoke_dry_run_by_subscription" time="13.141" /><testcase classname="tests.test_api_keys.TestAPIKeyBulkOperations" name="test_bulk_revoke_combined_user_and_subscription" time="23.199" /><testcase classname="tests.test_api_keys.TestAPIKeyCRUD" name="test_create_api_key" time="101.206" /><testcase classname="tests.test_api_keys.TestAPIKeyBulkOperations" name="test_bulk_revoke_own_keys" time="0.864" /><testcase classname="tests.test_api_keys.TestAPIKeyExpiration" name="test_expiration_policy_boundaries[within-limit]" time="0.135" /><testcase classname="tests.test_api_keys.TestAPIKeyExpiration" name="test_expiration_policy_boundaries[at-limit]" time="0.112" /><testcase classname="tests.test_api_keys.TestAPIKeyExpiration" name="test_expiration_policy_boundaries[exceeds-limit]" time="0.108" /><testcase classname="tests.test_api_keys.TestAPIKeyExpiration" name="test_expiration_policy_boundaries[without-expiration]" time="0.107" /><testcase classname="tests.test_api_keys.TestAPIKeyExpiration" name="test_expiration_policy_boundaries[short-expiration]" time="0.107" /><testcase classname="tests.test_api_keys.TestAPIKeyModelInference" name="test_api_key_model_access_success" time="0.267" /><testcase classname="tests.test_api_keys.TestAPIKeyModelInference" name="test_invalid_api_key_rejected" time="0.091" /><testcase classname="tests.test_api_keys.TestAPIKeyModelInference" name="test_no_auth_header_rejected" time="0.075" /><testcase classname="tests.test_api_keys.TestAPIKeyModelInference" name="test_revoked_api_key_rejected" time="2.499" /><testcase classname="tests.test_api_keys.TestAPIKeyCRUD" name="test_revoke_api_key" time="98.551" /><testcase classname="tests.test_api_keys.TestAPIKeyBulkOperations" name="test_bulk_revoke_by_subscription_forbidden_for_non_admin" time="0.111" /><testcase classname="tests.test_api_keys.TestAPIKeyAuthorization" name="test_non_admin_cannot_access_other_users_keys" time="99.267" /><testcase classname="tests.test_api_keys.TestAPIKeyRevocationE2E" name="test_double_revoke_returns_404" time="0.384" /><testcase classname="tests.test_api_keys.TestAPIKeyRevocationE2E" name="test_revoke_nonexistent_key_returns_404" time="0.118" /><testcase classname="tests.test_api_keys.TestAPIKeyBulkOperations" name="test_bulk_revoke_by_subscription" time="12.811" /><testcase classname="tests.test_api_keys.TestAPIKeyRevocationE2E" name="test_revoke_then_create_new_key_works" time="0.568" /><testcase classname="tests.test_api_keys.TestAPIKeyRevocationE2E" name="test_revoke_keys_rejected_at_gateway" time="1.060" /><testcase classname="tests.test_api_keys.TestAPIKeyModelInference" name="test_api_key_chat_completions" time="0.132" /><testcase classname="tests.test_api_keys.TestEphemeralKeyCleanup" name="test_cleanup_networkpolicy_exists" time="0.134" /><testcase classname="tests.test_api_keys.TestEphemeralKeyCleanup" name="test_cronjob_exists_and_configured" time="0.151" /><testcase classname="tests.test_api_keys.TestEphemeralKeyCleanup" name="test_create_ephemeral_key" time="0.358" /><testcase classname="tests.test_api_keys.TestEphemeralKeyCleanup" name="test_trigger_cleanup_preserves_active_keys" time="0.267"><skipped type="pytest.skip" message="Cannot find maas-api pod in odh-ai-gateway-infra: error: error executing jsonpath &quot;{.items[0].metadata.name}&quot;: Error executing template: array index out of bounds: index 0, length 0. Printing more information for debugging the template:&#10;&#09;template was:&#10;&#09;&#09;{.items[0].metadata.name}&#10;&#09;object given to jsonpath engine was:&#10;&#09;&#09;map[string]interface {}{&quot;apiVersion&quot;:&quot;v1&quot;, &quot;items&quot;:[]interface {}{}, &quot;kind&quot;:&quot;List&quot;, &quot;metadata&quot;:map[string]interface {}{&quot;resourceVersion&quot;:&quot;&quot;}}">/workspace/source/test/e2e/tests/test_api_keys.py:1429: Cannot find maas-api pod in odh-ai-gateway-infra: error: error executing jsonpath "{.items[0].metadata.name}": Error executing template: array index out of bounds: index 0, length 0. Printing more information for debugging the template:
	template was:
		{.items[0].metadata.name}
	object given to jsonpath engine was:
		map[string]interface {}{"apiVersion":"v1", "items":[]interface {}{}, "kind":"List", "metadata":map[string]interface {}{"resourceVersion":""}}</skipped></testcase><testcase classname="tests.test_api_keys.TestAPIKeySubscriptionPhases" name="test_create_key_for_active_subscription" time="11.932" /><testcase classname="tests.test_api_keys.TestAPIKeySubscriptionPhases" name="test_create_key_for_degraded_subscription" time="22.107" /><testcase classname="tests.test_api_keys.TestAPIKeyAuthorization" name="test_admin_manage_other_users_keys" time="112.087" /><testcase classname="tests.test_api_keys.TestAPIKeyBulkOperations" name="test_bulk_revoke_admin_can_revoke_any_user" time="0.350" /><testcase classname="tests.test_api_keys.TestAPIKeySubscriptionFilter" name="test_search_without_subscription_returns_all" time="0.734" /><testcase classname="tests.test_api_keys.TestAPIKeyLabels" name="test_create_api_key_with_labels" time="0.215" /><testcase classname="tests.test_api_keys.TestAPIKeyLabels" name="test_search_api_keys_by_labels" time="0.529" /><testcase classname="tests.test_api_keys.TestAPIKeyLabels" name="test_labels_validation_errors" time="0.316" /><testcase classname="tests.test_api_keys.TestAPIKeyLabels" name="test_backward_compatibility_no_labels" time="0.544" /><testcase classname="tests.test_api_keys.TestAPIKeyRevocationE2E" name="test_individual_revoke_multiple_keys" time="10.997" /><testcase classname="tests.test_authpolicy_generation_stability.TestAuthPolicyGenerationStability" name="test_generation_does_not_increase_during_quiet_window" time="62.518" /><testcase classname="tests.test_api_keys.TestAPIKeySubscriptionPhases" name="test_create_key_for_failed_subscription" time="12.267" /><testcase classname="tests.test_api_keys.TestAPIKeyBulkOperations" name="test_bulk_revoke_missing_scope_returns_400" time="0.441" /><testcase classname="tests.test_config_tenant.TestConfigTenantOwnership" name="test_default_aitenant_lists_config_owner_reference" time="0.505" /><testcase classname="tests.test_config_tenant.TestConfigTenantOwnership" name="test_tenant_config_lists_config_owner_reference" time="0.141" /><testcase classname="tests.test_config_tenant.TestConfigTenantOwnership" name="test_maas_controller_deployment_does_not_list_config_owner_reference" time="0.148" /><testcase classname="tests.test_config_tenant.TestConfigAnchorPresence" name="test_cluster_config_default_exists" time="0.570" /><testcase classname="tests.test_api_keys.TestAPIKeySubscriptionFilter" name="test_search_filters_by_subscription" time="26.460" /><testcase classname="tests.test_external_model_routing.TestPartialWithdrawal" name="test_requests_survive_provider_b_removal" time="0.289"><skipped type="pytest.skip" message="provider withdrawal E2E for #108 is gated; set TENANT_EXTERNAL_MODEL_PARTIAL_WITHDRAWAL_E2E=true to enable (with it set, the #108 contract is expected to hold and a violation fails red)">/workspace/source/test/e2e/tests/test_external_model_routing.py:481: provider withdrawal E2E for #108 is gated; set TENANT_EXTERNAL_MODEL_PARTIAL_WITHDRAWAL_E2E=true to enable (with it set, the #108 contract is expected to hold and a violation fails red)</skipped></testcase><testcase classname="tests.test_config_tenant.TestConfigAnchorPresence" name="test_cluster_config_not_terminating" time="0.561" /><testcase classname="tests.test_gateway_scoped_authpolicy.TestGatewayAuthPolicyStructure" name="test_gateway_auth_policy_contract" time="0.498" /><testcase classname="tests.test_gateway_scoped_authpolicy.TestGatewayAuthPolicyLifecycle" name="test_gateway_auth_rego_is_fixed_size" time="1.561" /><testcase classname="tests.test_gateway_filter_chain_praxis.TestGatewayFilterChainPraxis" name="test_no_listener_rejected" time="3.296" /><testcase classname="tests.test_gateway_filter_chain_praxis.TestGatewayFilterChainPraxis" name="test_payload_processing_precedes_router" time="0.001" /><testcase classname="tests.test_gateway_scoped_authpolicy.TestGatewayAuthPolicyManagementEndpointAccess" name="test_management_rules_have_model_identity_guards" time="0.167" /><testcase classname="tests.test_gateway_scoped_authpolicy.TestGatewayAuthPolicyManagementEndpointAccess" name="test_gateway_default_auth_scoped_if_present" time="0.001"><skipped type="pytest.skip" message="legacy gateway-default-auth is scoped to the shared default gateway">/workspace/source/test/e2e/tests/test_gateway_scoped_authpolicy.py:212: legacy gateway-default-auth is scoped to the shared default gateway</skipped></testcase><testcase classname="tests.test_model_identity_conflict.TestModelIdentityConflictDetection" name="test_colliding_model_names_flagged_then_resolved" time="45.859" /><testcase classname="tests.test_gateway_scoped_authpolicy.TestGatewayAuthPolicyLifecycle" name="test_only_one_gateway_authpolicy_named_maas_gateway_auth" time="10.384" /><testcase classname="tests.test_external_model_routing.TestProviderSwitching" name="test_switch_a_to_b_to_a_without_extproc_restart" time="63.761" /><testcase classname="tests.test_external_model_routing.TestLastProviderWithdrawal" name="test_no_route_then_restored_after_recreate" time="0.309"><skipped type="pytest.skip" message="provider withdrawal E2E for #106 is gated; set TENANT_EXTERNAL_MODEL_LAST_PROVIDER_WITHDRAWAL_E2E=true to enable (with it set, the #106 contract is expected to hold and a violation fails red)">/workspace/source/test/e2e/tests/test_external_model_routing.py:564: provider withdrawal E2E for #106 is gated; set TENANT_EXTERNAL_MODEL_LAST_PROVIDER_WITHDRAWAL_E2E=true to enable (with it set, the #106 contract is expected to hold and a violation fails red)</skipped></testcase><testcase classname="tests.test_authpolicy_generation_stability.TestAuthPolicyGenerationStability" name="test_no_rapid_resource_version_changes" time="60.498" /><testcase classname="tests.test_external_model_routing.TestEqualProviderSelection" name="test_both_providers_receive_traffic" time="51.263" /><testcase classname="tests.test_models_endpoint.TestModelsEndpoint" name="test_deduplication_same_model_multiple_refs" time="94.649" /><testcase classname="tests.test_models_endpoint.TestModelsEndpoint" name="test_user_token_returns_all_models" time="105.744" /><testcase classname="tests.test_models_endpoint.TestModelsEndpoint" name="test_empty_subscription_header_value" time="51.140" /><testcase classname="tests.test_models_endpoint.TestModelsEndpoint" name="test_response_schema_and_metadata" time="0.746" /><testcase classname="tests.test_models_endpoint.TestModelsEndpoint" name="test_api_key_with_inaccessible_subscription_403" time="34.037" /><testcase classname="tests.test_models_endpoint.TestModelsEndpoint" name="test_multiple_distinct_models_in_subscription" time="12.810" /><testcase classname="tests.test_models_endpoint.TestModelsEndpoint" name="test_api_key_ignores_subscription_header" time="24.365" /><testcase classname="tests.test_models_endpoint.TestModelsEndpoint" name="test_user_token_with_subscription_header_filters" time="22.298" /><testcase classname="tests.test_models_endpoint.TestModelsEndpoint" name="test_invalid_subscription_header_403" time="15.800" /><testcase classname="tests.test_models_endpoint.TestModelsEndpoint" name="test_service_account_token_multiple_subs_no_header" time="36.474" /><testcase classname="tests.test_models_endpoint.TestModelsEndpoint" name="test_api_key_with_deleted_subscription_403" time="104.006" /><testcase classname="tests.test_models_endpoint.TestModelsEndpoint" name="test_unauthenticated_request_401" time="3.015" /><testcase classname="tests.test_models_endpoint.TestModelsEndpoint" name="test_service_account_token_multiple_subs_with_header" time="46.058" /><testcase classname="tests.test_multi_tenant_integration.TestMultiTenantIntegration" name="test_default_tenant_unaffected_by_multitenancy_enablement" time="11.795" /><testcase classname="tests.test_multi_tenant_integration.TestMultiTenantIntegration" name="test_same_named_resources_across_tenants" time="210.092" /><testcase classname="tests.test_models_endpoint.TestModelsEndpoint" name="test_api_key_scoped_to_subscription" time="92.221" /><testcase classname="tests.test_multi_tenant_integration.TestMultiTenantIntegration" name="test_full_tenant_lifecycle_create_to_delete" time="243.898" /><testcase classname="tests.test_multi_tenant_integration.TestMultiTenantIntegration" name="test_tenant_namespace_label_change_triggers_reconciliation" time="123.250" /><testcase classname="tests.test_models_endpoint.TestModelsEndpoint" name="test_multiple_api_keys_different_subscriptions" time="27.270" /><testcase classname="tests.test_models_endpoint.TestModelsEndpoint" name="test_access_denied_to_subscription_403" time="23.264" /><testcase classname="tests.test_multi_tenant_maas_api.TestPerTenantMaaSAPI" name="test_default_and_multiple_tenants_coexist" time="96.558" /><testcase classname="tests.test_multi_tenant_maas_api.TestPerTenantMaaSAPI" name="test_httproute_tenant_attachment" time="95.416" /><testcase classname="tests.test_namespace_scoping.TestMaaSAPIWatchNamespace" name="test_subscription_in_subscription_namespace_visible_to_api" time="0.000"><skipped type="pytest.skip" message="test_namespace_scoping validates single-tenant dormant mode; skipped when ENABLE_TENANT_NAMESPACE_DISCOVERY=true">/workspace/source/test/e2e/tests/test_namespace_scoping.py:214: test_namespace_scoping validates single-tenant dormant mode; skipped when ENABLE_TENANT_NAMESPACE_DISCOVERY=true</skipped></testcase><testcase classname="tests.test_namespace_scoping.TestMaaSControllerWatchNamespace" name="test_authpolicy_and_subscription_in_another_namespace" time="0.000"><skipped type="pytest.skip" message="test_namespace_scoping validates single-tenant dormant mode; skipped when ENABLE_TENANT_NAMESPACE_DISCOVERY=true">/workspace/source/test/e2e/tests/test_namespace_scoping.py:324: test_namespace_scoping validates single-tenant dormant mode; skipped when ENABLE_TENANT_NAMESPACE_DISCOVERY=true</skipped></testcase><testcase classname="tests.test_namespace_scoping.TestModelRef" name="test_auth_policy_model_ref" time="0.000"><skipped type="pytest.skip" message="test_namespace_scoping validates single-tenant dormant mode; skipped when ENABLE_TENANT_NAMESPACE_DISCOVERY=true">/workspace/source/test/e2e/tests/test_namespace_scoping.py:382: test_namespace_scoping validates single-tenant dormant mode; skipped when ENABLE_TENANT_NAMESPACE_DISCOVERY=true</skipped></testcase><testcase classname="tests.test_namespace_scoping.TestModelRef" name="test_subscription_model_ref" time="0.000"><skipped type="pytest.skip" message="test_namespace_scoping validates single-tenant dormant mode; skipped when ENABLE_TENANT_NAMESPACE_DISCOVERY=true">/workspace/source/test/e2e/tests/test_namespace_scoping.py:456: test_namespace_scoping validates single-tenant dormant mode; skipped when ENABLE_TENANT_NAMESPACE_DISCOVERY=true</skipped></testcase><testcase classname="tests.test_negative_security.TestAPIKeyManagementIsolation" name="test_api_key_cannot_mint_another_api_key" time="0.600" /><testcase classname="tests.test_negative_security.TestHeaderSpoofing" name="test_forged_identity_headers_rejected_on_key_mint[username-only]" time="0.797" /><testcase classname="tests.test_negative_security.TestHeaderSpoofing" name="test_forged_identity_headers_rejected_on_key_mint[group-only]" time="0.830" /><testcase classname="tests.test_negative_security.TestHeaderSpoofing" name="test_forged_identity_headers_rejected_on_key_mint[keyname-only]" time="0.774" /><testcase classname="tests.test_negative_security.TestHeaderSpoofing" name="test_forged_identity_headers_rejected_on_key_mint[identity-envelope]" time="0.756" /><testcase classname="tests.test_negative_security.TestHeaderSpoofing" name="test_forged_identity_headers_rejected_on_key_mint[admin-scope]" time="0.752" /><testcase classname="tests.test_negative_security.TestHeaderSpoofing" name="test_injected_identity_headers_rejected_on_inference" time="0.407" /><testcase classname="tests.test_negative_security.TestHeaderSpoofing" name="test_duplicate_subscription_headers_ignored" time="8.659" /><testcase classname="tests.test_namespace_scoping.TestMaaSAPIWatchNamespace" name="test_subscription_in_another_namespace_not_visible_to_api" time="0.001"><skipped type="pytest.skip" message="test_namespace_scoping validates single-tenant dormant mode; skipped when ENABLE_TENANT_NAMESPACE_DISCOVERY=true">/workspace/source/test/e2e/tests/test_namespace_scoping.py:247: test_namespace_scoping validates single-tenant dormant mode; skipped when ENABLE_TENANT_NAMESPACE_DISCOVERY=true</skipped></testcase><testcase classname="tests.test_negative_security.TestCrossModelAccess" name="test_key_cannot_access_model_outside_subscription" time="0.600" /><testcase classname="tests.test_negative_security.TestMissingModelRef" name="test_subscription_with_nonexistent_model_ref" time="11.499" /><testcase classname="tests.test_negative_security.TestExpiredKeyRejection" name="test_expired_key_rejected_at_gateway" time="5.598" /><testcase classname="tests.test_negative_security.TestMissingModelRef" name="test_authpolicy_with_nonexistent_model_ref" time="3.104" /><testcase classname="tests.test_negative_security.TestHeaderAbuse" name="test_special_characters_in_subscription_header" time="0.890" /><testcase classname="tests.test_negative_security.TestInternalEndpointIsolation" name="test_internal_endpoint_not_routable[api-keys-cleanup]" time="0.236" /><testcase classname="tests.test_negative_security.TestInternalEndpointIsolation" name="test_internal_endpoint_not_routable[api-keys-validate]" time="0.249" /><testcase classname="tests.test_negative_security.TestInternalEndpointIsolation" name="test_internal_endpoint_not_routable[subscriptions-select]" time="0.210" /><testcase classname="tests.test_negative_security.TestInternalEndpointIsolation" name="test_health_endpoint_accessible" time="0.070" /><testcase classname="tests.test_networkpolicy.TestPayloadProcessingNetworkPolicyExists" name="test_networkpolicy_exists" time="0.145" /><testcase classname="tests.test_negative_security.TestInternalEndpointIsolation" name="test_v1_models_via_maas_api_prefix" time="0.284" /><testcase classname="tests.test_networkpolicy.TestPayloadProcessingNetworkPolicyExists" name="test_pod_selector_covers_both_processors" time="0.161" /><testcase classname="tests.test_networkpolicy.TestPayloadProcessingNetworkPolicyExists" name="test_egress_allows_otlp_to_monitoring_namespace" time="0.295"><skipped type="pytest.skip" message="AIGC praxis NetworkPolicy does not include OTLP 4317 egress (MaaS Go IPP bundle only)">/workspace/source/test/e2e/tests/test_networkpolicy.py:119: AIGC praxis NetworkPolicy does not include OTLP 4317 egress (MaaS Go IPP bundle only)</skipped></testcase><testcase classname="tests.test_networkpolicy.TestPayloadProcessingNetworkPolicyExists" name="test_ingress_uses_istio_managed_label" time="0.135" /><testcase classname="tests.test_networkpolicy.TestMaaSAuthorinoNetworkPolicy" name="test_rhcl_authorino_namespace_is_allowed" time="0.149" /><testcase classname="tests.test_networkpolicy.TestPayloadProcessingNetworkPolicyExists" name="test_ingress_does_not_hardcode_single_gateway" time="0.148" /><testcase classname="tests.test_networkpolicy.TestPayloadProcessingConnectivity" name="test_maas_gateway_pod_exists" time="0.186" /><testcase classname="tests.test_networkpolicy.TestPayloadProcessingConnectivity" name="test_maas_gateway_has_istio_managed_label" time="0.203" /><testcase classname="tests.test_networkpolicy.TestPayloadProcessingConnectivity" name="test_payload_processing_pods_running" time="0.192" /><testcase classname="tests.test_networkpolicy.TestMaaSGatewayFunctional" name="test_maas_api_health" time="0.066" /><testcase classname="tests.test_networkpolicy.TestMaaSGatewayFunctional" name="test_maas_api_models_reachable" time="0.113" /><testcase classname="tests.test_multi_tenant_maas_api.TestPerTenantMaaSAPI" name="test_service_routing_isolation" time="130.631" /><testcase classname="tests.test_multi_tenant_maas_api.TestPerTenantMaaSAPI" name="test_aitenant_creates_dedicated_maas_api_infrastructure" time="102.444" /><testcase classname="tests.test_namespace_scoping.TestMaaSControllerWatchNamespace" name="test_authpolicy_and_subscription_in_maas_subscription_namespace" time="0.000"><skipped type="pytest.skip" message="test_namespace_scoping validates single-tenant dormant mode; skipped when ENABLE_TENANT_NAMESPACE_DISCOVERY=true">/workspace/source/test/e2e/tests/test_namespace_scoping.py:287: test_namespace_scoping validates single-tenant dormant mode; skipped when ENABLE_TENANT_NAMESPACE_DISCOVERY=true</skipped></testcase><testcase classname="tests.test_per_tenant_ipp_isolation.TestPerTenantIPPInfrastructure" name="test_per_tenant_ipp_deployments_exist" time="124.801" /><testcase classname="tests.test_per_tenant_ipp_isolation.TestPerTenantIPPInfrastructure" name="test_per_tenant_envoyfilter_workload_selector_isolated" time="125.072" /><testcase classname="tests.test_per_tenant_ipp_isolation.TestPerTenantIPPInfrastructure" name="test_per_tenant_ipp_env_vars" time="0.293"><skipped type="pytest.skip" message="praxis-extproc; Go IPP GATEWAY_NAME/TENANT_NAMESPACE env not applicable">/workspace/source/test/e2e/tests/test_per_tenant_ipp_isolation.py:231: praxis-extproc; Go IPP GATEWAY_NAME/TENANT_NAMESPACE env not applicable</skipped></testcase><testcase classname="tests.test_per_tenant_ipp_isolation.TestPerTenantIPPInfrastructure" name="test_per_tenant_envoyfilter_grpc_clusters" time="60.342"><skipped type="pytest.skip" message="praxis-extproc; EnvoyFilter uses payload-*-extproc clusters (see test_per_tenant_praxis_isolation)">/workspace/source/test/e2e/tests/test_per_tenant_ipp_isolation.py:262: praxis-extproc; EnvoyFilter uses payload-*-extproc clusters (see test_per_tenant_praxis_isolation)</skipped></testcase><testcase classname="tests.test_per_tenant_ipp_isolation.TestPerTenantIPPInfrastructure" name="test_default_tenant_keeps_legacy_ipp_names" time="0.311" /><testcase classname="tests.test_multi_tenant_maas_api.TestPerTenantMaaSAPI" name="test_tenant_name_environment_variable_set" time="126.781" /><testcase classname="tests.test_per_tenant_praxis_isolation.TestPerTenantPraxisInfrastructure" name="test_per_tenant_envoyfilter_workload_selector_isolated" time="79.190" /><testcase classname="tests.test_per_tenant_praxis_isolation.TestPerTenantPraxisInfrastructure" name="test_per_tenant_envoyfilter_grpc_clusters" time="0.312" /><testcase classname="tests.test_per_tenant_praxis_isolation.TestPerTenantPraxisInfrastructure" name="test_per_tenant_networkpolicy_when_applied" time="0.289" /><testcase classname="tests.test_per_tenant_praxis_isolation.TestPerTenantPraxisRouting" name="test_default_gateway_hits_default_praxis_only" time="0.883" /><testcase classname="tests.test_per_tenant_ipp_isolation.TestPerTenantIPPRouting" name="test_tenant_gateway_hits_tenant_ipp_only" time="107.114" /><testcase classname="tests.test_per_tenant_ipp_isolation.TestPerTenantIPPCleanup" name="test_ipp_resources_removed_on_aitenant_delete" time="86.009" /><testcase classname="tests.test_per_tenant_ipp_isolation.TestPerTenantIPPInfrastructure" name="test_per_tenant_networkpolicy_when_applied" time="130.084" /><testcase classname="tests.test_per_tenant_ipp_isolation.TestPerTenantIPPRouting" name="test_default_gateway_hits_default_ipp_only" time="46.645" /><testcase classname="tests.test_per_tenant_praxis_isolation.TestPerTenantPraxisInfrastructure" name="test_per_tenant_praxis_deployments_exist" time="84.889" /><testcase classname="tests.test_per_tenant_praxis_isolation.TestPerTenantPraxisInfrastructure" name="test_default_tenant_keeps_unsuffixed_payload_processing_names" time="33.989" /><testcase classname="tests.test_smoke" name="test_tokens_endpoint_replaced_by_api_keys" time="0.100" /><testcase classname="tests.test_smoke" name="test_chat_completions_gateway_alive" time="0.556" /><testcase classname="tests.test_smoke" name="test_chat_completions_streaming_sse" time="0.148" /><testcase classname="tests.test_smoke" name="test_legacy_completions_optionally" time="0.140" /><testcase classname="tests.test_subscription.TestAuthEnforcement" name="test_authorized_user_gets_200" time="4.781" /><testcase classname="tests.test_subscription.TestAuthEnforcement" name="test_no_auth_gets_401" time="0.103" /><testcase classname="tests.test_subscription.TestAuthEnforcement" name="test_invalid_token_gets_403" time="0.114" /><testcase classname="tests.test_subscription.TestAuthEnforcement" name="test_wrong_group_gets_403" time="0.102" /><testcase classname="tests.test_subscription.TestAPIKeySubscriptionBinding" name="test_create_api_key_uses_highest_priority_subscription" time="2.765" /><testcase classname="tests.test_subscription.TestAPIKeySubscriptionBinding" name="test_create_api_key_with_explicit_simulator_subscription" time="0.224" /><testcase classname="tests.test_subscription.TestAPIKeySubscriptionBinding" name="test_create_api_key_nonexistent_subscription_errors" time="10.531" /><testcase classname="tests.test_per_tenant_praxis_isolation.TestPerTenantPraxisRouting" name="test_tenant_gateway_hits_tenant_praxis_only" time="86.471" /><testcase classname="tests.test_per_tenant_praxis_isolation.TestPerTenantPraxisCleanup" name="test_praxis_resources_removed_on_aitenant_delete" time="81.411" /><testcase classname="tests.test_subscription.TestSubscriptionEnforcement" name="test_subscribed_user_gets_200" time="0.314" /><testcase classname="tests.test_subscription.TestE2ESubscriptionFlow" name="test_e2e_with_both_access_and_subscription_gets_200" time="22.852" /><testcase classname="tests.test_smoke" name="test_models_catalog" time="0.307" /><testcase classname="tests.test_subscription.TestE2ESubscriptionFlow" name="test_e2e_multiple_subscriptions_separate_keys_gets_200" time="28.673" /><testcase classname="tests.test_smoke" name="test_healthz_or_404" time="0.077" /><testcase classname="tests.test_per_tenant_ipp_isolation.TestPerTenantIPPInfrastructure" name="test_multiple_tenant_ipp_stacks_coexist" time="154.929" /><testcase classname="tests.test_subscription.TestE2ESubscriptionFlow" name="test_e2e_group_based_access_gets_200" time="26.876" /><testcase classname="tests.test_subscription.TestE2ESubscriptionFlow" name="test_e2e_with_subscription_but_no_access_gets_403" time="22.626" /><testcase classname="tests.test_subscription.TestE2ESubscriptionFlow" name="test_e2e_mint_api_key_denied_for_inaccessible_subscription" time="23.352" /><testcase classname="tests.test_subscription.TestE2ESubscriptionFlow" name="test_e2e_group_based_subscription_but_no_auth_gets_403" time="25.847" /><testcase classname="tests.test_subscription.TestStatusReporting" name="test_subscription_active_status_with_valid_model" time="25.988" /><testcase classname="tests.test_subscription.TestStatusReporting" name="test_subscription_failed_status_with_missing_model" time="25.279" /><testcase classname="tests.test_subscription.TestStatusReporting" name="test_authpolicy_failed_status_with_missing_model" time="3.365" /><testcase classname="tests.test_subscription.TestDegradedSubscriptionFiltering" name="test_degraded_healthy_model_allows_inference" time="14.059" /><testcase classname="tests.test_subscription.TestStatusReporting" name="test_authpolicy_active_status_with_valid_model" time="11.088" /><testcase classname="tests.test_subscription.TestStatusReporting" name="test_subscription_degraded_status_with_partial_models" time="11.627" /><testcase classname="tests.test_subscription.TestStatusReporting" name="test_subscription_status_transitions_on_model_deletion" time="41.620" /><testcase classname="tests.test_subscription.TestOrderingEdgeCases" name="test_subscription_before_auth_policy" time="17.169" /><testcase classname="tests.test_subscription.TestDegradedSubscriptionFiltering" name="test_models_endpoint_with_degraded_subscription_api_key" time="11.744" /><testcase classname="tests.test_subscription.TestDegradedSubscriptionFiltering" name="test_models_endpoint_with_degraded_subscription_kube_token" time="32.245" /><testcase classname="tests.test_subscription_list_endpoints.TestListSubscriptions" name="test_returns_accessible_subscriptions" time="4.730" /><testcase classname="tests.test_subscription_list_endpoints.TestListSubscriptions" name="test_subscription_includes_model_refs" time="11.929" /><testcase classname="tests.test_subscription_list_endpoints.TestListSubscriptions" name="test_unauthenticated_returns_401[subscriptions-for-model]" time="4.374" /><testcase classname="tests.test_subscription_list_endpoints.TestListSubscriptionsForModel" name="test_unknown_model_returns_empty" time="9.275" /><testcase classname="tests.test_subscription_list_endpoints.TestListSubscriptionsForModel" name="test_returns_subscriptions_for_model" time="25.508" /><testcase classname="tests.test_subscription_list_endpoints.TestSubscriptionModelAccessFiltering" name="test_filters_unauthorized_models" time="12.673" /><testcase classname="tests.test_per_tenant_praxis_isolation.TestPerTenantPraxisInfrastructure" name="test_multiple_tenant_praxis_stacks_coexist" time="107.506" /><testcase classname="tests.test_subscription_list_endpoints.TestListSubscriptions" name="test_unauthenticated_returns_401[all-subscriptions]" time="11.718" /><testcase classname="tests.test_tenant.TestTenantLifecycle" name="test_tenant_ready_and_phase_healthy" time="0.455" /><testcase classname="tests.test_tenant.TestTenantContract" name="test_conditions_use_kubernetes_metav1_shape" time="0.152" /><testcase classname="tests.test_tenant.TestTenantNoFalseOwnership" name="test_maas_user_crs_not_owned_by_tenant" time="0.501" /><testcase classname="tests.test_tenant.TestTenantContract" name="test_status_has_phase_and_conditions" time="0.467" /><testcase classname="tests.test_subscription_list_endpoints.TestSubscriptionModelAccessFiltering" name="test_omits_subscription_with_no_authorized_models" time="14.655" /><testcase classname="tests.test_subscription_list_endpoints.TestListSubscriptions" name="test_model_ref_display_name_and_description_enriched" time="23.253" /><testcase classname="tests.test_tenant.TestTenantContract" name="test_spec_is_well_formed" time="0.461" /><testcase classname="tests.test_subscription.TestStatusReporting" name="test_authpolicy_degraded_status_with_partial_models" time="12.041" /><testcase classname="tests.test_tenant_auto_resolve.TestTenantAutoResolve" name="test_explicit_tenant_ref_preserved" time="124.479" /><testcase classname="tests.test_tenant_auth_isolation.TestTenantAuthIsolation" name="test_oidc_token_validation_per_tenant" time="136.812"><skipped type="pytest.skip" message="Per-tenant OIDC tokens unavailable — set OIDC_TOKEN_URL (tenant-a) and OIDC_TOKEN_URL_TENANT_B (tenant-b), or OIDC_TOKEN_TENANT_A / OIDC_TOKEN_TENANT_B">/workspace/source/test/e2e/tests/test_tenant_auth_isolation.py:223: Per-tenant OIDC tokens unavailable — set OIDC_TOKEN_URL (tenant-a) and OIDC_TOKEN_URL_TENANT_B (tenant-b), or OIDC_TOKEN_TENANT_A / OIDC_TOKEN_TENANT_B</skipped></testcase><testcase classname="tests.test_tenant_auto_resolve.TestTenantAutoResolve" name="test_no_matching_tenant_enters_failed" time="58.912" /><testcase classname="tests.test_tenant_discovery" name="test_tenant_discovery_with_invalid_token" time="3.308" /><testcase classname="tests.test_tenant_discovery" name="test_tenant_discovery_authenticated" time="0.001"><skipped type="pytest.skip" message="Skipping when Gateway uses ClusterIP + OpenShift Route (unsupported configuration). This mixes incompatible routing paradigms. Gateway has no external hostname in spec.listeners, so /v1/tenants returns an error. Supported configuration: LoadBalancer service with hostname in spec.listeners.">/workspace/source/test/e2e/tests/test_tenant_discovery.py:79: Skipping when Gateway uses ClusterIP + OpenShift Route (unsupported configuration). This mixes incompatible routing paradigms. Gateway has no external hostname in spec.listeners, so /v1/tenants returns an error. Supported configuration: LoadBalancer service with hostname in spec.listeners.</skipped></testcase><testcase classname="tests.test_tenant_discovery" name="test_tenant_discovery_gateway_matches_deployment" time="0.000"><skipped type="pytest.skip" message="Skipping when Gateway uses ClusterIP + OpenShift Route (unsupported configuration). This mixes incompatible routing paradigms. Gateway has no external hostname in spec.listeners, so /v1/tenants returns an error. Supported configuration: LoadBalancer service with hostname in spec.listeners.">/workspace/source/test/e2e/tests/test_tenant_discovery.py:155: Skipping when Gateway uses ClusterIP + OpenShift Route (unsupported configuration). This mixes incompatible routing paradigms. Gateway has no external hostname in spec.listeners, so /v1/tenants returns an error. Supported configuration: LoadBalancer service with hostname in spec.listeners.</skipped></testcase><testcase classname="tests.test_tenant_discovery" name="test_tenant_discovery_not_exposed_through_gateway" time="0.092" /><testcase classname="tests.test_tenant_discovery_isolation" name="test_tenant_discovery_same_tenant_access" time="65.370"><skipped type="pytest.skip" message="Skipping when Gateway uses ClusterIP + OpenShift Route (unsupported configuration). This mixes incompatible routing paradigms. Gateway has no external hostname in spec.listeners, so /v1/tenants returns an error. Supported configuration: LoadBalancer service with hostname in spec.listeners.">/workspace/source/test/e2e/tests/test_tenant_discovery_isolation.py:93: Skipping when Gateway uses ClusterIP + OpenShift Route (unsupported configuration). This mixes incompatible routing paradigms. Gateway has no external hostname in spec.listeners, so /v1/tenants returns an error. Supported configuration: LoadBalancer service with hostname in spec.listeners.</skipped></testcase><testcase classname="tests.test_tenant_discovery_isolation" name="test_tenant_discovery_cross_tenant_isolation" time="0.001"><skipped type="pytest.skip" message="Skipping when Gateway uses ClusterIP + OpenShift Route (unsupported configuration). This mixes incompatible routing paradigms. Gateway has no external hostname in spec.listeners, so /v1/tenants returns an error. Supported configuration: LoadBalancer service with hostname in spec.listeners.">/workspace/source/test/e2e/tests/test_tenant_discovery_isolation.py:141: Skipping when Gateway uses ClusterIP + OpenShift Route (unsupported configuration). This mixes incompatible routing paradigms. Gateway has no external hostname in spec.listeners, so /v1/tenants returns an error. Supported configuration: LoadBalancer service with hostname in spec.listeners.</skipped></testcase><testcase classname="tests.test_tenant_discovery_isolation" name="test_tenant_discovery_unauthorized_access" time="8.236" /><testcase classname="tests.test_tenant_discovery_isolation" name="test_tenant_discovery_each_tenant_returns_own_gateway" time="0.001"><skipped type="pytest.skip" message="Skipping when Gateway uses ClusterIP + OpenShift Route (unsupported configuration). This mixes incompatible routing paradigms. Gateway has no external hostname in spec.listeners, so /v1/tenants returns an error. Supported configuration: LoadBalancer service with hostname in spec.listeners.">/workspace/source/test/e2e/tests/test_tenant_discovery_isolation.py:228: Skipping when Gateway uses ClusterIP + OpenShift Route (unsupported configuration). This mixes incompatible routing paradigms. Gateway has no external hostname in spec.listeners, so /v1/tenants returns an error. Supported configuration: LoadBalancer service with hostname in spec.listeners.</skipped></testcase><testcase classname="tests.test_tenant_auth_isolation.TestTenantAuthIsolation" name="test_api_key_rejected_cross_tenant" time="309.353" /><testcase classname="tests.test_tenant_auth_isolation.TestTenantAuthIsolation" name="test_api_key_metadata_not_leaked_cross_tenant" time="196.320" /><testcase classname="tests.test_tenant_auth_isolation.TestTenantAuthIsolation" name="test_api_key_list_scoped_to_tenant" time="23.968" /><testcase classname="tests.test_tenant_auth_isolation.TestTenantAuthIsolation" name="test_api_key_subscription_selection_uses_tenant_namespace" time="359.110" /><testcase classname="tests.test_tenant_auth_isolation.TestTenantAuthIsolation" name="test_api_key_creation_scoped_to_tenant" time="345.490" /><testcase classname="tests.test_tenant_auth_isolation.TestTenantAuthIsolation" name="test_api_key_validates_against_correct_tenant" time="33.849" /><testcase classname="tests.test_tenant_discovery" name="test_tenant_discovery_requires_auth" time="2.309" /><testcase classname="tests.test_tenant_auto_resolve.TestTenantAutoResolve" name="test_auto_resolve_populates_resolved_tenant_ref" time="138.807" /><testcase classname="tests.test_tenant_external_model_attachment.TestUserNamespaceAttachmentServing" name="test_attachment_status_ready" time="200.311" /><testcase classname="tests.test_tenant_external_model_attachment.TestUserNamespaceAttachmentServing" name="test_one_httproute_in_model_namespace" time="0.150" /><testcase classname="tests.test_tenant_external_model_attachment.TestListenerNotAllowed" name="test_route_not_admitted_and_not_served" time="1.084" /><testcase classname="tests.test_tenant_external_model_attachment.TestUserNamespaceAttachmentServing" name="test_credential_copy_delivered_to_tenant" time="195.827" /><testcase classname="tests.test_tenant_external_model_attachment.TestUserNamespaceAttachmentServing" name="test_unselected_gateway_not_serving" time="0.518" /><testcase classname="tests.test_tenant_external_model_attachment.TestListenerAdmissionRecovery" name="test_refused_model_does_not_break_tenant_models" time="54.497" /><testcase classname="tests.test_tenant_external_model_attachment.TestCredentialRotationFollowsSource" name="test_rotation_updates_copy_and_serving" time="146.771" /><testcase classname="tests.test_tenant_external_model_attachment.TestListenerAdmissionRecovery" name="test_readmission_recovers_attachment_without_model_edit" time="111.615" /><testcase classname="tests.test_tenant_external_model_attachment.TestAttachmentLifecycleCleanup" name="test_detach_removes_only_that_attachment" time="277.416" /><testcase classname="tests.test_tenant_external_model_attachment.TestUserNamespaceAttachmentServing" name="test_inference_serves_with_user_namespace_credential" time="210.421" /><testcase classname="tests.test_tenant_external_model_attachment.TestListenerNotAllowed" name="test_attachment_reports_not_allowed_by_listeners" time="27.793" /><testcase classname="tests.test_tenant_external_model_conflicts.TestModelNameConflict" name="test_tenant_own_model_wins_over_older_user_namespace_model" time="107.570" /><testcase classname="tests.test_tenant_external_model_attachment.TestListenerNotAllowed" name="test_nothing_published_into_tenant" time="108.261" /><testcase classname="tests.test_tenant_external_model_attachment.TestAttachmentLifecycleCleanup" name="test_model_delete_removes_serving_config" time="42.282" /><testcase classname="tests.test_tenant_external_model_attachment.TestListenerAdmissionRecovery" name="test_narrowing_admission_stops_serving" time="203.084" /><testcase classname="tests.test_tenant_external_model_conflicts.TestModelNameConflict" name="test_oldest_wins_when_no_tenant_own_model" time="86.240" /><testcase classname="tests.test_tenant_external_model_compat.TestOmittedGatewayRefsUnchanged" name="test_omitted_gateway_refs_serve_via_tenant_local_resolution" time="91.678" /><testcase classname="tests.test_tenant_external_model_compat.TestOmittedGatewayRefsUnchanged" name="test_adding_own_tenant_gateway_refs_recreates_nothing" time="102.376" /><testcase classname="tests.test_tenant_external_model_crossns.TestCrossNsProviderGrant" name="test_grant_permits_cross_namespace_provider" time="0.000"><skipped type="pytest.skip" message="cross-namespace provider E2E is gated until AGC ships cross-namespace provider support; set TENANT_EXTERNAL_MODEL_CROSSNS_E2E=true to enable">/workspace/source/test/e2e/tests/test_tenant_external_model_crossns.py:199: cross-namespace provider E2E is gated until AGC ships cross-namespace provider support; set TENANT_EXTERNAL_MODEL_CROSSNS_E2E=true to enable</skipped></testcase><testcase classname="tests.test_tenant_external_model_crossns.TestMissingGrant" name="test_non_matching_grant_rejects" time="0.000"><skipped type="pytest.skip" message="cross-namespace provider E2E is gated until AGC ships cross-namespace provider support; set TENANT_EXTERNAL_MODEL_CROSSNS_E2E=true to enable">/workspace/source/test/e2e/tests/test_tenant_external_model_crossns.py:251: cross-namespace provider E2E is gated until AGC ships cross-namespace provider support; set TENANT_EXTERNAL_MODEL_CROSSNS_E2E=true to enable</skipped></testcase><testcase classname="tests.test_tenant_external_model_crossns.TestGrantRevocation" name="test_revoke_stops_access" time="0.000"><skipped type="pytest.skip" message="cross-namespace provider E2E is gated until AGC ships cross-namespace provider support; set TENANT_EXTERNAL_MODEL_CROSSNS_E2E=true to enable">/workspace/source/test/e2e/tests/test_tenant_external_model_crossns.py:268: cross-namespace provider E2E is gated until AGC ships cross-namespace provider support; set TENANT_EXTERNAL_MODEL_CROSSNS_E2E=true to enable</skipped></testcase><testcase classname="tests.test_tenant_external_model_crossns.TestGrantRevocation" name="test_narrowed_grant_stops_access" time="0.000"><skipped type="pytest.skip" message="cross-namespace provider E2E is gated until AGC ships cross-namespace provider support; set TENANT_EXTERNAL_MODEL_CROSSNS_E2E=true to enable">/workspace/source/test/e2e/tests/test_tenant_external_model_crossns.py:307: cross-namespace provider E2E is gated until AGC ships cross-namespace provider support; set TENANT_EXTERNAL_MODEL_CROSSNS_E2E=true to enable</skipped></testcase><testcase classname="tests.test_tenant_external_model_crossns.TestCredentialSourceSelection" name="test_provider_local_credential_used_by_default" time="0.000"><skipped type="pytest.skip" message="cross-namespace provider E2E is gated until AGC ships cross-namespace provider support; set TENANT_EXTERNAL_MODEL_CROSSNS_E2E=true to enable">/workspace/source/test/e2e/tests/test_tenant_external_model_crossns.py:341: cross-namespace provider E2E is gated until AGC ships cross-namespace provider support; set TENANT_EXTERNAL_MODEL_CROSSNS_E2E=true to enable</skipped></testcase><testcase classname="tests.test_tenant_external_model_crossns.TestCredentialSourceSelection" name="test_missing_model_local_override_fails_without_fallback" time="0.000"><skipped type="pytest.skip" message="cross-namespace provider E2E is gated until AGC ships cross-namespace provider support; set TENANT_EXTERNAL_MODEL_CROSSNS_E2E=true to enable">/workspace/source/test/e2e/tests/test_tenant_external_model_crossns.py:396: cross-namespace provider E2E is gated until AGC ships cross-namespace provider support; set TENANT_EXTERNAL_MODEL_CROSSNS_E2E=true to enable</skipped></testcase><testcase classname="tests.test_tenant_external_model_crossns.TestSameNamedProvidersTwoNamespaces" name="test_same_named_providers_both_serve" time="0.000"><skipped type="pytest.skip" message="cross-namespace provider E2E is gated until AGC ships cross-namespace provider support; set TENANT_EXTERNAL_MODEL_CROSSNS_E2E=true to enable">/workspace/source/test/e2e/tests/test_tenant_external_model_crossns.py:434: cross-namespace provider E2E is gated until AGC ships cross-namespace provider support; set TENANT_EXTERNAL_MODEL_CROSSNS_E2E=true to enable</skipped></testcase><testcase classname="tests.test_tenant_external_model_conflicts.TestSameNamedObjectsTwoNamespaces" name="test_same_named_objects_both_serve" time="107.568" /><testcase classname="tests.test_tenant_external_model_conflicts.TestForeignBrokenModelIsolation" name="test_broken_foreign_model_does_not_break_tenant_models" time="86.682" /><testcase classname="tests.test_tenant_external_model_crossns.TestMissingGrant" name="test_missing_grant_rejects_then_restores" time="0.000"><skipped type="pytest.skip" message="cross-namespace provider E2E is gated until AGC ships cross-namespace provider support; set TENANT_EXTERNAL_MODEL_CROSSNS_E2E=true to enable">/workspace/source/test/e2e/tests/test_tenant_external_model_crossns.py:227: cross-namespace provider E2E is gated until AGC ships cross-namespace provider support; set TENANT_EXTERNAL_MODEL_CROSSNS_E2E=true to enable</skipped></testcase><testcase classname="tests.test_tenant_external_model_default_tenant.TestDefaultTenantServesModelWithoutGatewayRefs" name="test_attached_to_default_gateway" time="41.624" /><testcase classname="tests.test_tenant_external_model_default_tenant.TestDefaultTenantServesModelWithoutGatewayRefs" name="test_provider_reports_ready" time="12.774" /><testcase classname="tests.test_tenant_external_model_default_tenant.TestImplicitAttachmentLifecycle" name="test_model_delete_removes_implicit_attachment" time="4.576" /><testcase classname="tests.test_tenant_external_model_conflicts.TestForeignBrokenModelIsolation" name="test_tenant_models_serve_after_broken_model_deleted" time="133.384" /><testcase classname="tests.test_tenant_external_model_default_tenant.TestDefaultTenantServesModelWithoutGatewayRefs" name="test_subscription_header_reaches_provider_and_replaces_client_value" time="160.910" /><testcase classname="tests.test_tenant_external_model_default_tenant.TestImplicitAttachmentLifecycle" name="test_gateway_refs_replace_implicit_attachment" time="5.277" /><testcase classname="tests.test_tenant_external_model_conflicts.TestSameNamedObjectsTwoNamespaces" name="test_same_named_objects_both_attach" time="223.902" /><testcase classname="tests.test_tenant_external_model_failure.TestTenantProviderFailureIsolation" name="test_upstream_failure_in_one_tenant_does_not_degrade_the_other" time="249.408" /><testcase classname="tests.test_tenant_external_model_shared.TestSharedModelTwoGateways" name="test_one_httproute_per_attachment" time="2.386" /><testcase classname="tests.test_tenant_external_model_shared.TestSharedModelAmbiguousModelRef" name="test_pinned_model_refs_stay_ready" time="7.322" /><testcase classname="tests.test_tenant_external_model_default_tenant.TestDefaultTenantServesModelWithoutGatewayRefs" name="test_served_through_default_gateway" time="182.142" /><testcase classname="tests.test_tenant_external_model_shared.TestSharedModelTwoGateways" name="test_per_gateway_status" time="10.978" /><testcase classname="tests.test_tenant_external_model_shared.TestTenantAuthIsolation" name="test_unknown_key_rejected_on_both_gateways" time="205.268" /><testcase classname="tests.test_tenant_external_model_shared.TestSharedModelAmbiguousModelRef" name="test_tenantless_model_ref_reports_ambiguity" time="43.221" /><testcase classname="tests.test_tenant_external_model_default_tenant.TestDefaultTenantServesModelWithoutGatewayRefs" name="test_unknown_key_rejected" time="332.787" /><testcase classname="tests.test_tenant_external_model_shared.TestTenantQuotaIsolation" name="test_quota_exhaustion_isolated_per_tenant" time="284.057" /><testcase classname="tests.test_tenant_external_model_shared.TestTenantAuthIsolation" name="test_tenant_keys_authorized_only_on_their_own_gateway" time="249.865" /><testcase classname="tests.test_tenant_model_inference.TestTenantModelInference" name="test_model_routes_through_tenant_gateway" time="133.541"><error message="failed on setup with &quot;AssertionError: route/e2e-inf-a-759b04-route in openshift-ingress did not satisfy condition. Last object: {'apiVersion': 'route.openshift.io/v1', 'kind': 'Route', 'metadata': {'annotations': {'kubectl.kubernetes.io/last-applied-configuration': '{&quot;apiVersion&quot;:&quot;route.openshift.io/v1&quot;,&quot;kind&quot;:&quot;Route&quot;,&quot;metadata&quot;:{&quot;annotations&quot;:{},&quot;labels&quot;:{&quot;app.kubernetes.io/component&quot;:&quot;gateway&quot;,&quot;app.kubernetes.io/instance&quot;:&quot;e2e-inf-a-759b04&quot;,&quot;app.kubernetes.io/name&quot;:&quot;maas&quot;,&quot;e2e.maas.opendatahub...&#10;[truncated; full report in element text]">@pytest.fixture(scope="module")
    def tenant_inference_cases():
        """Set up two tenants with models for inference testing."""
        require_aitenant_crd()
        case_a = new_named_tenant_case("e2e-inf-a")
        case_b = new_named_tenant_case("e2e-inf-b")
    
        try:
            # Bootstrap tenants
            for case in (case_a, case_b):
&gt;               bootstrap_aitenant_tenant(case)

test/e2e/tests/test_tenant_model_inference.py:153: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
test/e2e/tests/multitenancy_helpers.py:1130: in bootstrap_aitenant_tenant
    apply_gateway_route_fixture(case["gateway_name"], fixture_label=case["tenant_label_name"])
test/e2e/tests/multitenancy_helpers.py:1013: in apply_gateway_route_fixture
    wait_for_route_admitted(route_name)
test/e2e/tests/multitenancy_helpers.py:812: in wait_for_route_admitted
    return wait_for_json("route", route_name, GATEWAY_NAMESPACE, predicate=_predicate, timeout=timeout, interval=interval)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

kind = 'route', name = 'e2e-inf-a-759b04-route', namespace = 'openshift-ingress'
predicate = &lt;function wait_for_route_admitted.&lt;locals&gt;._predicate at 0x7fd0b24d8f40&gt;
timeout = 60, interval = 3

    def wait_for_json(
        kind: str,
        name: str,
        namespace: Optional[str] = None,
        *,
        predicate=None,
        timeout: int = 180,
        interval: int = 5,
    ) -&gt; dict:
        deadline = time.time() + timeout
        last_obj = None
        while time.time() &lt; deadline:
            obj = get_json_or_none(kind, name, namespace)
            if obj is not None:
                last_obj = obj
                if predicate is None or predicate(obj):
                    return obj
            time.sleep(interval)
&gt;       raise AssertionError(
            f"{kind}/{name} in {namespace or '&lt;cluster&gt;'} did not satisfy condition. Last object: {last_obj}"
        )
E       AssertionError: route/e2e-inf-a-759b04-route in openshift-ingress did not satisfy condition. Last object: {'apiVersion': 'route.openshift.io/v1', 'kind': 'Route', 'metadata': {'annotations': {'kubectl.kubernetes.io/last-applied-configuration': '{"apiVersion":"route.openshift.io/v1","kind":"Route","metadata":{"annotations":{},"labels":{"app.kubernetes.io/component":"gateway","app.kubernetes.io/instance":"e2e-inf-a-759b04","app.kubernetes.io/name":"maas","e2e.maas.opendatahub.io/fixture":"e2e-inf-a-759b04","gateway.networking.k8s.io/gateway-name":"e2e-inf-a-759b04"},"name":"e2e-inf-a-759b04-route","namespace":"openshift-ingress"},"spec":{"host":"e2e-inf-a-759b04.apps.00125a180bb08b60980b.prod.konflux-ocp-ci.dev","port":{"targetPort":443},"tls":{"destinationCACertificate":"-----BEGIN CERTIFICATE-----\\nMIIDUTCCAjmgAwIBAgIIPa8XXlMYkUowDQYJKoZIhvcNAQELBQAwNjE0MDIGA1UE\\nAwwrb3BlbnNoaWZ0LXNlcnZpY2Utc2VydmluZy1zaWduZXJAMTc5MzczNDYwMDAe\\nFw0yNjExMDMxOTM2MzlaFw0yOTAxMDExOTM2NDBaMDYxNDAyBgNVBAMMK29wZW5z\\naGlmdC1zZXJ2aWNlLXNlcnZpbmctc2lnbmVyQDE3OTM3MzQ2MDAwggEiMA0GCSqG\\nSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCuESLdcYS88PpkvZOaIx34dTGVFzqUE6ne\\nJDyMeQn+qRdX3Qe7t4Wosr12WRyZifg1/TYGPYg5TUef8uzKb4HfhJ/3oGaBsgMx\\nwtFaFZvvGc0aiyH1UcGZQ9/PlRK4F/UnibUAPmTuxD7HQtno7BLsRry8QxxI5C29\\nb2niiS5EdFGQub5dA8ioxd3grvg+/rKX79i+kUntjVKFoPkCKDkkFwsK7C09Po/y\\nhApRNRXMz8ObwuTyokSMSGNociAEz8XcBK3+7GjGUVarnxrAohxwoNlHS88cSuSb\\nBNB/9M98a8qyH+193vFZEhy15A+/m5Saj+Ph4V2qmv0ygzFWnCzPAgMBAAGjYzBh\\nMA4GA1UdDwEB/wQEAwICpDAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRUqiJT\\ndLJVySmvrXK8RsmJGMCShTAfBgNVHSMEGDAWgBRUqiJTdLJVySmvrXK8RsmJGMCS\\nhTANBgkqhkiG9w0BAQsFAAOCAQEAIcXcWwCWRnvyYnVfUiIvOiWBIZISzXdVEwUX\\nTTte8+QqM3Ur9WfmHCU3YV1q/t041E1tHFR8QdkYUU9vy7CfKH9HHAZJdJZEl9bv\\nizMqeIYagfDbiKkOpD71cjo5ZtzC42xhrHSrH3otFEZochms6xAUP+MB98stNWVm\\n62GCZfYyKCvPLUh1wJNRcHRoyYan6+IDjT2rhoWTeOUO6vElJ0lrMOf+MV4WK6UE\\n79AN1Bt/Rc1NiKZUAy1gjwmAsLrtJbyxgeh/lnpCVjz1XDL/gGyMODKvN5NGGWTw\\n8PsEqdZWGQoK6sm4ewR6MyE9/Jv8FYtBd9r+R6w+yMEpY5O+Pw==\\n-----END CERTIFICATE-----\\n","insecureEdgeTerminationPolicy":"Redirect","termination":"reencrypt"},"to":{"kind":"Service","name":"e2e-inf-a-759b04-openshift-default","weight":100}}}\n'}, 'creationTimestamp': '2026-11-03T20:26:27Z', 'generation': 1, 'labels': {'app.kubernetes.io/component': 'gateway', 'app.kubernetes.io/instance': 'e2e-inf-a-759b04', 'app.kubernetes.io/name': 'maas', 'e2e.maas.opendatahub.io/fixture': 'e2e-inf-a-759b04', 'gateway.networking.k8s.io/gateway-name': 'e2e-inf-a-759b04'}, 'name': 'e2e-inf-a-759b04-route', 'namespace': 'openshift-ingress', 'resourceVersion': '157101', 'uid': '9b60ffb8-33dc-44d8-95d2-f167cad41f26'}, 'spec': {'host': 'e2e-inf-a-759b04.apps.00125a180bb08b60980b.prod.konflux-ocp-ci.dev', 'port': {'targetPort': 443}, 'tls': {'destinationCACertificate': '-----BEGIN CERTIFICATE-----\nMIIDUTCCAjmgAwIBAgIIPa8XXlMYkUowDQYJKoZIhvcNAQELBQAwNjE0MDIGA1UE\nAwwrb3BlbnNoaWZ0LXNlcnZpY2Utc2VydmluZy1zaWduZXJAMTc5MzczNDYwMDAe\nFw0yNjExMDMxOTM2MzlaFw0yOTAxMDExOTM2NDBaMDYxNDAyBgNVBAMMK29wZW5z\naGlmdC1zZXJ2aWNlLXNlcnZpbmctc2lnbmVyQDE3OTM3MzQ2MDAwggEiMA0GCSqG\nSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCuESLdcYS88PpkvZOaIx34dTGVFzqUE6ne\nJDyMeQn+qRdX3Qe7t4Wosr12WRyZifg1/TYGPYg5TUef8uzKb4HfhJ/3oGaBsgMx\nwtFaFZvvGc0aiyH1UcGZQ9/PlRK4F/UnibUAPmTuxD7HQtno7BLsRry8QxxI5C29\nb2niiS5EdFGQub5dA8ioxd3grvg+/rKX79i+kUntjVKFoPkCKDkkFwsK7C09Po/y\nhApRNRXMz8ObwuTyokSMSGNociAEz8XcBK3+7GjGUVarnxrAohxwoNlHS88cSuSb\nBNB/9M98a8qyH+193vFZEhy15A+/m5Saj+Ph4V2qmv0ygzFWnCzPAgMBAAGjYzBh\nMA4GA1UdDwEB/wQEAwICpDAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRUqiJT\ndLJVySmvrXK8RsmJGMCShTAfBgNVHSMEGDAWgBRUqiJTdLJVySmvrXK8RsmJGMCS\nhTANBgkqhkiG9w0BAQsFAAOCAQEAIcXcWwCWRnvyYnVfUiIvOiWBIZISzXdVEwUX\nTTte8+QqM3Ur9WfmHCU3YV1q/t041E1tHFR8QdkYUU9vy7CfKH9HHAZJdJZEl9bv\nizMqeIYagfDbiKkOpD71cjo5ZtzC42xhrHSrH3otFEZochms6xAUP+MB98stNWVm\n62GCZfYyKCvPLUh1wJNRcHRoyYan6+IDjT2rhoWTeOUO6vElJ0lrMOf+MV4WK6UE\n79AN1Bt/Rc1NiKZUAy1gjwmAsLrtJbyxgeh/lnpCVjz1XDL/gGyMODKvN5NGGWTw\n8PsEqdZWGQoK6sm4ewR6MyE9/Jv8FYtBd9r+R6w+yMEpY5O+Pw==\n-----END CERTIFICATE-----\n', 'insecureEdgeTerminationPolicy': 'Redirect', 'termination': 'reencrypt'}, 'to': {'kind': 'Service', 'name': 'e2e-inf-a-759b04-openshift-default', 'weight': 100}, 'wildcardPolicy': 'None'}, 'status': {}}

test/e2e/tests/multitenancy_helpers.py:301: AssertionError</error></testcase><testcase classname="tests.test_tenant_model_inference.TestTenantGatewayNegativeSecurity" name="test_invalid_api_key_denied_on_tenant_gateway[tenant_b]" time="0.001"><error message="failed on setup with &quot;AssertionError: route/e2e-inf-a-759b04-route in openshift-ingress did not satisfy condition. Last object: {'apiVersion': 'route.openshift.io/v1', 'kind': 'Route', 'metadata': {'annotations': {'kubectl.kubernetes.io/last-applied-configuration': '{&quot;apiVersion&quot;:&quot;route.openshift.io/v1&quot;,&quot;kind&quot;:&quot;Route&quot;,&quot;metadata&quot;:{&quot;annotations&quot;:{},&quot;labels&quot;:{&quot;app.kubernetes.io/component&quot;:&quot;gateway&quot;,&quot;app.kubernetes.io/instance&quot;:&quot;e2e-inf-a-759b04&quot;,&quot;app.kubernetes.io/name&quot;:&quot;maas&quot;,&quot;e2e.maas.opendatahub...&#10;[truncated; full report in element text]">@pytest.fixture(scope="module")
    def tenant_inference_cases():
        """Set up two tenants with models for inference testing."""
        require_aitenant_crd()
        case_a = new_named_tenant_case("e2e-inf-a")
        case_b = new_named_tenant_case("e2e-inf-b")
    
        try:
            # Bootstrap tenants
            for case in (case_a, case_b):
&gt;               bootstrap_aitenant_tenant(case)

test/e2e/tests/test_tenant_model_inference.py:153: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
test/e2e/tests/multitenancy_helpers.py:1130: in bootstrap_aitenant_tenant
    apply_gateway_route_fixture(case["gateway_name"], fixture_label=case["tenant_label_name"])
test/e2e/tests/multitenancy_helpers.py:1013: in apply_gateway_route_fixture
    wait_for_route_admitted(route_name)
test/e2e/tests/multitenancy_helpers.py:812: in wait_for_route_admitted
    return wait_for_json("route", route_name, GATEWAY_NAMESPACE, predicate=_predicate, timeout=timeout, interval=interval)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

kind = 'route', name = 'e2e-inf-a-759b04-route', namespace = 'openshift-ingress'
predicate = &lt;function wait_for_route_admitted.&lt;locals&gt;._predicate at 0x7fd0b24d8f40&gt;
timeout = 60, interval = 3

    def wait_for_json(
        kind: str,
        name: str,
        namespace: Optional[str] = None,
        *,
        predicate=None,
        timeout: int = 180,
        interval: int = 5,
    ) -&gt; dict:
        deadline = time.time() + timeout
        last_obj = None
        while time.time() &lt; deadline:
            obj = get_json_or_none(kind, name, namespace)
            if obj is not None:
                last_obj = obj
                if predicate is None or predicate(obj):
                    return obj
            time.sleep(interval)
&gt;       raise AssertionError(
            f"{kind}/{name} in {namespace or '&lt;cluster&gt;'} did not satisfy condition. Last object: {last_obj}"
        )
E       AssertionError: route/e2e-inf-a-759b04-route in openshift-ingress did not satisfy condition. Last object: {'apiVersion': 'route.openshift.io/v1', 'kind': 'Route', 'metadata': {'annotations': {'kubectl.kubernetes.io/last-applied-configuration': '{"apiVersion":"route.openshift.io/v1","kind":"Route","metadata":{"annotations":{},"labels":{"app.kubernetes.io/component":"gateway","app.kubernetes.io/instance":"e2e-inf-a-759b04","app.kubernetes.io/name":"maas","e2e.maas.opendatahub.io/fixture":"e2e-inf-a-759b04","gateway.networking.k8s.io/gateway-name":"e2e-inf-a-759b04"},"name":"e2e-inf-a-759b04-route","namespace":"openshift-ingress"},"spec":{"host":"e2e-inf-a-759b04.apps.00125a180bb08b60980b.prod.konflux-ocp-ci.dev","port":{"targetPort":443},"tls":{"destinationCACertificate":"-----BEGIN CERTIFICATE-----\\nMIIDUTCCAjmgAwIBAgIIPa8XXlMYkUowDQYJKoZIhvcNAQELBQAwNjE0MDIGA1UE\\nAwwrb3BlbnNoaWZ0LXNlcnZpY2Utc2VydmluZy1zaWduZXJAMTc5MzczNDYwMDAe\\nFw0yNjExMDMxOTM2MzlaFw0yOTAxMDExOTM2NDBaMDYxNDAyBgNVBAMMK29wZW5z\\naGlmdC1zZXJ2aWNlLXNlcnZpbmctc2lnbmVyQDE3OTM3MzQ2MDAwggEiMA0GCSqG\\nSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCuESLdcYS88PpkvZOaIx34dTGVFzqUE6ne\\nJDyMeQn+qRdX3Qe7t4Wosr12WRyZifg1/TYGPYg5TUef8uzKb4HfhJ/3oGaBsgMx\\nwtFaFZvvGc0aiyH1UcGZQ9/PlRK4F/UnibUAPmTuxD7HQtno7BLsRry8QxxI5C29\\nb2niiS5EdFGQub5dA8ioxd3grvg+/rKX79i+kUntjVKFoPkCKDkkFwsK7C09Po/y\\nhApRNRXMz8ObwuTyokSMSGNociAEz8XcBK3+7GjGUVarnxrAohxwoNlHS88cSuSb\\nBNB/9M98a8qyH+193vFZEhy15A+/m5Saj+Ph4V2qmv0ygzFWnCzPAgMBAAGjYzBh\\nMA4GA1UdDwEB/wQEAwICpDAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRUqiJT\\ndLJVySmvrXK8RsmJGMCShTAfBgNVHSMEGDAWgBRUqiJTdLJVySmvrXK8RsmJGMCS\\nhTANBgkqhkiG9w0BAQsFAAOCAQEAIcXcWwCWRnvyYnVfUiIvOiWBIZISzXdVEwUX\\nTTte8+QqM3Ur9WfmHCU3YV1q/t041E1tHFR8QdkYUU9vy7CfKH9HHAZJdJZEl9bv\\nizMqeIYagfDbiKkOpD71cjo5ZtzC42xhrHSrH3otFEZochms6xAUP+MB98stNWVm\\n62GCZfYyKCvPLUh1wJNRcHRoyYan6+IDjT2rhoWTeOUO6vElJ0lrMOf+MV4WK6UE\\n79AN1Bt/Rc1NiKZUAy1gjwmAsLrtJbyxgeh/lnpCVjz1XDL/gGyMODKvN5NGGWTw\\n8PsEqdZWGQoK6sm4ewR6MyE9/Jv8FYtBd9r+R6w+yMEpY5O+Pw==\\n-----END CERTIFICATE-----\\n","insecureEdgeTerminationPolicy":"Redirect","termination":"reencrypt"},"to":{"kind":"Service","name":"e2e-inf-a-759b04-openshift-default","weight":100}}}\n'}, 'creationTimestamp': '2026-11-03T20:26:27Z', 'generation': 1, 'labels': {'app.kubernetes.io/component': 'gateway', 'app.kubernetes.io/instance': 'e2e-inf-a-759b04', 'app.kubernetes.io/name': 'maas', 'e2e.maas.opendatahub.io/fixture': 'e2e-inf-a-759b04', 'gateway.networking.k8s.io/gateway-name': 'e2e-inf-a-759b04'}, 'name': 'e2e-inf-a-759b04-route', 'namespace': 'openshift-ingress', 'resourceVersion': '157101', 'uid': '9b60ffb8-33dc-44d8-95d2-f167cad41f26'}, 'spec': {'host': 'e2e-inf-a-759b04.apps.00125a180bb08b60980b.prod.konflux-ocp-ci.dev', 'port': {'targetPort': 443}, 'tls': {'destinationCACertificate': '-----BEGIN CERTIFICATE-----\nMIIDUTCCAjmgAwIBAgIIPa8XXlMYkUowDQYJKoZIhvcNAQELBQAwNjE0MDIGA1UE\nAwwrb3BlbnNoaWZ0LXNlcnZpY2Utc2VydmluZy1zaWduZXJAMTc5MzczNDYwMDAe\nFw0yNjExMDMxOTM2MzlaFw0yOTAxMDExOTM2NDBaMDYxNDAyBgNVBAMMK29wZW5z\naGlmdC1zZXJ2aWNlLXNlcnZpbmctc2lnbmVyQDE3OTM3MzQ2MDAwggEiMA0GCSqG\nSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCuESLdcYS88PpkvZOaIx34dTGVFzqUE6ne\nJDyMeQn+qRdX3Qe7t4Wosr12WRyZifg1/TYGPYg5TUef8uzKb4HfhJ/3oGaBsgMx\nwtFaFZvvGc0aiyH1UcGZQ9/PlRK4F/UnibUAPmTuxD7HQtno7BLsRry8QxxI5C29\nb2niiS5EdFGQub5dA8ioxd3grvg+/rKX79i+kUntjVKFoPkCKDkkFwsK7C09Po/y\nhApRNRXMz8ObwuTyokSMSGNociAEz8XcBK3+7GjGUVarnxrAohxwoNlHS88cSuSb\nBNB/9M98a8qyH+193vFZEhy15A+/m5Saj+Ph4V2qmv0ygzFWnCzPAgMBAAGjYzBh\nMA4GA1UdDwEB/wQEAwICpDAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRUqiJT\ndLJVySmvrXK8RsmJGMCShTAfBgNVHSMEGDAWgBRUqiJTdLJVySmvrXK8RsmJGMCS\nhTANBgkqhkiG9w0BAQsFAAOCAQEAIcXcWwCWRnvyYnVfUiIvOiWBIZISzXdVEwUX\nTTte8+QqM3Ur9WfmHCU3YV1q/t041E1tHFR8QdkYUU9vy7CfKH9HHAZJdJZEl9bv\nizMqeIYagfDbiKkOpD71cjo5ZtzC42xhrHSrH3otFEZochms6xAUP+MB98stNWVm\n62GCZfYyKCvPLUh1wJNRcHRoyYan6+IDjT2rhoWTeOUO6vElJ0lrMOf+MV4WK6UE\n79AN1Bt/Rc1NiKZUAy1gjwmAsLrtJbyxgeh/lnpCVjz1XDL/gGyMODKvN5NGGWTw\n8PsEqdZWGQoK6sm4ewR6MyE9/Jv8FYtBd9r+R6w+yMEpY5O+Pw==\n-----END CERTIFICATE-----\n', 'insecureEdgeTerminationPolicy': 'Redirect', 'termination': 'reencrypt'}, 'to': {'kind': 'Service', 'name': 'e2e-inf-a-759b04-openshift-default', 'weight': 100}, 'wildcardPolicy': 'None'}, 'status': {}}

test/e2e/tests/multitenancy_helpers.py:301: AssertionError</error></testcase><testcase classname="tests.test_tenant_model_inference.TestTenantGatewayNegativeSecurity" name="test_forged_identity_headers_denied_on_tenant_gateway[tenant_a]" time="0.000"><error message="failed on setup with &quot;AssertionError: route/e2e-inf-a-759b04-route in openshift-ingress did not satisfy condition. Last object: {'apiVersion': 'route.openshift.io/v1', 'kind': 'Route', 'metadata': {'annotations': {'kubectl.kubernetes.io/last-applied-configuration': '{&quot;apiVersion&quot;:&quot;route.openshift.io/v1&quot;,&quot;kind&quot;:&quot;Route&quot;,&quot;metadata&quot;:{&quot;annotations&quot;:{},&quot;labels&quot;:{&quot;app.kubernetes.io/component&quot;:&quot;gateway&quot;,&quot;app.kubernetes.io/instance&quot;:&quot;e2e-inf-a-759b04&quot;,&quot;app.kubernetes.io/name&quot;:&quot;maas&quot;,&quot;e2e.maas.opendatahub...&#10;[truncated; full report in element text]">@pytest.fixture(scope="module")
    def tenant_inference_cases():
        """Set up two tenants with models for inference testing."""
        require_aitenant_crd()
        case_a = new_named_tenant_case("e2e-inf-a")
        case_b = new_named_tenant_case("e2e-inf-b")
    
        try:
            # Bootstrap tenants
            for case in (case_a, case_b):
&gt;               bootstrap_aitenant_tenant(case)

test/e2e/tests/test_tenant_model_inference.py:153: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
test/e2e/tests/multitenancy_helpers.py:1130: in bootstrap_aitenant_tenant
    apply_gateway_route_fixture(case["gateway_name"], fixture_label=case["tenant_label_name"])
test/e2e/tests/multitenancy_helpers.py:1013: in apply_gateway_route_fixture
    wait_for_route_admitted(route_name)
test/e2e/tests/multitenancy_helpers.py:812: in wait_for_route_admitted
    return wait_for_json("route", route_name, GATEWAY_NAMESPACE, predicate=_predicate, timeout=timeout, interval=interval)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

kind = 'route', name = 'e2e-inf-a-759b04-route', namespace = 'openshift-ingress'
predicate = &lt;function wait_for_route_admitted.&lt;locals&gt;._predicate at 0x7fd0b24d8f40&gt;
timeout = 60, interval = 3

    def wait_for_json(
        kind: str,
        name: str,
        namespace: Optional[str] = None,
        *,
        predicate=None,
        timeout: int = 180,
        interval: int = 5,
    ) -&gt; dict:
        deadline = time.time() + timeout
        last_obj = None
        while time.time() &lt; deadline:
            obj = get_json_or_none(kind, name, namespace)
            if obj is not None:
                last_obj = obj
                if predicate is None or predicate(obj):
                    return obj
            time.sleep(interval)
&gt;       raise AssertionError(
            f"{kind}/{name} in {namespace or '&lt;cluster&gt;'} did not satisfy condition. Last object: {last_obj}"
        )
E       AssertionError: route/e2e-inf-a-759b04-route in openshift-ingress did not satisfy condition. Last object: {'apiVersion': 'route.openshift.io/v1', 'kind': 'Route', 'metadata': {'annotations': {'kubectl.kubernetes.io/last-applied-configuration': '{"apiVersion":"route.openshift.io/v1","kind":"Route","metadata":{"annotations":{},"labels":{"app.kubernetes.io/component":"gateway","app.kubernetes.io/instance":"e2e-inf-a-759b04","app.kubernetes.io/name":"maas","e2e.maas.opendatahub.io/fixture":"e2e-inf-a-759b04","gateway.networking.k8s.io/gateway-name":"e2e-inf-a-759b04"},"name":"e2e-inf-a-759b04-route","namespace":"openshift-ingress"},"spec":{"host":"e2e-inf-a-759b04.apps.00125a180bb08b60980b.prod.konflux-ocp-ci.dev","port":{"targetPort":443},"tls":{"destinationCACertificate":"-----BEGIN CERTIFICATE-----\\nMIIDUTCCAjmgAwIBAgIIPa8XXlMYkUowDQYJKoZIhvcNAQELBQAwNjE0MDIGA1UE\\nAwwrb3BlbnNoaWZ0LXNlcnZpY2Utc2VydmluZy1zaWduZXJAMTc5MzczNDYwMDAe\\nFw0yNjExMDMxOTM2MzlaFw0yOTAxMDExOTM2NDBaMDYxNDAyBgNVBAMMK29wZW5z\\naGlmdC1zZXJ2aWNlLXNlcnZpbmctc2lnbmVyQDE3OTM3MzQ2MDAwggEiMA0GCSqG\\nSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCuESLdcYS88PpkvZOaIx34dTGVFzqUE6ne\\nJDyMeQn+qRdX3Qe7t4Wosr12WRyZifg1/TYGPYg5TUef8uzKb4HfhJ/3oGaBsgMx\\nwtFaFZvvGc0aiyH1UcGZQ9/PlRK4F/UnibUAPmTuxD7HQtno7BLsRry8QxxI5C29\\nb2niiS5EdFGQub5dA8ioxd3grvg+/rKX79i+kUntjVKFoPkCKDkkFwsK7C09Po/y\\nhApRNRXMz8ObwuTyokSMSGNociAEz8XcBK3+7GjGUVarnxrAohxwoNlHS88cSuSb\\nBNB/9M98a8qyH+193vFZEhy15A+/m5Saj+Ph4V2qmv0ygzFWnCzPAgMBAAGjYzBh\\nMA4GA1UdDwEB/wQEAwICpDAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRUqiJT\\ndLJVySmvrXK8RsmJGMCShTAfBgNVHSMEGDAWgBRUqiJTdLJVySmvrXK8RsmJGMCS\\nhTANBgkqhkiG9w0BAQsFAAOCAQEAIcXcWwCWRnvyYnVfUiIvOiWBIZISzXdVEwUX\\nTTte8+QqM3Ur9WfmHCU3YV1q/t041E1tHFR8QdkYUU9vy7CfKH9HHAZJdJZEl9bv\\nizMqeIYagfDbiKkOpD71cjo5ZtzC42xhrHSrH3otFEZochms6xAUP+MB98stNWVm\\n62GCZfYyKCvPLUh1wJNRcHRoyYan6+IDjT2rhoWTeOUO6vElJ0lrMOf+MV4WK6UE\\n79AN1Bt/Rc1NiKZUAy1gjwmAsLrtJbyxgeh/lnpCVjz1XDL/gGyMODKvN5NGGWTw\\n8PsEqdZWGQoK6sm4ewR6MyE9/Jv8FYtBd9r+R6w+yMEpY5O+Pw==\\n-----END CERTIFICATE-----\\n","insecureEdgeTerminationPolicy":"Redirect","termination":"reencrypt"},"to":{"kind":"Service","name":"e2e-inf-a-759b04-openshift-default","weight":100}}}\n'}, 'creationTimestamp': '2026-11-03T20:26:27Z', 'generation': 1, 'labels': {'app.kubernetes.io/component': 'gateway', 'app.kubernetes.io/instance': 'e2e-inf-a-759b04', 'app.kubernetes.io/name': 'maas', 'e2e.maas.opendatahub.io/fixture': 'e2e-inf-a-759b04', 'gateway.networking.k8s.io/gateway-name': 'e2e-inf-a-759b04'}, 'name': 'e2e-inf-a-759b04-route', 'namespace': 'openshift-ingress', 'resourceVersion': '157101', 'uid': '9b60ffb8-33dc-44d8-95d2-f167cad41f26'}, 'spec': {'host': 'e2e-inf-a-759b04.apps.00125a180bb08b60980b.prod.konflux-ocp-ci.dev', 'port': {'targetPort': 443}, 'tls': {'destinationCACertificate': '-----BEGIN CERTIFICATE-----\nMIIDUTCCAjmgAwIBAgIIPa8XXlMYkUowDQYJKoZIhvcNAQELBQAwNjE0MDIGA1UE\nAwwrb3BlbnNoaWZ0LXNlcnZpY2Utc2VydmluZy1zaWduZXJAMTc5MzczNDYwMDAe\nFw0yNjExMDMxOTM2MzlaFw0yOTAxMDExOTM2NDBaMDYxNDAyBgNVBAMMK29wZW5z\naGlmdC1zZXJ2aWNlLXNlcnZpbmctc2lnbmVyQDE3OTM3MzQ2MDAwggEiMA0GCSqG\nSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCuESLdcYS88PpkvZOaIx34dTGVFzqUE6ne\nJDyMeQn+qRdX3Qe7t4Wosr12WRyZifg1/TYGPYg5TUef8uzKb4HfhJ/3oGaBsgMx\nwtFaFZvvGc0aiyH1UcGZQ9/PlRK4F/UnibUAPmTuxD7HQtno7BLsRry8QxxI5C29\nb2niiS5EdFGQub5dA8ioxd3grvg+/rKX79i+kUntjVKFoPkCKDkkFwsK7C09Po/y\nhApRNRXMz8ObwuTyokSMSGNociAEz8XcBK3+7GjGUVarnxrAohxwoNlHS88cSuSb\nBNB/9M98a8qyH+193vFZEhy15A+/m5Saj+Ph4V2qmv0ygzFWnCzPAgMBAAGjYzBh\nMA4GA1UdDwEB/wQEAwICpDAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRUqiJT\ndLJVySmvrXK8RsmJGMCShTAfBgNVHSMEGDAWgBRUqiJTdLJVySmvrXK8RsmJGMCS\nhTANBgkqhkiG9w0BAQsFAAOCAQEAIcXcWwCWRnvyYnVfUiIvOiWBIZISzXdVEwUX\nTTte8+QqM3Ur9WfmHCU3YV1q/t041E1tHFR8QdkYUU9vy7CfKH9HHAZJdJZEl9bv\nizMqeIYagfDbiKkOpD71cjo5ZtzC42xhrHSrH3otFEZochms6xAUP+MB98stNWVm\n62GCZfYyKCvPLUh1wJNRcHRoyYan6+IDjT2rhoWTeOUO6vElJ0lrMOf+MV4WK6UE\n79AN1Bt/Rc1NiKZUAy1gjwmAsLrtJbyxgeh/lnpCVjz1XDL/gGyMODKvN5NGGWTw\n8PsEqdZWGQoK6sm4ewR6MyE9/Jv8FYtBd9r+R6w+yMEpY5O+Pw==\n-----END CERTIFICATE-----\n', 'insecureEdgeTerminationPolicy': 'Redirect', 'termination': 'reencrypt'}, 'to': {'kind': 'Service', 'name': 'e2e-inf-a-759b04-openshift-default', 'weight': 100}, 'wildcardPolicy': 'None'}, 'status': {}}

test/e2e/tests/multitenancy_helpers.py:301: AssertionError</error></testcase><testcase classname="tests.test_tenant_model_inference.TestTenantGatewayNegativeSecurity" name="test_forged_identity_headers_denied_on_tenant_gateway[tenant_b]" time="0.000"><error message="failed on setup with &quot;AssertionError: route/e2e-inf-a-759b04-route in openshift-ingress did not satisfy condition. Last object: {'apiVersion': 'route.openshift.io/v1', 'kind': 'Route', 'metadata': {'annotations': {'kubectl.kubernetes.io/last-applied-configuration': '{&quot;apiVersion&quot;:&quot;route.openshift.io/v1&quot;,&quot;kind&quot;:&quot;Route&quot;,&quot;metadata&quot;:{&quot;annotations&quot;:{},&quot;labels&quot;:{&quot;app.kubernetes.io/component&quot;:&quot;gateway&quot;,&quot;app.kubernetes.io/instance&quot;:&quot;e2e-inf-a-759b04&quot;,&quot;app.kubernetes.io/name&quot;:&quot;maas&quot;,&quot;e2e.maas.opendatahub...&#10;[truncated; full report in element text]">@pytest.fixture(scope="module")
    def tenant_inference_cases():
        """Set up two tenants with models for inference testing."""
        require_aitenant_crd()
        case_a = new_named_tenant_case("e2e-inf-a")
        case_b = new_named_tenant_case("e2e-inf-b")
    
        try:
            # Bootstrap tenants
            for case in (case_a, case_b):
&gt;               bootstrap_aitenant_tenant(case)

test/e2e/tests/test_tenant_model_inference.py:153: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
test/e2e/tests/multitenancy_helpers.py:1130: in bootstrap_aitenant_tenant
    apply_gateway_route_fixture(case["gateway_name"], fixture_label=case["tenant_label_name"])
test/e2e/tests/multitenancy_helpers.py:1013: in apply_gateway_route_fixture
    wait_for_route_admitted(route_name)
test/e2e/tests/multitenancy_helpers.py:812: in wait_for_route_admitted
    return wait_for_json("route", route_name, GATEWAY_NAMESPACE, predicate=_predicate, timeout=timeout, interval=interval)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

kind = 'route', name = 'e2e-inf-a-759b04-route', namespace = 'openshift-ingress'
predicate = &lt;function wait_for_route_admitted.&lt;locals&gt;._predicate at 0x7fd0b24d8f40&gt;
timeout = 60, interval = 3

    def wait_for_json(
        kind: str,
        name: str,
        namespace: Optional[str] = None,
        *,
        predicate=None,
        timeout: int = 180,
        interval: int = 5,
    ) -&gt; dict:
        deadline = time.time() + timeout
        last_obj = None
        while time.time() &lt; deadline:
            obj = get_json_or_none(kind, name, namespace)
            if obj is not None:
                last_obj = obj
                if predicate is None or predicate(obj):
                    return obj
            time.sleep(interval)
&gt;       raise AssertionError(
            f"{kind}/{name} in {namespace or '&lt;cluster&gt;'} did not satisfy condition. Last object: {last_obj}"
        )
E       AssertionError: route/e2e-inf-a-759b04-route in openshift-ingress did not satisfy condition. Last object: {'apiVersion': 'route.openshift.io/v1', 'kind': 'Route', 'metadata': {'annotations': {'kubectl.kubernetes.io/last-applied-configuration': '{"apiVersion":"route.openshift.io/v1","kind":"Route","metadata":{"annotations":{},"labels":{"app.kubernetes.io/component":"gateway","app.kubernetes.io/instance":"e2e-inf-a-759b04","app.kubernetes.io/name":"maas","e2e.maas.opendatahub.io/fixture":"e2e-inf-a-759b04","gateway.networking.k8s.io/gateway-name":"e2e-inf-a-759b04"},"name":"e2e-inf-a-759b04-route","namespace":"openshift-ingress"},"spec":{"host":"e2e-inf-a-759b04.apps.00125a180bb08b60980b.prod.konflux-ocp-ci.dev","port":{"targetPort":443},"tls":{"destinationCACertificate":"-----BEGIN CERTIFICATE-----\\nMIIDUTCCAjmgAwIBAgIIPa8XXlMYkUowDQYJKoZIhvcNAQELBQAwNjE0MDIGA1UE\\nAwwrb3BlbnNoaWZ0LXNlcnZpY2Utc2VydmluZy1zaWduZXJAMTc5MzczNDYwMDAe\\nFw0yNjExMDMxOTM2MzlaFw0yOTAxMDExOTM2NDBaMDYxNDAyBgNVBAMMK29wZW5z\\naGlmdC1zZXJ2aWNlLXNlcnZpbmctc2lnbmVyQDE3OTM3MzQ2MDAwggEiMA0GCSqG\\nSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCuESLdcYS88PpkvZOaIx34dTGVFzqUE6ne\\nJDyMeQn+qRdX3Qe7t4Wosr12WRyZifg1/TYGPYg5TUef8uzKb4HfhJ/3oGaBsgMx\\nwtFaFZvvGc0aiyH1UcGZQ9/PlRK4F/UnibUAPmTuxD7HQtno7BLsRry8QxxI5C29\\nb2niiS5EdFGQub5dA8ioxd3grvg+/rKX79i+kUntjVKFoPkCKDkkFwsK7C09Po/y\\nhApRNRXMz8ObwuTyokSMSGNociAEz8XcBK3+7GjGUVarnxrAohxwoNlHS88cSuSb\\nBNB/9M98a8qyH+193vFZEhy15A+/m5Saj+Ph4V2qmv0ygzFWnCzPAgMBAAGjYzBh\\nMA4GA1UdDwEB/wQEAwICpDAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRUqiJT\\ndLJVySmvrXK8RsmJGMCShTAfBgNVHSMEGDAWgBRUqiJTdLJVySmvrXK8RsmJGMCS\\nhTANBgkqhkiG9w0BAQsFAAOCAQEAIcXcWwCWRnvyYnVfUiIvOiWBIZISzXdVEwUX\\nTTte8+QqM3Ur9WfmHCU3YV1q/t041E1tHFR8QdkYUU9vy7CfKH9HHAZJdJZEl9bv\\nizMqeIYagfDbiKkOpD71cjo5ZtzC42xhrHSrH3otFEZochms6xAUP+MB98stNWVm\\n62GCZfYyKCvPLUh1wJNRcHRoyYan6+IDjT2rhoWTeOUO6vElJ0lrMOf+MV4WK6UE\\n79AN1Bt/Rc1NiKZUAy1gjwmAsLrtJbyxgeh/lnpCVjz1XDL/gGyMODKvN5NGGWTw\\n8PsEqdZWGQoK6sm4ewR6MyE9/Jv8FYtBd9r+R6w+yMEpY5O+Pw==\\n-----END CERTIFICATE-----\\n","insecureEdgeTerminationPolicy":"Redirect","termination":"reencrypt"},"to":{"kind":"Service","name":"e2e-inf-a-759b04-openshift-default","weight":100}}}\n'}, 'creationTimestamp': '2026-11-03T20:26:27Z', 'generation': 1, 'labels': {'app.kubernetes.io/component': 'gateway', 'app.kubernetes.io/instance': 'e2e-inf-a-759b04', 'app.kubernetes.io/name': 'maas', 'e2e.maas.opendatahub.io/fixture': 'e2e-inf-a-759b04', 'gateway.networking.k8s.io/gateway-name': 'e2e-inf-a-759b04'}, 'name': 'e2e-inf-a-759b04-route', 'namespace': 'openshift-ingress', 'resourceVersion': '157101', 'uid': '9b60ffb8-33dc-44d8-95d2-f167cad41f26'}, 'spec': {'host': 'e2e-inf-a-759b04.apps.00125a180bb08b60980b.prod.konflux-ocp-ci.dev', 'port': {'targetPort': 443}, 'tls': {'destinationCACertificate': '-----BEGIN CERTIFICATE-----\nMIIDUTCCAjmgAwIBAgIIPa8XXlMYkUowDQYJKoZIhvcNAQELBQAwNjE0MDIGA1UE\nAwwrb3BlbnNoaWZ0LXNlcnZpY2Utc2VydmluZy1zaWduZXJAMTc5MzczNDYwMDAe\nFw0yNjExMDMxOTM2MzlaFw0yOTAxMDExOTM2NDBaMDYxNDAyBgNVBAMMK29wZW5z\naGlmdC1zZXJ2aWNlLXNlcnZpbmctc2lnbmVyQDE3OTM3MzQ2MDAwggEiMA0GCSqG\nSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCuESLdcYS88PpkvZOaIx34dTGVFzqUE6ne\nJDyMeQn+qRdX3Qe7t4Wosr12WRyZifg1/TYGPYg5TUef8uzKb4HfhJ/3oGaBsgMx\nwtFaFZvvGc0aiyH1UcGZQ9/PlRK4F/UnibUAPmTuxD7HQtno7BLsRry8QxxI5C29\nb2niiS5EdFGQub5dA8ioxd3grvg+/rKX79i+kUntjVKFoPkCKDkkFwsK7C09Po/y\nhApRNRXMz8ObwuTyokSMSGNociAEz8XcBK3+7GjGUVarnxrAohxwoNlHS88cSuSb\nBNB/9M98a8qyH+193vFZEhy15A+/m5Saj+Ph4V2qmv0ygzFWnCzPAgMBAAGjYzBh\nMA4GA1UdDwEB/wQEAwICpDAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRUqiJT\ndLJVySmvrXK8RsmJGMCShTAfBgNVHSMEGDAWgBRUqiJTdLJVySmvrXK8RsmJGMCS\nhTANBgkqhkiG9w0BAQsFAAOCAQEAIcXcWwCWRnvyYnVfUiIvOiWBIZISzXdVEwUX\nTTte8+QqM3Ur9WfmHCU3YV1q/t041E1tHFR8QdkYUU9vy7CfKH9HHAZJdJZEl9bv\nizMqeIYagfDbiKkOpD71cjo5ZtzC42xhrHSrH3otFEZochms6xAUP+MB98stNWVm\n62GCZfYyKCvPLUh1wJNRcHRoyYan6+IDjT2rhoWTeOUO6vElJ0lrMOf+MV4WK6UE\n79AN1Bt/Rc1NiKZUAy1gjwmAsLrtJbyxgeh/lnpCVjz1XDL/gGyMODKvN5NGGWTw\n8PsEqdZWGQoK6sm4ewR6MyE9/Jv8FYtBd9r+R6w+yMEpY5O+Pw==\n-----END CERTIFICATE-----\n', 'insecureEdgeTerminationPolicy': 'Redirect', 'termination': 'reencrypt'}, 'to': {'kind': 'Service', 'name': 'e2e-inf-a-759b04-openshift-default', 'weight': 100}, 'wildcardPolicy': 'None'}, 'status': {}}

test/e2e/tests/multitenancy_helpers.py:301: AssertionError</error></testcase><testcase classname="tests.test_tenant_model_inference.TestTenantBodyRouting" name="test_model_in_body_routing[correct-model]" time="0.000"><error message="failed on setup with &quot;AssertionError: route/e2e-inf-a-759b04-route in openshift-ingress did not satisfy condition. Last object: {'apiVersion': 'route.openshift.io/v1', 'kind': 'Route', 'metadata': {'annotations': {'kubectl.kubernetes.io/last-applied-configuration': '{&quot;apiVersion&quot;:&quot;route.openshift.io/v1&quot;,&quot;kind&quot;:&quot;Route&quot;,&quot;metadata&quot;:{&quot;annotations&quot;:{},&quot;labels&quot;:{&quot;app.kubernetes.io/component&quot;:&quot;gateway&quot;,&quot;app.kubernetes.io/instance&quot;:&quot;e2e-inf-a-759b04&quot;,&quot;app.kubernetes.io/name&quot;:&quot;maas&quot;,&quot;e2e.maas.opendatahub...&#10;[truncated; full report in element text]">@pytest.fixture(scope="module")
    def tenant_inference_cases():
        """Set up two tenants with models for inference testing."""
        require_aitenant_crd()
        case_a = new_named_tenant_case("e2e-inf-a")
        case_b = new_named_tenant_case("e2e-inf-b")
    
        try:
            # Bootstrap tenants
            for case in (case_a, case_b):
&gt;               bootstrap_aitenant_tenant(case)

test/e2e/tests/test_tenant_model_inference.py:153: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
test/e2e/tests/multitenancy_helpers.py:1130: in bootstrap_aitenant_tenant
    apply_gateway_route_fixture(case["gateway_name"], fixture_label=case["tenant_label_name"])
test/e2e/tests/multitenancy_helpers.py:1013: in apply_gateway_route_fixture
    wait_for_route_admitted(route_name)
test/e2e/tests/multitenancy_helpers.py:812: in wait_for_route_admitted
    return wait_for_json("route", route_name, GATEWAY_NAMESPACE, predicate=_predicate, timeout=timeout, interval=interval)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

kind = 'route', name = 'e2e-inf-a-759b04-route', namespace = 'openshift-ingress'
predicate = &lt;function wait_for_route_admitted.&lt;locals&gt;._predicate at 0x7fd0b24d8f40&gt;
timeout = 60, interval = 3

    def wait_for_json(
        kind: str,
        name: str,
        namespace: Optional[str] = None,
        *,
        predicate=None,
        timeout: int = 180,
        interval: int = 5,
    ) -&gt; dict:
        deadline = time.time() + timeout
        last_obj = None
        while time.time() &lt; deadline:
            obj = get_json_or_none(kind, name, namespace)
            if obj is not None:
                last_obj = obj
                if predicate is None or predicate(obj):
                    return obj
            time.sleep(interval)
&gt;       raise AssertionError(
            f"{kind}/{name} in {namespace or '&lt;cluster&gt;'} did not satisfy condition. Last object: {last_obj}"
        )
E       AssertionError: route/e2e-inf-a-759b04-route in openshift-ingress did not satisfy condition. Last object: {'apiVersion': 'route.openshift.io/v1', 'kind': 'Route', 'metadata': {'annotations': {'kubectl.kubernetes.io/last-applied-configuration': '{"apiVersion":"route.openshift.io/v1","kind":"Route","metadata":{"annotations":{},"labels":{"app.kubernetes.io/component":"gateway","app.kubernetes.io/instance":"e2e-inf-a-759b04","app.kubernetes.io/name":"maas","e2e.maas.opendatahub.io/fixture":"e2e-inf-a-759b04","gateway.networking.k8s.io/gateway-name":"e2e-inf-a-759b04"},"name":"e2e-inf-a-759b04-route","namespace":"openshift-ingress"},"spec":{"host":"e2e-inf-a-759b04.apps.00125a180bb08b60980b.prod.konflux-ocp-ci.dev","port":{"targetPort":443},"tls":{"destinationCACertificate":"-----BEGIN CERTIFICATE-----\\nMIIDUTCCAjmgAwIBAgIIPa8XXlMYkUowDQYJKoZIhvcNAQELBQAwNjE0MDIGA1UE\\nAwwrb3BlbnNoaWZ0LXNlcnZpY2Utc2VydmluZy1zaWduZXJAMTc5MzczNDYwMDAe\\nFw0yNjExMDMxOTM2MzlaFw0yOTAxMDExOTM2NDBaMDYxNDAyBgNVBAMMK29wZW5z\\naGlmdC1zZXJ2aWNlLXNlcnZpbmctc2lnbmVyQDE3OTM3MzQ2MDAwggEiMA0GCSqG\\nSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCuESLdcYS88PpkvZOaIx34dTGVFzqUE6ne\\nJDyMeQn+qRdX3Qe7t4Wosr12WRyZifg1/TYGPYg5TUef8uzKb4HfhJ/3oGaBsgMx\\nwtFaFZvvGc0aiyH1UcGZQ9/PlRK4F/UnibUAPmTuxD7HQtno7BLsRry8QxxI5C29\\nb2niiS5EdFGQub5dA8ioxd3grvg+/rKX79i+kUntjVKFoPkCKDkkFwsK7C09Po/y\\nhApRNRXMz8ObwuTyokSMSGNociAEz8XcBK3+7GjGUVarnxrAohxwoNlHS88cSuSb\\nBNB/9M98a8qyH+193vFZEhy15A+/m5Saj+Ph4V2qmv0ygzFWnCzPAgMBAAGjYzBh\\nMA4GA1UdDwEB/wQEAwICpDAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRUqiJT\\ndLJVySmvrXK8RsmJGMCShTAfBgNVHSMEGDAWgBRUqiJTdLJVySmvrXK8RsmJGMCS\\nhTANBgkqhkiG9w0BAQsFAAOCAQEAIcXcWwCWRnvyYnVfUiIvOiWBIZISzXdVEwUX\\nTTte8+QqM3Ur9WfmHCU3YV1q/t041E1tHFR8QdkYUU9vy7CfKH9HHAZJdJZEl9bv\\nizMqeIYagfDbiKkOpD71cjo5ZtzC42xhrHSrH3otFEZochms6xAUP+MB98stNWVm\\n62GCZfYyKCvPLUh1wJNRcHRoyYan6+IDjT2rhoWTeOUO6vElJ0lrMOf+MV4WK6UE\\n79AN1Bt/Rc1NiKZUAy1gjwmAsLrtJbyxgeh/lnpCVjz1XDL/gGyMODKvN5NGGWTw\\n8PsEqdZWGQoK6sm4ewR6MyE9/Jv8FYtBd9r+R6w+yMEpY5O+Pw==\\n-----END CERTIFICATE-----\\n","insecureEdgeTerminationPolicy":"Redirect","termination":"reencrypt"},"to":{"kind":"Service","name":"e2e-inf-a-759b04-openshift-default","weight":100}}}\n'}, 'creationTimestamp': '2026-11-03T20:26:27Z', 'generation': 1, 'labels': {'app.kubernetes.io/component': 'gateway', 'app.kubernetes.io/instance': 'e2e-inf-a-759b04', 'app.kubernetes.io/name': 'maas', 'e2e.maas.opendatahub.io/fixture': 'e2e-inf-a-759b04', 'gateway.networking.k8s.io/gateway-name': 'e2e-inf-a-759b04'}, 'name': 'e2e-inf-a-759b04-route', 'namespace': 'openshift-ingress', 'resourceVersion': '157101', 'uid': '9b60ffb8-33dc-44d8-95d2-f167cad41f26'}, 'spec': {'host': 'e2e-inf-a-759b04.apps.00125a180bb08b60980b.prod.konflux-ocp-ci.dev', 'port': {'targetPort': 443}, 'tls': {'destinationCACertificate': '-----BEGIN CERTIFICATE-----\nMIIDUTCCAjmgAwIBAgIIPa8XXlMYkUowDQYJKoZIhvcNAQELBQAwNjE0MDIGA1UE\nAwwrb3BlbnNoaWZ0LXNlcnZpY2Utc2VydmluZy1zaWduZXJAMTc5MzczNDYwMDAe\nFw0yNjExMDMxOTM2MzlaFw0yOTAxMDExOTM2NDBaMDYxNDAyBgNVBAMMK29wZW5z\naGlmdC1zZXJ2aWNlLXNlcnZpbmctc2lnbmVyQDE3OTM3MzQ2MDAwggEiMA0GCSqG\nSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCuESLdcYS88PpkvZOaIx34dTGVFzqUE6ne\nJDyMeQn+qRdX3Qe7t4Wosr12WRyZifg1/TYGPYg5TUef8uzKb4HfhJ/3oGaBsgMx\nwtFaFZvvGc0aiyH1UcGZQ9/PlRK4F/UnibUAPmTuxD7HQtno7BLsRry8QxxI5C29\nb2niiS5EdFGQub5dA8ioxd3grvg+/rKX79i+kUntjVKFoPkCKDkkFwsK7C09Po/y\nhApRNRXMz8ObwuTyokSMSGNociAEz8XcBK3+7GjGUVarnxrAohxwoNlHS88cSuSb\nBNB/9M98a8qyH+193vFZEhy15A+/m5Saj+Ph4V2qmv0ygzFWnCzPAgMBAAGjYzBh\nMA4GA1UdDwEB/wQEAwICpDAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRUqiJT\ndLJVySmvrXK8RsmJGMCShTAfBgNVHSMEGDAWgBRUqiJTdLJVySmvrXK8RsmJGMCS\nhTANBgkqhkiG9w0BAQsFAAOCAQEAIcXcWwCWRnvyYnVfUiIvOiWBIZISzXdVEwUX\nTTte8+QqM3Ur9WfmHCU3YV1q/t041E1tHFR8QdkYUU9vy7CfKH9HHAZJdJZEl9bv\nizMqeIYagfDbiKkOpD71cjo5ZtzC42xhrHSrH3otFEZochms6xAUP+MB98stNWVm\n62GCZfYyKCvPLUh1wJNRcHRoyYan6+IDjT2rhoWTeOUO6vElJ0lrMOf+MV4WK6UE\n79AN1Bt/Rc1NiKZUAy1gjwmAsLrtJbyxgeh/lnpCVjz1XDL/gGyMODKvN5NGGWTw\n8PsEqdZWGQoK6sm4ewR6MyE9/Jv8FYtBd9r+R6w+yMEpY5O+Pw==\n-----END CERTIFICATE-----\n', 'insecureEdgeTerminationPolicy': 'Redirect', 'termination': 'reencrypt'}, 'to': {'kind': 'Service', 'name': 'e2e-inf-a-759b04-openshift-default', 'weight': 100}, 'wildcardPolicy': 'None'}, 'status': {}}

test/e2e/tests/multitenancy_helpers.py:301: AssertionError</error></testcase><testcase classname="tests.test_tenant_model_inference.TestTenantBodyRouting" name="test_model_in_body_routing[wrong-model]" time="0.000"><error message="failed on setup with &quot;AssertionError: route/e2e-inf-a-759b04-route in openshift-ingress did not satisfy condition. Last object: {'apiVersion': 'route.openshift.io/v1', 'kind': 'Route', 'metadata': {'annotations': {'kubectl.kubernetes.io/last-applied-configuration': '{&quot;apiVersion&quot;:&quot;route.openshift.io/v1&quot;,&quot;kind&quot;:&quot;Route&quot;,&quot;metadata&quot;:{&quot;annotations&quot;:{},&quot;labels&quot;:{&quot;app.kubernetes.io/component&quot;:&quot;gateway&quot;,&quot;app.kubernetes.io/instance&quot;:&quot;e2e-inf-a-759b04&quot;,&quot;app.kubernetes.io/name&quot;:&quot;maas&quot;,&quot;e2e.maas.opendatahub...&#10;[truncated; full report in element text]">@pytest.fixture(scope="module")
    def tenant_inference_cases():
        """Set up two tenants with models for inference testing."""
        require_aitenant_crd()
        case_a = new_named_tenant_case("e2e-inf-a")
        case_b = new_named_tenant_case("e2e-inf-b")
    
        try:
            # Bootstrap tenants
            for case in (case_a, case_b):
&gt;               bootstrap_aitenant_tenant(case)

test/e2e/tests/test_tenant_model_inference.py:153: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
test/e2e/tests/multitenancy_helpers.py:1130: in bootstrap_aitenant_tenant
    apply_gateway_route_fixture(case["gateway_name"], fixture_label=case["tenant_label_name"])
test/e2e/tests/multitenancy_helpers.py:1013: in apply_gateway_route_fixture
    wait_for_route_admitted(route_name)
test/e2e/tests/multitenancy_helpers.py:812: in wait_for_route_admitted
    return wait_for_json("route", route_name, GATEWAY_NAMESPACE, predicate=_predicate, timeout=timeout, interval=interval)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

kind = 'route', name = 'e2e-inf-a-759b04-route', namespace = 'openshift-ingress'
predicate = &lt;function wait_for_route_admitted.&lt;locals&gt;._predicate at 0x7fd0b24d8f40&gt;
timeout = 60, interval = 3

    def wait_for_json(
        kind: str,
        name: str,
        namespace: Optional[str] = None,
        *,
        predicate=None,
        timeout: int = 180,
        interval: int = 5,
    ) -&gt; dict:
        deadline = time.time() + timeout
        last_obj = None
        while time.time() &lt; deadline:
            obj = get_json_or_none(kind, name, namespace)
            if obj is not None:
                last_obj = obj
                if predicate is None or predicate(obj):
                    return obj
            time.sleep(interval)
&gt;       raise AssertionError(
            f"{kind}/{name} in {namespace or '&lt;cluster&gt;'} did not satisfy condition. Last object: {last_obj}"
        )
E       AssertionError: route/e2e-inf-a-759b04-route in openshift-ingress did not satisfy condition. Last object: {'apiVersion': 'route.openshift.io/v1', 'kind': 'Route', 'metadata': {'annotations': {'kubectl.kubernetes.io/last-applied-configuration': '{"apiVersion":"route.openshift.io/v1","kind":"Route","metadata":{"annotations":{},"labels":{"app.kubernetes.io/component":"gateway","app.kubernetes.io/instance":"e2e-inf-a-759b04","app.kubernetes.io/name":"maas","e2e.maas.opendatahub.io/fixture":"e2e-inf-a-759b04","gateway.networking.k8s.io/gateway-name":"e2e-inf-a-759b04"},"name":"e2e-inf-a-759b04-route","namespace":"openshift-ingress"},"spec":{"host":"e2e-inf-a-759b04.apps.00125a180bb08b60980b.prod.konflux-ocp-ci.dev","port":{"targetPort":443},"tls":{"destinationCACertificate":"-----BEGIN CERTIFICATE-----\\nMIIDUTCCAjmgAwIBAgIIPa8XXlMYkUowDQYJKoZIhvcNAQELBQAwNjE0MDIGA1UE\\nAwwrb3BlbnNoaWZ0LXNlcnZpY2Utc2VydmluZy1zaWduZXJAMTc5MzczNDYwMDAe\\nFw0yNjExMDMxOTM2MzlaFw0yOTAxMDExOTM2NDBaMDYxNDAyBgNVBAMMK29wZW5z\\naGlmdC1zZXJ2aWNlLXNlcnZpbmctc2lnbmVyQDE3OTM3MzQ2MDAwggEiMA0GCSqG\\nSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCuESLdcYS88PpkvZOaIx34dTGVFzqUE6ne\\nJDyMeQn+qRdX3Qe7t4Wosr12WRyZifg1/TYGPYg5TUef8uzKb4HfhJ/3oGaBsgMx\\nwtFaFZvvGc0aiyH1UcGZQ9/PlRK4F/UnibUAPmTuxD7HQtno7BLsRry8QxxI5C29\\nb2niiS5EdFGQub5dA8ioxd3grvg+/rKX79i+kUntjVKFoPkCKDkkFwsK7C09Po/y\\nhApRNRXMz8ObwuTyokSMSGNociAEz8XcBK3+7GjGUVarnxrAohxwoNlHS88cSuSb\\nBNB/9M98a8qyH+193vFZEhy15A+/m5Saj+Ph4V2qmv0ygzFWnCzPAgMBAAGjYzBh\\nMA4GA1UdDwEB/wQEAwICpDAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRUqiJT\\ndLJVySmvrXK8RsmJGMCShTAfBgNVHSMEGDAWgBRUqiJTdLJVySmvrXK8RsmJGMCS\\nhTANBgkqhkiG9w0BAQsFAAOCAQEAIcXcWwCWRnvyYnVfUiIvOiWBIZISzXdVEwUX\\nTTte8+QqM3Ur9WfmHCU3YV1q/t041E1tHFR8QdkYUU9vy7CfKH9HHAZJdJZEl9bv\\nizMqeIYagfDbiKkOpD71cjo5ZtzC42xhrHSrH3otFEZochms6xAUP+MB98stNWVm\\n62GCZfYyKCvPLUh1wJNRcHRoyYan6+IDjT2rhoWTeOUO6vElJ0lrMOf+MV4WK6UE\\n79AN1Bt/Rc1NiKZUAy1gjwmAsLrtJbyxgeh/lnpCVjz1XDL/gGyMODKvN5NGGWTw\\n8PsEqdZWGQoK6sm4ewR6MyE9/Jv8FYtBd9r+R6w+yMEpY5O+Pw==\\n-----END CERTIFICATE-----\\n","insecureEdgeTerminationPolicy":"Redirect","termination":"reencrypt"},"to":{"kind":"Service","name":"e2e-inf-a-759b04-openshift-default","weight":100}}}\n'}, 'creationTimestamp': '2026-11-03T20:26:27Z', 'generation': 1, 'labels': {'app.kubernetes.io/component': 'gateway', 'app.kubernetes.io/instance': 'e2e-inf-a-759b04', 'app.kubernetes.io/name': 'maas', 'e2e.maas.opendatahub.io/fixture': 'e2e-inf-a-759b04', 'gateway.networking.k8s.io/gateway-name': 'e2e-inf-a-759b04'}, 'name': 'e2e-inf-a-759b04-route', 'namespace': 'openshift-ingress', 'resourceVersion': '157101', 'uid': '9b60ffb8-33dc-44d8-95d2-f167cad41f26'}, 'spec': {'host': 'e2e-inf-a-759b04.apps.00125a180bb08b60980b.prod.konflux-ocp-ci.dev', 'port': {'targetPort': 443}, 'tls': {'destinationCACertificate': '-----BEGIN CERTIFICATE-----\nMIIDUTCCAjmgAwIBAgIIPa8XXlMYkUowDQYJKoZIhvcNAQELBQAwNjE0MDIGA1UE\nAwwrb3BlbnNoaWZ0LXNlcnZpY2Utc2VydmluZy1zaWduZXJAMTc5MzczNDYwMDAe\nFw0yNjExMDMxOTM2MzlaFw0yOTAxMDExOTM2NDBaMDYxNDAyBgNVBAMMK29wZW5z\naGlmdC1zZXJ2aWNlLXNlcnZpbmctc2lnbmVyQDE3OTM3MzQ2MDAwggEiMA0GCSqG\nSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCuESLdcYS88PpkvZOaIx34dTGVFzqUE6ne\nJDyMeQn+qRdX3Qe7t4Wosr12WRyZifg1/TYGPYg5TUef8uzKb4HfhJ/3oGaBsgMx\nwtFaFZvvGc0aiyH1UcGZQ9/PlRK4F/UnibUAPmTuxD7HQtno7BLsRry8QxxI5C29\nb2niiS5EdFGQub5dA8ioxd3grvg+/rKX79i+kUntjVKFoPkCKDkkFwsK7C09Po/y\nhApRNRXMz8ObwuTyokSMSGNociAEz8XcBK3+7GjGUVarnxrAohxwoNlHS88cSuSb\nBNB/9M98a8qyH+193vFZEhy15A+/m5Saj+Ph4V2qmv0ygzFWnCzPAgMBAAGjYzBh\nMA4GA1UdDwEB/wQEAwICpDAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRUqiJT\ndLJVySmvrXK8RsmJGMCShTAfBgNVHSMEGDAWgBRUqiJTdLJVySmvrXK8RsmJGMCS\nhTANBgkqhkiG9w0BAQsFAAOCAQEAIcXcWwCWRnvyYnVfUiIvOiWBIZISzXdVEwUX\nTTte8+QqM3Ur9WfmHCU3YV1q/t041E1tHFR8QdkYUU9vy7CfKH9HHAZJdJZEl9bv\nizMqeIYagfDbiKkOpD71cjo5ZtzC42xhrHSrH3otFEZochms6xAUP+MB98stNWVm\n62GCZfYyKCvPLUh1wJNRcHRoyYan6+IDjT2rhoWTeOUO6vElJ0lrMOf+MV4WK6UE\n79AN1Bt/Rc1NiKZUAy1gjwmAsLrtJbyxgeh/lnpCVjz1XDL/gGyMODKvN5NGGWTw\n8PsEqdZWGQoK6sm4ewR6MyE9/Jv8FYtBd9r+R6w+yMEpY5O+Pw==\n-----END CERTIFICATE-----\n', 'insecureEdgeTerminationPolicy': 'Redirect', 'termination': 'reencrypt'}, 'to': {'kind': 'Service', 'name': 'e2e-inf-a-759b04-openshift-default', 'weight': 100}, 'wildcardPolicy': 'None'}, 'status': {}}

test/e2e/tests/multitenancy_helpers.py:301: AssertionError</error></testcase><testcase classname="tests.test_tenant_model_inference.TestTenantBodyRouting" name="test_model_in_body_routing[missing-model]" time="0.000"><error message="failed on setup with &quot;AssertionError: route/e2e-inf-a-759b04-route in openshift-ingress did not satisfy condition. Last object: {'apiVersion': 'route.openshift.io/v1', 'kind': 'Route', 'metadata': {'annotations': {'kubectl.kubernetes.io/last-applied-configuration': '{&quot;apiVersion&quot;:&quot;route.openshift.io/v1&quot;,&quot;kind&quot;:&quot;Route&quot;,&quot;metadata&quot;:{&quot;annotations&quot;:{},&quot;labels&quot;:{&quot;app.kubernetes.io/component&quot;:&quot;gateway&quot;,&quot;app.kubernetes.io/instance&quot;:&quot;e2e-inf-a-759b04&quot;,&quot;app.kubernetes.io/name&quot;:&quot;maas&quot;,&quot;e2e.maas.opendatahub...&#10;[truncated; full report in element text]">@pytest.fixture(scope="module")
    def tenant_inference_cases():
        """Set up two tenants with models for inference testing."""
        require_aitenant_crd()
        case_a = new_named_tenant_case("e2e-inf-a")
        case_b = new_named_tenant_case("e2e-inf-b")
    
        try:
            # Bootstrap tenants
            for case in (case_a, case_b):
&gt;               bootstrap_aitenant_tenant(case)

test/e2e/tests/test_tenant_model_inference.py:153: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
test/e2e/tests/multitenancy_helpers.py:1130: in bootstrap_aitenant_tenant
    apply_gateway_route_fixture(case["gateway_name"], fixture_label=case["tenant_label_name"])
test/e2e/tests/multitenancy_helpers.py:1013: in apply_gateway_route_fixture
    wait_for_route_admitted(route_name)
test/e2e/tests/multitenancy_helpers.py:812: in wait_for_route_admitted
    return wait_for_json("route", route_name, GATEWAY_NAMESPACE, predicate=_predicate, timeout=timeout, interval=interval)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

kind = 'route', name = 'e2e-inf-a-759b04-route', namespace = 'openshift-ingress'
predicate = &lt;function wait_for_route_admitted.&lt;locals&gt;._predicate at 0x7fd0b24d8f40&gt;
timeout = 60, interval = 3

    def wait_for_json(
        kind: str,
        name: str,
        namespace: Optional[str] = None,
        *,
        predicate=None,
        timeout: int = 180,
        interval: int = 5,
    ) -&gt; dict:
        deadline = time.time() + timeout
        last_obj = None
        while time.time() &lt; deadline:
            obj = get_json_or_none(kind, name, namespace)
            if obj is not None:
                last_obj = obj
                if predicate is None or predicate(obj):
                    return obj
            time.sleep(interval)
&gt;       raise AssertionError(
            f"{kind}/{name} in {namespace or '&lt;cluster&gt;'} did not satisfy condition. Last object: {last_obj}"
        )
E       AssertionError: route/e2e-inf-a-759b04-route in openshift-ingress did not satisfy condition. Last object: {'apiVersion': 'route.openshift.io/v1', 'kind': 'Route', 'metadata': {'annotations': {'kubectl.kubernetes.io/last-applied-configuration': '{"apiVersion":"route.openshift.io/v1","kind":"Route","metadata":{"annotations":{},"labels":{"app.kubernetes.io/component":"gateway","app.kubernetes.io/instance":"e2e-inf-a-759b04","app.kubernetes.io/name":"maas","e2e.maas.opendatahub.io/fixture":"e2e-inf-a-759b04","gateway.networking.k8s.io/gateway-name":"e2e-inf-a-759b04"},"name":"e2e-inf-a-759b04-route","namespace":"openshift-ingress"},"spec":{"host":"e2e-inf-a-759b04.apps.00125a180bb08b60980b.prod.konflux-ocp-ci.dev","port":{"targetPort":443},"tls":{"destinationCACertificate":"-----BEGIN CERTIFICATE-----\\nMIIDUTCCAjmgAwIBAgIIPa8XXlMYkUowDQYJKoZIhvcNAQELBQAwNjE0MDIGA1UE\\nAwwrb3BlbnNoaWZ0LXNlcnZpY2Utc2VydmluZy1zaWduZXJAMTc5MzczNDYwMDAe\\nFw0yNjExMDMxOTM2MzlaFw0yOTAxMDExOTM2NDBaMDYxNDAyBgNVBAMMK29wZW5z\\naGlmdC1zZXJ2aWNlLXNlcnZpbmctc2lnbmVyQDE3OTM3MzQ2MDAwggEiMA0GCSqG\\nSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCuESLdcYS88PpkvZOaIx34dTGVFzqUE6ne\\nJDyMeQn+qRdX3Qe7t4Wosr12WRyZifg1/TYGPYg5TUef8uzKb4HfhJ/3oGaBsgMx\\nwtFaFZvvGc0aiyH1UcGZQ9/PlRK4F/UnibUAPmTuxD7HQtno7BLsRry8QxxI5C29\\nb2niiS5EdFGQub5dA8ioxd3grvg+/rKX79i+kUntjVKFoPkCKDkkFwsK7C09Po/y\\nhApRNRXMz8ObwuTyokSMSGNociAEz8XcBK3+7GjGUVarnxrAohxwoNlHS88cSuSb\\nBNB/9M98a8qyH+193vFZEhy15A+/m5Saj+Ph4V2qmv0ygzFWnCzPAgMBAAGjYzBh\\nMA4GA1UdDwEB/wQEAwICpDAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRUqiJT\\ndLJVySmvrXK8RsmJGMCShTAfBgNVHSMEGDAWgBRUqiJTdLJVySmvrXK8RsmJGMCS\\nhTANBgkqhkiG9w0BAQsFAAOCAQEAIcXcWwCWRnvyYnVfUiIvOiWBIZISzXdVEwUX\\nTTte8+QqM3Ur9WfmHCU3YV1q/t041E1tHFR8QdkYUU9vy7CfKH9HHAZJdJZEl9bv\\nizMqeIYagfDbiKkOpD71cjo5ZtzC42xhrHSrH3otFEZochms6xAUP+MB98stNWVm\\n62GCZfYyKCvPLUh1wJNRcHRoyYan6+IDjT2rhoWTeOUO6vElJ0lrMOf+MV4WK6UE\\n79AN1Bt/Rc1NiKZUAy1gjwmAsLrtJbyxgeh/lnpCVjz1XDL/gGyMODKvN5NGGWTw\\n8PsEqdZWGQoK6sm4ewR6MyE9/Jv8FYtBd9r+R6w+yMEpY5O+Pw==\\n-----END CERTIFICATE-----\\n","insecureEdgeTerminationPolicy":"Redirect","termination":"reencrypt"},"to":{"kind":"Service","name":"e2e-inf-a-759b04-openshift-default","weight":100}}}\n'}, 'creationTimestamp': '2026-11-03T20:26:27Z', 'generation': 1, 'labels': {'app.kubernetes.io/component': 'gateway', 'app.kubernetes.io/instance': 'e2e-inf-a-759b04', 'app.kubernetes.io/name': 'maas', 'e2e.maas.opendatahub.io/fixture': 'e2e-inf-a-759b04', 'gateway.networking.k8s.io/gateway-name': 'e2e-inf-a-759b04'}, 'name': 'e2e-inf-a-759b04-route', 'namespace': 'openshift-ingress', 'resourceVersion': '157101', 'uid': '9b60ffb8-33dc-44d8-95d2-f167cad41f26'}, 'spec': {'host': 'e2e-inf-a-759b04.apps.00125a180bb08b60980b.prod.konflux-ocp-ci.dev', 'port': {'targetPort': 443}, 'tls': {'destinationCACertificate': '-----BEGIN CERTIFICATE-----\nMIIDUTCCAjmgAwIBAgIIPa8XXlMYkUowDQYJKoZIhvcNAQELBQAwNjE0MDIGA1UE\nAwwrb3BlbnNoaWZ0LXNlcnZpY2Utc2VydmluZy1zaWduZXJAMTc5MzczNDYwMDAe\nFw0yNjExMDMxOTM2MzlaFw0yOTAxMDExOTM2NDBaMDYxNDAyBgNVBAMMK29wZW5z\naGlmdC1zZXJ2aWNlLXNlcnZpbmctc2lnbmVyQDE3OTM3MzQ2MDAwggEiMA0GCSqG\nSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCuESLdcYS88PpkvZOaIx34dTGVFzqUE6ne\nJDyMeQn+qRdX3Qe7t4Wosr12WRyZifg1/TYGPYg5TUef8uzKb4HfhJ/3oGaBsgMx\nwtFaFZvvGc0aiyH1UcGZQ9/PlRK4F/UnibUAPmTuxD7HQtno7BLsRry8QxxI5C29\nb2niiS5EdFGQub5dA8ioxd3grvg+/rKX79i+kUntjVKFoPkCKDkkFwsK7C09Po/y\nhApRNRXMz8ObwuTyokSMSGNociAEz8XcBK3+7GjGUVarnxrAohxwoNlHS88cSuSb\nBNB/9M98a8qyH+193vFZEhy15A+/m5Saj+Ph4V2qmv0ygzFWnCzPAgMBAAGjYzBh\nMA4GA1UdDwEB/wQEAwICpDAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRUqiJT\ndLJVySmvrXK8RsmJGMCShTAfBgNVHSMEGDAWgBRUqiJTdLJVySmvrXK8RsmJGMCS\nhTANBgkqhkiG9w0BAQsFAAOCAQEAIcXcWwCWRnvyYnVfUiIvOiWBIZISzXdVEwUX\nTTte8+QqM3Ur9WfmHCU3YV1q/t041E1tHFR8QdkYUU9vy7CfKH9HHAZJdJZEl9bv\nizMqeIYagfDbiKkOpD71cjo5ZtzC42xhrHSrH3otFEZochms6xAUP+MB98stNWVm\n62GCZfYyKCvPLUh1wJNRcHRoyYan6+IDjT2rhoWTeOUO6vElJ0lrMOf+MV4WK6UE\n79AN1Bt/Rc1NiKZUAy1gjwmAsLrtJbyxgeh/lnpCVjz1XDL/gGyMODKvN5NGGWTw\n8PsEqdZWGQoK6sm4ewR6MyE9/Jv8FYtBd9r+R6w+yMEpY5O+Pw==\n-----END CERTIFICATE-----\n', 'insecureEdgeTerminationPolicy': 'Redirect', 'termination': 'reencrypt'}, 'to': {'kind': 'Service', 'name': 'e2e-inf-a-759b04-openshift-default', 'weight': 100}, 'wildcardPolicy': 'None'}, 'status': {}}

test/e2e/tests/multitenancy_helpers.py:301: AssertionError</error></testcase><testcase classname="tests.test_tenant_model_inference.TestTenantBodyRouting" name="test_each_tenant_routes_to_own_model" time="0.000"><error message="failed on setup with &quot;AssertionError: route/e2e-inf-a-759b04-route in openshift-ingress did not satisfy condition. Last object: {'apiVersion': 'route.openshift.io/v1', 'kind': 'Route', 'metadata': {'annotations': {'kubectl.kubernetes.io/last-applied-configuration': '{&quot;apiVersion&quot;:&quot;route.openshift.io/v1&quot;,&quot;kind&quot;:&quot;Route&quot;,&quot;metadata&quot;:{&quot;annotations&quot;:{},&quot;labels&quot;:{&quot;app.kubernetes.io/component&quot;:&quot;gateway&quot;,&quot;app.kubernetes.io/instance&quot;:&quot;e2e-inf-a-759b04&quot;,&quot;app.kubernetes.io/name&quot;:&quot;maas&quot;,&quot;e2e.maas.opendatahub...&#10;[truncated; full report in element text]">@pytest.fixture(scope="module")
    def tenant_inference_cases():
        """Set up two tenants with models for inference testing."""
        require_aitenant_crd()
        case_a = new_named_tenant_case("e2e-inf-a")
        case_b = new_named_tenant_case("e2e-inf-b")
    
        try:
            # Bootstrap tenants
            for case in (case_a, case_b):
&gt;               bootstrap_aitenant_tenant(case)

test/e2e/tests/test_tenant_model_inference.py:153: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
test/e2e/tests/multitenancy_helpers.py:1130: in bootstrap_aitenant_tenant
    apply_gateway_route_fixture(case["gateway_name"], fixture_label=case["tenant_label_name"])
test/e2e/tests/multitenancy_helpers.py:1013: in apply_gateway_route_fixture
    wait_for_route_admitted(route_name)
test/e2e/tests/multitenancy_helpers.py:812: in wait_for_route_admitted
    return wait_for_json("route", route_name, GATEWAY_NAMESPACE, predicate=_predicate, timeout=timeout, interval=interval)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

kind = 'route', name = 'e2e-inf-a-759b04-route', namespace = 'openshift-ingress'
predicate = &lt;function wait_for_route_admitted.&lt;locals&gt;._predicate at 0x7fd0b24d8f40&gt;
timeout = 60, interval = 3

    def wait_for_json(
        kind: str,
        name: str,
        namespace: Optional[str] = None,
        *,
        predicate=None,
        timeout: int = 180,
        interval: int = 5,
    ) -&gt; dict:
        deadline = time.time() + timeout
        last_obj = None
        while time.time() &lt; deadline:
            obj = get_json_or_none(kind, name, namespace)
            if obj is not None:
                last_obj = obj
                if predicate is None or predicate(obj):
                    return obj
            time.sleep(interval)
&gt;       raise AssertionError(
            f"{kind}/{name} in {namespace or '&lt;cluster&gt;'} did not satisfy condition. Last object: {last_obj}"
        )
E       AssertionError: route/e2e-inf-a-759b04-route in openshift-ingress did not satisfy condition. Last object: {'apiVersion': 'route.openshift.io/v1', 'kind': 'Route', 'metadata': {'annotations': {'kubectl.kubernetes.io/last-applied-configuration': '{"apiVersion":"route.openshift.io/v1","kind":"Route","metadata":{"annotations":{},"labels":{"app.kubernetes.io/component":"gateway","app.kubernetes.io/instance":"e2e-inf-a-759b04","app.kubernetes.io/name":"maas","e2e.maas.opendatahub.io/fixture":"e2e-inf-a-759b04","gateway.networking.k8s.io/gateway-name":"e2e-inf-a-759b04"},"name":"e2e-inf-a-759b04-route","namespace":"openshift-ingress"},"spec":{"host":"e2e-inf-a-759b04.apps.00125a180bb08b60980b.prod.konflux-ocp-ci.dev","port":{"targetPort":443},"tls":{"destinationCACertificate":"-----BEGIN CERTIFICATE-----\\nMIIDUTCCAjmgAwIBAgIIPa8XXlMYkUowDQYJKoZIhvcNAQELBQAwNjE0MDIGA1UE\\nAwwrb3BlbnNoaWZ0LXNlcnZpY2Utc2VydmluZy1zaWduZXJAMTc5MzczNDYwMDAe\\nFw0yNjExMDMxOTM2MzlaFw0yOTAxMDExOTM2NDBaMDYxNDAyBgNVBAMMK29wZW5z\\naGlmdC1zZXJ2aWNlLXNlcnZpbmctc2lnbmVyQDE3OTM3MzQ2MDAwggEiMA0GCSqG\\nSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCuESLdcYS88PpkvZOaIx34dTGVFzqUE6ne\\nJDyMeQn+qRdX3Qe7t4Wosr12WRyZifg1/TYGPYg5TUef8uzKb4HfhJ/3oGaBsgMx\\nwtFaFZvvGc0aiyH1UcGZQ9/PlRK4F/UnibUAPmTuxD7HQtno7BLsRry8QxxI5C29\\nb2niiS5EdFGQub5dA8ioxd3grvg+/rKX79i+kUntjVKFoPkCKDkkFwsK7C09Po/y\\nhApRNRXMz8ObwuTyokSMSGNociAEz8XcBK3+7GjGUVarnxrAohxwoNlHS88cSuSb\\nBNB/9M98a8qyH+193vFZEhy15A+/m5Saj+Ph4V2qmv0ygzFWnCzPAgMBAAGjYzBh\\nMA4GA1UdDwEB/wQEAwICpDAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRUqiJT\\ndLJVySmvrXK8RsmJGMCShTAfBgNVHSMEGDAWgBRUqiJTdLJVySmvrXK8RsmJGMCS\\nhTANBgkqhkiG9w0BAQsFAAOCAQEAIcXcWwCWRnvyYnVfUiIvOiWBIZISzXdVEwUX\\nTTte8+QqM3Ur9WfmHCU3YV1q/t041E1tHFR8QdkYUU9vy7CfKH9HHAZJdJZEl9bv\\nizMqeIYagfDbiKkOpD71cjo5ZtzC42xhrHSrH3otFEZochms6xAUP+MB98stNWVm\\n62GCZfYyKCvPLUh1wJNRcHRoyYan6+IDjT2rhoWTeOUO6vElJ0lrMOf+MV4WK6UE\\n79AN1Bt/Rc1NiKZUAy1gjwmAsLrtJbyxgeh/lnpCVjz1XDL/gGyMODKvN5NGGWTw\\n8PsEqdZWGQoK6sm4ewR6MyE9/Jv8FYtBd9r+R6w+yMEpY5O+Pw==\\n-----END CERTIFICATE-----\\n","insecureEdgeTerminationPolicy":"Redirect","termination":"reencrypt"},"to":{"kind":"Service","name":"e2e-inf-a-759b04-openshift-default","weight":100}}}\n'}, 'creationTimestamp': '2026-11-03T20:26:27Z', 'generation': 1, 'labels': {'app.kubernetes.io/component': 'gateway', 'app.kubernetes.io/instance': 'e2e-inf-a-759b04', 'app.kubernetes.io/name': 'maas', 'e2e.maas.opendatahub.io/fixture': 'e2e-inf-a-759b04', 'gateway.networking.k8s.io/gateway-name': 'e2e-inf-a-759b04'}, 'name': 'e2e-inf-a-759b04-route', 'namespace': 'openshift-ingress', 'resourceVersion': '157101', 'uid': '9b60ffb8-33dc-44d8-95d2-f167cad41f26'}, 'spec': {'host': 'e2e-inf-a-759b04.apps.00125a180bb08b60980b.prod.konflux-ocp-ci.dev', 'port': {'targetPort': 443}, 'tls': {'destinationCACertificate': '-----BEGIN CERTIFICATE-----\nMIIDUTCCAjmgAwIBAgIIPa8XXlMYkUowDQYJKoZIhvcNAQELBQAwNjE0MDIGA1UE\nAwwrb3BlbnNoaWZ0LXNlcnZpY2Utc2VydmluZy1zaWduZXJAMTc5MzczNDYwMDAe\nFw0yNjExMDMxOTM2MzlaFw0yOTAxMDExOTM2NDBaMDYxNDAyBgNVBAMMK29wZW5z\naGlmdC1zZXJ2aWNlLXNlcnZpbmctc2lnbmVyQDE3OTM3MzQ2MDAwggEiMA0GCSqG\nSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCuESLdcYS88PpkvZOaIx34dTGVFzqUE6ne\nJDyMeQn+qRdX3Qe7t4Wosr12WRyZifg1/TYGPYg5TUef8uzKb4HfhJ/3oGaBsgMx\nwtFaFZvvGc0aiyH1UcGZQ9/PlRK4F/UnibUAPmTuxD7HQtno7BLsRry8QxxI5C29\nb2niiS5EdFGQub5dA8ioxd3grvg+/rKX79i+kUntjVKFoPkCKDkkFwsK7C09Po/y\nhApRNRXMz8ObwuTyokSMSGNociAEz8XcBK3+7GjGUVarnxrAohxwoNlHS88cSuSb\nBNB/9M98a8qyH+193vFZEhy15A+/m5Saj+Ph4V2qmv0ygzFWnCzPAgMBAAGjYzBh\nMA4GA1UdDwEB/wQEAwICpDAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRUqiJT\ndLJVySmvrXK8RsmJGMCShTAfBgNVHSMEGDAWgBRUqiJTdLJVySmvrXK8RsmJGMCS\nhTANBgkqhkiG9w0BAQsFAAOCAQEAIcXcWwCWRnvyYnVfUiIvOiWBIZISzXdVEwUX\nTTte8+QqM3Ur9WfmHCU3YV1q/t041E1tHFR8QdkYUU9vy7CfKH9HHAZJdJZEl9bv\nizMqeIYagfDbiKkOpD71cjo5ZtzC42xhrHSrH3otFEZochms6xAUP+MB98stNWVm\n62GCZfYyKCvPLUh1wJNRcHRoyYan6+IDjT2rhoWTeOUO6vElJ0lrMOf+MV4WK6UE\n79AN1Bt/Rc1NiKZUAy1gjwmAsLrtJbyxgeh/lnpCVjz1XDL/gGyMODKvN5NGGWTw\n8PsEqdZWGQoK6sm4ewR6MyE9/Jv8FYtBd9r+R6w+yMEpY5O+Pw==\n-----END CERTIFICATE-----\n', 'insecureEdgeTerminationPolicy': 'Redirect', 'termination': 'reencrypt'}, 'to': {'kind': 'Service', 'name': 'e2e-inf-a-759b04-openshift-default', 'weight': 100}, 'wildcardPolicy': 'None'}, 'status': {}}

test/e2e/tests/multitenancy_helpers.py:301: AssertionError</error></testcase><testcase classname="tests.test_tenant_namespace_discovery.TestTenantNamespaceDiscovery" name="test_labeled_tenant_namespace_is_discovered" time="317.376"><failure message="AssertionError: maasauthpolicy/e2e-policy-625f4041 in ai-tenant-e2e-mt-625f4041 did not satisfy condition. Last object: {'apiVersion': 'maas.opendatahub.io/v1alpha1', 'kind': 'MaaSAuthPolicy', 'metadata': {'annotations': {'kubectl.kubernetes.io/last-applied-configuration': '{&quot;apiVersion&quot;:&quot;maas.opendatahub.io/v1alpha1&quot;,&quot;kind&quot;:&quot;MaaSAuthPolicy&quot;,&quot;metadata&quot;:{&quot;annotations&quot;:{},&quot;name&quot;:&quot;e2e-policy-625f4041&quot;,&quot;namespace&quot;:&quot;ai-tenant-e2e-mt-625f4041&quot;},&quot;spec&quot;:{&quot;modelRefs&quot;:[{&quot;name&quot;:&quot;facebook-opt-125m-simulated...&#10;[truncated; full report in element text]">self = &lt;test_tenant_namespace_discovery.TestTenantNamespaceDiscovery object at 0x7fd0b25f3710&gt;

    def test_labeled_tenant_namespace_is_discovered(self):
        """1.1: Controller discovers labeled tenant namespaces and reconciles CRs."""
        case = new_discovery_case(use_default_gateway=True)
        try:
            apply_discovery_labels(case["tenant_ns"], case["tenant_label_name"])
            apply_tenant_cr(case["tenant_ns"], DEFAULT_GATEWAY_NAME)
            apply_maas_auth_policy(case["policy_name"], case["tenant_ns"])
            apply_maas_subscription(case["subscription_name"], case["tenant_ns"])
    
            wait_for_finalizer("maasauthpolicy", case["policy_name"], case["tenant_ns"], FINALIZER_AUTHPOLICY)
            wait_for_finalizer("maassubscription", case["subscription_name"], case["tenant_ns"], FINALIZER_SUBSCRIPTION)
&gt;           auth = wait_for_status_phase(
                "maasauthpolicy",
                case["policy_name"],
                case["tenant_ns"],
                expected_phase="Active",
            )

test/e2e/tests/test_tenant_namespace_discovery.py:92: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
test/e2e/tests/multitenancy_helpers.py:356: in wait_for_status_phase
    return wait_for_json(kind, name, namespace, predicate=_predicate, timeout=timeout, interval=interval)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

kind = 'maasauthpolicy', name = 'e2e-policy-625f4041'
namespace = 'ai-tenant-e2e-mt-625f4041'
predicate = &lt;function wait_for_status_phase.&lt;locals&gt;._predicate at 0x7fd0b23ca980&gt;
timeout = 180, interval = 5

    def wait_for_json(
        kind: str,
        name: str,
        namespace: Optional[str] = None,
        *,
        predicate=None,
        timeout: int = 180,
        interval: int = 5,
    ) -&gt; dict:
        deadline = time.time() + timeout
        last_obj = None
        while time.time() &lt; deadline:
            obj = get_json_or_none(kind, name, namespace)
            if obj is not None:
                last_obj = obj
                if predicate is None or predicate(obj):
                    return obj
            time.sleep(interval)
&gt;       raise AssertionError(
            f"{kind}/{name} in {namespace or '&lt;cluster&gt;'} did not satisfy condition. Last object: {last_obj}"
        )
E       AssertionError: maasauthpolicy/e2e-policy-625f4041 in ai-tenant-e2e-mt-625f4041 did not satisfy condition. Last object: {'apiVersion': 'maas.opendatahub.io/v1alpha1', 'kind': 'MaaSAuthPolicy', 'metadata': {'annotations': {'kubectl.kubernetes.io/last-applied-configuration': '{"apiVersion":"maas.opendatahub.io/v1alpha1","kind":"MaaSAuthPolicy","metadata":{"annotations":{},"name":"e2e-policy-625f4041","namespace":"ai-tenant-e2e-mt-625f4041"},"spec":{"modelRefs":[{"name":"facebook-opt-125m-simulated","namespace":"llm"}],"subjects":{"groups":[{"name":"system:authenticated"}]}}}\n'}, 'creationTimestamp': '2026-11-03T20:27:34Z', 'finalizers': ['maas.opendatahub.io/authpolicy-cleanup'], 'generation': 1, 'name': 'e2e-policy-625f4041', 'namespace': 'ai-tenant-e2e-mt-625f4041', 'resourceVersion': '170821', 'uid': 'abf26038-36f3-48e0-9f6e-543cb490ac9d'}, 'spec': {'modelRefs': [{'name': 'facebook-opt-125m-simulated', 'namespace': 'llm'}], 'subjects': {'groups': [{'name': 'system:authenticated'}]}}, 'status': {'conditions': [{'lastTransitionTime': '2026-11-03T20:27:34Z', 'message': 'Waiting for gateway AuthPolicy openshift-ingress/maas-gateway-auth to be accepted and enforced: AuthPolicy status observed generation 32, current generation is 77', 'observedGeneration': 1, 'reason': 'Unknown', 'status': 'Unknown', 'type': 'Ready'}], 'phase': 'Pending'}}

test/e2e/tests/multitenancy_helpers.py:301: AssertionError</failure></testcase><testcase classname="tests.test_tenant_external_model_shared.TestSharedModelTwoGateways" name="test_both_gateways_serve" time="337.421"><error message="failed on setup with &quot;AssertionError: failed to mint API key on tenant e2e-extmod-b-0e4ce7 maas-api: 504 &lt;html&gt;&lt;body&gt;&lt;h1&gt;504 Gateway Time-out&lt;/h1&gt;&#10;The server didn't respond in time.&#10;&lt;/body&gt;&lt;/html&gt;&quot;">self = &lt;test_tenant_external_model_shared.TestSharedModelTwoGateways object at 0x7fb5a138d8d0&gt;
shared_env = {'tenant_a': {'suffix': '8b7351', 'tenant_ns': 'ai-tenant-e2e-extmod-a-8b7351', 'tenant_label_name': 'e2e-extmod-a-8b7...d-shr-user-324935', 'resources': &lt;tenant_external_model_helpers.TenantExternalModelResources object at 0x7fb5a10e1910&gt;}
shared_model = {'model': {'name': 'e2e-shr-shared-7cb2ed', 'namespace': 'e2e-extmod-shr-user-324935', 'client_name': 'e2e-shr-shared-...'e2e-shr-shared-7cb2ed-e2e-extmod-a-8b7351', 'e2e-extmod-b-0e4ce7': 'e2e-shr-shared-7cb2ed-e2e-extmod-b-0e4ce7'}, ...}}

    @pytest.fixture(scope="class")
    def shared_serving(self, shared_env, shared_model):
        """Per-tenant auth/subscription stacks and API keys for the shared model."""
        env = shared_env
        model = shared_model["model"]
        _require_maas_route(model)
        access_a = _serve_in_tenant(env, env["tenant_a"], model)
&gt;       access_b = _serve_in_tenant(env, env["tenant_b"], model)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

test/e2e/tests/test_tenant_external_model_shared.py:214: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
test/e2e/tests/test_tenant_external_model_shared.py:124: in _serve_in_tenant
    access = serve_external_model_in_tenant(
test/e2e/tests/tenant_external_model_helpers.py:1265: in serve_external_model_in_tenant
    api_key = mint_tenant_api_key(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

case = {'suffix': '0e4ce7', 'tenant_ns': 'ai-tenant-e2e-extmod-b-0e4ce7', 'tenant_label_name': 'e2e-extmod-b-0e4ce7', 'gateway_name': 'e2e-extmod-b-0e4ce7', ...}
key_name = 'e2e-extmod-2394068d'
subscription_name = 'e2e-shr-shared-7cb2ed-sub'

    def mint_tenant_api_key(case: dict[str, str], key_name: str, subscription_name: str) -&gt; str:
        response = create_api_key_at(case["maas_api_url"], _get_cluster_token(), key_name, subscription=subscription_name)
&gt;       assert response.status_code in (200, 201), (
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
            f"failed to mint API key on tenant {case['tenant_label_name']} maas-api: "
            f"{response.status_code} {redact_sensitive(response.text)}"
        )
E       AssertionError: failed to mint API key on tenant e2e-extmod-b-0e4ce7 maas-api: 504 &lt;html&gt;&lt;body&gt;&lt;h1&gt;504 Gateway Time-out&lt;/h1&gt;
E       The server didn't respond in time.
E       &lt;/body&gt;&lt;/html&gt;

test/e2e/tests/tenant_external_model_helpers.py:1278: AssertionError</error></testcase><testcase classname="tests.test_tenant_model_inference.TestTenantModelInference" name="test_tenant_isolation_cross_gateway_blocked" time="277.218"><error message="failed on setup with &quot;AssertionError: route/e2e-inf-a-28b78c-route in openshift-ingress did not satisfy condition. Last object: {'apiVersion': 'route.openshift.io/v1', 'kind': 'Route', 'metadata': {'annotations': {'kubectl.kubernetes.io/last-applied-configuration': '{&quot;apiVersion&quot;:&quot;route.openshift.io/v1&quot;,&quot;kind&quot;:&quot;Route&quot;,&quot;metadata&quot;:{&quot;annotations&quot;:{},&quot;labels&quot;:{&quot;app.kubernetes.io/component&quot;:&quot;gateway&quot;,&quot;app.kubernetes.io/instance&quot;:&quot;e2e-inf-a-28b78c&quot;,&quot;app.kubernetes.io/name&quot;:&quot;maas&quot;,&quot;e2e.maas.opendatahub...&#10;[truncated; full report in element text]">@pytest.fixture(scope="module")
    def tenant_inference_cases():
        """Set up two tenants with models for inference testing."""
        require_aitenant_crd()
        case_a = new_named_tenant_case("e2e-inf-a")
        case_b = new_named_tenant_case("e2e-inf-b")
    
        try:
            # Bootstrap tenants
            for case in (case_a, case_b):
&gt;               bootstrap_aitenant_tenant(case)

test/e2e/tests/test_tenant_model_inference.py:153: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
test/e2e/tests/multitenancy_helpers.py:1130: in bootstrap_aitenant_tenant
    apply_gateway_route_fixture(case["gateway_name"], fixture_label=case["tenant_label_name"])
test/e2e/tests/multitenancy_helpers.py:1013: in apply_gateway_route_fixture
    wait_for_route_admitted(route_name)
test/e2e/tests/multitenancy_helpers.py:812: in wait_for_route_admitted
    return wait_for_json("route", route_name, GATEWAY_NAMESPACE, predicate=_predicate, timeout=timeout, interval=interval)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

kind = 'route', name = 'e2e-inf-a-28b78c-route', namespace = 'openshift-ingress'
predicate = &lt;function wait_for_route_admitted.&lt;locals&gt;._predicate at 0x7f52fdb0a340&gt;
timeout = 60, interval = 3

    def wait_for_json(
        kind: str,
        name: str,
        namespace: Optional[str] = None,
        *,
        predicate=None,
        timeout: int = 180,
        interval: int = 5,
    ) -&gt; dict:
        deadline = time.time() + timeout
        last_obj = None
        while time.time() &lt; deadline:
            obj = get_json_or_none(kind, name, namespace)
            if obj is not None:
                last_obj = obj
                if predicate is None or predicate(obj):
                    return obj
            time.sleep(interval)
&gt;       raise AssertionError(
            f"{kind}/{name} in {namespace or '&lt;cluster&gt;'} did not satisfy condition. Last object: {last_obj}"
        )
E       AssertionError: route/e2e-inf-a-28b78c-route in openshift-ingress did not satisfy condition. Last object: {'apiVersion': 'route.openshift.io/v1', 'kind': 'Route', 'metadata': {'annotations': {'kubectl.kubernetes.io/last-applied-configuration': '{"apiVersion":"route.openshift.io/v1","kind":"Route","metadata":{"annotations":{},"labels":{"app.kubernetes.io/component":"gateway","app.kubernetes.io/instance":"e2e-inf-a-28b78c","app.kubernetes.io/name":"maas","e2e.maas.opendatahub.io/fixture":"e2e-inf-a-28b78c","gateway.networking.k8s.io/gateway-name":"e2e-inf-a-28b78c"},"name":"e2e-inf-a-28b78c-route","namespace":"openshift-ingress"},"spec":{"host":"e2e-inf-a-28b78c.apps.00125a180bb08b60980b.prod.konflux-ocp-ci.dev","port":{"targetPort":443},"tls":{"destinationCACertificate":"-----BEGIN CERTIFICATE-----\\nMIIDUTCCAjmgAwIBAgIIPa8XXlMYkUowDQYJKoZIhvcNAQELBQAwNjE0MDIGA1UE\\nAwwrb3BlbnNoaWZ0LXNlcnZpY2Utc2VydmluZy1zaWduZXJAMTc5MzczNDYwMDAe\\nFw0yNjExMDMxOTM2MzlaFw0yOTAxMDExOTM2NDBaMDYxNDAyBgNVBAMMK29wZW5z\\naGlmdC1zZXJ2aWNlLXNlcnZpbmctc2lnbmVyQDE3OTM3MzQ2MDAwggEiMA0GCSqG\\nSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCuESLdcYS88PpkvZOaIx34dTGVFzqUE6ne\\nJDyMeQn+qRdX3Qe7t4Wosr12WRyZifg1/TYGPYg5TUef8uzKb4HfhJ/3oGaBsgMx\\nwtFaFZvvGc0aiyH1UcGZQ9/PlRK4F/UnibUAPmTuxD7HQtno7BLsRry8QxxI5C29\\nb2niiS5EdFGQub5dA8ioxd3grvg+/rKX79i+kUntjVKFoPkCKDkkFwsK7C09Po/y\\nhApRNRXMz8ObwuTyokSMSGNociAEz8XcBK3+7GjGUVarnxrAohxwoNlHS88cSuSb\\nBNB/9M98a8qyH+193vFZEhy15A+/m5Saj+Ph4V2qmv0ygzFWnCzPAgMBAAGjYzBh\\nMA4GA1UdDwEB/wQEAwICpDAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRUqiJT\\ndLJVySmvrXK8RsmJGMCShTAfBgNVHSMEGDAWgBRUqiJTdLJVySmvrXK8RsmJGMCS\\nhTANBgkqhkiG9w0BAQsFAAOCAQEAIcXcWwCWRnvyYnVfUiIvOiWBIZISzXdVEwUX\\nTTte8+QqM3Ur9WfmHCU3YV1q/t041E1tHFR8QdkYUU9vy7CfKH9HHAZJdJZEl9bv\\nizMqeIYagfDbiKkOpD71cjo5ZtzC42xhrHSrH3otFEZochms6xAUP+MB98stNWVm\\n62GCZfYyKCvPLUh1wJNRcHRoyYan6+IDjT2rhoWTeOUO6vElJ0lrMOf+MV4WK6UE\\n79AN1Bt/Rc1NiKZUAy1gjwmAsLrtJbyxgeh/lnpCVjz1XDL/gGyMODKvN5NGGWTw\\n8PsEqdZWGQoK6sm4ewR6MyE9/Jv8FYtBd9r+R6w+yMEpY5O+Pw==\\n-----END CERTIFICATE-----\\n","insecureEdgeTerminationPolicy":"Redirect","termination":"reencrypt"},"to":{"kind":"Service","name":"e2e-inf-a-28b78c-openshift-default","weight":100}}}\n'}, 'creationTimestamp': '2026-11-03T20:26:48Z', 'generation': 1, 'labels': {'app.kubernetes.io/component': 'gateway', 'app.kubernetes.io/instance': 'e2e-inf-a-28b78c', 'app.kubernetes.io/name': 'maas', 'e2e.maas.opendatahub.io/fixture': 'e2e-inf-a-28b78c', 'gateway.networking.k8s.io/gateway-name': 'e2e-inf-a-28b78c'}, 'name': 'e2e-inf-a-28b78c-route', 'namespace': 'openshift-ingress', 'resourceVersion': '158041', 'uid': '152d6bce-6bb7-4af2-8035-65b609e4c3d9'}, 'spec': {'host': 'e2e-inf-a-28b78c.apps.00125a180bb08b60980b.prod.konflux-ocp-ci.dev', 'port': {'targetPort': 443}, 'tls': {'destinationCACertificate': '-----BEGIN CERTIFICATE-----\nMIIDUTCCAjmgAwIBAgIIPa8XXlMYkUowDQYJKoZIhvcNAQELBQAwNjE0MDIGA1UE\nAwwrb3BlbnNoaWZ0LXNlcnZpY2Utc2VydmluZy1zaWduZXJAMTc5MzczNDYwMDAe\nFw0yNjExMDMxOTM2MzlaFw0yOTAxMDExOTM2NDBaMDYxNDAyBgNVBAMMK29wZW5z\naGlmdC1zZXJ2aWNlLXNlcnZpbmctc2lnbmVyQDE3OTM3MzQ2MDAwggEiMA0GCSqG\nSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCuESLdcYS88PpkvZOaIx34dTGVFzqUE6ne\nJDyMeQn+qRdX3Qe7t4Wosr12WRyZifg1/TYGPYg5TUef8uzKb4HfhJ/3oGaBsgMx\nwtFaFZvvGc0aiyH1UcGZQ9/PlRK4F/UnibUAPmTuxD7HQtno7BLsRry8QxxI5C29\nb2niiS5EdFGQub5dA8ioxd3grvg+/rKX79i+kUntjVKFoPkCKDkkFwsK7C09Po/y\nhApRNRXMz8ObwuTyokSMSGNociAEz8XcBK3+7GjGUVarnxrAohxwoNlHS88cSuSb\nBNB/9M98a8qyH+193vFZEhy15A+/m5Saj+Ph4V2qmv0ygzFWnCzPAgMBAAGjYzBh\nMA4GA1UdDwEB/wQEAwICpDAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRUqiJT\ndLJVySmvrXK8RsmJGMCShTAfBgNVHSMEGDAWgBRUqiJTdLJVySmvrXK8RsmJGMCS\nhTANBgkqhkiG9w0BAQsFAAOCAQEAIcXcWwCWRnvyYnVfUiIvOiWBIZISzXdVEwUX\nTTte8+QqM3Ur9WfmHCU3YV1q/t041E1tHFR8QdkYUU9vy7CfKH9HHAZJdJZEl9bv\nizMqeIYagfDbiKkOpD71cjo5ZtzC42xhrHSrH3otFEZochms6xAUP+MB98stNWVm\n62GCZfYyKCvPLUh1wJNRcHRoyYan6+IDjT2rhoWTeOUO6vElJ0lrMOf+MV4WK6UE\n79AN1Bt/Rc1NiKZUAy1gjwmAsLrtJbyxgeh/lnpCVjz1XDL/gGyMODKvN5NGGWTw\n8PsEqdZWGQoK6sm4ewR6MyE9/Jv8FYtBd9r+R6w+yMEpY5O+Pw==\n-----END CERTIFICATE-----\n', 'insecureEdgeTerminationPolicy': 'Redirect', 'termination': 'reencrypt'}, 'to': {'kind': 'Service', 'name': 'e2e-inf-a-28b78c-openshift-default', 'weight': 100}, 'wildcardPolicy': 'None'}, 'status': {}}

test/e2e/tests/multitenancy_helpers.py:301: AssertionError</error></testcase><testcase classname="tests.test_tenant_model_inference.TestTenantGatewayNegativeSecurity" name="test_missing_api_key_denied_on_tenant_gateway[tenant_b]" time="0.000"><error message="failed on setup with &quot;AssertionError: route/e2e-inf-a-28b78c-route in openshift-ingress did not satisfy condition. Last object: {'apiVersion': 'route.openshift.io/v1', 'kind': 'Route', 'metadata': {'annotations': {'kubectl.kubernetes.io/last-applied-configuration': '{&quot;apiVersion&quot;:&quot;route.openshift.io/v1&quot;,&quot;kind&quot;:&quot;Route&quot;,&quot;metadata&quot;:{&quot;annotations&quot;:{},&quot;labels&quot;:{&quot;app.kubernetes.io/component&quot;:&quot;gateway&quot;,&quot;app.kubernetes.io/instance&quot;:&quot;e2e-inf-a-28b78c&quot;,&quot;app.kubernetes.io/name&quot;:&quot;maas&quot;,&quot;e2e.maas.opendatahub...&#10;[truncated; full report in element text]">@pytest.fixture(scope="module")
    def tenant_inference_cases():
        """Set up two tenants with models for inference testing."""
        require_aitenant_crd()
        case_a = new_named_tenant_case("e2e-inf-a")
        case_b = new_named_tenant_case("e2e-inf-b")
    
        try:
            # Bootstrap tenants
            for case in (case_a, case_b):
&gt;               bootstrap_aitenant_tenant(case)

test/e2e/tests/test_tenant_model_inference.py:153: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
test/e2e/tests/multitenancy_helpers.py:1130: in bootstrap_aitenant_tenant
    apply_gateway_route_fixture(case["gateway_name"], fixture_label=case["tenant_label_name"])
test/e2e/tests/multitenancy_helpers.py:1013: in apply_gateway_route_fixture
    wait_for_route_admitted(route_name)
test/e2e/tests/multitenancy_helpers.py:812: in wait_for_route_admitted
    return wait_for_json("route", route_name, GATEWAY_NAMESPACE, predicate=_predicate, timeout=timeout, interval=interval)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

kind = 'route', name = 'e2e-inf-a-28b78c-route', namespace = 'openshift-ingress'
predicate = &lt;function wait_for_route_admitted.&lt;locals&gt;._predicate at 0x7f52fdb0a340&gt;
timeout = 60, interval = 3

    def wait_for_json(
        kind: str,
        name: str,
        namespace: Optional[str] = None,
        *,
        predicate=None,
        timeout: int = 180,
        interval: int = 5,
    ) -&gt; dict:
        deadline = time.time() + timeout
        last_obj = None
        while time.time() &lt; deadline:
            obj = get_json_or_none(kind, name, namespace)
            if obj is not None:
                last_obj = obj
                if predicate is None or predicate(obj):
                    return obj
            time.sleep(interval)
&gt;       raise AssertionError(
            f"{kind}/{name} in {namespace or '&lt;cluster&gt;'} did not satisfy condition. Last object: {last_obj}"
        )
E       AssertionError: route/e2e-inf-a-28b78c-route in openshift-ingress did not satisfy condition. Last object: {'apiVersion': 'route.openshift.io/v1', 'kind': 'Route', 'metadata': {'annotations': {'kubectl.kubernetes.io/last-applied-configuration': '{"apiVersion":"route.openshift.io/v1","kind":"Route","metadata":{"annotations":{},"labels":{"app.kubernetes.io/component":"gateway","app.kubernetes.io/instance":"e2e-inf-a-28b78c","app.kubernetes.io/name":"maas","e2e.maas.opendatahub.io/fixture":"e2e-inf-a-28b78c","gateway.networking.k8s.io/gateway-name":"e2e-inf-a-28b78c"},"name":"e2e-inf-a-28b78c-route","namespace":"openshift-ingress"},"spec":{"host":"e2e-inf-a-28b78c.apps.00125a180bb08b60980b.prod.konflux-ocp-ci.dev","port":{"targetPort":443},"tls":{"destinationCACertificate":"-----BEGIN CERTIFICATE-----\\nMIIDUTCCAjmgAwIBAgIIPa8XXlMYkUowDQYJKoZIhvcNAQELBQAwNjE0MDIGA1UE\\nAwwrb3BlbnNoaWZ0LXNlcnZpY2Utc2VydmluZy1zaWduZXJAMTc5MzczNDYwMDAe\\nFw0yNjExMDMxOTM2MzlaFw0yOTAxMDExOTM2NDBaMDYxNDAyBgNVBAMMK29wZW5z\\naGlmdC1zZXJ2aWNlLXNlcnZpbmctc2lnbmVyQDE3OTM3MzQ2MDAwggEiMA0GCSqG\\nSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCuESLdcYS88PpkvZOaIx34dTGVFzqUE6ne\\nJDyMeQn+qRdX3Qe7t4Wosr12WRyZifg1/TYGPYg5TUef8uzKb4HfhJ/3oGaBsgMx\\nwtFaFZvvGc0aiyH1UcGZQ9/PlRK4F/UnibUAPmTuxD7HQtno7BLsRry8QxxI5C29\\nb2niiS5EdFGQub5dA8ioxd3grvg+/rKX79i+kUntjVKFoPkCKDkkFwsK7C09Po/y\\nhApRNRXMz8ObwuTyokSMSGNociAEz8XcBK3+7GjGUVarnxrAohxwoNlHS88cSuSb\\nBNB/9M98a8qyH+193vFZEhy15A+/m5Saj+Ph4V2qmv0ygzFWnCzPAgMBAAGjYzBh\\nMA4GA1UdDwEB/wQEAwICpDAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRUqiJT\\ndLJVySmvrXK8RsmJGMCShTAfBgNVHSMEGDAWgBRUqiJTdLJVySmvrXK8RsmJGMCS\\nhTANBgkqhkiG9w0BAQsFAAOCAQEAIcXcWwCWRnvyYnVfUiIvOiWBIZISzXdVEwUX\\nTTte8+QqM3Ur9WfmHCU3YV1q/t041E1tHFR8QdkYUU9vy7CfKH9HHAZJdJZEl9bv\\nizMqeIYagfDbiKkOpD71cjo5ZtzC42xhrHSrH3otFEZochms6xAUP+MB98stNWVm\\n62GCZfYyKCvPLUh1wJNRcHRoyYan6+IDjT2rhoWTeOUO6vElJ0lrMOf+MV4WK6UE\\n79AN1Bt/Rc1NiKZUAy1gjwmAsLrtJbyxgeh/lnpCVjz1XDL/gGyMODKvN5NGGWTw\\n8PsEqdZWGQoK6sm4ewR6MyE9/Jv8FYtBd9r+R6w+yMEpY5O+Pw==\\n-----END CERTIFICATE-----\\n","insecureEdgeTerminationPolicy":"Redirect","termination":"reencrypt"},"to":{"kind":"Service","name":"e2e-inf-a-28b78c-openshift-default","weight":100}}}\n'}, 'creationTimestamp': '2026-11-03T20:26:48Z', 'generation': 1, 'labels': {'app.kubernetes.io/component': 'gateway', 'app.kubernetes.io/instance': 'e2e-inf-a-28b78c', 'app.kubernetes.io/name': 'maas', 'e2e.maas.opendatahub.io/fixture': 'e2e-inf-a-28b78c', 'gateway.networking.k8s.io/gateway-name': 'e2e-inf-a-28b78c'}, 'name': 'e2e-inf-a-28b78c-route', 'namespace': 'openshift-ingress', 'resourceVersion': '158041', 'uid': '152d6bce-6bb7-4af2-8035-65b609e4c3d9'}, 'spec': {'host': 'e2e-inf-a-28b78c.apps.00125a180bb08b60980b.prod.konflux-ocp-ci.dev', 'port': {'targetPort': 443}, 'tls': {'destinationCACertificate': '-----BEGIN CERTIFICATE-----\nMIIDUTCCAjmgAwIBAgIIPa8XXlMYkUowDQYJKoZIhvcNAQELBQAwNjE0MDIGA1UE\nAwwrb3BlbnNoaWZ0LXNlcnZpY2Utc2VydmluZy1zaWduZXJAMTc5MzczNDYwMDAe\nFw0yNjExMDMxOTM2MzlaFw0yOTAxMDExOTM2NDBaMDYxNDAyBgNVBAMMK29wZW5z\naGlmdC1zZXJ2aWNlLXNlcnZpbmctc2lnbmVyQDE3OTM3MzQ2MDAwggEiMA0GCSqG\nSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCuESLdcYS88PpkvZOaIx34dTGVFzqUE6ne\nJDyMeQn+qRdX3Qe7t4Wosr12WRyZifg1/TYGPYg5TUef8uzKb4HfhJ/3oGaBsgMx\nwtFaFZvvGc0aiyH1UcGZQ9/PlRK4F/UnibUAPmTuxD7HQtno7BLsRry8QxxI5C29\nb2niiS5EdFGQub5dA8ioxd3grvg+/rKX79i+kUntjVKFoPkCKDkkFwsK7C09Po/y\nhApRNRXMz8ObwuTyokSMSGNociAEz8XcBK3+7GjGUVarnxrAohxwoNlHS88cSuSb\nBNB/9M98a8qyH+193vFZEhy15A+/m5Saj+Ph4V2qmv0ygzFWnCzPAgMBAAGjYzBh\nMA4GA1UdDwEB/wQEAwICpDAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRUqiJT\ndLJVySmvrXK8RsmJGMCShTAfBgNVHSMEGDAWgBRUqiJTdLJVySmvrXK8RsmJGMCS\nhTANBgkqhkiG9w0BAQsFAAOCAQEAIcXcWwCWRnvyYnVfUiIvOiWBIZISzXdVEwUX\nTTte8+QqM3Ur9WfmHCU3YV1q/t041E1tHFR8QdkYUU9vy7CfKH9HHAZJdJZEl9bv\nizMqeIYagfDbiKkOpD71cjo5ZtzC42xhrHSrH3otFEZochms6xAUP+MB98stNWVm\n62GCZfYyKCvPLUh1wJNRcHRoyYan6+IDjT2rhoWTeOUO6vElJ0lrMOf+MV4WK6UE\n79AN1Bt/Rc1NiKZUAy1gjwmAsLrtJbyxgeh/lnpCVjz1XDL/gGyMODKvN5NGGWTw\n8PsEqdZWGQoK6sm4ewR6MyE9/Jv8FYtBd9r+R6w+yMEpY5O+Pw==\n-----END CERTIFICATE-----\n', 'insecureEdgeTerminationPolicy': 'Redirect', 'termination': 'reencrypt'}, 'to': {'kind': 'Service', 'name': 'e2e-inf-a-28b78c-openshift-default', 'weight': 100}, 'wildcardPolicy': 'None'}, 'status': {}}

test/e2e/tests/multitenancy_helpers.py:301: AssertionError</error></testcase><testcase classname="tests.test_tenant_namespace_discovery.TestTenantNamespaceDiscovery" name="test_unlabeled_namespace_ignored" time="106.919" /><testcase classname="tests.test_tenant_model_inference.TestTenantModelInference" name="test_auth_envoyfilters_select_their_gateway_workloads" time="230.765"><error message="failed on setup with &quot;AssertionError: aitenant/e2e-inf-a-d2aa3b in ai-tenants did not satisfy condition. Last object: {'apiVersion': 'maas.opendatahub.io/v1alpha1', 'kind': 'AITenant', 'metadata': {'annotations': {'kubectl.kubernetes.io/last-applied-configuration': '{&quot;apiVersion&quot;:&quot;maas.opendatahub.io/v1alpha1&quot;,&quot;kind&quot;:&quot;AITenant&quot;,&quot;metadata&quot;:{&quot;annotations&quot;:{},&quot;name&quot;:&quot;e2e-inf-a-d2aa3b&quot;,&quot;namespace&quot;:&quot;ai-tenants&quot;},&quot;spec&quot;:{&quot;gateway&quot;:{&quot;name&quot;:&quot;e2e-inf-a-d2aa3b&quot;}}}\n'}, 'creationTimestamp': '2026-11-03T20:...&#10;[truncated; full report in element text]">@pytest.fixture(scope="module")
    def tenant_inference_cases():
        """Set up two tenants with models for inference testing."""
        require_aitenant_crd()
        case_a = new_named_tenant_case("e2e-inf-a")
        case_b = new_named_tenant_case("e2e-inf-b")
    
        try:
            # Bootstrap tenants
            for case in (case_a, case_b):
&gt;               bootstrap_aitenant_tenant(case)

test/e2e/tests/test_tenant_model_inference.py:153: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
test/e2e/tests/multitenancy_helpers.py:1132: in bootstrap_aitenant_tenant
    wait_for_json(AITENANT_KIND, case["tenant_label_name"], AITENANT_NAMESPACE, predicate=aitenant_ready)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

kind = 'aitenant', name = 'e2e-inf-a-d2aa3b', namespace = 'ai-tenants'
predicate = &lt;function aitenant_ready at 0x7f9f94c43f60&gt;, timeout = 180
interval = 5

    def wait_for_json(
        kind: str,
        name: str,
        namespace: Optional[str] = None,
        *,
        predicate=None,
        timeout: int = 180,
        interval: int = 5,
    ) -&gt; dict:
        deadline = time.time() + timeout
        last_obj = None
        while time.time() &lt; deadline:
            obj = get_json_or_none(kind, name, namespace)
            if obj is not None:
                last_obj = obj
                if predicate is None or predicate(obj):
                    return obj
            time.sleep(interval)
&gt;       raise AssertionError(
            f"{kind}/{name} in {namespace or '&lt;cluster&gt;'} did not satisfy condition. Last object: {last_obj}"
        )
E       AssertionError: aitenant/e2e-inf-a-d2aa3b in ai-tenants did not satisfy condition. Last object: {'apiVersion': 'maas.opendatahub.io/v1alpha1', 'kind': 'AITenant', 'metadata': {'annotations': {'kubectl.kubernetes.io/last-applied-configuration': '{"apiVersion":"maas.opendatahub.io/v1alpha1","kind":"AITenant","metadata":{"annotations":{},"name":"e2e-inf-a-d2aa3b","namespace":"ai-tenants"},"spec":{"gateway":{"name":"e2e-inf-a-d2aa3b"}}}\n'}, 'creationTimestamp': '2026-11-03T20:25:19Z', 'finalizers': ['maas.opendatahub.io/aitenant-cleanup'], 'generation': 1, 'name': 'e2e-inf-a-d2aa3b', 'namespace': 'ai-tenants', 'resourceVersion': '154596', 'uid': 'd6544451-efc3-40d0-ba22-90e066cb6292'}, 'spec': {'gateway': {'name': 'e2e-inf-a-d2aa3b'}}, 'status': {'conditions': [{'lastTransitionTime': '2026-11-03T20:25:20Z', 'message': 'waiting for MaasTenantConfig to report Ready', 'observedGeneration': 1, 'reason': 'TenantConfigNotReady', 'status': 'False', 'type': 'Ready'}], 'gatewayRef': {'name': 'e2e-inf-a-d2aa3b', 'namespace': 'openshift-ingress'}, 'phase': 'Pending', 'tenantNamespace': 'ai-tenant-e2e-inf-a-d2aa3b'}}

test/e2e/tests/multitenancy_helpers.py:301: AssertionError</error></testcase><testcase classname="tests.test_tenant_model_inference.TestTenantGatewayNegativeSecurity" name="test_invalid_api_key_denied_on_tenant_gateway[tenant_a]" time="0.000"><error message="failed on setup with &quot;AssertionError: aitenant/e2e-inf-a-d2aa3b in ai-tenants did not satisfy condition. Last object: {'apiVersion': 'maas.opendatahub.io/v1alpha1', 'kind': 'AITenant', 'metadata': {'annotations': {'kubectl.kubernetes.io/last-applied-configuration': '{&quot;apiVersion&quot;:&quot;maas.opendatahub.io/v1alpha1&quot;,&quot;kind&quot;:&quot;AITenant&quot;,&quot;metadata&quot;:{&quot;annotations&quot;:{},&quot;name&quot;:&quot;e2e-inf-a-d2aa3b&quot;,&quot;namespace&quot;:&quot;ai-tenants&quot;},&quot;spec&quot;:{&quot;gateway&quot;:{&quot;name&quot;:&quot;e2e-inf-a-d2aa3b&quot;}}}\n'}, 'creationTimestamp': '2026-11-03T20:...&#10;[truncated; full report in element text]">@pytest.fixture(scope="module")
    def tenant_inference_cases():
        """Set up two tenants with models for inference testing."""
        require_aitenant_crd()
        case_a = new_named_tenant_case("e2e-inf-a")
        case_b = new_named_tenant_case("e2e-inf-b")
    
        try:
            # Bootstrap tenants
            for case in (case_a, case_b):
&gt;               bootstrap_aitenant_tenant(case)

test/e2e/tests/test_tenant_model_inference.py:153: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
test/e2e/tests/multitenancy_helpers.py:1132: in bootstrap_aitenant_tenant
    wait_for_json(AITENANT_KIND, case["tenant_label_name"], AITENANT_NAMESPACE, predicate=aitenant_ready)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

kind = 'aitenant', name = 'e2e-inf-a-d2aa3b', namespace = 'ai-tenants'
predicate = &lt;function aitenant_ready at 0x7f9f94c43f60&gt;, timeout = 180
interval = 5

    def wait_for_json(
        kind: str,
        name: str,
        namespace: Optional[str] = None,
        *,
        predicate=None,
        timeout: int = 180,
        interval: int = 5,
    ) -&gt; dict:
        deadline = time.time() + timeout
        last_obj = None
        while time.time() &lt; deadline:
            obj = get_json_or_none(kind, name, namespace)
            if obj is not None:
                last_obj = obj
                if predicate is None or predicate(obj):
                    return obj
            time.sleep(interval)
&gt;       raise AssertionError(
            f"{kind}/{name} in {namespace or '&lt;cluster&gt;'} did not satisfy condition. Last object: {last_obj}"
        )
E       AssertionError: aitenant/e2e-inf-a-d2aa3b in ai-tenants did not satisfy condition. Last object: {'apiVersion': 'maas.opendatahub.io/v1alpha1', 'kind': 'AITenant', 'metadata': {'annotations': {'kubectl.kubernetes.io/last-applied-configuration': '{"apiVersion":"maas.opendatahub.io/v1alpha1","kind":"AITenant","metadata":{"annotations":{},"name":"e2e-inf-a-d2aa3b","namespace":"ai-tenants"},"spec":{"gateway":{"name":"e2e-inf-a-d2aa3b"}}}\n'}, 'creationTimestamp': '2026-11-03T20:25:19Z', 'finalizers': ['maas.opendatahub.io/aitenant-cleanup'], 'generation': 1, 'name': 'e2e-inf-a-d2aa3b', 'namespace': 'ai-tenants', 'resourceVersion': '154596', 'uid': 'd6544451-efc3-40d0-ba22-90e066cb6292'}, 'spec': {'gateway': {'name': 'e2e-inf-a-d2aa3b'}}, 'status': {'conditions': [{'lastTransitionTime': '2026-11-03T20:25:20Z', 'message': 'waiting for MaasTenantConfig to report Ready', 'observedGeneration': 1, 'reason': 'TenantConfigNotReady', 'status': 'False', 'type': 'Ready'}], 'gatewayRef': {'name': 'e2e-inf-a-d2aa3b', 'namespace': 'openshift-ingress'}, 'phase': 'Pending', 'tenantNamespace': 'ai-tenant-e2e-inf-a-d2aa3b'}}

test/e2e/tests/multitenancy_helpers.py:301: AssertionError</error></testcase><testcase classname="tests.test_tenant_namespace_discovery.TestTenantNamespaceDiscovery" name="test_tenant_admin_rbac_is_namespace_scoped" time="115.071"><failure message="AssertionError: route/e2e-mt-96230c5b-route in openshift-ingress did not satisfy condition. Last object: {'apiVersion': 'route.openshift.io/v1', 'kind': 'Route', 'metadata': {'annotations': {'kubectl.kubernetes.io/last-applied-configuration': '{&quot;apiVersion&quot;:&quot;route.openshift.io/v1&quot;,&quot;kind&quot;:&quot;Route&quot;,&quot;metadata&quot;:{&quot;annotations&quot;:{},&quot;labels&quot;:{&quot;app.kubernetes.io/component&quot;:&quot;gateway&quot;,&quot;app.kubernetes.io/instance&quot;:&quot;e2e-mt-96230c5b&quot;,&quot;app.kubernetes.io/name&quot;:&quot;maas&quot;,&quot;e2e.maas.opendatahub.io/fixture&quot;:&quot;e2e-mt-962...&#10;[truncated; full report in element text]">self = &lt;test_tenant_namespace_discovery.TestTenantNamespaceDiscovery object at 0x7f9f9482a010&gt;

    def test_tenant_admin_rbac_is_namespace_scoped(self):
        """1.6: Tenant-admin Role from AITenant bootstrap is scoped to the tenant namespace."""
        case = new_discovery_case()
        sa_name = f"e2e-mt-rbac-{case['suffix']}"
        role_name = f"aitenant-{case['tenant_label_name']}-tenant-admin"
        other_ns = f"e2e-mt-other-{case['suffix']}"
        try:
            apply_gateway_fixture(case["gateway_name"], fixture_label=case["tenant_label_name"])
&gt;           bootstrap_aitenant_tenant(case)

test/e2e/tests/test_tenant_namespace_discovery.py:260: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
test/e2e/tests/multitenancy_helpers.py:1130: in bootstrap_aitenant_tenant
    apply_gateway_route_fixture(case["gateway_name"], fixture_label=case["tenant_label_name"])
test/e2e/tests/multitenancy_helpers.py:1013: in apply_gateway_route_fixture
    wait_for_route_admitted(route_name)
test/e2e/tests/multitenancy_helpers.py:812: in wait_for_route_admitted
    return wait_for_json("route", route_name, GATEWAY_NAMESPACE, predicate=_predicate, timeout=timeout, interval=interval)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

kind = 'route', name = 'e2e-mt-96230c5b-route', namespace = 'openshift-ingress'
predicate = &lt;function wait_for_route_admitted.&lt;locals&gt;._predicate at 0x7f9f94617e20&gt;
timeout = 60, interval = 3

    def wait_for_json(
        kind: str,
        name: str,
        namespace: Optional[str] = None,
        *,
        predicate=None,
        timeout: int = 180,
        interval: int = 5,
    ) -&gt; dict:
        deadline = time.time() + timeout
        last_obj = None
        while time.time() &lt; deadline:
            obj = get_json_or_none(kind, name, namespace)
            if obj is not None:
                last_obj = obj
                if predicate is None or predicate(obj):
                    return obj
            time.sleep(interval)
&gt;       raise AssertionError(
            f"{kind}/{name} in {namespace or '&lt;cluster&gt;'} did not satisfy condition. Last object: {last_obj}"
        )
E       AssertionError: route/e2e-mt-96230c5b-route in openshift-ingress did not satisfy condition. Last object: {'apiVersion': 'route.openshift.io/v1', 'kind': 'Route', 'metadata': {'annotations': {'kubectl.kubernetes.io/last-applied-configuration': '{"apiVersion":"route.openshift.io/v1","kind":"Route","metadata":{"annotations":{},"labels":{"app.kubernetes.io/component":"gateway","app.kubernetes.io/instance":"e2e-mt-96230c5b","app.kubernetes.io/name":"maas","e2e.maas.opendatahub.io/fixture":"e2e-mt-96230c5b","gateway.networking.k8s.io/gateway-name":"e2e-mt-96230c5b"},"name":"e2e-mt-96230c5b-route","namespace":"openshift-ingress"},"spec":{"host":"e2e-mt-96230c5b.apps.00125a180bb08b60980b.prod.konflux-ocp-ci.dev","port":{"targetPort":443},"tls":{"destinationCACertificate":"-----BEGIN CERTIFICATE-----\\nMIIDUTCCAjmgAwIBAgIIPa8XXlMYkUowDQYJKoZIhvcNAQELBQAwNjE0MDIGA1UE\\nAwwrb3BlbnNoaWZ0LXNlcnZpY2Utc2VydmluZy1zaWduZXJAMTc5MzczNDYwMDAe\\nFw0yNjExMDMxOTM2MzlaFw0yOTAxMDExOTM2NDBaMDYxNDAyBgNVBAMMK29wZW5z\\naGlmdC1zZXJ2aWNlLXNlcnZpbmctc2lnbmVyQDE3OTM3MzQ2MDAwggEiMA0GCSqG\\nSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCuESLdcYS88PpkvZOaIx34dTGVFzqUE6ne\\nJDyMeQn+qRdX3Qe7t4Wosr12WRyZifg1/TYGPYg5TUef8uzKb4HfhJ/3oGaBsgMx\\nwtFaFZvvGc0aiyH1UcGZQ9/PlRK4F/UnibUAPmTuxD7HQtno7BLsRry8QxxI5C29\\nb2niiS5EdFGQub5dA8ioxd3grvg+/rKX79i+kUntjVKFoPkCKDkkFwsK7C09Po/y\\nhApRNRXMz8ObwuTyokSMSGNociAEz8XcBK3+7GjGUVarnxrAohxwoNlHS88cSuSb\\nBNB/9M98a8qyH+193vFZEhy15A+/m5Saj+Ph4V2qmv0ygzFWnCzPAgMBAAGjYzBh\\nMA4GA1UdDwEB/wQEAwICpDAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRUqiJT\\ndLJVySmvrXK8RsmJGMCShTAfBgNVHSMEGDAWgBRUqiJTdLJVySmvrXK8RsmJGMCS\\nhTANBgkqhkiG9w0BAQsFAAOCAQEAIcXcWwCWRnvyYnVfUiIvOiWBIZISzXdVEwUX\\nTTte8+QqM3Ur9WfmHCU3YV1q/t041E1tHFR8QdkYUU9vy7CfKH9HHAZJdJZEl9bv\\nizMqeIYagfDbiKkOpD71cjo5ZtzC42xhrHSrH3otFEZochms6xAUP+MB98stNWVm\\n62GCZfYyKCvPLUh1wJNRcHRoyYan6+IDjT2rhoWTeOUO6vElJ0lrMOf+MV4WK6UE\\n79AN1Bt/Rc1NiKZUAy1gjwmAsLrtJbyxgeh/lnpCVjz1XDL/gGyMODKvN5NGGWTw\\n8PsEqdZWGQoK6sm4ewR6MyE9/Jv8FYtBd9r+R6w+yMEpY5O+Pw==\\n-----END CERTIFICATE-----\\n","insecureEdgeTerminationPolicy":"Redirect","termination":"reencrypt"},"to":{"kind":"Service","name":"e2e-mt-96230c5b-openshift-default","weight":100}}}\n'}, 'creationTimestamp': '2026-11-03T20:29:46Z', 'generation': 1, 'labels': {'app.kubernetes.io/component': 'gateway', 'app.kubernetes.io/instance': 'e2e-mt-96230c5b', 'app.kubernetes.io/name': 'maas', 'e2e.maas.opendatahub.io/fixture': 'e2e-mt-96230c5b', 'gateway.networking.k8s.io/gateway-name': 'e2e-mt-96230c5b'}, 'name': 'e2e-mt-96230c5b-route', 'namespace': 'openshift-ingress', 'resourceVersion': '167431', 'uid': '726c4f62-9714-4ea0-b1b2-dcdb57b3121d'}, 'spec': {'host': 'e2e-mt-96230c5b.apps.00125a180bb08b60980b.prod.konflux-ocp-ci.dev', 'port': {'targetPort': 443}, 'tls': {'destinationCACertificate': '-----BEGIN CERTIFICATE-----\nMIIDUTCCAjmgAwIBAgIIPa8XXlMYkUowDQYJKoZIhvcNAQELBQAwNjE0MDIGA1UE\nAwwrb3BlbnNoaWZ0LXNlcnZpY2Utc2VydmluZy1zaWduZXJAMTc5MzczNDYwMDAe\nFw0yNjExMDMxOTM2MzlaFw0yOTAxMDExOTM2NDBaMDYxNDAyBgNVBAMMK29wZW5z\naGlmdC1zZXJ2aWNlLXNlcnZpbmctc2lnbmVyQDE3OTM3MzQ2MDAwggEiMA0GCSqG\nSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCuESLdcYS88PpkvZOaIx34dTGVFzqUE6ne\nJDyMeQn+qRdX3Qe7t4Wosr12WRyZifg1/TYGPYg5TUef8uzKb4HfhJ/3oGaBsgMx\nwtFaFZvvGc0aiyH1UcGZQ9/PlRK4F/UnibUAPmTuxD7HQtno7BLsRry8QxxI5C29\nb2niiS5EdFGQub5dA8ioxd3grvg+/rKX79i+kUntjVKFoPkCKDkkFwsK7C09Po/y\nhApRNRXMz8ObwuTyokSMSGNociAEz8XcBK3+7GjGUVarnxrAohxwoNlHS88cSuSb\nBNB/9M98a8qyH+193vFZEhy15A+/m5Saj+Ph4V2qmv0ygzFWnCzPAgMBAAGjYzBh\nMA4GA1UdDwEB/wQEAwICpDAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRUqiJT\ndLJVySmvrXK8RsmJGMCShTAfBgNVHSMEGDAWgBRUqiJTdLJVySmvrXK8RsmJGMCS\nhTANBgkqhkiG9w0BAQsFAAOCAQEAIcXcWwCWRnvyYnVfUiIvOiWBIZISzXdVEwUX\nTTte8+QqM3Ur9WfmHCU3YV1q/t041E1tHFR8QdkYUU9vy7CfKH9HHAZJdJZEl9bv\nizMqeIYagfDbiKkOpD71cjo5ZtzC42xhrHSrH3otFEZochms6xAUP+MB98stNWVm\n62GCZfYyKCvPLUh1wJNRcHRoyYan6+IDjT2rhoWTeOUO6vElJ0lrMOf+MV4WK6UE\n79AN1Bt/Rc1NiKZUAy1gjwmAsLrtJbyxgeh/lnpCVjz1XDL/gGyMODKvN5NGGWTw\n8PsEqdZWGQoK6sm4ewR6MyE9/Jv8FYtBd9r+R6w+yMEpY5O+Pw==\n-----END CERTIFICATE-----\n', 'insecureEdgeTerminationPolicy': 'Redirect', 'termination': 'reencrypt'}, 'to': {'kind': 'Service', 'name': 'e2e-mt-96230c5b-openshift-default', 'weight': 100}, 'wildcardPolicy': 'None'}, 'status': {}}

test/e2e/tests/multitenancy_helpers.py:301: AssertionError</failure></testcase><testcase classname="tests.test_tenant_namespace_discovery.TestTenantNamespaceDiscovery" name="test_dynamic_discovery_after_label_added" time="282.531"><failure message="AssertionError: maasauthpolicy/e2e-policy-c5c8526c in ai-tenant-e2e-mt-c5c8526c did not satisfy condition. Last object: {'apiVersion': 'maas.opendatahub.io/v1alpha1', 'kind': 'MaaSAuthPolicy', 'metadata': {'annotations': {'kubectl.kubernetes.io/last-applied-configuration': '{&quot;apiVersion&quot;:&quot;maas.opendatahub.io/v1alpha1&quot;,&quot;kind&quot;:&quot;MaaSAuthPolicy&quot;,&quot;metadata&quot;:{&quot;annotations&quot;:{},&quot;name&quot;:&quot;e2e-policy-c5c8526c&quot;,&quot;namespace&quot;:&quot;ai-tenant-e2e-mt-c5c8526c&quot;},&quot;spec&quot;:{&quot;modelRefs&quot;:[{&quot;name&quot;:&quot;facebook-opt-125m-simulated...&#10;[truncated; full report in element text]">self = &lt;test_tenant_namespace_discovery.TestTenantNamespaceDiscovery object at 0x7f52fdc352d0&gt;

    def test_dynamic_discovery_after_label_added(self):
        """1.2 variant: Pre-existing CRs reconcile after namespace gains discovery labels."""
        case = new_discovery_case(use_default_gateway=True)
        try:
            ensure_namespace(case["tenant_ns"])
            apply_tenant_cr(case["tenant_ns"], DEFAULT_GATEWAY_NAME)
            apply_maas_auth_policy(case["policy_name"], case["tenant_ns"])
            time.sleep(10)
            before = get_json_or_none("maasauthpolicy", case["policy_name"], case["tenant_ns"])
            assert before is not None
            assert FINALIZER_AUTHPOLICY not in ((before.get("metadata") or {}).get("finalizers") or [])
    
            apply_discovery_labels(case["tenant_ns"], case["tenant_label_name"])
            wait_for_finalizer("maasauthpolicy", case["policy_name"], case["tenant_ns"], FINALIZER_AUTHPOLICY)
&gt;           wait_for_status_phase(
                "maasauthpolicy",
                case["policy_name"],
                case["tenant_ns"],
                expected_phase="Active",
            )

test/e2e/tests/test_tenant_namespace_discovery.py:177: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
test/e2e/tests/multitenancy_helpers.py:356: in wait_for_status_phase
    return wait_for_json(kind, name, namespace, predicate=_predicate, timeout=timeout, interval=interval)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

kind = 'maasauthpolicy', name = 'e2e-policy-c5c8526c'
namespace = 'ai-tenant-e2e-mt-c5c8526c'
predicate = &lt;function wait_for_status_phase.&lt;locals&gt;._predicate at 0x7f52fdb8b2e0&gt;
timeout = 180, interval = 5

    def wait_for_json(
        kind: str,
        name: str,
        namespace: Optional[str] = None,
        *,
        predicate=None,
        timeout: int = 180,
        interval: int = 5,
    ) -&gt; dict:
        deadline = time.time() + timeout
        last_obj = None
        while time.time() &lt; deadline:
            obj = get_json_or_none(kind, name, namespace)
            if obj is not None:
                last_obj = obj
                if predicate is None or predicate(obj):
                    return obj
            time.sleep(interval)
&gt;       raise AssertionError(
            f"{kind}/{name} in {namespace or '&lt;cluster&gt;'} did not satisfy condition. Last object: {last_obj}"
        )
E       AssertionError: maasauthpolicy/e2e-policy-c5c8526c in ai-tenant-e2e-mt-c5c8526c did not satisfy condition. Last object: {'apiVersion': 'maas.opendatahub.io/v1alpha1', 'kind': 'MaaSAuthPolicy', 'metadata': {'annotations': {'kubectl.kubernetes.io/last-applied-configuration': '{"apiVersion":"maas.opendatahub.io/v1alpha1","kind":"MaaSAuthPolicy","metadata":{"annotations":{},"name":"e2e-policy-c5c8526c","namespace":"ai-tenant-e2e-mt-c5c8526c"},"spec":{"modelRefs":[{"name":"facebook-opt-125m-simulated","namespace":"llm"}],"subjects":{"groups":[{"name":"system:authenticated"}]}}}\n'}, 'creationTimestamp': '2026-11-03T20:29:41Z', 'finalizers': ['maas.opendatahub.io/authpolicy-cleanup'], 'generation': 1, 'name': 'e2e-policy-c5c8526c', 'namespace': 'ai-tenant-e2e-mt-c5c8526c', 'resourceVersion': '181318', 'uid': 'a0ebd651-bdd7-4cad-a499-dbb7bffd1eb5'}, 'spec': {'modelRefs': [{'name': 'facebook-opt-125m-simulated', 'namespace': 'llm'}], 'subjects': {'groups': [{'name': 'system:authenticated'}]}}, 'status': {'conditions': [{'lastTransitionTime': '2026-11-03T20:29:52Z', 'message': 'Waiting for gateway AuthPolicy openshift-ingress/maas-gateway-auth to be accepted and enforced: AuthPolicy status observed generation 32, current generation is 111', 'observedGeneration': 1, 'reason': 'Unknown', 'status': 'Unknown', 'type': 'Ready'}], 'phase': 'Pending'}}

test/e2e/tests/multitenancy_helpers.py:301: AssertionError</failure></testcase><testcase classname="tests.test_tenant_model_inference.TestTenantGatewayNegativeSecurity" name="test_missing_api_key_denied_on_tenant_gateway[tenant_a]" time="81.736"><error message="failed on setup with &quot;AssertionError: route/e2e-inf-a-086365-route in openshift-ingress did not satisfy condition. Last object: {'apiVersion': 'route.openshift.io/v1', 'kind': 'Route', 'metadata': {'annotations': {'kubectl.kubernetes.io/last-applied-configuration': '{&quot;apiVersion&quot;:&quot;route.openshift.io/v1&quot;,&quot;kind&quot;:&quot;Route&quot;,&quot;metadata&quot;:{&quot;annotations&quot;:{},&quot;labels&quot;:{&quot;app.kubernetes.io/component&quot;:&quot;gateway&quot;,&quot;app.kubernetes.io/instance&quot;:&quot;e2e-inf-a-086365&quot;,&quot;app.kubernetes.io/name&quot;:&quot;maas&quot;,&quot;e2e.maas.opendatahub...&#10;[truncated; full report in element text]">@pytest.fixture(scope="module")
    def tenant_inference_cases():
        """Set up two tenants with models for inference testing."""
        require_aitenant_crd()
        case_a = new_named_tenant_case("e2e-inf-a")
        case_b = new_named_tenant_case("e2e-inf-b")
    
        try:
            # Bootstrap tenants
            for case in (case_a, case_b):
&gt;               bootstrap_aitenant_tenant(case)

test/e2e/tests/test_tenant_model_inference.py:153: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
test/e2e/tests/multitenancy_helpers.py:1130: in bootstrap_aitenant_tenant
    apply_gateway_route_fixture(case["gateway_name"], fixture_label=case["tenant_label_name"])
test/e2e/tests/multitenancy_helpers.py:1013: in apply_gateway_route_fixture
    wait_for_route_admitted(route_name)
test/e2e/tests/multitenancy_helpers.py:812: in wait_for_route_admitted
    return wait_for_json("route", route_name, GATEWAY_NAMESPACE, predicate=_predicate, timeout=timeout, interval=interval)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

kind = 'route', name = 'e2e-inf-a-086365-route', namespace = 'openshift-ingress'
predicate = &lt;function wait_for_route_admitted.&lt;locals&gt;._predicate at 0x7fb5a10a4fe0&gt;
timeout = 60, interval = 3

    def wait_for_json(
        kind: str,
        name: str,
        namespace: Optional[str] = None,
        *,
        predicate=None,
        timeout: int = 180,
        interval: int = 5,
    ) -&gt; dict:
        deadline = time.time() + timeout
        last_obj = None
        while time.time() &lt; deadline:
            obj = get_json_or_none(kind, name, namespace)
            if obj is not None:
                last_obj = obj
                if predicate is None or predicate(obj):
                    return obj
            time.sleep(interval)
&gt;       raise AssertionError(
            f"{kind}/{name} in {namespace or '&lt;cluster&gt;'} did not satisfy condition. Last object: {last_obj}"
        )
E       AssertionError: route/e2e-inf-a-086365-route in openshift-ingress did not satisfy condition. Last object: {'apiVersion': 'route.openshift.io/v1', 'kind': 'Route', 'metadata': {'annotations': {'kubectl.kubernetes.io/last-applied-configuration': '{"apiVersion":"route.openshift.io/v1","kind":"Route","metadata":{"annotations":{},"labels":{"app.kubernetes.io/component":"gateway","app.kubernetes.io/instance":"e2e-inf-a-086365","app.kubernetes.io/name":"maas","e2e.maas.opendatahub.io/fixture":"e2e-inf-a-086365","gateway.networking.k8s.io/gateway-name":"e2e-inf-a-086365"},"name":"e2e-inf-a-086365-route","namespace":"openshift-ingress"},"spec":{"host":"e2e-inf-a-086365.apps.00125a180bb08b60980b.prod.konflux-ocp-ci.dev","port":{"targetPort":443},"tls":{"destinationCACertificate":"-----BEGIN CERTIFICATE-----\\nMIIDUTCCAjmgAwIBAgIIPa8XXlMYkUowDQYJKoZIhvcNAQELBQAwNjE0MDIGA1UE\\nAwwrb3BlbnNoaWZ0LXNlcnZpY2Utc2VydmluZy1zaWduZXJAMTc5MzczNDYwMDAe\\nFw0yNjExMDMxOTM2MzlaFw0yOTAxMDExOTM2NDBaMDYxNDAyBgNVBAMMK29wZW5z\\naGlmdC1zZXJ2aWNlLXNlcnZpbmctc2lnbmVyQDE3OTM3MzQ2MDAwggEiMA0GCSqG\\nSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCuESLdcYS88PpkvZOaIx34dTGVFzqUE6ne\\nJDyMeQn+qRdX3Qe7t4Wosr12WRyZifg1/TYGPYg5TUef8uzKb4HfhJ/3oGaBsgMx\\nwtFaFZvvGc0aiyH1UcGZQ9/PlRK4F/UnibUAPmTuxD7HQtno7BLsRry8QxxI5C29\\nb2niiS5EdFGQub5dA8ioxd3grvg+/rKX79i+kUntjVKFoPkCKDkkFwsK7C09Po/y\\nhApRNRXMz8ObwuTyokSMSGNociAEz8XcBK3+7GjGUVarnxrAohxwoNlHS88cSuSb\\nBNB/9M98a8qyH+193vFZEhy15A+/m5Saj+Ph4V2qmv0ygzFWnCzPAgMBAAGjYzBh\\nMA4GA1UdDwEB/wQEAwICpDAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRUqiJT\\ndLJVySmvrXK8RsmJGMCShTAfBgNVHSMEGDAWgBRUqiJTdLJVySmvrXK8RsmJGMCS\\nhTANBgkqhkiG9w0BAQsFAAOCAQEAIcXcWwCWRnvyYnVfUiIvOiWBIZISzXdVEwUX\\nTTte8+QqM3Ur9WfmHCU3YV1q/t041E1tHFR8QdkYUU9vy7CfKH9HHAZJdJZEl9bv\\nizMqeIYagfDbiKkOpD71cjo5ZtzC42xhrHSrH3otFEZochms6xAUP+MB98stNWVm\\n62GCZfYyKCvPLUh1wJNRcHRoyYan6+IDjT2rhoWTeOUO6vElJ0lrMOf+MV4WK6UE\\n79AN1Bt/Rc1NiKZUAy1gjwmAsLrtJbyxgeh/lnpCVjz1XDL/gGyMODKvN5NGGWTw\\n8PsEqdZWGQoK6sm4ewR6MyE9/Jv8FYtBd9r+R6w+yMEpY5O+Pw==\\n-----END CERTIFICATE-----\\n","insecureEdgeTerminationPolicy":"Redirect","termination":"reencrypt"},"to":{"kind":"Service","name":"e2e-inf-a-086365-openshift-default","weight":100}}}\n'}, 'creationTimestamp': '2026-11-03T20:28:38Z', 'generation': 1, 'labels': {'app.kubernetes.io/component': 'gateway', 'app.kubernetes.io/instance': 'e2e-inf-a-086365', 'app.kubernetes.io/name': 'maas', 'e2e.maas.opendatahub.io/fixture': 'e2e-inf-a-086365', 'gateway.networking.k8s.io/gateway-name': 'e2e-inf-a-086365'}, 'name': 'e2e-inf-a-086365-route', 'namespace': 'openshift-ingress', 'resourceVersion': '164288', 'uid': 'edf874a5-77a4-4a9a-8543-c2ce3a3490da'}, 'spec': {'host': 'e2e-inf-a-086365.apps.00125a180bb08b60980b.prod.konflux-ocp-ci.dev', 'port': {'targetPort': 443}, 'tls': {'destinationCACertificate': '-----BEGIN CERTIFICATE-----\nMIIDUTCCAjmgAwIBAgIIPa8XXlMYkUowDQYJKoZIhvcNAQELBQAwNjE0MDIGA1UE\nAwwrb3BlbnNoaWZ0LXNlcnZpY2Utc2VydmluZy1zaWduZXJAMTc5MzczNDYwMDAe\nFw0yNjExMDMxOTM2MzlaFw0yOTAxMDExOTM2NDBaMDYxNDAyBgNVBAMMK29wZW5z\naGlmdC1zZXJ2aWNlLXNlcnZpbmctc2lnbmVyQDE3OTM3MzQ2MDAwggEiMA0GCSqG\nSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCuESLdcYS88PpkvZOaIx34dTGVFzqUE6ne\nJDyMeQn+qRdX3Qe7t4Wosr12WRyZifg1/TYGPYg5TUef8uzKb4HfhJ/3oGaBsgMx\nwtFaFZvvGc0aiyH1UcGZQ9/PlRK4F/UnibUAPmTuxD7HQtno7BLsRry8QxxI5C29\nb2niiS5EdFGQub5dA8ioxd3grvg+/rKX79i+kUntjVKFoPkCKDkkFwsK7C09Po/y\nhApRNRXMz8ObwuTyokSMSGNociAEz8XcBK3+7GjGUVarnxrAohxwoNlHS88cSuSb\nBNB/9M98a8qyH+193vFZEhy15A+/m5Saj+Ph4V2qmv0ygzFWnCzPAgMBAAGjYzBh\nMA4GA1UdDwEB/wQEAwICpDAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRUqiJT\ndLJVySmvrXK8RsmJGMCShTAfBgNVHSMEGDAWgBRUqiJTdLJVySmvrXK8RsmJGMCS\nhTANBgkqhkiG9w0BAQsFAAOCAQEAIcXcWwCWRnvyYnVfUiIvOiWBIZISzXdVEwUX\nTTte8+QqM3Ur9WfmHCU3YV1q/t041E1tHFR8QdkYUU9vy7CfKH9HHAZJdJZEl9bv\nizMqeIYagfDbiKkOpD71cjo5ZtzC42xhrHSrH3otFEZochms6xAUP+MB98stNWVm\n62GCZfYyKCvPLUh1wJNRcHRoyYan6+IDjT2rhoWTeOUO6vElJ0lrMOf+MV4WK6UE\n79AN1Bt/Rc1NiKZUAy1gjwmAsLrtJbyxgeh/lnpCVjz1XDL/gGyMODKvN5NGGWTw\n8PsEqdZWGQoK6sm4ewR6MyE9/Jv8FYtBd9r+R6w+yMEpY5O+Pw==\n-----END CERTIFICATE-----\n', 'insecureEdgeTerminationPolicy': 'Redirect', 'termination': 'reencrypt'}, 'to': {'kind': 'Service', 'name': 'e2e-inf-a-086365-openshift-default', 'weight': 100}, 'wildcardPolicy': 'None'}, 'status': {}}

test/e2e/tests/multitenancy_helpers.py:301: AssertionError</error></testcase><testcase classname="tests.test_tenant_namespace_discovery.TestTenantNamespaceDiscovery" name="test_namespace_qualified_collision_prevention" time="244.909" /><testcase classname="tests.test_tenant_namespace_discovery.TestTenantWebhookValidation" name="test_maassubscription_rejected_without_tenant_config_cr" time="8.300" /><testcase classname="tests.test_tenant_namespace_discovery.TestTenantNamespaceDiscovery" name="test_label_removal_stops_reconciliation" time="117.288" /><testcase classname="tests.test_tenant_namespace_discovery.TestLegacyDefaultNamespaceStillWorks" name="test_models_as_a_service_namespace_reconciles" time="0.756" /><testcase classname="tests.test_tenant_namespace_discovery.TestTenantWebhookValidation" name="test_maasauthpolicy_rejected_without_tenant_config_cr" time="163.369" /><testcase classname="tests.test_tenant_rate_limit_isolation.TestTenantRateLimitIsolation" name="test_rate_limit_enforced_per_tenant" time="259.604" /><testcase classname="tests.test_tenant_model_inference.TestTenantModelInference" name="test_inference_succeeds_through_tenant_gateway[tenant_a]" time="851.470"><error message="failed on setup with &quot;AssertionError: https://e2e-inf-a-e7b70d.apps.00125a180bb08b60980b.prod.konflux-ocp-ci.dev/ai-tenant-e2e-inf-a-e7b70d/test-model-e7b70d/v1/chat/completions did not reject an unknown API key for 10s within 180s; last: HTTPSConnectionPool(host='e2e-inf-a-e7b70d.apps.00125a180bb08b60980b.prod.konflux-ocp-ci.dev', port=443): Max retries exceeded with url: /ai-tenant-e2e-inf-a-e7b70d/test-model-e7b70d/v1/chat/completions (Caused by SSLError(SSLEOFError(8, '[SSL: UNEXPECTED_EOF_W...&#10;[truncated; full report in element text]">@pytest.fixture(scope="module")
    def tenant_inference_cases():
        """Set up two tenants with models for inference testing."""
        require_aitenant_crd()
        case_a = new_named_tenant_case("e2e-inf-a")
        case_b = new_named_tenant_case("e2e-inf-b")
    
        try:
            # Bootstrap tenants
            for case in (case_a, case_b):
                bootstrap_aitenant_tenant(case)
    
            # Create both LLMInferenceServices before waiting on either. The llmisvc
            # controller reconciles them one at a time and runs minutes behind under
            # parallel load, so B should queue while A's wait runs, not after it.
            for case in (case_a, case_b):
                # Track model name early for cleanup
                case["model_name"] = f"test-model-{case['suffix']}"
                _create_llmis(
                    case["model_name"],
                    case["tenant_ns"],
                    case["gateway_name"],
                    GATEWAY_NAMESPACE,
                )
    
            for case in (case_a, case_b):
                model_name = case["model_name"]
                # Re-applies the LLMIS created above unchanged, then waits for it.
                provision_tenant_model(
                    model_name,
                    case["tenant_ns"],
                    case["gateway_name"],
                    ready_timeout=MODEL_BACKEND_READY_TIMEOUT,
                )
                make_tenant_model_accessible(
                    model_name,
                    case["tenant_ns"],
                    f"{model_name}-auth",
                    f"{model_name}-sub",
                    token_limit=10000,
                    gateway_name=case["gateway_name"],
                )
                # Store model path (with /v1 for OpenAI API compatibility)
                case["model_path"] = f"/{case['tenant_ns']}/{model_name}/v1"
    
            for case in (case_a, case_b):
&gt;               wait_for_route_auth_enforced(
                    f"{_get_tenant_gateway_url(case['gateway_name'])}{case['model_path']}"
                )

test/e2e/tests/test_tenant_model_inference.py:189: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
test/e2e/tests/multitenancy_helpers.py:443: in wait_for_route_auth_enforced
    wait_until(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

check = &lt;function wait_for_route_auth_enforced.&lt;locals&gt;._check at 0x7fa60fbd6200&gt;
timeout = 180
what = 'https://e2e-inf-a-e7b70d.apps.00125a180bb08b60980b.prod.konflux-ocp-ci.dev/ai-tenant-e2e-inf-a-e7b70d/test-model-e7b70d/v1/chat/completions did not reject an unknown API key for 10s'
interval = 2

    def wait_until(check, timeout: int, what: str, interval: int = 5):
        """Poll check() until it returns a truthy value. Assertion failures and transient
        cluster or HTTP errors count as "not yet"; the last one ends up in the timeout message."""
        deadline = time.time() + timeout
        while True:
            try:
                result = check()
                if result:
                    return result
                last = result
            except (AssertionError, subprocess.TimeoutExpired, requests.RequestException) as exc:
                last = exc
&gt;           assert time.time() &lt; deadline, f"{what} within {timeout}s; last: {last}"
                   ^^^^^^^^^^^^^^^^^^^^^^
E           AssertionError: https://e2e-inf-a-e7b70d.apps.00125a180bb08b60980b.prod.konflux-ocp-ci.dev/ai-tenant-e2e-inf-a-e7b70d/test-model-e7b70d/v1/chat/completions did not reject an unknown API key for 10s within 180s; last: HTTPSConnectionPool(host='e2e-inf-a-e7b70d.apps.00125a180bb08b60980b.prod.konflux-ocp-ci.dev', port=443): Max retries exceeded with url: /ai-tenant-e2e-inf-a-e7b70d/test-model-e7b70d/v1/chat/completions (Caused by SSLError(SSLEOFError(8, '[SSL: UNEXPECTED_EOF_WHILE_READING] EOF occurred in violation of protocol (_ssl.c:1004)')))

test/e2e/tests/multitenancy_helpers.py:279: AssertionError</error></testcase><testcase classname="tests.test_tenant_model_inference.TestTenantModelInference" name="test_inference_succeeds_through_tenant_gateway[tenant_b]" time="145.736"><error message="failed on setup with &quot;AssertionError: https://e2e-inf-a-e7b70d.apps.00125a180bb08b60980b.prod.konflux-ocp-ci.dev/ai-tenant-e2e-inf-a-e7b70d/test-model-e7b70d/v1/chat/completions did not reject an unknown API key for 10s within 180s; last: HTTPSConnectionPool(host='e2e-inf-a-e7b70d.apps.00125a180bb08b60980b.prod.konflux-ocp-ci.dev', port=443): Max retries exceeded with url: /ai-tenant-e2e-inf-a-e7b70d/test-model-e7b70d/v1/chat/completions (Caused by SSLError(SSLEOFError(8, '[SSL: UNEXPECTED_EOF_W...&#10;[truncated; full report in element text]">@pytest.fixture(scope="module")
    def tenant_inference_cases():
        """Set up two tenants with models for inference testing."""
        require_aitenant_crd()
        case_a = new_named_tenant_case("e2e-inf-a")
        case_b = new_named_tenant_case("e2e-inf-b")
    
        try:
            # Bootstrap tenants
            for case in (case_a, case_b):
                bootstrap_aitenant_tenant(case)
    
            # Create both LLMInferenceServices before waiting on either. The llmisvc
            # controller reconciles them one at a time and runs minutes behind under
            # parallel load, so B should queue while A's wait runs, not after it.
            for case in (case_a, case_b):
                # Track model name early for cleanup
                case["model_name"] = f"test-model-{case['suffix']}"
                _create_llmis(
                    case["model_name"],
                    case["tenant_ns"],
                    case["gateway_name"],
                    GATEWAY_NAMESPACE,
                )
    
            for case in (case_a, case_b):
                model_name = case["model_name"]
                # Re-applies the LLMIS created above unchanged, then waits for it.
                provision_tenant_model(
                    model_name,
                    case["tenant_ns"],
                    case["gateway_name"],
                    ready_timeout=MODEL_BACKEND_READY_TIMEOUT,
                )
                make_tenant_model_accessible(
                    model_name,
                    case["tenant_ns"],
                    f"{model_name}-auth",
                    f"{model_name}-sub",
                    token_limit=10000,
                    gateway_name=case["gateway_name"],
                )
                # Store model path (with /v1 for OpenAI API compatibility)
                case["model_path"] = f"/{case['tenant_ns']}/{model_name}/v1"
    
            for case in (case_a, case_b):
&gt;               wait_for_route_auth_enforced(
                    f"{_get_tenant_gateway_url(case['gateway_name'])}{case['model_path']}"
                )

test/e2e/tests/test_tenant_model_inference.py:189: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
test/e2e/tests/multitenancy_helpers.py:443: in wait_for_route_auth_enforced
    wait_until(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

check = &lt;function wait_for_route_auth_enforced.&lt;locals&gt;._check at 0x7fa60fbd6200&gt;
timeout = 180
what = 'https://e2e-inf-a-e7b70d.apps.00125a180bb08b60980b.prod.konflux-ocp-ci.dev/ai-tenant-e2e-inf-a-e7b70d/test-model-e7b70d/v1/chat/completions did not reject an unknown API key for 10s'
interval = 2

    def wait_until(check, timeout: int, what: str, interval: int = 5):
        """Poll check() until it returns a truthy value. Assertion failures and transient
        cluster or HTTP errors count as "not yet"; the last one ends up in the timeout message."""
        deadline = time.time() + timeout
        while True:
            try:
                result = check()
                if result:
                    return result
                last = result
            except (AssertionError, subprocess.TimeoutExpired, requests.RequestException) as exc:
                last = exc
&gt;           assert time.time() &lt; deadline, f"{what} within {timeout}s; last: {last}"
                   ^^^^^^^^^^^^^^^^^^^^^^
E           AssertionError: https://e2e-inf-a-e7b70d.apps.00125a180bb08b60980b.prod.konflux-ocp-ci.dev/ai-tenant-e2e-inf-a-e7b70d/test-model-e7b70d/v1/chat/completions did not reject an unknown API key for 10s within 180s; last: HTTPSConnectionPool(host='e2e-inf-a-e7b70d.apps.00125a180bb08b60980b.prod.konflux-ocp-ci.dev', port=443): Max retries exceeded with url: /ai-tenant-e2e-inf-a-e7b70d/test-model-e7b70d/v1/chat/completions (Caused by SSLError(SSLEOFError(8, '[SSL: UNEXPECTED_EOF_WHILE_READING] EOF occurred in violation of protocol (_ssl.c:1004)')))

test/e2e/tests/multitenancy_helpers.py:279: AssertionError</error></testcase><testcase classname="tests.test_tenant_rate_limit_isolation.TestTenantRateLimitIsolation" name="test_independent_tenant_rate_limits" time="323.006" /><testcase classname="tests.test_tenant_subscription_isolation.TestTenantSubscriptionIsolation" name="test_subscription_list_scoped_to_tenant" time="357.424" /><testcase classname="tests.test_tenant_subscription_isolation.TestTenantSubscriptionIsolation" name="test_subscription_selection_per_tenant" time="434.374" /></testsuite></testsuites>