<?xml version="1.0" encoding="utf-8"?><testsuites name="pytest tests"><testsuite name="pytest" errors="0" failures="1" skipped="0" tests="22" time="343.646" timestamp="2026-09-07T23:02:51.845982+00:00" hostname="maas-group-test-6gq4f-e2e-maas-openshift-pod"><testcase classname="tests.test_api_keys.TestAPIKeySubscriptionPhases" name="test_create_key_for_pending_subscription" time="83.318" /><testcase classname="tests.test_api_keys.TestAPIKeySubscriptionPhases" name="test_reject_key_for_unreconciled_subscription" time="15.003" /><testcase classname="tests.test_negative_security.TestAuthPolicyRemoval" name="test_authpolicy_deletion_revokes_access" time="7.205" /><testcase classname="tests.test_subscription.TestSubscriptionEnforcement" name="test_rate_limit_exhaustion_gets_429" time="7.131" /><testcase classname="tests.test_subscription.TestSubscriptionEnforcement" name="test_models_endpoint_exempt_from_rate_limiting" time="8.685" /><testcase classname="tests.test_subscription.TestMultipleSubscriptionsPerModel" name="test_user_in_one_of_two_subscriptions_gets_200" time="0.646" /><testcase classname="tests.test_subscription.TestMultipleAuthPoliciesPerModel" name="test_delete_one_auth_policy_other_still_works" time="0.792" /><testcase classname="tests.test_subscription.TestCascadeDeletion" name="test_delete_subscription_rebuilds_trlp" time="0.569" /><testcase classname="tests.test_subscription.TestCascadeDeletion" name="test_trlp_persists_during_multi_subscription_deletion" time="7.944" /><testcase classname="tests.test_subscription.TestCascadeDeletion" name="test_delete_last_subscription_denies_access" time="4.904" /><testcase classname="tests.test_subscription.TestE2ESubscriptionFlow" name="test_e2e_with_access_but_no_subscription_gets_403" time="3.759" /><testcase classname="tests.test_subscription.TestE2ESubscriptionFlow" name="test_e2e_single_subscription_auto_selects" time="5.967" /><testcase classname="tests.test_subscription.TestE2ESubscriptionFlow" name="test_e2e_group_based_auth_but_no_subscription_gets_403" time="3.403" /><testcase classname="tests.test_subscription.TestStatusReporting" name="test_subscription_degraded_trlp_blocks_inference" time="86.084" /><testcase classname="tests.test_models_endpoint.TestModelsEndpoint" name="test_single_subscription_auto_select" time="4.697" /><testcase classname="tests.test_models_endpoint.TestModelsEndpoint" name="test_different_modelrefs_same_model_id" time="55.450" /><testcase classname="tests.test_models_endpoint.TestModelsEndpoint" name="test_empty_model_list" time="5.376"><failure message="AssertionError: Expected empty list (unconfigured model has no auth policy), got 2 models: [{'id': 'publishers/llm/models/facebook/opt-125m', 'created': 1788820892, 'object': 'model', 'owned_by': 'llm/facebook-opt-125m-simulated', 'kind': 'LLMInferenceService', 'url': 'https://maas-default-gateway-openshift-default.openshift-ingress.svc.cluster.local/', 'ready': True, 'modelDetails': {'description': 'A simulated OPT-125M model for free-tier testing', 'displayName': 'Facebook OPT 125M (Simulated)'}, 'subscriptions': [{'name': 'e2e-empty-models-subscription'}]}, {'id': 'publishers/llm/models/facebook/opt-125m-premium', 'created': 1788820892, 'object': 'model', 'owned_by': 'llm/premium-simulated-simulated-premium', 'kind': 'LLMInferenceService', 'url': 'https://maas-default-gateway-openshift-default.openshift-ingress.svc.cluster.local/', 'ready': True, 'modelDetails': {'description': 'A simulated model for premium-tier testing', 'displayName': 'Premium Simulator'}, 'subscriptions': [{'name': 'e2e-empty-models-subscription'}]}]&#10;assert 2 == 0&#10; +  where 2 = len([{'created': 1788820892, 'id': 'publishers/llm/models/facebook/opt-125m', 'kind': 'LLMInferenceService', 'modelDetails': {'description': 'A simulated OPT-125M model for free-tier testing', 'displayName': 'Facebook OPT 125M (Simulated)'}, ...}, {'created': 1788820892, 'id': 'publishers/llm/models/facebook/opt-125m-premium', 'kind': 'LLMInferenceService', 'modelDetails': {'description': 'A simulated model for premium-tier testing', 'displayName': 'Premium Simulator'}, ...}])">self = &lt;test_models_endpoint.TestModelsEndpoint object at 0x7fb687e5a790&gt;

    @pytest.mark.serial
    def test_empty_model_list(self):
        """
        Test 9: Empty model list should return [] not null.
    
        Creates a subscription pointing to UNCONFIGURED_MODEL_REF which has no
        auth policy. The SA has access to the subscription, but when probing the
        model endpoint, Authorino returns 403 (no auth policy = no access).
    
        This validates that FilterModelsByAccess returns [] (not null) when no
        models are accessible.
        """
        log.info("Test 9: Empty model list returns empty array")
    
        sa_name = "e2e-empty-models-sa"
        sa_ns = "default"
        maas_ns = _ns()
        subscription_name = "e2e-empty-models-subscription"
    
        try:
            # Create SA
            sa_token = _create_sa_token(sa_name, namespace=sa_ns)
            sa_user = _sa_to_user(sa_name, namespace=sa_ns)
    
            # Create subscription pointing to unconfigured model (has no auth policy)
            log.info(f"Creating subscription with {UNCONFIGURED_MODEL_REF} (no auth policy = no access)")
            _create_test_subscription(subscription_name, UNCONFIGURED_MODEL_REF, users=[sa_user])
    
            # Wait for subscription to reconcile before creating API key
            _wait_for_maas_subscription_phase(subscription_name, namespace=maas_ns)
    
            # Create API key bound to test subscription
            api_key = _create_api_key(sa_token, name=f"{sa_name}-key", subscription=subscription_name)
    
            # Query /v1/models - should return empty list (model has no auth policy)
            url = f"{_maas_api_url()}/v1/models"
            r = _get_models_with_gateway_retry(
                headers={
                    "Authorization": f"Bearer {api_key}",
                    "x-maas-subscription": subscription_name,
                },
            )
    
            # Should get 200 even with no models
            assert r.status_code == 200, f"Expected 200, got {r.status_code}: {r.text}"
    
            data = r.json()
            assert data.get("object") == "list", f"Expected object='list', got {data.get('object')}"
    
            assert "data" in data, "Response missing 'data' field"
            models = data["data"]
    
            # The critical assertion: data must be an array, never null
            assert models is not None, "'data' field must not be null (should be [] for empty)"
    
            assert isinstance(models, list), \
                f"data must be a list, got {type(models).__name__}"
    
            # Verify it's actually empty (unconfigured model has no auth policy)
&gt;           assert len(models) == 0, \
                f"Expected empty list (unconfigured model has no auth policy), got {len(models)} models: {models}"
E               AssertionError: Expected empty list (unconfigured model has no auth policy), got 2 models: [{'id': 'publishers/llm/models/facebook/opt-125m', 'created': 1788820892, 'object': 'model', 'owned_by': 'llm/facebook-opt-125m-simulated', 'kind': 'LLMInferenceService', 'url': 'https://maas-default-gateway-openshift-default.openshift-ingress.svc.cluster.local/', 'ready': True, 'modelDetails': {'description': 'A simulated OPT-125M model for free-tier testing', 'displayName': 'Facebook OPT 125M (Simulated)'}, 'subscriptions': [{'name': 'e2e-empty-models-subscription'}]}, {'id': 'publishers/llm/models/facebook/opt-125m-premium', 'created': 1788820892, 'object': 'model', 'owned_by': 'llm/premium-simulated-simulated-premium', 'kind': 'LLMInferenceService', 'url': 'https://maas-default-gateway-openshift-default.openshift-ingress.svc.cluster.local/', 'ready': True, 'modelDetails': {'description': 'A simulated model for premium-tier testing', 'displayName': 'Premium Simulator'}, 'subscriptions': [{'name': 'e2e-empty-models-subscription'}]}]
E               assert 2 == 0
E                +  where 2 = len([{'created': 1788820892, 'id': 'publishers/llm/models/facebook/opt-125m', 'kind': 'LLMInferenceService', 'modelDetails': {'description': 'A simulated OPT-125M model for free-tier testing', 'displayName': 'Facebook OPT 125M (Simulated)'}, ...}, {'created': 1788820892, 'id': 'publishers/llm/models/facebook/opt-125m-premium', 'kind': 'LLMInferenceService', 'modelDetails': {'description': 'A simulated model for premium-tier testing', 'displayName': 'Premium Simulator'}, ...}])

test/e2e/tests/test_models_endpoint.py:1355: AssertionError</failure></testcase><testcase classname="tests.test_models_endpoint.TestModelsEndpoint" name="test_central_models_endpoint_exempt_from_rate_limiting" time="9.425" /><testcase classname="tests.test_tenant.TestTenantLifecycle" name="test_payload_processing_deployed_with_active_tenant" time="6.461" /><testcase classname="tests.test_embedding_inference.TestEmbeddingGovernance" name="test_embedding_default_deny_403" time="0.146" /><testcase classname="tests.test_embedding_inference.TestEmbeddingGovernance" name="test_embedding_trlp_429" time="12.993" /><testcase classname="tests.test_embedding_inference.TestEmbeddingGovernance" name="test_embedding_with_governance_200" time="12.625" /></testsuite></testsuites>