<?xml version="1.0" encoding="utf-8"?><testsuites name="pytest tests"><testsuite name="mlflow-e2e" errors="0" failures="53" skipped="7" tests="99" time="210.620" timestamp="2026-11-01T13:41:04.832920+00:00" hostname="e2e-cli-nmanos-ephc-rhoai-smoke-16c-vb857-test-mlflow-pod"><testcase classname="tests.test_artifacts.TestMLflowArtifacts" name="test_mlflow_artifacts[User with UPDATE &amp; GET permission can log and download artifacts]" time="5.642" /><testcase classname="tests.test_artifacts.TestMLflowArtifacts" name="test_mlflow_artifacts[User with UPDATE &amp; GET permission can log and load models]" time="8.546" /><testcase classname="tests.test_artifacts.TestMLflowArtifacts" name="test_mlflow_artifacts[User with UPDATE permission can verify storage for artifacts]" time="2.654" /><testcase classname="tests.test_artifacts.TestMLflowArtifacts" name="test_mlflow_artifacts[User with GET permission cannot log models]" time="4.263" /><testcase classname="tests.test_artifacts.TestMLflowArtifacts" name="test_mlflow_artifacts[User with GET permission on workspace 1 cannot start run in workspace 2]" time="2.105" /><testcase classname="tests.test_artifacts.TestMLflowArtifacts" name="test_mlflow_artifacts[User with UPDATE permission on workspace 2 cannot log artifacts in workspace 1]" time="4.641" /><testcase classname="tests.test_artifacts.TestMLflowArtifacts" name="test_mlflow_artifacts[User with GET permission cannot end run]" time="4.422" /><testcase classname="tests.test_artifacts.TestMLflowArtifacts" name="test_mlflow_artifacts[User with UPDATE permission on workspace 1 cannot log model to run in workspace 2]" time="4.357" /><testcase classname="tests.test_artifacts.TestMLflowArtifacts" name="test_mlflow_artifacts[User with LIST permission cannot log artifacts without CREATE permission]" time="2.228" /><testcase classname="tests.test_artifacts.TestMLflowArtifacts" name="test_s3_model_download_uses_runner_reachable_presigned_endpoint" time="0.000"><skipped type="pytest.skip" message="requires the in-cluster SeaweedFS S3 backend">/mlflow/mlflow-tests/tests/test_artifacts.py:278: requires the in-cluster SeaweedFS S3 backend</skipped></testcase><testcase classname="tests.test_artifacts.TestMLflowArtifactsServer" name="test_direct_artifact_server_functionality" time="0.000"><skipped type="pytest.skip" message="requires an ARTIFACTS_SERVER=true deployment with a direct artifact URI">/mlflow/mlflow-tests/tests/test_artifacts.py:437: requires an ARTIFACTS_SERVER=true deployment with a direct artifact URI</skipped></testcase><testcase classname="tests.test_artifacts.TestMLflowArtifactsServer" name="test_direct_artifact_server_multipart_functionality" time="0.000"><skipped type="pytest.skip" message="requires an S3-backed artifact server with a direct artifact URI">/mlflow/mlflow-tests/tests/test_artifacts.py:456: requires an S3-backed artifact server with a direct artifact URI</skipped></testcase><testcase classname="tests.test_artifacts.TestMLflowArtifactsServer" name="test_gateway_compatibility_paths_are_served_by_artifact_deployment" time="0.000"><skipped type="pytest.skip" message="requires live artifact-server Gateway rewrite validation">/mlflow/mlflow-tests/tests/test_artifacts.py:472: requires live artifact-server Gateway rewrite validation</skipped></testcase><testcase classname="tests.test_artifacts.TestMLflowArtifactsServer" name="test_gateway_multipart_paths_are_served_by_artifact_deployment" time="0.000"><skipped type="pytest.skip" message="requires live S3 multipart Gateway rewrite validation">/mlflow/mlflow-tests/tests/test_artifacts.py:495: requires live S3 multipart Gateway rewrite validation</skipped></testcase><testcase classname="tests.test_deploy_configuration" name="test_kind_overlay_rebakes_operator_values_from_overlay_params" time="0.374" /><testcase classname="tests.test_experiments.TestExperiments" name="test_experiment[Validate that user with GET permission can get experiment]" time="1.958" /><testcase classname="tests.test_experiments.TestExperiments" name="test_experiment[Validate that user with GET permission cannot create experiment]" time="1.951" /><testcase classname="tests.test_experiments.TestExperiments" name="test_experiment[Validate that user with GET permission on workspace 2 cannot get experiment in workspace 1]" time="2.103" /><testcase classname="tests.test_experiments.TestExperiments" name="test_experiment[Validate that user with GET permission scoped to one experiment can get that experiment]" time="2.113" /><testcase classname="tests.test_experiments.TestExperiments" name="test_experiment[Validate that user with GET permission scoped to one experiment cannot get a different experiment in the same workspace]" time="2.116" /><testcase classname="tests.test_experiments.TestExperiments" name="test_experiment[Validate that user with CREATE permission can create experiment]" time="2.343" /><testcase classname="tests.test_experiments.TestExperiments" name="test_experiment[Validate that user with GET, CREATE and DELETE permissions can delete experiment]" time="2.480" /><testcase classname="tests.test_experiments.TestExperiments" name="test_experiment[Validate that user with CREATE permission on workspace 1, cannot create experiment in workspace 2]" time="1.944" /><testcase classname="tests.test_experiments.TestExperiments" name="test_experiment[User with GET permission cannot delete experiment]" time="4.349" /><testcase classname="tests.test_experiments.TestExperiments" name="test_experiment[User with CREATE permission cannot delete experiment without DELETE permission]" time="2.706" /><testcase classname="tests.test_experiments.TestExperiments" name="test_experiment[User with UPDATE permission cannot create experiment without CREATE permission]" time="1.953" /><testcase classname="tests.test_experiments.TestExperiments" name="test_experiment[User with LIST permission cannot delete experiment without DELETE permission]" time="4.433" /><testcase classname="tests.test_garbage_collection.TestGarbageCollection" name="test_garbage_collection_job_removes_deleted_run_and_artifacts" time="0.001"><skipped type="pytest.skip" message="garbage collection live Job requires enabled remote SQL/S3 deployment">/mlflow/mlflow-tests/tests/test_garbage_collection.py:178: garbage collection live Job requires enabled remote SQL/S3 deployment</skipped></testcase><testcase classname="tests.test_mcp_servers.TestMCPServers" name="test_mcp_server[Validate that user with GET permission can get MCP server]" time="1.784"><failure message="AssertionError: Action 'action_create_mcp_server' failed for user test-user-7nzey9or in workspace workspace1-x27l4wom: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-7nzey9or, Workspace: workspace1-x27l4wom">self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f187b33fa40&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f187b33fa40&gt;&gt;
test_data = Test Data: name=Validate that user with GET permission can get MCP server user_info=None workspace=workspace1-x27l4wom resource_slot=None

    @pytest.mark.parametrize('test_data', test_scenarios, ids=lambda x: x.test_name)
    def test_mcp_server(self, create_user_with_permissions, test_data: TestData):
        """Test MCP server operations with user permissions.
    
        Executes action (if provided) and validates the result based on user permissions.
        """
        logger.info("=" * 80)
        logger.info(f"Starting test: {test_data.test_name}")
        if test_data.user_info:
            verb_names = [verb.value for verb in test_data.user_info.verbs]
            logger.info(f"User verbs: {verb_names}, Resource: {[rt.value for rt in test_data.user_info.resource_types]}")
        if test_data.workspace_to_use:
            logger.info(f"Workspace: {test_data.workspace_to_use}")
        logger.info("=" * 80)
    
        if test_data.user_info:
            user_info: UserInfo = create_user_with_permissions(
                workspace=test_data.user_info.workspace,
                verbs=test_data.user_info.verbs,
                resource_types=test_data.user_info.resource_types,
                subresources=test_data.user_info.subresources,
                resource_names=test_data.user_info.resource_names,
            )
            logger.info(f"Created user: {user_info.uname}")
            self.test_context.active_user = user_info
            self.test_context.user_client = user_info.client
    
        if test_data.workspace_to_use:
            self.test_context.active_workspace = test_data.workspace_to_use
            mlflow.set_workspace(self.test_context.active_workspace)
            logger.info(f"Set active workspace to: {test_data.workspace_to_use}")
    
&gt;       self._execute_test_steps(test_data=test_data)

tests/test_mcp_servers.py:718: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/base.py:634: in _execute_test_steps
    self._execute_validation(validate_func=step.validate_func, step_number=i, action_name=action_name)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f187b33fa40&gt;
validate_func = &lt;function validate_mcp_server_created at 0x7f187b072980&gt;
step_number = 1, action_name = 'action_create_mcp_server'

    def _execute_validation(self, validate_func, step_number: int, action_name: str) -&gt; None:
        """Execute a single validation function.
    
        Args:
            validate_func: The validation function to execute.
            step_number: The step number for logging.
            action_name: The action that was executed before this validation.
    
        Raises:
            AssertionError: If validation fails.
        """
        validation_name = validate_func.__name__
        logger.info(f"Step {step_number}: Executing validation '{validation_name}' for action '{action_name}'")
    
        # Generic error handling: if action failed and this is not an "expected failure" validation,
        # show the actual action error instead of letting validation give misleading messages
        if (
            self.test_context.last_error is not None
            and validation_name
            not in {
                "validate_authentication_denied",
                "validate_authentication_denied_or_resource_not_found",
                "validate_mcp_access_endpoint_deleted",
                "validate_skill_artifact_registration_unavailable",
                "validate_skill_deleted",
            }
        ):
    
            error_response = self.test_context.last_error
            user_name = self.test_context.active_user.uname if self.test_context.active_user else "unknown"
            workspace = self.test_context.active_workspace or "unknown"
    
            logger.error(f"Validation '{validation_name}' failed because action '{action_name}' encountered an error for user '{user_name}' in workspace '{workspace}': {error_response.error.code} - {error_response.error.message}")
    
            # Provide detailed error message showing the actual action failure
            error_msg = f"Action '{action_name}' failed for user {user_name} in workspace {workspace}: {error_response.error.code} - {error_response.error.message}"
            if error_response.error.details:
                error_msg += f"\nDetails: {error_response.error.details}"
    
&gt;           raise AssertionError(error_msg)
E           AssertionError: Action 'action_create_mcp_server' failed for user test-user-7nzey9or in workspace workspace1-x27l4wom: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-7nzey9or, Workspace: workspace1-x27l4wom

tests/base.py:709: AssertionError</failure></testcase><testcase classname="tests.test_mcp_servers.TestMCPServers" name="test_mcp_server[Validate that user with GET permission cannot create MCP server]" time="1.791"><failure message="AssertionError: Action failed with unexpected error for user test-user-tonvm5cj: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}. Expected permission/authentication error.">self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f187af9fe90&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f187af9fe90&gt;&gt;
test_data = Test Data: name=Validate that user with GET permission cannot create MCP server user_info=UserInfo(workspace='workspac...source_type=[&lt;ResourceType.MCP_SERVERS: 'mcpservers'&gt;], verbs=['get']) workspace=workspace1-x27l4wom resource_slot=None

    @pytest.mark.parametrize('test_data', test_scenarios, ids=lambda x: x.test_name)
    def test_mcp_server(self, create_user_with_permissions, test_data: TestData):
        """Test MCP server operations with user permissions.
    
        Executes action (if provided) and validates the result based on user permissions.
        """
        logger.info("=" * 80)
        logger.info(f"Starting test: {test_data.test_name}")
        if test_data.user_info:
            verb_names = [verb.value for verb in test_data.user_info.verbs]
            logger.info(f"User verbs: {verb_names}, Resource: {[rt.value for rt in test_data.user_info.resource_types]}")
        if test_data.workspace_to_use:
            logger.info(f"Workspace: {test_data.workspace_to_use}")
        logger.info("=" * 80)
    
        if test_data.user_info:
            user_info: UserInfo = create_user_with_permissions(
                workspace=test_data.user_info.workspace,
                verbs=test_data.user_info.verbs,
                resource_types=test_data.user_info.resource_types,
                subresources=test_data.user_info.subresources,
                resource_names=test_data.user_info.resource_names,
            )
            logger.info(f"Created user: {user_info.uname}")
            self.test_context.active_user = user_info
            self.test_context.user_client = user_info.client
    
        if test_data.workspace_to_use:
            self.test_context.active_workspace = test_data.workspace_to_use
            mlflow.set_workspace(self.test_context.active_workspace)
            logger.info(f"Set active workspace to: {test_data.workspace_to_use}")
    
&gt;       self._execute_test_steps(test_data=test_data)

tests/test_mcp_servers.py:718: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/base.py:634: in _execute_test_steps
    self._execute_validation(validate_func=step.validate_func, step_number=i, action_name=action_name)
tests/base.py:712: in _execute_validation
    validate_func(self.test_context)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

test_context = TestContext(workspaces=['workspace1-x27l4wom', 'workspace2-x27l4wom'], active_workspace='workspace1-x27l4wom', active_..._observed_state={}, k8_manager=None, discovered_workspaces=set(), unlabeled_namespace=None, namespaces_to_delete=set())

    def validate_authentication_denied(test_context: TestContext) -&gt; None:
        """Validate that an action failed due to authentication denial.
    
        Checks that an authentication or authorization error occurred during the action.
    
        Args:
            test_context: Test context containing structured error information.
    
        Raises:
            AssertionError: If no error occurred or error is not permission-related.
        """
        user_name = test_context.active_user.uname
        workspace = test_context.active_workspace
        logger.info(f"Validating that action failed as expected for user '{user_name}' in workspace '{workspace}'")
    
        # Validate that an error occurred
        if test_context.last_error is None:
            logger.error(f"Validation failed: Action should have failed for unauthorized user '{user_name}', but succeeded")
            raise AssertionError(f"Action should have failed for unauthorized user '{user_name}', but succeeded")
    
        error_response: ErrorResponse = test_context.last_error
    
        # Check if it's a permission or authentication error
        if not error_response.is_permission_error():
            logger.error(f"Validation failed: Expected permission/authentication error, got: {error_response.error.code} - {error_response.error.message}")
&gt;           raise AssertionError(
                f"Action failed with unexpected error for user {user_name}: {error_response.error.code} - {error_response.error.message}. "
                f"Expected permission/authentication error."
            )
E           AssertionError: Action failed with unexpected error for user test-user-tonvm5cj: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}. Expected permission/authentication error.

tests/validations/validation_utils.py:38: AssertionError</failure></testcase><testcase classname="tests.test_mcp_servers.TestMCPServers" name="test_mcp_server[Validate that user with GET permission on workspace 1 cannot get MCP server in workspace 2]" time="1.807"><failure message="AssertionError: Action 'action_create_mcp_server' failed for user test-user-c5h2vrdh in workspace workspace2-x27l4wom: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-c5h2vrdh, Workspace: workspace2-x27l4wom">self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f187af9e390&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f187af9e390&gt;&gt;
test_data = Test Data: name=Validate that user with GET permission on workspace 1 cannot get MCP server in workspace 2 user_info=None workspace=None resource_slot=None

    @pytest.mark.parametrize('test_data', test_scenarios, ids=lambda x: x.test_name)
    def test_mcp_server(self, create_user_with_permissions, test_data: TestData):
        """Test MCP server operations with user permissions.
    
        Executes action (if provided) and validates the result based on user permissions.
        """
        logger.info("=" * 80)
        logger.info(f"Starting test: {test_data.test_name}")
        if test_data.user_info:
            verb_names = [verb.value for verb in test_data.user_info.verbs]
            logger.info(f"User verbs: {verb_names}, Resource: {[rt.value for rt in test_data.user_info.resource_types]}")
        if test_data.workspace_to_use:
            logger.info(f"Workspace: {test_data.workspace_to_use}")
        logger.info("=" * 80)
    
        if test_data.user_info:
            user_info: UserInfo = create_user_with_permissions(
                workspace=test_data.user_info.workspace,
                verbs=test_data.user_info.verbs,
                resource_types=test_data.user_info.resource_types,
                subresources=test_data.user_info.subresources,
                resource_names=test_data.user_info.resource_names,
            )
            logger.info(f"Created user: {user_info.uname}")
            self.test_context.active_user = user_info
            self.test_context.user_client = user_info.client
    
        if test_data.workspace_to_use:
            self.test_context.active_workspace = test_data.workspace_to_use
            mlflow.set_workspace(self.test_context.active_workspace)
            logger.info(f"Set active workspace to: {test_data.workspace_to_use}")
    
&gt;       self._execute_test_steps(test_data=test_data)

tests/test_mcp_servers.py:718: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/base.py:634: in _execute_test_steps
    self._execute_validation(validate_func=step.validate_func, step_number=i, action_name=action_name)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f187af9e390&gt;
validate_func = &lt;function validate_mcp_server_created at 0x7f187b072980&gt;
step_number = 1, action_name = 'action_create_mcp_server'

    def _execute_validation(self, validate_func, step_number: int, action_name: str) -&gt; None:
        """Execute a single validation function.
    
        Args:
            validate_func: The validation function to execute.
            step_number: The step number for logging.
            action_name: The action that was executed before this validation.
    
        Raises:
            AssertionError: If validation fails.
        """
        validation_name = validate_func.__name__
        logger.info(f"Step {step_number}: Executing validation '{validation_name}' for action '{action_name}'")
    
        # Generic error handling: if action failed and this is not an "expected failure" validation,
        # show the actual action error instead of letting validation give misleading messages
        if (
            self.test_context.last_error is not None
            and validation_name
            not in {
                "validate_authentication_denied",
                "validate_authentication_denied_or_resource_not_found",
                "validate_mcp_access_endpoint_deleted",
                "validate_skill_artifact_registration_unavailable",
                "validate_skill_deleted",
            }
        ):
    
            error_response = self.test_context.last_error
            user_name = self.test_context.active_user.uname if self.test_context.active_user else "unknown"
            workspace = self.test_context.active_workspace or "unknown"
    
            logger.error(f"Validation '{validation_name}' failed because action '{action_name}' encountered an error for user '{user_name}' in workspace '{workspace}': {error_response.error.code} - {error_response.error.message}")
    
            # Provide detailed error message showing the actual action failure
            error_msg = f"Action '{action_name}' failed for user {user_name} in workspace {workspace}: {error_response.error.code} - {error_response.error.message}"
            if error_response.error.details:
                error_msg += f"\nDetails: {error_response.error.details}"
    
&gt;           raise AssertionError(error_msg)
E           AssertionError: Action 'action_create_mcp_server' failed for user test-user-c5h2vrdh in workspace workspace2-x27l4wom: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-c5h2vrdh, Workspace: workspace2-x27l4wom

tests/base.py:709: AssertionError</failure></testcase><testcase classname="tests.test_mcp_servers.TestMCPServers" name="test_mcp_server[Validate that user with GET permission scoped to one MCP server can get that server]" time="1.796"><failure message="AssertionError: Action 'action_create_mcp_server' failed for user test-user-coj037ea in workspace workspace1-x27l4wom: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-coj037ea, Workspace: workspace1-x27l4wom">self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f187af9fda0&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f187af9fda0&gt;&gt;
test_data = Test Data: name=Validate that user with GET permission scoped to one MCP server can get that server user_info=None workspace=workspace1-x27l4wom resource_slot=None

    @pytest.mark.parametrize('test_data', test_scenarios, ids=lambda x: x.test_name)
    def test_mcp_server(self, create_user_with_permissions, test_data: TestData):
        """Test MCP server operations with user permissions.
    
        Executes action (if provided) and validates the result based on user permissions.
        """
        logger.info("=" * 80)
        logger.info(f"Starting test: {test_data.test_name}")
        if test_data.user_info:
            verb_names = [verb.value for verb in test_data.user_info.verbs]
            logger.info(f"User verbs: {verb_names}, Resource: {[rt.value for rt in test_data.user_info.resource_types]}")
        if test_data.workspace_to_use:
            logger.info(f"Workspace: {test_data.workspace_to_use}")
        logger.info("=" * 80)
    
        if test_data.user_info:
            user_info: UserInfo = create_user_with_permissions(
                workspace=test_data.user_info.workspace,
                verbs=test_data.user_info.verbs,
                resource_types=test_data.user_info.resource_types,
                subresources=test_data.user_info.subresources,
                resource_names=test_data.user_info.resource_names,
            )
            logger.info(f"Created user: {user_info.uname}")
            self.test_context.active_user = user_info
            self.test_context.user_client = user_info.client
    
        if test_data.workspace_to_use:
            self.test_context.active_workspace = test_data.workspace_to_use
            mlflow.set_workspace(self.test_context.active_workspace)
            logger.info(f"Set active workspace to: {test_data.workspace_to_use}")
    
&gt;       self._execute_test_steps(test_data=test_data)

tests/test_mcp_servers.py:718: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/base.py:634: in _execute_test_steps
    self._execute_validation(validate_func=step.validate_func, step_number=i, action_name=action_name)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f187af9fda0&gt;
validate_func = &lt;function validate_mcp_server_created at 0x7f187b072980&gt;
step_number = 2, action_name = 'action_create_mcp_server'

    def _execute_validation(self, validate_func, step_number: int, action_name: str) -&gt; None:
        """Execute a single validation function.
    
        Args:
            validate_func: The validation function to execute.
            step_number: The step number for logging.
            action_name: The action that was executed before this validation.
    
        Raises:
            AssertionError: If validation fails.
        """
        validation_name = validate_func.__name__
        logger.info(f"Step {step_number}: Executing validation '{validation_name}' for action '{action_name}'")
    
        # Generic error handling: if action failed and this is not an "expected failure" validation,
        # show the actual action error instead of letting validation give misleading messages
        if (
            self.test_context.last_error is not None
            and validation_name
            not in {
                "validate_authentication_denied",
                "validate_authentication_denied_or_resource_not_found",
                "validate_mcp_access_endpoint_deleted",
                "validate_skill_artifact_registration_unavailable",
                "validate_skill_deleted",
            }
        ):
    
            error_response = self.test_context.last_error
            user_name = self.test_context.active_user.uname if self.test_context.active_user else "unknown"
            workspace = self.test_context.active_workspace or "unknown"
    
            logger.error(f"Validation '{validation_name}' failed because action '{action_name}' encountered an error for user '{user_name}' in workspace '{workspace}': {error_response.error.code} - {error_response.error.message}")
    
            # Provide detailed error message showing the actual action failure
            error_msg = f"Action '{action_name}' failed for user {user_name} in workspace {workspace}: {error_response.error.code} - {error_response.error.message}"
            if error_response.error.details:
                error_msg += f"\nDetails: {error_response.error.details}"
    
&gt;           raise AssertionError(error_msg)
E           AssertionError: Action 'action_create_mcp_server' failed for user test-user-coj037ea in workspace workspace1-x27l4wom: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-coj037ea, Workspace: workspace1-x27l4wom

tests/base.py:709: AssertionError</failure></testcase><testcase classname="tests.test_mcp_servers.TestMCPServers" name="test_mcp_server[Validate that user with GET permission scoped to one MCP server cannot get a different server in the same workspace]" time="1.783"><failure message="AssertionError: Action 'action_create_mcp_server' failed for user test-user-gtbokrpf in workspace workspace1-x27l4wom: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-gtbokrpf, Workspace: workspace1-x27l4wom">self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f187af9c050&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f187af9c050&gt;&gt;
test_data = Test Data: name=Validate that user with GET permission scoped to one MCP server cannot get a different server in the same workspace user_info=None workspace=workspace1-x27l4wom resource_slot=None

    @pytest.mark.parametrize('test_data', test_scenarios, ids=lambda x: x.test_name)
    def test_mcp_server(self, create_user_with_permissions, test_data: TestData):
        """Test MCP server operations with user permissions.
    
        Executes action (if provided) and validates the result based on user permissions.
        """
        logger.info("=" * 80)
        logger.info(f"Starting test: {test_data.test_name}")
        if test_data.user_info:
            verb_names = [verb.value for verb in test_data.user_info.verbs]
            logger.info(f"User verbs: {verb_names}, Resource: {[rt.value for rt in test_data.user_info.resource_types]}")
        if test_data.workspace_to_use:
            logger.info(f"Workspace: {test_data.workspace_to_use}")
        logger.info("=" * 80)
    
        if test_data.user_info:
            user_info: UserInfo = create_user_with_permissions(
                workspace=test_data.user_info.workspace,
                verbs=test_data.user_info.verbs,
                resource_types=test_data.user_info.resource_types,
                subresources=test_data.user_info.subresources,
                resource_names=test_data.user_info.resource_names,
            )
            logger.info(f"Created user: {user_info.uname}")
            self.test_context.active_user = user_info
            self.test_context.user_client = user_info.client
    
        if test_data.workspace_to_use:
            self.test_context.active_workspace = test_data.workspace_to_use
            mlflow.set_workspace(self.test_context.active_workspace)
            logger.info(f"Set active workspace to: {test_data.workspace_to_use}")
    
&gt;       self._execute_test_steps(test_data=test_data)

tests/test_mcp_servers.py:718: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/base.py:634: in _execute_test_steps
    self._execute_validation(validate_func=step.validate_func, step_number=i, action_name=action_name)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f187af9c050&gt;
validate_func = &lt;function validate_mcp_server_created at 0x7f187b072980&gt;
step_number = 2, action_name = 'action_create_mcp_server'

    def _execute_validation(self, validate_func, step_number: int, action_name: str) -&gt; None:
        """Execute a single validation function.
    
        Args:
            validate_func: The validation function to execute.
            step_number: The step number for logging.
            action_name: The action that was executed before this validation.
    
        Raises:
            AssertionError: If validation fails.
        """
        validation_name = validate_func.__name__
        logger.info(f"Step {step_number}: Executing validation '{validation_name}' for action '{action_name}'")
    
        # Generic error handling: if action failed and this is not an "expected failure" validation,
        # show the actual action error instead of letting validation give misleading messages
        if (
            self.test_context.last_error is not None
            and validation_name
            not in {
                "validate_authentication_denied",
                "validate_authentication_denied_or_resource_not_found",
                "validate_mcp_access_endpoint_deleted",
                "validate_skill_artifact_registration_unavailable",
                "validate_skill_deleted",
            }
        ):
    
            error_response = self.test_context.last_error
            user_name = self.test_context.active_user.uname if self.test_context.active_user else "unknown"
            workspace = self.test_context.active_workspace or "unknown"
    
            logger.error(f"Validation '{validation_name}' failed because action '{action_name}' encountered an error for user '{user_name}' in workspace '{workspace}': {error_response.error.code} - {error_response.error.message}")
    
            # Provide detailed error message showing the actual action failure
            error_msg = f"Action '{action_name}' failed for user {user_name} in workspace {workspace}: {error_response.error.code} - {error_response.error.message}"
            if error_response.error.details:
                error_msg += f"\nDetails: {error_response.error.details}"
    
&gt;           raise AssertionError(error_msg)
E           AssertionError: Action 'action_create_mcp_server' failed for user test-user-gtbokrpf in workspace workspace1-x27l4wom: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-gtbokrpf, Workspace: workspace1-x27l4wom

tests/base.py:709: AssertionError</failure></testcase><testcase classname="tests.test_mcp_servers.TestMCPServers" name="test_mcp_server[Validate that user with UPDATE permission scoped to one MCP server cannot create a different server]" time="1.790"><failure message="AssertionError: Action failed with unexpected error for user test-user-wpr942ss: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}. Expected permission/authentication error.">self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f187af9c170&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f187af9c170&gt;&gt;
test_data = Test Data: name=Validate that user with UPDATE permission scoped to one MCP server cannot create a different server user_info=None workspace=workspace1-x27l4wom resource_slot=None

    @pytest.mark.parametrize('test_data', test_scenarios, ids=lambda x: x.test_name)
    def test_mcp_server(self, create_user_with_permissions, test_data: TestData):
        """Test MCP server operations with user permissions.
    
        Executes action (if provided) and validates the result based on user permissions.
        """
        logger.info("=" * 80)
        logger.info(f"Starting test: {test_data.test_name}")
        if test_data.user_info:
            verb_names = [verb.value for verb in test_data.user_info.verbs]
            logger.info(f"User verbs: {verb_names}, Resource: {[rt.value for rt in test_data.user_info.resource_types]}")
        if test_data.workspace_to_use:
            logger.info(f"Workspace: {test_data.workspace_to_use}")
        logger.info("=" * 80)
    
        if test_data.user_info:
            user_info: UserInfo = create_user_with_permissions(
                workspace=test_data.user_info.workspace,
                verbs=test_data.user_info.verbs,
                resource_types=test_data.user_info.resource_types,
                subresources=test_data.user_info.subresources,
                resource_names=test_data.user_info.resource_names,
            )
            logger.info(f"Created user: {user_info.uname}")
            self.test_context.active_user = user_info
            self.test_context.user_client = user_info.client
    
        if test_data.workspace_to_use:
            self.test_context.active_workspace = test_data.workspace_to_use
            mlflow.set_workspace(self.test_context.active_workspace)
            logger.info(f"Set active workspace to: {test_data.workspace_to_use}")
    
&gt;       self._execute_test_steps(test_data=test_data)

tests/test_mcp_servers.py:718: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/base.py:634: in _execute_test_steps
    self._execute_validation(validate_func=step.validate_func, step_number=i, action_name=action_name)
tests/base.py:712: in _execute_validation
    validate_func(self.test_context)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

test_context = TestContext(workspaces=['workspace1-x27l4wom', 'workspace2-x27l4wom'], active_workspace='workspace1-x27l4wom', active_..._observed_state={}, k8_manager=None, discovered_workspaces=set(), unlabeled_namespace=None, namespaces_to_delete=set())

    def validate_authentication_denied(test_context: TestContext) -&gt; None:
        """Validate that an action failed due to authentication denial.
    
        Checks that an authentication or authorization error occurred during the action.
    
        Args:
            test_context: Test context containing structured error information.
    
        Raises:
            AssertionError: If no error occurred or error is not permission-related.
        """
        user_name = test_context.active_user.uname
        workspace = test_context.active_workspace
        logger.info(f"Validating that action failed as expected for user '{user_name}' in workspace '{workspace}'")
    
        # Validate that an error occurred
        if test_context.last_error is None:
            logger.error(f"Validation failed: Action should have failed for unauthorized user '{user_name}', but succeeded")
            raise AssertionError(f"Action should have failed for unauthorized user '{user_name}', but succeeded")
    
        error_response: ErrorResponse = test_context.last_error
    
        # Check if it's a permission or authentication error
        if not error_response.is_permission_error():
            logger.error(f"Validation failed: Expected permission/authentication error, got: {error_response.error.code} - {error_response.error.message}")
&gt;           raise AssertionError(
                f"Action failed with unexpected error for user {user_name}: {error_response.error.code} - {error_response.error.message}. "
                f"Expected permission/authentication error."
            )
E           AssertionError: Action failed with unexpected error for user test-user-wpr942ss: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}. Expected permission/authentication error.

tests/validations/validation_utils.py:38: AssertionError</failure></testcase><testcase classname="tests.test_mcp_servers.TestMCPServers" name="test_mcp_server[Validate that user with CREATE permission cannot register an MCP server (add a version) without UPDATE permission]" time="1.797"><failure message="AssertionError: Action failed with unexpected error for user test-user-x45fya6u: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}. Expected permission/authentication error.">self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f187af9c230&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f187af9c230&gt;&gt;
test_data = Test Data: name=Validate that user with CREATE permission cannot register an MCP server (add a version) without UPDATE...rce_type=[&lt;ResourceType.MCP_SERVERS: 'mcpservers'&gt;], verbs=['create']) workspace=workspace1-x27l4wom resource_slot=None

    @pytest.mark.parametrize('test_data', test_scenarios, ids=lambda x: x.test_name)
    def test_mcp_server(self, create_user_with_permissions, test_data: TestData):
        """Test MCP server operations with user permissions.
    
        Executes action (if provided) and validates the result based on user permissions.
        """
        logger.info("=" * 80)
        logger.info(f"Starting test: {test_data.test_name}")
        if test_data.user_info:
            verb_names = [verb.value for verb in test_data.user_info.verbs]
            logger.info(f"User verbs: {verb_names}, Resource: {[rt.value for rt in test_data.user_info.resource_types]}")
        if test_data.workspace_to_use:
            logger.info(f"Workspace: {test_data.workspace_to_use}")
        logger.info("=" * 80)
    
        if test_data.user_info:
            user_info: UserInfo = create_user_with_permissions(
                workspace=test_data.user_info.workspace,
                verbs=test_data.user_info.verbs,
                resource_types=test_data.user_info.resource_types,
                subresources=test_data.user_info.subresources,
                resource_names=test_data.user_info.resource_names,
            )
            logger.info(f"Created user: {user_info.uname}")
            self.test_context.active_user = user_info
            self.test_context.user_client = user_info.client
    
        if test_data.workspace_to_use:
            self.test_context.active_workspace = test_data.workspace_to_use
            mlflow.set_workspace(self.test_context.active_workspace)
            logger.info(f"Set active workspace to: {test_data.workspace_to_use}")
    
&gt;       self._execute_test_steps(test_data=test_data)

tests/test_mcp_servers.py:718: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/base.py:634: in _execute_test_steps
    self._execute_validation(validate_func=step.validate_func, step_number=i, action_name=action_name)
tests/base.py:712: in _execute_validation
    validate_func(self.test_context)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

test_context = TestContext(workspaces=['workspace1-x27l4wom', 'workspace2-x27l4wom'], active_workspace='workspace1-x27l4wom', active_..._observed_state={}, k8_manager=None, discovered_workspaces=set(), unlabeled_namespace=None, namespaces_to_delete=set())

    def validate_authentication_denied(test_context: TestContext) -&gt; None:
        """Validate that an action failed due to authentication denial.
    
        Checks that an authentication or authorization error occurred during the action.
    
        Args:
            test_context: Test context containing structured error information.
    
        Raises:
            AssertionError: If no error occurred or error is not permission-related.
        """
        user_name = test_context.active_user.uname
        workspace = test_context.active_workspace
        logger.info(f"Validating that action failed as expected for user '{user_name}' in workspace '{workspace}'")
    
        # Validate that an error occurred
        if test_context.last_error is None:
            logger.error(f"Validation failed: Action should have failed for unauthorized user '{user_name}', but succeeded")
            raise AssertionError(f"Action should have failed for unauthorized user '{user_name}', but succeeded")
    
        error_response: ErrorResponse = test_context.last_error
    
        # Check if it's a permission or authentication error
        if not error_response.is_permission_error():
            logger.error(f"Validation failed: Expected permission/authentication error, got: {error_response.error.code} - {error_response.error.message}")
&gt;           raise AssertionError(
                f"Action failed with unexpected error for user {user_name}: {error_response.error.code} - {error_response.error.message}. "
                f"Expected permission/authentication error."
            )
E           AssertionError: Action failed with unexpected error for user test-user-x45fya6u: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}. Expected permission/authentication error.

tests/validations/validation_utils.py:38: AssertionError</failure></testcase><testcase classname="tests.test_mcp_servers.TestMCPServers" name="test_mcp_server[Validate that user with CREATE permission can create a bare MCP server via the direct client API]" time="1.789"><failure message="AssertionError: Action 'action_create_mcp_server_shell' failed for user test-user-g87pblt7 in workspace workspace1-x27l4wom: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-g87pblt7, Workspace: workspace1-x27l4wom">self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f187af9c320&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f187af9c320&gt;&gt;
test_data = Test Data: name=Validate that user with CREATE permission can create a bare MCP server via the direct client API user_...rce_type=[&lt;ResourceType.MCP_SERVERS: 'mcpservers'&gt;], verbs=['create']) workspace=workspace1-x27l4wom resource_slot=None

    @pytest.mark.parametrize('test_data', test_scenarios, ids=lambda x: x.test_name)
    def test_mcp_server(self, create_user_with_permissions, test_data: TestData):
        """Test MCP server operations with user permissions.
    
        Executes action (if provided) and validates the result based on user permissions.
        """
        logger.info("=" * 80)
        logger.info(f"Starting test: {test_data.test_name}")
        if test_data.user_info:
            verb_names = [verb.value for verb in test_data.user_info.verbs]
            logger.info(f"User verbs: {verb_names}, Resource: {[rt.value for rt in test_data.user_info.resource_types]}")
        if test_data.workspace_to_use:
            logger.info(f"Workspace: {test_data.workspace_to_use}")
        logger.info("=" * 80)
    
        if test_data.user_info:
            user_info: UserInfo = create_user_with_permissions(
                workspace=test_data.user_info.workspace,
                verbs=test_data.user_info.verbs,
                resource_types=test_data.user_info.resource_types,
                subresources=test_data.user_info.subresources,
                resource_names=test_data.user_info.resource_names,
            )
            logger.info(f"Created user: {user_info.uname}")
            self.test_context.active_user = user_info
            self.test_context.user_client = user_info.client
    
        if test_data.workspace_to_use:
            self.test_context.active_workspace = test_data.workspace_to_use
            mlflow.set_workspace(self.test_context.active_workspace)
            logger.info(f"Set active workspace to: {test_data.workspace_to_use}")
    
&gt;       self._execute_test_steps(test_data=test_data)

tests/test_mcp_servers.py:718: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/base.py:634: in _execute_test_steps
    self._execute_validation(validate_func=step.validate_func, step_number=i, action_name=action_name)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f187af9c320&gt;
validate_func = &lt;function validate_mcp_server_created at 0x7f187b072980&gt;
step_number = 1, action_name = 'action_create_mcp_server_shell'

    def _execute_validation(self, validate_func, step_number: int, action_name: str) -&gt; None:
        """Execute a single validation function.
    
        Args:
            validate_func: The validation function to execute.
            step_number: The step number for logging.
            action_name: The action that was executed before this validation.
    
        Raises:
            AssertionError: If validation fails.
        """
        validation_name = validate_func.__name__
        logger.info(f"Step {step_number}: Executing validation '{validation_name}' for action '{action_name}'")
    
        # Generic error handling: if action failed and this is not an "expected failure" validation,
        # show the actual action error instead of letting validation give misleading messages
        if (
            self.test_context.last_error is not None
            and validation_name
            not in {
                "validate_authentication_denied",
                "validate_authentication_denied_or_resource_not_found",
                "validate_mcp_access_endpoint_deleted",
                "validate_skill_artifact_registration_unavailable",
                "validate_skill_deleted",
            }
        ):
    
            error_response = self.test_context.last_error
            user_name = self.test_context.active_user.uname if self.test_context.active_user else "unknown"
            workspace = self.test_context.active_workspace or "unknown"
    
            logger.error(f"Validation '{validation_name}' failed because action '{action_name}' encountered an error for user '{user_name}' in workspace '{workspace}': {error_response.error.code} - {error_response.error.message}")
    
            # Provide detailed error message showing the actual action failure
            error_msg = f"Action '{action_name}' failed for user {user_name} in workspace {workspace}: {error_response.error.code} - {error_response.error.message}"
            if error_response.error.details:
                error_msg += f"\nDetails: {error_response.error.details}"
    
&gt;           raise AssertionError(error_msg)
E           AssertionError: Action 'action_create_mcp_server_shell' failed for user test-user-g87pblt7 in workspace workspace1-x27l4wom: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-g87pblt7, Workspace: workspace1-x27l4wom

tests/base.py:709: AssertionError</failure></testcase><testcase classname="tests.test_mcp_servers.TestMCPServers" name="test_mcp_server[Validate that user with UPDATE permission cannot create a bare MCP server via the direct client API without CREATE permission]" time="1.788"><failure message="AssertionError: Action failed with unexpected error for user test-user-4ykhrdtu: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}. Expected permission/authentication error.">self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f187af9c3e0&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f187af9c3e0&gt;&gt;
test_data = Test Data: name=Validate that user with UPDATE permission cannot create a bare MCP server via the direct client API wi...rce_type=[&lt;ResourceType.MCP_SERVERS: 'mcpservers'&gt;], verbs=['update']) workspace=workspace1-x27l4wom resource_slot=None

    @pytest.mark.parametrize('test_data', test_scenarios, ids=lambda x: x.test_name)
    def test_mcp_server(self, create_user_with_permissions, test_data: TestData):
        """Test MCP server operations with user permissions.
    
        Executes action (if provided) and validates the result based on user permissions.
        """
        logger.info("=" * 80)
        logger.info(f"Starting test: {test_data.test_name}")
        if test_data.user_info:
            verb_names = [verb.value for verb in test_data.user_info.verbs]
            logger.info(f"User verbs: {verb_names}, Resource: {[rt.value for rt in test_data.user_info.resource_types]}")
        if test_data.workspace_to_use:
            logger.info(f"Workspace: {test_data.workspace_to_use}")
        logger.info("=" * 80)
    
        if test_data.user_info:
            user_info: UserInfo = create_user_with_permissions(
                workspace=test_data.user_info.workspace,
                verbs=test_data.user_info.verbs,
                resource_types=test_data.user_info.resource_types,
                subresources=test_data.user_info.subresources,
                resource_names=test_data.user_info.resource_names,
            )
            logger.info(f"Created user: {user_info.uname}")
            self.test_context.active_user = user_info
            self.test_context.user_client = user_info.client
    
        if test_data.workspace_to_use:
            self.test_context.active_workspace = test_data.workspace_to_use
            mlflow.set_workspace(self.test_context.active_workspace)
            logger.info(f"Set active workspace to: {test_data.workspace_to_use}")
    
&gt;       self._execute_test_steps(test_data=test_data)

tests/test_mcp_servers.py:718: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/base.py:634: in _execute_test_steps
    self._execute_validation(validate_func=step.validate_func, step_number=i, action_name=action_name)
tests/base.py:712: in _execute_validation
    validate_func(self.test_context)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

test_context = TestContext(workspaces=['workspace1-x27l4wom', 'workspace2-x27l4wom'], active_workspace='workspace1-x27l4wom', active_..._observed_state={}, k8_manager=None, discovered_workspaces=set(), unlabeled_namespace=None, namespaces_to_delete=set())

    def validate_authentication_denied(test_context: TestContext) -&gt; None:
        """Validate that an action failed due to authentication denial.
    
        Checks that an authentication or authorization error occurred during the action.
    
        Args:
            test_context: Test context containing structured error information.
    
        Raises:
            AssertionError: If no error occurred or error is not permission-related.
        """
        user_name = test_context.active_user.uname
        workspace = test_context.active_workspace
        logger.info(f"Validating that action failed as expected for user '{user_name}' in workspace '{workspace}'")
    
        # Validate that an error occurred
        if test_context.last_error is None:
            logger.error(f"Validation failed: Action should have failed for unauthorized user '{user_name}', but succeeded")
            raise AssertionError(f"Action should have failed for unauthorized user '{user_name}', but succeeded")
    
        error_response: ErrorResponse = test_context.last_error
    
        # Check if it's a permission or authentication error
        if not error_response.is_permission_error():
            logger.error(f"Validation failed: Expected permission/authentication error, got: {error_response.error.code} - {error_response.error.message}")
&gt;           raise AssertionError(
                f"Action failed with unexpected error for user {user_name}: {error_response.error.code} - {error_response.error.message}. "
                f"Expected permission/authentication error."
            )
E           AssertionError: Action failed with unexpected error for user test-user-4ykhrdtu: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}. Expected permission/authentication error.

tests/validations/validation_utils.py:38: AssertionError</failure></testcase><testcase classname="tests.test_mcp_servers.TestMCPServers" name="test_mcp_server[Validate that user with GET, UPDATE and DELETE permissions can delete MCP server]" time="1.785"><failure message="AssertionError: Action 'action_create_mcp_server' failed for user test-user-tx1cq6g7 in workspace workspace1-x27l4wom: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-tx1cq6g7, Workspace: workspace1-x27l4wom">self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f187b33f9b0&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f187b33f9b0&gt;&gt;
test_data = Test Data: name=Validate that user with GET, UPDATE and DELETE permissions can delete MCP server user_info=UserInfo(wo...ceType.MCP_SERVERS: 'mcpservers'&gt;], verbs=['get', 'update', 'delete']) workspace=workspace1-x27l4wom resource_slot=None

    @pytest.mark.parametrize('test_data', test_scenarios, ids=lambda x: x.test_name)
    def test_mcp_server(self, create_user_with_permissions, test_data: TestData):
        """Test MCP server operations with user permissions.
    
        Executes action (if provided) and validates the result based on user permissions.
        """
        logger.info("=" * 80)
        logger.info(f"Starting test: {test_data.test_name}")
        if test_data.user_info:
            verb_names = [verb.value for verb in test_data.user_info.verbs]
            logger.info(f"User verbs: {verb_names}, Resource: {[rt.value for rt in test_data.user_info.resource_types]}")
        if test_data.workspace_to_use:
            logger.info(f"Workspace: {test_data.workspace_to_use}")
        logger.info("=" * 80)
    
        if test_data.user_info:
            user_info: UserInfo = create_user_with_permissions(
                workspace=test_data.user_info.workspace,
                verbs=test_data.user_info.verbs,
                resource_types=test_data.user_info.resource_types,
                subresources=test_data.user_info.subresources,
                resource_names=test_data.user_info.resource_names,
            )
            logger.info(f"Created user: {user_info.uname}")
            self.test_context.active_user = user_info
            self.test_context.user_client = user_info.client
    
        if test_data.workspace_to_use:
            self.test_context.active_workspace = test_data.workspace_to_use
            mlflow.set_workspace(self.test_context.active_workspace)
            logger.info(f"Set active workspace to: {test_data.workspace_to_use}")
    
&gt;       self._execute_test_steps(test_data=test_data)

tests/test_mcp_servers.py:718: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/base.py:634: in _execute_test_steps
    self._execute_validation(validate_func=step.validate_func, step_number=i, action_name=action_name)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f187b33f9b0&gt;
validate_func = &lt;function validate_mcp_server_created at 0x7f187b072980&gt;
step_number = 1, action_name = 'action_create_mcp_server'

    def _execute_validation(self, validate_func, step_number: int, action_name: str) -&gt; None:
        """Execute a single validation function.
    
        Args:
            validate_func: The validation function to execute.
            step_number: The step number for logging.
            action_name: The action that was executed before this validation.
    
        Raises:
            AssertionError: If validation fails.
        """
        validation_name = validate_func.__name__
        logger.info(f"Step {step_number}: Executing validation '{validation_name}' for action '{action_name}'")
    
        # Generic error handling: if action failed and this is not an "expected failure" validation,
        # show the actual action error instead of letting validation give misleading messages
        if (
            self.test_context.last_error is not None
            and validation_name
            not in {
                "validate_authentication_denied",
                "validate_authentication_denied_or_resource_not_found",
                "validate_mcp_access_endpoint_deleted",
                "validate_skill_artifact_registration_unavailable",
                "validate_skill_deleted",
            }
        ):
    
            error_response = self.test_context.last_error
            user_name = self.test_context.active_user.uname if self.test_context.active_user else "unknown"
            workspace = self.test_context.active_workspace or "unknown"
    
            logger.error(f"Validation '{validation_name}' failed because action '{action_name}' encountered an error for user '{user_name}' in workspace '{workspace}': {error_response.error.code} - {error_response.error.message}")
    
            # Provide detailed error message showing the actual action failure
            error_msg = f"Action '{action_name}' failed for user {user_name} in workspace {workspace}: {error_response.error.code} - {error_response.error.message}"
            if error_response.error.details:
                error_msg += f"\nDetails: {error_response.error.details}"
    
&gt;           raise AssertionError(error_msg)
E           AssertionError: Action 'action_create_mcp_server' failed for user test-user-tx1cq6g7 in workspace workspace1-x27l4wom: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-tx1cq6g7, Workspace: workspace1-x27l4wom

tests/base.py:709: AssertionError</failure></testcase><testcase classname="tests.test_mcp_servers.TestMCPServers" name="test_mcp_server[Validate that user with UPDATE permission on workspace 1 cannot create MCP server in workspace 2]" time="1.802"><failure message="AssertionError: Action failed with unexpected error for user test-user-rcyfzmwr: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}. Expected permission/authentication error.">self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f187b33f6e0&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f187b33f6e0&gt;&gt;
test_data = Test Data: name=Validate that user with UPDATE permission on workspace 1 cannot create MCP server in workspace 2 user_...rce_type=[&lt;ResourceType.MCP_SERVERS: 'mcpservers'&gt;], verbs=['update']) workspace=workspace2-x27l4wom resource_slot=None

    @pytest.mark.parametrize('test_data', test_scenarios, ids=lambda x: x.test_name)
    def test_mcp_server(self, create_user_with_permissions, test_data: TestData):
        """Test MCP server operations with user permissions.
    
        Executes action (if provided) and validates the result based on user permissions.
        """
        logger.info("=" * 80)
        logger.info(f"Starting test: {test_data.test_name}")
        if test_data.user_info:
            verb_names = [verb.value for verb in test_data.user_info.verbs]
            logger.info(f"User verbs: {verb_names}, Resource: {[rt.value for rt in test_data.user_info.resource_types]}")
        if test_data.workspace_to_use:
            logger.info(f"Workspace: {test_data.workspace_to_use}")
        logger.info("=" * 80)
    
        if test_data.user_info:
            user_info: UserInfo = create_user_with_permissions(
                workspace=test_data.user_info.workspace,
                verbs=test_data.user_info.verbs,
                resource_types=test_data.user_info.resource_types,
                subresources=test_data.user_info.subresources,
                resource_names=test_data.user_info.resource_names,
            )
            logger.info(f"Created user: {user_info.uname}")
            self.test_context.active_user = user_info
            self.test_context.user_client = user_info.client
    
        if test_data.workspace_to_use:
            self.test_context.active_workspace = test_data.workspace_to_use
            mlflow.set_workspace(self.test_context.active_workspace)
            logger.info(f"Set active workspace to: {test_data.workspace_to_use}")
    
&gt;       self._execute_test_steps(test_data=test_data)

tests/test_mcp_servers.py:718: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/base.py:634: in _execute_test_steps
    self._execute_validation(validate_func=step.validate_func, step_number=i, action_name=action_name)
tests/base.py:712: in _execute_validation
    validate_func(self.test_context)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

test_context = TestContext(workspaces=['workspace1-x27l4wom', 'workspace2-x27l4wom'], active_workspace='workspace2-x27l4wom', active_..._observed_state={}, k8_manager=None, discovered_workspaces=set(), unlabeled_namespace=None, namespaces_to_delete=set())

    def validate_authentication_denied(test_context: TestContext) -&gt; None:
        """Validate that an action failed due to authentication denial.
    
        Checks that an authentication or authorization error occurred during the action.
    
        Args:
            test_context: Test context containing structured error information.
    
        Raises:
            AssertionError: If no error occurred or error is not permission-related.
        """
        user_name = test_context.active_user.uname
        workspace = test_context.active_workspace
        logger.info(f"Validating that action failed as expected for user '{user_name}' in workspace '{workspace}'")
    
        # Validate that an error occurred
        if test_context.last_error is None:
            logger.error(f"Validation failed: Action should have failed for unauthorized user '{user_name}', but succeeded")
            raise AssertionError(f"Action should have failed for unauthorized user '{user_name}', but succeeded")
    
        error_response: ErrorResponse = test_context.last_error
    
        # Check if it's a permission or authentication error
        if not error_response.is_permission_error():
            logger.error(f"Validation failed: Expected permission/authentication error, got: {error_response.error.code} - {error_response.error.message}")
&gt;           raise AssertionError(
                f"Action failed with unexpected error for user {user_name}: {error_response.error.code} - {error_response.error.message}. "
                f"Expected permission/authentication error."
            )
E           AssertionError: Action failed with unexpected error for user test-user-rcyfzmwr: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}. Expected permission/authentication error.

tests/validations/validation_utils.py:38: AssertionError</failure></testcase><testcase classname="tests.test_mcp_servers.TestMCPServers" name="test_mcp_server[User with GET permission cannot delete MCP server]" time="1.879"><failure message="AssertionError: Action 'action_create_mcp_server' failed for user test-user-1a4dtwrk in workspace workspace1-x27l4wom: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-1a4dtwrk, Workspace: workspace1-x27l4wom">self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f187b33f5f0&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f187b33f5f0&gt;&gt;
test_data = Test Data: name=User with GET permission cannot delete MCP server user_info=None workspace=workspace1-x27l4wom resource_slot=None

    @pytest.mark.parametrize('test_data', test_scenarios, ids=lambda x: x.test_name)
    def test_mcp_server(self, create_user_with_permissions, test_data: TestData):
        """Test MCP server operations with user permissions.
    
        Executes action (if provided) and validates the result based on user permissions.
        """
        logger.info("=" * 80)
        logger.info(f"Starting test: {test_data.test_name}")
        if test_data.user_info:
            verb_names = [verb.value for verb in test_data.user_info.verbs]
            logger.info(f"User verbs: {verb_names}, Resource: {[rt.value for rt in test_data.user_info.resource_types]}")
        if test_data.workspace_to_use:
            logger.info(f"Workspace: {test_data.workspace_to_use}")
        logger.info("=" * 80)
    
        if test_data.user_info:
            user_info: UserInfo = create_user_with_permissions(
                workspace=test_data.user_info.workspace,
                verbs=test_data.user_info.verbs,
                resource_types=test_data.user_info.resource_types,
                subresources=test_data.user_info.subresources,
                resource_names=test_data.user_info.resource_names,
            )
            logger.info(f"Created user: {user_info.uname}")
            self.test_context.active_user = user_info
            self.test_context.user_client = user_info.client
    
        if test_data.workspace_to_use:
            self.test_context.active_workspace = test_data.workspace_to_use
            mlflow.set_workspace(self.test_context.active_workspace)
            logger.info(f"Set active workspace to: {test_data.workspace_to_use}")
    
&gt;       self._execute_test_steps(test_data=test_data)

tests/test_mcp_servers.py:718: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/base.py:634: in _execute_test_steps
    self._execute_validation(validate_func=step.validate_func, step_number=i, action_name=action_name)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f187b33f5f0&gt;
validate_func = &lt;function validate_mcp_server_created at 0x7f187b072980&gt;
step_number = 1, action_name = 'action_create_mcp_server'

    def _execute_validation(self, validate_func, step_number: int, action_name: str) -&gt; None:
        """Execute a single validation function.
    
        Args:
            validate_func: The validation function to execute.
            step_number: The step number for logging.
            action_name: The action that was executed before this validation.
    
        Raises:
            AssertionError: If validation fails.
        """
        validation_name = validate_func.__name__
        logger.info(f"Step {step_number}: Executing validation '{validation_name}' for action '{action_name}'")
    
        # Generic error handling: if action failed and this is not an "expected failure" validation,
        # show the actual action error instead of letting validation give misleading messages
        if (
            self.test_context.last_error is not None
            and validation_name
            not in {
                "validate_authentication_denied",
                "validate_authentication_denied_or_resource_not_found",
                "validate_mcp_access_endpoint_deleted",
                "validate_skill_artifact_registration_unavailable",
                "validate_skill_deleted",
            }
        ):
    
            error_response = self.test_context.last_error
            user_name = self.test_context.active_user.uname if self.test_context.active_user else "unknown"
            workspace = self.test_context.active_workspace or "unknown"
    
            logger.error(f"Validation '{validation_name}' failed because action '{action_name}' encountered an error for user '{user_name}' in workspace '{workspace}': {error_response.error.code} - {error_response.error.message}")
    
            # Provide detailed error message showing the actual action failure
            error_msg = f"Action '{action_name}' failed for user {user_name} in workspace {workspace}: {error_response.error.code} - {error_response.error.message}"
            if error_response.error.details:
                error_msg += f"\nDetails: {error_response.error.details}"
    
&gt;           raise AssertionError(error_msg)
E           AssertionError: Action 'action_create_mcp_server' failed for user test-user-1a4dtwrk in workspace workspace1-x27l4wom: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-1a4dtwrk, Workspace: workspace1-x27l4wom

tests/base.py:709: AssertionError</failure></testcase><testcase classname="tests.test_mcp_servers.TestMCPServers" name="test_mcp_server[User with UPDATE permission cannot delete MCP server without DELETE permission]" time="1.803"><failure message="AssertionError: Action 'action_create_mcp_server' failed for user test-user-3fjf22xw in workspace workspace1-x27l4wom: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-3fjf22xw, Workspace: workspace1-x27l4wom">self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f187af9c560&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f187af9c560&gt;&gt;
test_data = Test Data: name=User with UPDATE permission cannot delete MCP server without DELETE permission user_info=UserInfo(work...rce_type=[&lt;ResourceType.MCP_SERVERS: 'mcpservers'&gt;], verbs=['update']) workspace=workspace1-x27l4wom resource_slot=None

    @pytest.mark.parametrize('test_data', test_scenarios, ids=lambda x: x.test_name)
    def test_mcp_server(self, create_user_with_permissions, test_data: TestData):
        """Test MCP server operations with user permissions.
    
        Executes action (if provided) and validates the result based on user permissions.
        """
        logger.info("=" * 80)
        logger.info(f"Starting test: {test_data.test_name}")
        if test_data.user_info:
            verb_names = [verb.value for verb in test_data.user_info.verbs]
            logger.info(f"User verbs: {verb_names}, Resource: {[rt.value for rt in test_data.user_info.resource_types]}")
        if test_data.workspace_to_use:
            logger.info(f"Workspace: {test_data.workspace_to_use}")
        logger.info("=" * 80)
    
        if test_data.user_info:
            user_info: UserInfo = create_user_with_permissions(
                workspace=test_data.user_info.workspace,
                verbs=test_data.user_info.verbs,
                resource_types=test_data.user_info.resource_types,
                subresources=test_data.user_info.subresources,
                resource_names=test_data.user_info.resource_names,
            )
            logger.info(f"Created user: {user_info.uname}")
            self.test_context.active_user = user_info
            self.test_context.user_client = user_info.client
    
        if test_data.workspace_to_use:
            self.test_context.active_workspace = test_data.workspace_to_use
            mlflow.set_workspace(self.test_context.active_workspace)
            logger.info(f"Set active workspace to: {test_data.workspace_to_use}")
    
&gt;       self._execute_test_steps(test_data=test_data)

tests/test_mcp_servers.py:718: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/base.py:634: in _execute_test_steps
    self._execute_validation(validate_func=step.validate_func, step_number=i, action_name=action_name)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f187af9c560&gt;
validate_func = &lt;function validate_mcp_server_created at 0x7f187b072980&gt;
step_number = 1, action_name = 'action_create_mcp_server'

    def _execute_validation(self, validate_func, step_number: int, action_name: str) -&gt; None:
        """Execute a single validation function.
    
        Args:
            validate_func: The validation function to execute.
            step_number: The step number for logging.
            action_name: The action that was executed before this validation.
    
        Raises:
            AssertionError: If validation fails.
        """
        validation_name = validate_func.__name__
        logger.info(f"Step {step_number}: Executing validation '{validation_name}' for action '{action_name}'")
    
        # Generic error handling: if action failed and this is not an "expected failure" validation,
        # show the actual action error instead of letting validation give misleading messages
        if (
            self.test_context.last_error is not None
            and validation_name
            not in {
                "validate_authentication_denied",
                "validate_authentication_denied_or_resource_not_found",
                "validate_mcp_access_endpoint_deleted",
                "validate_skill_artifact_registration_unavailable",
                "validate_skill_deleted",
            }
        ):
    
            error_response = self.test_context.last_error
            user_name = self.test_context.active_user.uname if self.test_context.active_user else "unknown"
            workspace = self.test_context.active_workspace or "unknown"
    
            logger.error(f"Validation '{validation_name}' failed because action '{action_name}' encountered an error for user '{user_name}' in workspace '{workspace}': {error_response.error.code} - {error_response.error.message}")
    
            # Provide detailed error message showing the actual action failure
            error_msg = f"Action '{action_name}' failed for user {user_name} in workspace {workspace}: {error_response.error.code} - {error_response.error.message}"
            if error_response.error.details:
                error_msg += f"\nDetails: {error_response.error.details}"
    
&gt;           raise AssertionError(error_msg)
E           AssertionError: Action 'action_create_mcp_server' failed for user test-user-3fjf22xw in workspace workspace1-x27l4wom: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-3fjf22xw, Workspace: workspace1-x27l4wom

tests/base.py:709: AssertionError</failure></testcase><testcase classname="tests.test_mcp_servers.TestMCPServers" name="test_mcp_server[User with DELETE permission cannot create MCP server without UPDATE permission]" time="1.789"><failure message="AssertionError: Action failed with unexpected error for user test-user-ty2i82al: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}. Expected permission/authentication error.">self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f187af9c650&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f187af9c650&gt;&gt;
test_data = Test Data: name=User with DELETE permission cannot create MCP server without UPDATE permission user_info=UserInfo(work...rce_type=[&lt;ResourceType.MCP_SERVERS: 'mcpservers'&gt;], verbs=['delete']) workspace=workspace1-x27l4wom resource_slot=None

    @pytest.mark.parametrize('test_data', test_scenarios, ids=lambda x: x.test_name)
    def test_mcp_server(self, create_user_with_permissions, test_data: TestData):
        """Test MCP server operations with user permissions.
    
        Executes action (if provided) and validates the result based on user permissions.
        """
        logger.info("=" * 80)
        logger.info(f"Starting test: {test_data.test_name}")
        if test_data.user_info:
            verb_names = [verb.value for verb in test_data.user_info.verbs]
            logger.info(f"User verbs: {verb_names}, Resource: {[rt.value for rt in test_data.user_info.resource_types]}")
        if test_data.workspace_to_use:
            logger.info(f"Workspace: {test_data.workspace_to_use}")
        logger.info("=" * 80)
    
        if test_data.user_info:
            user_info: UserInfo = create_user_with_permissions(
                workspace=test_data.user_info.workspace,
                verbs=test_data.user_info.verbs,
                resource_types=test_data.user_info.resource_types,
                subresources=test_data.user_info.subresources,
                resource_names=test_data.user_info.resource_names,
            )
            logger.info(f"Created user: {user_info.uname}")
            self.test_context.active_user = user_info
            self.test_context.user_client = user_info.client
    
        if test_data.workspace_to_use:
            self.test_context.active_workspace = test_data.workspace_to_use
            mlflow.set_workspace(self.test_context.active_workspace)
            logger.info(f"Set active workspace to: {test_data.workspace_to_use}")
    
&gt;       self._execute_test_steps(test_data=test_data)

tests/test_mcp_servers.py:718: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/base.py:634: in _execute_test_steps
    self._execute_validation(validate_func=step.validate_func, step_number=i, action_name=action_name)
tests/base.py:712: in _execute_validation
    validate_func(self.test_context)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

test_context = TestContext(workspaces=['workspace1-x27l4wom', 'workspace2-x27l4wom'], active_workspace='workspace1-x27l4wom', active_..._observed_state={}, k8_manager=None, discovered_workspaces=set(), unlabeled_namespace=None, namespaces_to_delete=set())

    def validate_authentication_denied(test_context: TestContext) -&gt; None:
        """Validate that an action failed due to authentication denial.
    
        Checks that an authentication or authorization error occurred during the action.
    
        Args:
            test_context: Test context containing structured error information.
    
        Raises:
            AssertionError: If no error occurred or error is not permission-related.
        """
        user_name = test_context.active_user.uname
        workspace = test_context.active_workspace
        logger.info(f"Validating that action failed as expected for user '{user_name}' in workspace '{workspace}'")
    
        # Validate that an error occurred
        if test_context.last_error is None:
            logger.error(f"Validation failed: Action should have failed for unauthorized user '{user_name}', but succeeded")
            raise AssertionError(f"Action should have failed for unauthorized user '{user_name}', but succeeded")
    
        error_response: ErrorResponse = test_context.last_error
    
        # Check if it's a permission or authentication error
        if not error_response.is_permission_error():
            logger.error(f"Validation failed: Expected permission/authentication error, got: {error_response.error.code} - {error_response.error.message}")
&gt;           raise AssertionError(
                f"Action failed with unexpected error for user {user_name}: {error_response.error.code} - {error_response.error.message}. "
                f"Expected permission/authentication error."
            )
E           AssertionError: Action failed with unexpected error for user test-user-ty2i82al: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}. Expected permission/authentication error.

tests/validations/validation_utils.py:38: AssertionError</failure></testcase><testcase classname="tests.test_mcp_servers.TestMCPServers" name="test_mcp_server[User with DELETE permission cannot get MCP server without GET permission]" time="1.811"><failure message="AssertionError: Action 'action_create_mcp_server' failed for user test-user-anipjd3g in workspace workspace1-x27l4wom: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-anipjd3g, Workspace: workspace1-x27l4wom">self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f187af9c710&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f187af9c710&gt;&gt;
test_data = Test Data: name=User with DELETE permission cannot get MCP server without GET permission user_info=None workspace=workspace1-x27l4wom resource_slot=None

    @pytest.mark.parametrize('test_data', test_scenarios, ids=lambda x: x.test_name)
    def test_mcp_server(self, create_user_with_permissions, test_data: TestData):
        """Test MCP server operations with user permissions.
    
        Executes action (if provided) and validates the result based on user permissions.
        """
        logger.info("=" * 80)
        logger.info(f"Starting test: {test_data.test_name}")
        if test_data.user_info:
            verb_names = [verb.value for verb in test_data.user_info.verbs]
            logger.info(f"User verbs: {verb_names}, Resource: {[rt.value for rt in test_data.user_info.resource_types]}")
        if test_data.workspace_to_use:
            logger.info(f"Workspace: {test_data.workspace_to_use}")
        logger.info("=" * 80)
    
        if test_data.user_info:
            user_info: UserInfo = create_user_with_permissions(
                workspace=test_data.user_info.workspace,
                verbs=test_data.user_info.verbs,
                resource_types=test_data.user_info.resource_types,
                subresources=test_data.user_info.subresources,
                resource_names=test_data.user_info.resource_names,
            )
            logger.info(f"Created user: {user_info.uname}")
            self.test_context.active_user = user_info
            self.test_context.user_client = user_info.client
    
        if test_data.workspace_to_use:
            self.test_context.active_workspace = test_data.workspace_to_use
            mlflow.set_workspace(self.test_context.active_workspace)
            logger.info(f"Set active workspace to: {test_data.workspace_to_use}")
    
&gt;       self._execute_test_steps(test_data=test_data)

tests/test_mcp_servers.py:718: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/base.py:634: in _execute_test_steps
    self._execute_validation(validate_func=step.validate_func, step_number=i, action_name=action_name)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f187af9c710&gt;
validate_func = &lt;function validate_mcp_server_created at 0x7f187b072980&gt;
step_number = 1, action_name = 'action_create_mcp_server'

    def _execute_validation(self, validate_func, step_number: int, action_name: str) -&gt; None:
        """Execute a single validation function.
    
        Args:
            validate_func: The validation function to execute.
            step_number: The step number for logging.
            action_name: The action that was executed before this validation.
    
        Raises:
            AssertionError: If validation fails.
        """
        validation_name = validate_func.__name__
        logger.info(f"Step {step_number}: Executing validation '{validation_name}' for action '{action_name}'")
    
        # Generic error handling: if action failed and this is not an "expected failure" validation,
        # show the actual action error instead of letting validation give misleading messages
        if (
            self.test_context.last_error is not None
            and validation_name
            not in {
                "validate_authentication_denied",
                "validate_authentication_denied_or_resource_not_found",
                "validate_mcp_access_endpoint_deleted",
                "validate_skill_artifact_registration_unavailable",
                "validate_skill_deleted",
            }
        ):
    
            error_response = self.test_context.last_error
            user_name = self.test_context.active_user.uname if self.test_context.active_user else "unknown"
            workspace = self.test_context.active_workspace or "unknown"
    
            logger.error(f"Validation '{validation_name}' failed because action '{action_name}' encountered an error for user '{user_name}' in workspace '{workspace}': {error_response.error.code} - {error_response.error.message}")
    
            # Provide detailed error message showing the actual action failure
            error_msg = f"Action '{action_name}' failed for user {user_name} in workspace {workspace}: {error_response.error.code} - {error_response.error.message}"
            if error_response.error.details:
                error_msg += f"\nDetails: {error_response.error.details}"
    
&gt;           raise AssertionError(error_msg)
E           AssertionError: Action 'action_create_mcp_server' failed for user test-user-anipjd3g in workspace workspace1-x27l4wom: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-anipjd3g, Workspace: workspace1-x27l4wom

tests/base.py:709: AssertionError</failure></testcase><testcase classname="tests.test_mcp_servers.TestMCPServers" name="test_mcp_server[User with UPDATE permission can create MCP server]" time="1.828"><failure message="AssertionError: Action 'action_create_mcp_server' failed for user test-user-18gmrhoz in workspace workspace1-x27l4wom: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-18gmrhoz, Workspace: workspace1-x27l4wom">self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f187af9c7d0&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f187af9c7d0&gt;&gt;
test_data = Test Data: name=User with UPDATE permission can create MCP server user_info=UserInfo(workspace='workspace1-x27l4wom', ...rce_type=[&lt;ResourceType.MCP_SERVERS: 'mcpservers'&gt;], verbs=['update']) workspace=workspace1-x27l4wom resource_slot=None

    @pytest.mark.parametrize('test_data', test_scenarios, ids=lambda x: x.test_name)
    def test_mcp_server(self, create_user_with_permissions, test_data: TestData):
        """Test MCP server operations with user permissions.
    
        Executes action (if provided) and validates the result based on user permissions.
        """
        logger.info("=" * 80)
        logger.info(f"Starting test: {test_data.test_name}")
        if test_data.user_info:
            verb_names = [verb.value for verb in test_data.user_info.verbs]
            logger.info(f"User verbs: {verb_names}, Resource: {[rt.value for rt in test_data.user_info.resource_types]}")
        if test_data.workspace_to_use:
            logger.info(f"Workspace: {test_data.workspace_to_use}")
        logger.info("=" * 80)
    
        if test_data.user_info:
            user_info: UserInfo = create_user_with_permissions(
                workspace=test_data.user_info.workspace,
                verbs=test_data.user_info.verbs,
                resource_types=test_data.user_info.resource_types,
                subresources=test_data.user_info.subresources,
                resource_names=test_data.user_info.resource_names,
            )
            logger.info(f"Created user: {user_info.uname}")
            self.test_context.active_user = user_info
            self.test_context.user_client = user_info.client
    
        if test_data.workspace_to_use:
            self.test_context.active_workspace = test_data.workspace_to_use
            mlflow.set_workspace(self.test_context.active_workspace)
            logger.info(f"Set active workspace to: {test_data.workspace_to_use}")
    
&gt;       self._execute_test_steps(test_data=test_data)

tests/test_mcp_servers.py:718: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/base.py:634: in _execute_test_steps
    self._execute_validation(validate_func=step.validate_func, step_number=i, action_name=action_name)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f187af9c7d0&gt;
validate_func = &lt;function validate_mcp_server_created at 0x7f187b072980&gt;
step_number = 1, action_name = 'action_create_mcp_server'

    def _execute_validation(self, validate_func, step_number: int, action_name: str) -&gt; None:
        """Execute a single validation function.
    
        Args:
            validate_func: The validation function to execute.
            step_number: The step number for logging.
            action_name: The action that was executed before this validation.
    
        Raises:
            AssertionError: If validation fails.
        """
        validation_name = validate_func.__name__
        logger.info(f"Step {step_number}: Executing validation '{validation_name}' for action '{action_name}'")
    
        # Generic error handling: if action failed and this is not an "expected failure" validation,
        # show the actual action error instead of letting validation give misleading messages
        if (
            self.test_context.last_error is not None
            and validation_name
            not in {
                "validate_authentication_denied",
                "validate_authentication_denied_or_resource_not_found",
                "validate_mcp_access_endpoint_deleted",
                "validate_skill_artifact_registration_unavailable",
                "validate_skill_deleted",
            }
        ):
    
            error_response = self.test_context.last_error
            user_name = self.test_context.active_user.uname if self.test_context.active_user else "unknown"
            workspace = self.test_context.active_workspace or "unknown"
    
            logger.error(f"Validation '{validation_name}' failed because action '{action_name}' encountered an error for user '{user_name}' in workspace '{workspace}': {error_response.error.code} - {error_response.error.message}")
    
            # Provide detailed error message showing the actual action failure
            error_msg = f"Action '{action_name}' failed for user {user_name} in workspace {workspace}: {error_response.error.code} - {error_response.error.message}"
            if error_response.error.details:
                error_msg += f"\nDetails: {error_response.error.details}"
    
&gt;           raise AssertionError(error_msg)
E           AssertionError: Action 'action_create_mcp_server' failed for user test-user-18gmrhoz in workspace workspace1-x27l4wom: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-18gmrhoz, Workspace: workspace1-x27l4wom

tests/base.py:709: AssertionError</failure></testcase><testcase classname="tests.test_mcp_servers.TestMCPServers" name="test_mcp_server[User with LIST permission cannot delete MCP server without DELETE permission]" time="1.795"><failure message="AssertionError: Action 'action_create_mcp_server' failed for user test-user-ubtlhfga in workspace workspace1-x27l4wom: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-ubtlhfga, Workspace: workspace1-x27l4wom">self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f187af9c890&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f187af9c890&gt;&gt;
test_data = Test Data: name=User with LIST permission cannot delete MCP server without DELETE permission user_info=None workspace=workspace1-x27l4wom resource_slot=None

    @pytest.mark.parametrize('test_data', test_scenarios, ids=lambda x: x.test_name)
    def test_mcp_server(self, create_user_with_permissions, test_data: TestData):
        """Test MCP server operations with user permissions.
    
        Executes action (if provided) and validates the result based on user permissions.
        """
        logger.info("=" * 80)
        logger.info(f"Starting test: {test_data.test_name}")
        if test_data.user_info:
            verb_names = [verb.value for verb in test_data.user_info.verbs]
            logger.info(f"User verbs: {verb_names}, Resource: {[rt.value for rt in test_data.user_info.resource_types]}")
        if test_data.workspace_to_use:
            logger.info(f"Workspace: {test_data.workspace_to_use}")
        logger.info("=" * 80)
    
        if test_data.user_info:
            user_info: UserInfo = create_user_with_permissions(
                workspace=test_data.user_info.workspace,
                verbs=test_data.user_info.verbs,
                resource_types=test_data.user_info.resource_types,
                subresources=test_data.user_info.subresources,
                resource_names=test_data.user_info.resource_names,
            )
            logger.info(f"Created user: {user_info.uname}")
            self.test_context.active_user = user_info
            self.test_context.user_client = user_info.client
    
        if test_data.workspace_to_use:
            self.test_context.active_workspace = test_data.workspace_to_use
            mlflow.set_workspace(self.test_context.active_workspace)
            logger.info(f"Set active workspace to: {test_data.workspace_to_use}")
    
&gt;       self._execute_test_steps(test_data=test_data)

tests/test_mcp_servers.py:718: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/base.py:634: in _execute_test_steps
    self._execute_validation(validate_func=step.validate_func, step_number=i, action_name=action_name)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f187af9c890&gt;
validate_func = &lt;function validate_mcp_server_created at 0x7f187b072980&gt;
step_number = 1, action_name = 'action_create_mcp_server'

    def _execute_validation(self, validate_func, step_number: int, action_name: str) -&gt; None:
        """Execute a single validation function.
    
        Args:
            validate_func: The validation function to execute.
            step_number: The step number for logging.
            action_name: The action that was executed before this validation.
    
        Raises:
            AssertionError: If validation fails.
        """
        validation_name = validate_func.__name__
        logger.info(f"Step {step_number}: Executing validation '{validation_name}' for action '{action_name}'")
    
        # Generic error handling: if action failed and this is not an "expected failure" validation,
        # show the actual action error instead of letting validation give misleading messages
        if (
            self.test_context.last_error is not None
            and validation_name
            not in {
                "validate_authentication_denied",
                "validate_authentication_denied_or_resource_not_found",
                "validate_mcp_access_endpoint_deleted",
                "validate_skill_artifact_registration_unavailable",
                "validate_skill_deleted",
            }
        ):
    
            error_response = self.test_context.last_error
            user_name = self.test_context.active_user.uname if self.test_context.active_user else "unknown"
            workspace = self.test_context.active_workspace or "unknown"
    
            logger.error(f"Validation '{validation_name}' failed because action '{action_name}' encountered an error for user '{user_name}' in workspace '{workspace}': {error_response.error.code} - {error_response.error.message}")
    
            # Provide detailed error message showing the actual action failure
            error_msg = f"Action '{action_name}' failed for user {user_name} in workspace {workspace}: {error_response.error.code} - {error_response.error.message}"
            if error_response.error.details:
                error_msg += f"\nDetails: {error_response.error.details}"
    
&gt;           raise AssertionError(error_msg)
E           AssertionError: Action 'action_create_mcp_server' failed for user test-user-ubtlhfga in workspace workspace1-x27l4wom: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-ubtlhfga, Workspace: workspace1-x27l4wom

tests/base.py:709: AssertionError</failure></testcase><testcase classname="tests.test_mcp_servers.TestMCPServers" name="test_mcp_server[Validate that MCP server search results are scoped to the active workspace]" time="1.791"><failure message="AssertionError: Action 'action_create_mcp_server' failed for user test-user-q6r18xk4 in workspace workspace2-x27l4wom: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-q6r18xk4, Workspace: workspace2-x27l4wom">self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f187af9c9b0&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f187af9c9b0&gt;&gt;
test_data = Test Data: name=Validate that MCP server search results are scoped to the active workspace user_info=None workspace=None resource_slot=None

    @pytest.mark.parametrize('test_data', test_scenarios, ids=lambda x: x.test_name)
    def test_mcp_server(self, create_user_with_permissions, test_data: TestData):
        """Test MCP server operations with user permissions.
    
        Executes action (if provided) and validates the result based on user permissions.
        """
        logger.info("=" * 80)
        logger.info(f"Starting test: {test_data.test_name}")
        if test_data.user_info:
            verb_names = [verb.value for verb in test_data.user_info.verbs]
            logger.info(f"User verbs: {verb_names}, Resource: {[rt.value for rt in test_data.user_info.resource_types]}")
        if test_data.workspace_to_use:
            logger.info(f"Workspace: {test_data.workspace_to_use}")
        logger.info("=" * 80)
    
        if test_data.user_info:
            user_info: UserInfo = create_user_with_permissions(
                workspace=test_data.user_info.workspace,
                verbs=test_data.user_info.verbs,
                resource_types=test_data.user_info.resource_types,
                subresources=test_data.user_info.subresources,
                resource_names=test_data.user_info.resource_names,
            )
            logger.info(f"Created user: {user_info.uname}")
            self.test_context.active_user = user_info
            self.test_context.user_client = user_info.client
    
        if test_data.workspace_to_use:
            self.test_context.active_workspace = test_data.workspace_to_use
            mlflow.set_workspace(self.test_context.active_workspace)
            logger.info(f"Set active workspace to: {test_data.workspace_to_use}")
    
&gt;       self._execute_test_steps(test_data=test_data)

tests/test_mcp_servers.py:718: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/base.py:634: in _execute_test_steps
    self._execute_validation(validate_func=step.validate_func, step_number=i, action_name=action_name)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f187af9c9b0&gt;
validate_func = &lt;function validate_mcp_server_created at 0x7f187b072980&gt;
step_number = 1, action_name = 'action_create_mcp_server'

    def _execute_validation(self, validate_func, step_number: int, action_name: str) -&gt; None:
        """Execute a single validation function.
    
        Args:
            validate_func: The validation function to execute.
            step_number: The step number for logging.
            action_name: The action that was executed before this validation.
    
        Raises:
            AssertionError: If validation fails.
        """
        validation_name = validate_func.__name__
        logger.info(f"Step {step_number}: Executing validation '{validation_name}' for action '{action_name}'")
    
        # Generic error handling: if action failed and this is not an "expected failure" validation,
        # show the actual action error instead of letting validation give misleading messages
        if (
            self.test_context.last_error is not None
            and validation_name
            not in {
                "validate_authentication_denied",
                "validate_authentication_denied_or_resource_not_found",
                "validate_mcp_access_endpoint_deleted",
                "validate_skill_artifact_registration_unavailable",
                "validate_skill_deleted",
            }
        ):
    
            error_response = self.test_context.last_error
            user_name = self.test_context.active_user.uname if self.test_context.active_user else "unknown"
            workspace = self.test_context.active_workspace or "unknown"
    
            logger.error(f"Validation '{validation_name}' failed because action '{action_name}' encountered an error for user '{user_name}' in workspace '{workspace}': {error_response.error.code} - {error_response.error.message}")
    
            # Provide detailed error message showing the actual action failure
            error_msg = f"Action '{action_name}' failed for user {user_name} in workspace {workspace}: {error_response.error.code} - {error_response.error.message}"
            if error_response.error.details:
                error_msg += f"\nDetails: {error_response.error.details}"
    
&gt;           raise AssertionError(error_msg)
E           AssertionError: Action 'action_create_mcp_server' failed for user test-user-q6r18xk4 in workspace workspace2-x27l4wom: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-q6r18xk4, Workspace: workspace2-x27l4wom

tests/base.py:709: AssertionError</failure></testcase><testcase classname="tests.test_mcp_servers.TestMCPServers" name="test_mcp_server[Full MCP server lifecycle: create, add version and access endpoint, then delete]" time="1.836"><failure message="AssertionError: Action 'action_create_mcp_server' failed for user test-user-ut5l9j9p in workspace workspace1-x27l4wom: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-ut5l9j9p, Workspace: workspace1-x27l4wom">self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f187af9ca70&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f187af9ca70&gt;&gt;
test_data = Test Data: name=Full MCP server lifecycle: create, add version and access endpoint, then delete user_info=UserInfo(wor...CP_SERVERS: 'mcpservers'&gt;], verbs=['get', 'update', 'list', 'delete']) workspace=workspace1-x27l4wom resource_slot=None

    @pytest.mark.parametrize('test_data', test_scenarios, ids=lambda x: x.test_name)
    def test_mcp_server(self, create_user_with_permissions, test_data: TestData):
        """Test MCP server operations with user permissions.
    
        Executes action (if provided) and validates the result based on user permissions.
        """
        logger.info("=" * 80)
        logger.info(f"Starting test: {test_data.test_name}")
        if test_data.user_info:
            verb_names = [verb.value for verb in test_data.user_info.verbs]
            logger.info(f"User verbs: {verb_names}, Resource: {[rt.value for rt in test_data.user_info.resource_types]}")
        if test_data.workspace_to_use:
            logger.info(f"Workspace: {test_data.workspace_to_use}")
        logger.info("=" * 80)
    
        if test_data.user_info:
            user_info: UserInfo = create_user_with_permissions(
                workspace=test_data.user_info.workspace,
                verbs=test_data.user_info.verbs,
                resource_types=test_data.user_info.resource_types,
                subresources=test_data.user_info.subresources,
                resource_names=test_data.user_info.resource_names,
            )
            logger.info(f"Created user: {user_info.uname}")
            self.test_context.active_user = user_info
            self.test_context.user_client = user_info.client
    
        if test_data.workspace_to_use:
            self.test_context.active_workspace = test_data.workspace_to_use
            mlflow.set_workspace(self.test_context.active_workspace)
            logger.info(f"Set active workspace to: {test_data.workspace_to_use}")
    
&gt;       self._execute_test_steps(test_data=test_data)

tests/test_mcp_servers.py:718: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/base.py:634: in _execute_test_steps
    self._execute_validation(validate_func=step.validate_func, step_number=i, action_name=action_name)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f187af9ca70&gt;
validate_func = &lt;function validate_mcp_server_created at 0x7f187b072980&gt;
step_number = 1, action_name = 'action_create_mcp_server'

    def _execute_validation(self, validate_func, step_number: int, action_name: str) -&gt; None:
        """Execute a single validation function.
    
        Args:
            validate_func: The validation function to execute.
            step_number: The step number for logging.
            action_name: The action that was executed before this validation.
    
        Raises:
            AssertionError: If validation fails.
        """
        validation_name = validate_func.__name__
        logger.info(f"Step {step_number}: Executing validation '{validation_name}' for action '{action_name}'")
    
        # Generic error handling: if action failed and this is not an "expected failure" validation,
        # show the actual action error instead of letting validation give misleading messages
        if (
            self.test_context.last_error is not None
            and validation_name
            not in {
                "validate_authentication_denied",
                "validate_authentication_denied_or_resource_not_found",
                "validate_mcp_access_endpoint_deleted",
                "validate_skill_artifact_registration_unavailable",
                "validate_skill_deleted",
            }
        ):
    
            error_response = self.test_context.last_error
            user_name = self.test_context.active_user.uname if self.test_context.active_user else "unknown"
            workspace = self.test_context.active_workspace or "unknown"
    
            logger.error(f"Validation '{validation_name}' failed because action '{action_name}' encountered an error for user '{user_name}' in workspace '{workspace}': {error_response.error.code} - {error_response.error.message}")
    
            # Provide detailed error message showing the actual action failure
            error_msg = f"Action '{action_name}' failed for user {user_name} in workspace {workspace}: {error_response.error.code} - {error_response.error.message}"
            if error_response.error.details:
                error_msg += f"\nDetails: {error_response.error.details}"
    
&gt;           raise AssertionError(error_msg)
E           AssertionError: Action 'action_create_mcp_server' failed for user test-user-ut5l9j9p in workspace workspace1-x27l4wom: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-ut5l9j9p, Workspace: workspace1-x27l4wom

tests/base.py:709: AssertionError</failure></testcase><testcase classname="tests.test_mcp_servers.TestMCPServers" name="test_mcp_server[Validate that user with UPDATE permission can create an MCP access endpoint]" time="1.789"><failure message="AssertionError: Action 'action_create_mcp_server' failed for user test-user-ekzr1j3j in workspace workspace1-x27l4wom: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-ekzr1j3j, Workspace: workspace1-x27l4wom">self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f187af9cb60&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f187af9cb60&gt;&gt;
test_data = Test Data: name=Validate that user with UPDATE permission can create an MCP access endpoint user_info=UserInfo(workspa...rce_type=[&lt;ResourceType.MCP_SERVERS: 'mcpservers'&gt;], verbs=['update']) workspace=workspace1-x27l4wom resource_slot=None

    @pytest.mark.parametrize('test_data', test_scenarios, ids=lambda x: x.test_name)
    def test_mcp_server(self, create_user_with_permissions, test_data: TestData):
        """Test MCP server operations with user permissions.
    
        Executes action (if provided) and validates the result based on user permissions.
        """
        logger.info("=" * 80)
        logger.info(f"Starting test: {test_data.test_name}")
        if test_data.user_info:
            verb_names = [verb.value for verb in test_data.user_info.verbs]
            logger.info(f"User verbs: {verb_names}, Resource: {[rt.value for rt in test_data.user_info.resource_types]}")
        if test_data.workspace_to_use:
            logger.info(f"Workspace: {test_data.workspace_to_use}")
        logger.info("=" * 80)
    
        if test_data.user_info:
            user_info: UserInfo = create_user_with_permissions(
                workspace=test_data.user_info.workspace,
                verbs=test_data.user_info.verbs,
                resource_types=test_data.user_info.resource_types,
                subresources=test_data.user_info.subresources,
                resource_names=test_data.user_info.resource_names,
            )
            logger.info(f"Created user: {user_info.uname}")
            self.test_context.active_user = user_info
            self.test_context.user_client = user_info.client
    
        if test_data.workspace_to_use:
            self.test_context.active_workspace = test_data.workspace_to_use
            mlflow.set_workspace(self.test_context.active_workspace)
            logger.info(f"Set active workspace to: {test_data.workspace_to_use}")
    
&gt;       self._execute_test_steps(test_data=test_data)

tests/test_mcp_servers.py:718: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/base.py:634: in _execute_test_steps
    self._execute_validation(validate_func=step.validate_func, step_number=i, action_name=action_name)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f187af9cb60&gt;
validate_func = &lt;function validate_mcp_server_created at 0x7f187b072980&gt;
step_number = 1, action_name = 'action_create_mcp_server'

    def _execute_validation(self, validate_func, step_number: int, action_name: str) -&gt; None:
        """Execute a single validation function.
    
        Args:
            validate_func: The validation function to execute.
            step_number: The step number for logging.
            action_name: The action that was executed before this validation.
    
        Raises:
            AssertionError: If validation fails.
        """
        validation_name = validate_func.__name__
        logger.info(f"Step {step_number}: Executing validation '{validation_name}' for action '{action_name}'")
    
        # Generic error handling: if action failed and this is not an "expected failure" validation,
        # show the actual action error instead of letting validation give misleading messages
        if (
            self.test_context.last_error is not None
            and validation_name
            not in {
                "validate_authentication_denied",
                "validate_authentication_denied_or_resource_not_found",
                "validate_mcp_access_endpoint_deleted",
                "validate_skill_artifact_registration_unavailable",
                "validate_skill_deleted",
            }
        ):
    
            error_response = self.test_context.last_error
            user_name = self.test_context.active_user.uname if self.test_context.active_user else "unknown"
            workspace = self.test_context.active_workspace or "unknown"
    
            logger.error(f"Validation '{validation_name}' failed because action '{action_name}' encountered an error for user '{user_name}' in workspace '{workspace}': {error_response.error.code} - {error_response.error.message}")
    
            # Provide detailed error message showing the actual action failure
            error_msg = f"Action '{action_name}' failed for user {user_name} in workspace {workspace}: {error_response.error.code} - {error_response.error.message}"
            if error_response.error.details:
                error_msg += f"\nDetails: {error_response.error.details}"
    
&gt;           raise AssertionError(error_msg)
E           AssertionError: Action 'action_create_mcp_server' failed for user test-user-ekzr1j3j in workspace workspace1-x27l4wom: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-ekzr1j3j, Workspace: workspace1-x27l4wom

tests/base.py:709: AssertionError</failure></testcase><testcase classname="tests.test_mcp_servers.TestMCPServers" name="test_mcp_server[Validate that user with CREATE permission cannot create an MCP access endpoint without UPDATE permission]" time="1.789"><failure message="AssertionError: Action 'action_create_mcp_server' failed for user test-user-vuaj9ri9 in workspace workspace1-x27l4wom: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-vuaj9ri9, Workspace: workspace1-x27l4wom">self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f187af9cc20&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f187af9cc20&gt;&gt;
test_data = Test Data: name=Validate that user with CREATE permission cannot create an MCP access endpoint without UPDATE permissi...rce_type=[&lt;ResourceType.MCP_SERVERS: 'mcpservers'&gt;], verbs=['update']) workspace=workspace1-x27l4wom resource_slot=None

    @pytest.mark.parametrize('test_data', test_scenarios, ids=lambda x: x.test_name)
    def test_mcp_server(self, create_user_with_permissions, test_data: TestData):
        """Test MCP server operations with user permissions.
    
        Executes action (if provided) and validates the result based on user permissions.
        """
        logger.info("=" * 80)
        logger.info(f"Starting test: {test_data.test_name}")
        if test_data.user_info:
            verb_names = [verb.value for verb in test_data.user_info.verbs]
            logger.info(f"User verbs: {verb_names}, Resource: {[rt.value for rt in test_data.user_info.resource_types]}")
        if test_data.workspace_to_use:
            logger.info(f"Workspace: {test_data.workspace_to_use}")
        logger.info("=" * 80)
    
        if test_data.user_info:
            user_info: UserInfo = create_user_with_permissions(
                workspace=test_data.user_info.workspace,
                verbs=test_data.user_info.verbs,
                resource_types=test_data.user_info.resource_types,
                subresources=test_data.user_info.subresources,
                resource_names=test_data.user_info.resource_names,
            )
            logger.info(f"Created user: {user_info.uname}")
            self.test_context.active_user = user_info
            self.test_context.user_client = user_info.client
    
        if test_data.workspace_to_use:
            self.test_context.active_workspace = test_data.workspace_to_use
            mlflow.set_workspace(self.test_context.active_workspace)
            logger.info(f"Set active workspace to: {test_data.workspace_to_use}")
    
&gt;       self._execute_test_steps(test_data=test_data)

tests/test_mcp_servers.py:718: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/base.py:634: in _execute_test_steps
    self._execute_validation(validate_func=step.validate_func, step_number=i, action_name=action_name)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f187af9cc20&gt;
validate_func = &lt;function validate_mcp_server_created at 0x7f187b072980&gt;
step_number = 1, action_name = 'action_create_mcp_server'

    def _execute_validation(self, validate_func, step_number: int, action_name: str) -&gt; None:
        """Execute a single validation function.
    
        Args:
            validate_func: The validation function to execute.
            step_number: The step number for logging.
            action_name: The action that was executed before this validation.
    
        Raises:
            AssertionError: If validation fails.
        """
        validation_name = validate_func.__name__
        logger.info(f"Step {step_number}: Executing validation '{validation_name}' for action '{action_name}'")
    
        # Generic error handling: if action failed and this is not an "expected failure" validation,
        # show the actual action error instead of letting validation give misleading messages
        if (
            self.test_context.last_error is not None
            and validation_name
            not in {
                "validate_authentication_denied",
                "validate_authentication_denied_or_resource_not_found",
                "validate_mcp_access_endpoint_deleted",
                "validate_skill_artifact_registration_unavailable",
                "validate_skill_deleted",
            }
        ):
    
            error_response = self.test_context.last_error
            user_name = self.test_context.active_user.uname if self.test_context.active_user else "unknown"
            workspace = self.test_context.active_workspace or "unknown"
    
            logger.error(f"Validation '{validation_name}' failed because action '{action_name}' encountered an error for user '{user_name}' in workspace '{workspace}': {error_response.error.code} - {error_response.error.message}")
    
            # Provide detailed error message showing the actual action failure
            error_msg = f"Action '{action_name}' failed for user {user_name} in workspace {workspace}: {error_response.error.code} - {error_response.error.message}"
            if error_response.error.details:
                error_msg += f"\nDetails: {error_response.error.details}"
    
&gt;           raise AssertionError(error_msg)
E           AssertionError: Action 'action_create_mcp_server' failed for user test-user-vuaj9ri9 in workspace workspace1-x27l4wom: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-vuaj9ri9, Workspace: workspace1-x27l4wom

tests/base.py:709: AssertionError</failure></testcase><testcase classname="tests.test_mcp_servers.TestMCPServers" name="test_mcp_server[Validate that user with GET permission can get an MCP access endpoint]" time="1.791"><failure message="AssertionError: Action 'action_create_mcp_server' failed for user test-user-myifeq0a in workspace workspace1-x27l4wom: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-myifeq0a, Workspace: workspace1-x27l4wom">self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f187af9cd40&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f187af9cd40&gt;&gt;
test_data = Test Data: name=Validate that user with GET permission can get an MCP access endpoint user_info=UserInfo(workspace='wo...rce_type=[&lt;ResourceType.MCP_SERVERS: 'mcpservers'&gt;], verbs=['update']) workspace=workspace1-x27l4wom resource_slot=None

    @pytest.mark.parametrize('test_data', test_scenarios, ids=lambda x: x.test_name)
    def test_mcp_server(self, create_user_with_permissions, test_data: TestData):
        """Test MCP server operations with user permissions.
    
        Executes action (if provided) and validates the result based on user permissions.
        """
        logger.info("=" * 80)
        logger.info(f"Starting test: {test_data.test_name}")
        if test_data.user_info:
            verb_names = [verb.value for verb in test_data.user_info.verbs]
            logger.info(f"User verbs: {verb_names}, Resource: {[rt.value for rt in test_data.user_info.resource_types]}")
        if test_data.workspace_to_use:
            logger.info(f"Workspace: {test_data.workspace_to_use}")
        logger.info("=" * 80)
    
        if test_data.user_info:
            user_info: UserInfo = create_user_with_permissions(
                workspace=test_data.user_info.workspace,
                verbs=test_data.user_info.verbs,
                resource_types=test_data.user_info.resource_types,
                subresources=test_data.user_info.subresources,
                resource_names=test_data.user_info.resource_names,
            )
            logger.info(f"Created user: {user_info.uname}")
            self.test_context.active_user = user_info
            self.test_context.user_client = user_info.client
    
        if test_data.workspace_to_use:
            self.test_context.active_workspace = test_data.workspace_to_use
            mlflow.set_workspace(self.test_context.active_workspace)
            logger.info(f"Set active workspace to: {test_data.workspace_to_use}")
    
&gt;       self._execute_test_steps(test_data=test_data)

tests/test_mcp_servers.py:718: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/base.py:634: in _execute_test_steps
    self._execute_validation(validate_func=step.validate_func, step_number=i, action_name=action_name)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f187af9cd40&gt;
validate_func = &lt;function validate_mcp_server_created at 0x7f187b072980&gt;
step_number = 1, action_name = 'action_create_mcp_server'

    def _execute_validation(self, validate_func, step_number: int, action_name: str) -&gt; None:
        """Execute a single validation function.
    
        Args:
            validate_func: The validation function to execute.
            step_number: The step number for logging.
            action_name: The action that was executed before this validation.
    
        Raises:
            AssertionError: If validation fails.
        """
        validation_name = validate_func.__name__
        logger.info(f"Step {step_number}: Executing validation '{validation_name}' for action '{action_name}'")
    
        # Generic error handling: if action failed and this is not an "expected failure" validation,
        # show the actual action error instead of letting validation give misleading messages
        if (
            self.test_context.last_error is not None
            and validation_name
            not in {
                "validate_authentication_denied",
                "validate_authentication_denied_or_resource_not_found",
                "validate_mcp_access_endpoint_deleted",
                "validate_skill_artifact_registration_unavailable",
                "validate_skill_deleted",
            }
        ):
    
            error_response = self.test_context.last_error
            user_name = self.test_context.active_user.uname if self.test_context.active_user else "unknown"
            workspace = self.test_context.active_workspace or "unknown"
    
            logger.error(f"Validation '{validation_name}' failed because action '{action_name}' encountered an error for user '{user_name}' in workspace '{workspace}': {error_response.error.code} - {error_response.error.message}")
    
            # Provide detailed error message showing the actual action failure
            error_msg = f"Action '{action_name}' failed for user {user_name} in workspace {workspace}: {error_response.error.code} - {error_response.error.message}"
            if error_response.error.details:
                error_msg += f"\nDetails: {error_response.error.details}"
    
&gt;           raise AssertionError(error_msg)
E           AssertionError: Action 'action_create_mcp_server' failed for user test-user-myifeq0a in workspace workspace1-x27l4wom: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-myifeq0a, Workspace: workspace1-x27l4wom

tests/base.py:709: AssertionError</failure></testcase><testcase classname="tests.test_mcp_servers.TestMCPServers" name="test_mcp_server[Validate that user with UPDATE permission cannot get an MCP access endpoint without GET permission]" time="1.787"><failure message="AssertionError: Action 'action_create_mcp_server' failed for user test-user-0x0klg5o in workspace workspace1-x27l4wom: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-0x0klg5o, Workspace: workspace1-x27l4wom">self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f187af9ce00&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f187af9ce00&gt;&gt;
test_data = Test Data: name=Validate that user with UPDATE permission cannot get an MCP access endpoint without GET permission use...rce_type=[&lt;ResourceType.MCP_SERVERS: 'mcpservers'&gt;], verbs=['update']) workspace=workspace1-x27l4wom resource_slot=None

    @pytest.mark.parametrize('test_data', test_scenarios, ids=lambda x: x.test_name)
    def test_mcp_server(self, create_user_with_permissions, test_data: TestData):
        """Test MCP server operations with user permissions.
    
        Executes action (if provided) and validates the result based on user permissions.
        """
        logger.info("=" * 80)
        logger.info(f"Starting test: {test_data.test_name}")
        if test_data.user_info:
            verb_names = [verb.value for verb in test_data.user_info.verbs]
            logger.info(f"User verbs: {verb_names}, Resource: {[rt.value for rt in test_data.user_info.resource_types]}")
        if test_data.workspace_to_use:
            logger.info(f"Workspace: {test_data.workspace_to_use}")
        logger.info("=" * 80)
    
        if test_data.user_info:
            user_info: UserInfo = create_user_with_permissions(
                workspace=test_data.user_info.workspace,
                verbs=test_data.user_info.verbs,
                resource_types=test_data.user_info.resource_types,
                subresources=test_data.user_info.subresources,
                resource_names=test_data.user_info.resource_names,
            )
            logger.info(f"Created user: {user_info.uname}")
            self.test_context.active_user = user_info
            self.test_context.user_client = user_info.client
    
        if test_data.workspace_to_use:
            self.test_context.active_workspace = test_data.workspace_to_use
            mlflow.set_workspace(self.test_context.active_workspace)
            logger.info(f"Set active workspace to: {test_data.workspace_to_use}")
    
&gt;       self._execute_test_steps(test_data=test_data)

tests/test_mcp_servers.py:718: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/base.py:634: in _execute_test_steps
    self._execute_validation(validate_func=step.validate_func, step_number=i, action_name=action_name)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f187af9ce00&gt;
validate_func = &lt;function validate_mcp_server_created at 0x7f187b072980&gt;
step_number = 1, action_name = 'action_create_mcp_server'

    def _execute_validation(self, validate_func, step_number: int, action_name: str) -&gt; None:
        """Execute a single validation function.
    
        Args:
            validate_func: The validation function to execute.
            step_number: The step number for logging.
            action_name: The action that was executed before this validation.
    
        Raises:
            AssertionError: If validation fails.
        """
        validation_name = validate_func.__name__
        logger.info(f"Step {step_number}: Executing validation '{validation_name}' for action '{action_name}'")
    
        # Generic error handling: if action failed and this is not an "expected failure" validation,
        # show the actual action error instead of letting validation give misleading messages
        if (
            self.test_context.last_error is not None
            and validation_name
            not in {
                "validate_authentication_denied",
                "validate_authentication_denied_or_resource_not_found",
                "validate_mcp_access_endpoint_deleted",
                "validate_skill_artifact_registration_unavailable",
                "validate_skill_deleted",
            }
        ):
    
            error_response = self.test_context.last_error
            user_name = self.test_context.active_user.uname if self.test_context.active_user else "unknown"
            workspace = self.test_context.active_workspace or "unknown"
    
            logger.error(f"Validation '{validation_name}' failed because action '{action_name}' encountered an error for user '{user_name}' in workspace '{workspace}': {error_response.error.code} - {error_response.error.message}")
    
            # Provide detailed error message showing the actual action failure
            error_msg = f"Action '{action_name}' failed for user {user_name} in workspace {workspace}: {error_response.error.code} - {error_response.error.message}"
            if error_response.error.details:
                error_msg += f"\nDetails: {error_response.error.details}"
    
&gt;           raise AssertionError(error_msg)
E           AssertionError: Action 'action_create_mcp_server' failed for user test-user-0x0klg5o in workspace workspace1-x27l4wom: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-0x0klg5o, Workspace: workspace1-x27l4wom

tests/base.py:709: AssertionError</failure></testcase><testcase classname="tests.test_mcp_servers.TestMCPServers" name="test_mcp_server[Validate that MCP access endpoint search results are scoped to the active workspace]" time="1.784"><failure message="AssertionError: Action 'action_create_mcp_server' failed for user test-user-btlteb2z in workspace workspace2-x27l4wom: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-btlteb2z, Workspace: workspace2-x27l4wom">self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f187af9cec0&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f187af9cec0&gt;&gt;
test_data = Test Data: name=Validate that MCP access endpoint search results are scoped to the active workspace user_info=None workspace=None resource_slot=None

    @pytest.mark.parametrize('test_data', test_scenarios, ids=lambda x: x.test_name)
    def test_mcp_server(self, create_user_with_permissions, test_data: TestData):
        """Test MCP server operations with user permissions.
    
        Executes action (if provided) and validates the result based on user permissions.
        """
        logger.info("=" * 80)
        logger.info(f"Starting test: {test_data.test_name}")
        if test_data.user_info:
            verb_names = [verb.value for verb in test_data.user_info.verbs]
            logger.info(f"User verbs: {verb_names}, Resource: {[rt.value for rt in test_data.user_info.resource_types]}")
        if test_data.workspace_to_use:
            logger.info(f"Workspace: {test_data.workspace_to_use}")
        logger.info("=" * 80)
    
        if test_data.user_info:
            user_info: UserInfo = create_user_with_permissions(
                workspace=test_data.user_info.workspace,
                verbs=test_data.user_info.verbs,
                resource_types=test_data.user_info.resource_types,
                subresources=test_data.user_info.subresources,
                resource_names=test_data.user_info.resource_names,
            )
            logger.info(f"Created user: {user_info.uname}")
            self.test_context.active_user = user_info
            self.test_context.user_client = user_info.client
    
        if test_data.workspace_to_use:
            self.test_context.active_workspace = test_data.workspace_to_use
            mlflow.set_workspace(self.test_context.active_workspace)
            logger.info(f"Set active workspace to: {test_data.workspace_to_use}")
    
&gt;       self._execute_test_steps(test_data=test_data)

tests/test_mcp_servers.py:718: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/base.py:634: in _execute_test_steps
    self._execute_validation(validate_func=step.validate_func, step_number=i, action_name=action_name)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f187af9cec0&gt;
validate_func = &lt;function validate_mcp_server_created at 0x7f187b072980&gt;
step_number = 1, action_name = 'action_create_mcp_server'

    def _execute_validation(self, validate_func, step_number: int, action_name: str) -&gt; None:
        """Execute a single validation function.
    
        Args:
            validate_func: The validation function to execute.
            step_number: The step number for logging.
            action_name: The action that was executed before this validation.
    
        Raises:
            AssertionError: If validation fails.
        """
        validation_name = validate_func.__name__
        logger.info(f"Step {step_number}: Executing validation '{validation_name}' for action '{action_name}'")
    
        # Generic error handling: if action failed and this is not an "expected failure" validation,
        # show the actual action error instead of letting validation give misleading messages
        if (
            self.test_context.last_error is not None
            and validation_name
            not in {
                "validate_authentication_denied",
                "validate_authentication_denied_or_resource_not_found",
                "validate_mcp_access_endpoint_deleted",
                "validate_skill_artifact_registration_unavailable",
                "validate_skill_deleted",
            }
        ):
    
            error_response = self.test_context.last_error
            user_name = self.test_context.active_user.uname if self.test_context.active_user else "unknown"
            workspace = self.test_context.active_workspace or "unknown"
    
            logger.error(f"Validation '{validation_name}' failed because action '{action_name}' encountered an error for user '{user_name}' in workspace '{workspace}': {error_response.error.code} - {error_response.error.message}")
    
            # Provide detailed error message showing the actual action failure
            error_msg = f"Action '{action_name}' failed for user {user_name} in workspace {workspace}: {error_response.error.code} - {error_response.error.message}"
            if error_response.error.details:
                error_msg += f"\nDetails: {error_response.error.details}"
    
&gt;           raise AssertionError(error_msg)
E           AssertionError: Action 'action_create_mcp_server' failed for user test-user-btlteb2z in workspace workspace2-x27l4wom: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-btlteb2z, Workspace: workspace2-x27l4wom

tests/base.py:709: AssertionError</failure></testcase><testcase classname="tests.test_mcp_servers.TestMCPServers" name="test_mcp_server[Validate that user with UPDATE permission can update an MCP access endpoint]" time="1.783"><failure message="AssertionError: Action 'action_create_mcp_server' failed for user test-user-8sx54941 in workspace workspace1-x27l4wom: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-8sx54941, Workspace: workspace1-x27l4wom">self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f187af9cfb0&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f187af9cfb0&gt;&gt;
test_data = Test Data: name=Validate that user with UPDATE permission can update an MCP access endpoint user_info=UserInfo(workspa...rce_type=[&lt;ResourceType.MCP_SERVERS: 'mcpservers'&gt;], verbs=['update']) workspace=workspace1-x27l4wom resource_slot=None

    @pytest.mark.parametrize('test_data', test_scenarios, ids=lambda x: x.test_name)
    def test_mcp_server(self, create_user_with_permissions, test_data: TestData):
        """Test MCP server operations with user permissions.
    
        Executes action (if provided) and validates the result based on user permissions.
        """
        logger.info("=" * 80)
        logger.info(f"Starting test: {test_data.test_name}")
        if test_data.user_info:
            verb_names = [verb.value for verb in test_data.user_info.verbs]
            logger.info(f"User verbs: {verb_names}, Resource: {[rt.value for rt in test_data.user_info.resource_types]}")
        if test_data.workspace_to_use:
            logger.info(f"Workspace: {test_data.workspace_to_use}")
        logger.info("=" * 80)
    
        if test_data.user_info:
            user_info: UserInfo = create_user_with_permissions(
                workspace=test_data.user_info.workspace,
                verbs=test_data.user_info.verbs,
                resource_types=test_data.user_info.resource_types,
                subresources=test_data.user_info.subresources,
                resource_names=test_data.user_info.resource_names,
            )
            logger.info(f"Created user: {user_info.uname}")
            self.test_context.active_user = user_info
            self.test_context.user_client = user_info.client
    
        if test_data.workspace_to_use:
            self.test_context.active_workspace = test_data.workspace_to_use
            mlflow.set_workspace(self.test_context.active_workspace)
            logger.info(f"Set active workspace to: {test_data.workspace_to_use}")
    
&gt;       self._execute_test_steps(test_data=test_data)

tests/test_mcp_servers.py:718: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/base.py:634: in _execute_test_steps
    self._execute_validation(validate_func=step.validate_func, step_number=i, action_name=action_name)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f187af9cfb0&gt;
validate_func = &lt;function validate_mcp_server_created at 0x7f187b072980&gt;
step_number = 1, action_name = 'action_create_mcp_server'

    def _execute_validation(self, validate_func, step_number: int, action_name: str) -&gt; None:
        """Execute a single validation function.
    
        Args:
            validate_func: The validation function to execute.
            step_number: The step number for logging.
            action_name: The action that was executed before this validation.
    
        Raises:
            AssertionError: If validation fails.
        """
        validation_name = validate_func.__name__
        logger.info(f"Step {step_number}: Executing validation '{validation_name}' for action '{action_name}'")
    
        # Generic error handling: if action failed and this is not an "expected failure" validation,
        # show the actual action error instead of letting validation give misleading messages
        if (
            self.test_context.last_error is not None
            and validation_name
            not in {
                "validate_authentication_denied",
                "validate_authentication_denied_or_resource_not_found",
                "validate_mcp_access_endpoint_deleted",
                "validate_skill_artifact_registration_unavailable",
                "validate_skill_deleted",
            }
        ):
    
            error_response = self.test_context.last_error
            user_name = self.test_context.active_user.uname if self.test_context.active_user else "unknown"
            workspace = self.test_context.active_workspace or "unknown"
    
            logger.error(f"Validation '{validation_name}' failed because action '{action_name}' encountered an error for user '{user_name}' in workspace '{workspace}': {error_response.error.code} - {error_response.error.message}")
    
            # Provide detailed error message showing the actual action failure
            error_msg = f"Action '{action_name}' failed for user {user_name} in workspace {workspace}: {error_response.error.code} - {error_response.error.message}"
            if error_response.error.details:
                error_msg += f"\nDetails: {error_response.error.details}"
    
&gt;           raise AssertionError(error_msg)
E           AssertionError: Action 'action_create_mcp_server' failed for user test-user-8sx54941 in workspace workspace1-x27l4wom: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-8sx54941, Workspace: workspace1-x27l4wom

tests/base.py:709: AssertionError</failure></testcase><testcase classname="tests.test_mcp_servers.TestMCPServers" name="test_mcp_server[User with GET permission cannot update MCP access endpoint without UPDATE permission]" time="1.796"><failure message="AssertionError: Action 'action_create_mcp_server' failed for user test-user-gpz6nnq3 in workspace workspace1-x27l4wom: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-gpz6nnq3, Workspace: workspace1-x27l4wom">self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f187af9d0a0&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f187af9d0a0&gt;&gt;
test_data = Test Data: name=User with GET permission cannot update MCP access endpoint without UPDATE permission user_info=UserInf...rce_type=[&lt;ResourceType.MCP_SERVERS: 'mcpservers'&gt;], verbs=['update']) workspace=workspace1-x27l4wom resource_slot=None

    @pytest.mark.parametrize('test_data', test_scenarios, ids=lambda x: x.test_name)
    def test_mcp_server(self, create_user_with_permissions, test_data: TestData):
        """Test MCP server operations with user permissions.
    
        Executes action (if provided) and validates the result based on user permissions.
        """
        logger.info("=" * 80)
        logger.info(f"Starting test: {test_data.test_name}")
        if test_data.user_info:
            verb_names = [verb.value for verb in test_data.user_info.verbs]
            logger.info(f"User verbs: {verb_names}, Resource: {[rt.value for rt in test_data.user_info.resource_types]}")
        if test_data.workspace_to_use:
            logger.info(f"Workspace: {test_data.workspace_to_use}")
        logger.info("=" * 80)
    
        if test_data.user_info:
            user_info: UserInfo = create_user_with_permissions(
                workspace=test_data.user_info.workspace,
                verbs=test_data.user_info.verbs,
                resource_types=test_data.user_info.resource_types,
                subresources=test_data.user_info.subresources,
                resource_names=test_data.user_info.resource_names,
            )
            logger.info(f"Created user: {user_info.uname}")
            self.test_context.active_user = user_info
            self.test_context.user_client = user_info.client
    
        if test_data.workspace_to_use:
            self.test_context.active_workspace = test_data.workspace_to_use
            mlflow.set_workspace(self.test_context.active_workspace)
            logger.info(f"Set active workspace to: {test_data.workspace_to_use}")
    
&gt;       self._execute_test_steps(test_data=test_data)

tests/test_mcp_servers.py:718: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/base.py:634: in _execute_test_steps
    self._execute_validation(validate_func=step.validate_func, step_number=i, action_name=action_name)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f187af9d0a0&gt;
validate_func = &lt;function validate_mcp_server_created at 0x7f187b072980&gt;
step_number = 1, action_name = 'action_create_mcp_server'

    def _execute_validation(self, validate_func, step_number: int, action_name: str) -&gt; None:
        """Execute a single validation function.
    
        Args:
            validate_func: The validation function to execute.
            step_number: The step number for logging.
            action_name: The action that was executed before this validation.
    
        Raises:
            AssertionError: If validation fails.
        """
        validation_name = validate_func.__name__
        logger.info(f"Step {step_number}: Executing validation '{validation_name}' for action '{action_name}'")
    
        # Generic error handling: if action failed and this is not an "expected failure" validation,
        # show the actual action error instead of letting validation give misleading messages
        if (
            self.test_context.last_error is not None
            and validation_name
            not in {
                "validate_authentication_denied",
                "validate_authentication_denied_or_resource_not_found",
                "validate_mcp_access_endpoint_deleted",
                "validate_skill_artifact_registration_unavailable",
                "validate_skill_deleted",
            }
        ):
    
            error_response = self.test_context.last_error
            user_name = self.test_context.active_user.uname if self.test_context.active_user else "unknown"
            workspace = self.test_context.active_workspace or "unknown"
    
            logger.error(f"Validation '{validation_name}' failed because action '{action_name}' encountered an error for user '{user_name}' in workspace '{workspace}': {error_response.error.code} - {error_response.error.message}")
    
            # Provide detailed error message showing the actual action failure
            error_msg = f"Action '{action_name}' failed for user {user_name} in workspace {workspace}: {error_response.error.code} - {error_response.error.message}"
            if error_response.error.details:
                error_msg += f"\nDetails: {error_response.error.details}"
    
&gt;           raise AssertionError(error_msg)
E           AssertionError: Action 'action_create_mcp_server' failed for user test-user-gpz6nnq3 in workspace workspace1-x27l4wom: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-gpz6nnq3, Workspace: workspace1-x27l4wom

tests/base.py:709: AssertionError</failure></testcase><testcase classname="tests.test_mcp_servers.TestMCPServers" name="test_mcp_server[User with DELETE permission cannot update MCP access endpoint without UPDATE permission]" time="1.784"><failure message="AssertionError: Action 'action_create_mcp_server' failed for user test-user-pj74ihm9 in workspace workspace1-x27l4wom: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-pj74ihm9, Workspace: workspace1-x27l4wom">self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f187af9d160&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f187af9d160&gt;&gt;
test_data = Test Data: name=User with DELETE permission cannot update MCP access endpoint without UPDATE permission user_info=User...rce_type=[&lt;ResourceType.MCP_SERVERS: 'mcpservers'&gt;], verbs=['update']) workspace=workspace1-x27l4wom resource_slot=None

    @pytest.mark.parametrize('test_data', test_scenarios, ids=lambda x: x.test_name)
    def test_mcp_server(self, create_user_with_permissions, test_data: TestData):
        """Test MCP server operations with user permissions.
    
        Executes action (if provided) and validates the result based on user permissions.
        """
        logger.info("=" * 80)
        logger.info(f"Starting test: {test_data.test_name}")
        if test_data.user_info:
            verb_names = [verb.value for verb in test_data.user_info.verbs]
            logger.info(f"User verbs: {verb_names}, Resource: {[rt.value for rt in test_data.user_info.resource_types]}")
        if test_data.workspace_to_use:
            logger.info(f"Workspace: {test_data.workspace_to_use}")
        logger.info("=" * 80)
    
        if test_data.user_info:
            user_info: UserInfo = create_user_with_permissions(
                workspace=test_data.user_info.workspace,
                verbs=test_data.user_info.verbs,
                resource_types=test_data.user_info.resource_types,
                subresources=test_data.user_info.subresources,
                resource_names=test_data.user_info.resource_names,
            )
            logger.info(f"Created user: {user_info.uname}")
            self.test_context.active_user = user_info
            self.test_context.user_client = user_info.client
    
        if test_data.workspace_to_use:
            self.test_context.active_workspace = test_data.workspace_to_use
            mlflow.set_workspace(self.test_context.active_workspace)
            logger.info(f"Set active workspace to: {test_data.workspace_to_use}")
    
&gt;       self._execute_test_steps(test_data=test_data)

tests/test_mcp_servers.py:718: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/base.py:634: in _execute_test_steps
    self._execute_validation(validate_func=step.validate_func, step_number=i, action_name=action_name)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f187af9d160&gt;
validate_func = &lt;function validate_mcp_server_created at 0x7f187b072980&gt;
step_number = 1, action_name = 'action_create_mcp_server'

    def _execute_validation(self, validate_func, step_number: int, action_name: str) -&gt; None:
        """Execute a single validation function.
    
        Args:
            validate_func: The validation function to execute.
            step_number: The step number for logging.
            action_name: The action that was executed before this validation.
    
        Raises:
            AssertionError: If validation fails.
        """
        validation_name = validate_func.__name__
        logger.info(f"Step {step_number}: Executing validation '{validation_name}' for action '{action_name}'")
    
        # Generic error handling: if action failed and this is not an "expected failure" validation,
        # show the actual action error instead of letting validation give misleading messages
        if (
            self.test_context.last_error is not None
            and validation_name
            not in {
                "validate_authentication_denied",
                "validate_authentication_denied_or_resource_not_found",
                "validate_mcp_access_endpoint_deleted",
                "validate_skill_artifact_registration_unavailable",
                "validate_skill_deleted",
            }
        ):
    
            error_response = self.test_context.last_error
            user_name = self.test_context.active_user.uname if self.test_context.active_user else "unknown"
            workspace = self.test_context.active_workspace or "unknown"
    
            logger.error(f"Validation '{validation_name}' failed because action '{action_name}' encountered an error for user '{user_name}' in workspace '{workspace}': {error_response.error.code} - {error_response.error.message}")
    
            # Provide detailed error message showing the actual action failure
            error_msg = f"Action '{action_name}' failed for user {user_name} in workspace {workspace}: {error_response.error.code} - {error_response.error.message}"
            if error_response.error.details:
                error_msg += f"\nDetails: {error_response.error.details}"
    
&gt;           raise AssertionError(error_msg)
E           AssertionError: Action 'action_create_mcp_server' failed for user test-user-pj74ihm9 in workspace workspace1-x27l4wom: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-pj74ihm9, Workspace: workspace1-x27l4wom

tests/base.py:709: AssertionError</failure></testcase><testcase classname="tests.test_mcp_servers.TestMCPServers" name="test_mcp_server[Validate that user with UPDATE permission can delete an MCP access endpoint]" time="1.781"><failure message="AssertionError: Action 'action_create_mcp_server' failed for user test-user-j0auia76 in workspace workspace1-x27l4wom: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-j0auia76, Workspace: workspace1-x27l4wom">self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f187af9d220&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f187af9d220&gt;&gt;
test_data = Test Data: name=Validate that user with UPDATE permission can delete an MCP access endpoint user_info=UserInfo(workspa...rce_type=[&lt;ResourceType.MCP_SERVERS: 'mcpservers'&gt;], verbs=['update']) workspace=workspace1-x27l4wom resource_slot=None

    @pytest.mark.parametrize('test_data', test_scenarios, ids=lambda x: x.test_name)
    def test_mcp_server(self, create_user_with_permissions, test_data: TestData):
        """Test MCP server operations with user permissions.
    
        Executes action (if provided) and validates the result based on user permissions.
        """
        logger.info("=" * 80)
        logger.info(f"Starting test: {test_data.test_name}")
        if test_data.user_info:
            verb_names = [verb.value for verb in test_data.user_info.verbs]
            logger.info(f"User verbs: {verb_names}, Resource: {[rt.value for rt in test_data.user_info.resource_types]}")
        if test_data.workspace_to_use:
            logger.info(f"Workspace: {test_data.workspace_to_use}")
        logger.info("=" * 80)
    
        if test_data.user_info:
            user_info: UserInfo = create_user_with_permissions(
                workspace=test_data.user_info.workspace,
                verbs=test_data.user_info.verbs,
                resource_types=test_data.user_info.resource_types,
                subresources=test_data.user_info.subresources,
                resource_names=test_data.user_info.resource_names,
            )
            logger.info(f"Created user: {user_info.uname}")
            self.test_context.active_user = user_info
            self.test_context.user_client = user_info.client
    
        if test_data.workspace_to_use:
            self.test_context.active_workspace = test_data.workspace_to_use
            mlflow.set_workspace(self.test_context.active_workspace)
            logger.info(f"Set active workspace to: {test_data.workspace_to_use}")
    
&gt;       self._execute_test_steps(test_data=test_data)

tests/test_mcp_servers.py:718: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/base.py:634: in _execute_test_steps
    self._execute_validation(validate_func=step.validate_func, step_number=i, action_name=action_name)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f187af9d220&gt;
validate_func = &lt;function validate_mcp_server_created at 0x7f187b072980&gt;
step_number = 1, action_name = 'action_create_mcp_server'

    def _execute_validation(self, validate_func, step_number: int, action_name: str) -&gt; None:
        """Execute a single validation function.
    
        Args:
            validate_func: The validation function to execute.
            step_number: The step number for logging.
            action_name: The action that was executed before this validation.
    
        Raises:
            AssertionError: If validation fails.
        """
        validation_name = validate_func.__name__
        logger.info(f"Step {step_number}: Executing validation '{validation_name}' for action '{action_name}'")
    
        # Generic error handling: if action failed and this is not an "expected failure" validation,
        # show the actual action error instead of letting validation give misleading messages
        if (
            self.test_context.last_error is not None
            and validation_name
            not in {
                "validate_authentication_denied",
                "validate_authentication_denied_or_resource_not_found",
                "validate_mcp_access_endpoint_deleted",
                "validate_skill_artifact_registration_unavailable",
                "validate_skill_deleted",
            }
        ):
    
            error_response = self.test_context.last_error
            user_name = self.test_context.active_user.uname if self.test_context.active_user else "unknown"
            workspace = self.test_context.active_workspace or "unknown"
    
            logger.error(f"Validation '{validation_name}' failed because action '{action_name}' encountered an error for user '{user_name}' in workspace '{workspace}': {error_response.error.code} - {error_response.error.message}")
    
            # Provide detailed error message showing the actual action failure
            error_msg = f"Action '{action_name}' failed for user {user_name} in workspace {workspace}: {error_response.error.code} - {error_response.error.message}"
            if error_response.error.details:
                error_msg += f"\nDetails: {error_response.error.details}"
    
&gt;           raise AssertionError(error_msg)
E           AssertionError: Action 'action_create_mcp_server' failed for user test-user-j0auia76 in workspace workspace1-x27l4wom: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-j0auia76, Workspace: workspace1-x27l4wom

tests/base.py:709: AssertionError</failure></testcase><testcase classname="tests.test_mcp_servers.TestMCPServers" name="test_mcp_server[User with GET permission cannot delete MCP access endpoint without UPDATE permission]" time="1.799"><failure message="AssertionError: Action 'action_create_mcp_server' failed for user test-user-zbzg38wn in workspace workspace1-x27l4wom: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-zbzg38wn, Workspace: workspace1-x27l4wom">self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f187af9d2e0&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f187af9d2e0&gt;&gt;
test_data = Test Data: name=User with GET permission cannot delete MCP access endpoint without UPDATE permission user_info=UserInf...rce_type=[&lt;ResourceType.MCP_SERVERS: 'mcpservers'&gt;], verbs=['update']) workspace=workspace1-x27l4wom resource_slot=None

    @pytest.mark.parametrize('test_data', test_scenarios, ids=lambda x: x.test_name)
    def test_mcp_server(self, create_user_with_permissions, test_data: TestData):
        """Test MCP server operations with user permissions.
    
        Executes action (if provided) and validates the result based on user permissions.
        """
        logger.info("=" * 80)
        logger.info(f"Starting test: {test_data.test_name}")
        if test_data.user_info:
            verb_names = [verb.value for verb in test_data.user_info.verbs]
            logger.info(f"User verbs: {verb_names}, Resource: {[rt.value for rt in test_data.user_info.resource_types]}")
        if test_data.workspace_to_use:
            logger.info(f"Workspace: {test_data.workspace_to_use}")
        logger.info("=" * 80)
    
        if test_data.user_info:
            user_info: UserInfo = create_user_with_permissions(
                workspace=test_data.user_info.workspace,
                verbs=test_data.user_info.verbs,
                resource_types=test_data.user_info.resource_types,
                subresources=test_data.user_info.subresources,
                resource_names=test_data.user_info.resource_names,
            )
            logger.info(f"Created user: {user_info.uname}")
            self.test_context.active_user = user_info
            self.test_context.user_client = user_info.client
    
        if test_data.workspace_to_use:
            self.test_context.active_workspace = test_data.workspace_to_use
            mlflow.set_workspace(self.test_context.active_workspace)
            logger.info(f"Set active workspace to: {test_data.workspace_to_use}")
    
&gt;       self._execute_test_steps(test_data=test_data)

tests/test_mcp_servers.py:718: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/base.py:634: in _execute_test_steps
    self._execute_validation(validate_func=step.validate_func, step_number=i, action_name=action_name)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f187af9d2e0&gt;
validate_func = &lt;function validate_mcp_server_created at 0x7f187b072980&gt;
step_number = 1, action_name = 'action_create_mcp_server'

    def _execute_validation(self, validate_func, step_number: int, action_name: str) -&gt; None:
        """Execute a single validation function.
    
        Args:
            validate_func: The validation function to execute.
            step_number: The step number for logging.
            action_name: The action that was executed before this validation.
    
        Raises:
            AssertionError: If validation fails.
        """
        validation_name = validate_func.__name__
        logger.info(f"Step {step_number}: Executing validation '{validation_name}' for action '{action_name}'")
    
        # Generic error handling: if action failed and this is not an "expected failure" validation,
        # show the actual action error instead of letting validation give misleading messages
        if (
            self.test_context.last_error is not None
            and validation_name
            not in {
                "validate_authentication_denied",
                "validate_authentication_denied_or_resource_not_found",
                "validate_mcp_access_endpoint_deleted",
                "validate_skill_artifact_registration_unavailable",
                "validate_skill_deleted",
            }
        ):
    
            error_response = self.test_context.last_error
            user_name = self.test_context.active_user.uname if self.test_context.active_user else "unknown"
            workspace = self.test_context.active_workspace or "unknown"
    
            logger.error(f"Validation '{validation_name}' failed because action '{action_name}' encountered an error for user '{user_name}' in workspace '{workspace}': {error_response.error.code} - {error_response.error.message}")
    
            # Provide detailed error message showing the actual action failure
            error_msg = f"Action '{action_name}' failed for user {user_name} in workspace {workspace}: {error_response.error.code} - {error_response.error.message}"
            if error_response.error.details:
                error_msg += f"\nDetails: {error_response.error.details}"
    
&gt;           raise AssertionError(error_msg)
E           AssertionError: Action 'action_create_mcp_server' failed for user test-user-zbzg38wn in workspace workspace1-x27l4wom: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-zbzg38wn, Workspace: workspace1-x27l4wom

tests/base.py:709: AssertionError</failure></testcase><testcase classname="tests.test_mcp_servers.TestMCPServers" name="test_mcp_server[User with DELETE permission alone cannot delete MCP access endpoint (requires UPDATE, not DELETE)]" time="1.789"><failure message="AssertionError: Action 'action_create_mcp_server' failed for user test-user-ntjxk01i in workspace workspace1-x27l4wom: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-ntjxk01i, Workspace: workspace1-x27l4wom">self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f187af9d3a0&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f187af9d3a0&gt;&gt;
test_data = Test Data: name=User with DELETE permission alone cannot delete MCP access endpoint (requires UPDATE, not DELETE) user...rce_type=[&lt;ResourceType.MCP_SERVERS: 'mcpservers'&gt;], verbs=['update']) workspace=workspace1-x27l4wom resource_slot=None

    @pytest.mark.parametrize('test_data', test_scenarios, ids=lambda x: x.test_name)
    def test_mcp_server(self, create_user_with_permissions, test_data: TestData):
        """Test MCP server operations with user permissions.
    
        Executes action (if provided) and validates the result based on user permissions.
        """
        logger.info("=" * 80)
        logger.info(f"Starting test: {test_data.test_name}")
        if test_data.user_info:
            verb_names = [verb.value for verb in test_data.user_info.verbs]
            logger.info(f"User verbs: {verb_names}, Resource: {[rt.value for rt in test_data.user_info.resource_types]}")
        if test_data.workspace_to_use:
            logger.info(f"Workspace: {test_data.workspace_to_use}")
        logger.info("=" * 80)
    
        if test_data.user_info:
            user_info: UserInfo = create_user_with_permissions(
                workspace=test_data.user_info.workspace,
                verbs=test_data.user_info.verbs,
                resource_types=test_data.user_info.resource_types,
                subresources=test_data.user_info.subresources,
                resource_names=test_data.user_info.resource_names,
            )
            logger.info(f"Created user: {user_info.uname}")
            self.test_context.active_user = user_info
            self.test_context.user_client = user_info.client
    
        if test_data.workspace_to_use:
            self.test_context.active_workspace = test_data.workspace_to_use
            mlflow.set_workspace(self.test_context.active_workspace)
            logger.info(f"Set active workspace to: {test_data.workspace_to_use}")
    
&gt;       self._execute_test_steps(test_data=test_data)

tests/test_mcp_servers.py:718: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/base.py:634: in _execute_test_steps
    self._execute_validation(validate_func=step.validate_func, step_number=i, action_name=action_name)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f187af9d3a0&gt;
validate_func = &lt;function validate_mcp_server_created at 0x7f187b072980&gt;
step_number = 1, action_name = 'action_create_mcp_server'

    def _execute_validation(self, validate_func, step_number: int, action_name: str) -&gt; None:
        """Execute a single validation function.
    
        Args:
            validate_func: The validation function to execute.
            step_number: The step number for logging.
            action_name: The action that was executed before this validation.
    
        Raises:
            AssertionError: If validation fails.
        """
        validation_name = validate_func.__name__
        logger.info(f"Step {step_number}: Executing validation '{validation_name}' for action '{action_name}'")
    
        # Generic error handling: if action failed and this is not an "expected failure" validation,
        # show the actual action error instead of letting validation give misleading messages
        if (
            self.test_context.last_error is not None
            and validation_name
            not in {
                "validate_authentication_denied",
                "validate_authentication_denied_or_resource_not_found",
                "validate_mcp_access_endpoint_deleted",
                "validate_skill_artifact_registration_unavailable",
                "validate_skill_deleted",
            }
        ):
    
            error_response = self.test_context.last_error
            user_name = self.test_context.active_user.uname if self.test_context.active_user else "unknown"
            workspace = self.test_context.active_workspace or "unknown"
    
            logger.error(f"Validation '{validation_name}' failed because action '{action_name}' encountered an error for user '{user_name}' in workspace '{workspace}': {error_response.error.code} - {error_response.error.message}")
    
            # Provide detailed error message showing the actual action failure
            error_msg = f"Action '{action_name}' failed for user {user_name} in workspace {workspace}: {error_response.error.code} - {error_response.error.message}"
            if error_response.error.details:
                error_msg += f"\nDetails: {error_response.error.details}"
    
&gt;           raise AssertionError(error_msg)
E           AssertionError: Action 'action_create_mcp_server' failed for user test-user-ntjxk01i in workspace workspace1-x27l4wom: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-ntjxk01i, Workspace: workspace1-x27l4wom

tests/base.py:709: AssertionError</failure></testcase><testcase classname="tests.test_models.TestRegisteredModels" name="test_registered_model[Validate that user with GET permission can get registered model]" time="1.967" /><testcase classname="tests.test_models.TestRegisteredModels" name="test_registered_model[Validate that user with GET permission cannot create registered model]" time="1.959" /><testcase classname="tests.test_models.TestRegisteredModels" name="test_registered_model[Validate that user with GET permission on workspace 1 cannot get registered model in workspace 2]" time="2.126" /><testcase classname="tests.test_models.TestRegisteredModels" name="test_registered_model[Validate that user with GET permission scoped to one registered model can get that model]" time="2.144" /><testcase classname="tests.test_models.TestRegisteredModels" name="test_registered_model[Validate that user with GET permission scoped to one registered model cannot get a different model in the same workspace]" time="2.123" /><testcase classname="tests.test_models.TestRegisteredModels" name="test_registered_model[Validate that user with CREATE permission can create registered model]" time="2.359" /><testcase classname="tests.test_models.TestRegisteredModels" name="test_registered_model[Validate that user with GET, CREATE and DELETE permissions can delete registered model]" time="2.566" /><testcase classname="tests.test_models.TestRegisteredModels" name="test_registered_model[Validate that user with CREATE permission on workspace 1 cannot create registered model in workspace 2]" time="1.973" /><testcase classname="tests.test_models.TestRegisteredModels" name="test_registered_model[User with GET permission cannot delete registered model]" time="4.551" /><testcase classname="tests.test_models.TestRegisteredModels" name="test_registered_model[User with CREATE permission cannot delete registered model without DELETE permission]" time="2.422" /><testcase classname="tests.test_models.TestRegisteredModels" name="test_registered_model[User with DELETE permission cannot create registered model without CREATE permission]" time="1.958" /><testcase classname="tests.test_models.TestRegisteredModels" name="test_registered_model[User with DELETE permission cannot get registered model without GET permission]" time="2.108" /><testcase classname="tests.test_models.TestRegisteredModels" name="test_registered_model[User with UPDATE permission cannot create registered model without CREATE permission]" time="1.961" /><testcase classname="tests.test_models.TestRegisteredModels" name="test_registered_model[User with LIST permission cannot delete registered model without DELETE permission]" time="4.136" /><testcase classname="tests.test_skill_registry.TestSkillRegistry" name="test_skill_registry[User with CREATE can create a bare Skill via the direct client API]" time="1.812"><failure message="AssertionError: Action 'action_create_skill_shell' failed for user test-user-w3fxnuiu in workspace workspace1-x27l4wom: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-w3fxnuiu, Workspace: workspace1-x27l4wom">self = &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f187b026d80&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f187b026d80&gt;&gt;
test_data = Test Data: name=User with CREATE can create a bare Skill via the direct client API user_info=UserInfo(workspace='works...m', resource_type=[&lt;ResourceType.SKILLS: 'skills'&gt;], verbs=['create']) workspace=workspace1-x27l4wom resource_slot=None

    @pytest.mark.parametrize(
        "test_data",
        test_scenarios,
        ids=lambda scenario: scenario.test_name,
    )
    def test_skill_registry(self, create_user_with_permissions, test_data):
        logger.info("Starting test: %s", test_data.test_name)
    
        if test_data.user_info:
            user_info = create_user_with_permissions(
                workspace=test_data.user_info.workspace,
                verbs=test_data.user_info.verbs,
                resource_types=test_data.user_info.resource_types,
                subresources=test_data.user_info.subresources,
                resource_names=test_data.user_info.resource_names,
            )
            self.test_context.active_user = user_info
            self.test_context.user_client = user_info.client
    
        if test_data.workspace_to_use:
            self.test_context.active_workspace = test_data.workspace_to_use
            mlflow.set_workspace(test_data.workspace_to_use)
    
&gt;       self._execute_test_steps(test_data=test_data)

tests/test_skill_registry.py:672: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/base.py:634: in _execute_test_steps
    self._execute_validation(validate_func=step.validate_func, step_number=i, action_name=action_name)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f187b026d80&gt;
validate_func = &lt;function validate_skill_created at 0x7f187b072f20&gt;
step_number = 1, action_name = 'action_create_skill_shell'

    def _execute_validation(self, validate_func, step_number: int, action_name: str) -&gt; None:
        """Execute a single validation function.
    
        Args:
            validate_func: The validation function to execute.
            step_number: The step number for logging.
            action_name: The action that was executed before this validation.
    
        Raises:
            AssertionError: If validation fails.
        """
        validation_name = validate_func.__name__
        logger.info(f"Step {step_number}: Executing validation '{validation_name}' for action '{action_name}'")
    
        # Generic error handling: if action failed and this is not an "expected failure" validation,
        # show the actual action error instead of letting validation give misleading messages
        if (
            self.test_context.last_error is not None
            and validation_name
            not in {
                "validate_authentication_denied",
                "validate_authentication_denied_or_resource_not_found",
                "validate_mcp_access_endpoint_deleted",
                "validate_skill_artifact_registration_unavailable",
                "validate_skill_deleted",
            }
        ):
    
            error_response = self.test_context.last_error
            user_name = self.test_context.active_user.uname if self.test_context.active_user else "unknown"
            workspace = self.test_context.active_workspace or "unknown"
    
            logger.error(f"Validation '{validation_name}' failed because action '{action_name}' encountered an error for user '{user_name}' in workspace '{workspace}': {error_response.error.code} - {error_response.error.message}")
    
            # Provide detailed error message showing the actual action failure
            error_msg = f"Action '{action_name}' failed for user {user_name} in workspace {workspace}: {error_response.error.code} - {error_response.error.message}"
            if error_response.error.details:
                error_msg += f"\nDetails: {error_response.error.details}"
    
&gt;           raise AssertionError(error_msg)
E           AssertionError: Action 'action_create_skill_shell' failed for user test-user-w3fxnuiu in workspace workspace1-x27l4wom: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-w3fxnuiu, Workspace: workspace1-x27l4wom

tests/base.py:709: AssertionError</failure></testcase><testcase classname="tests.test_skill_registry.TestSkillRegistry" name="test_skill_registry[User with UPDATE cannot create a bare Skill via the direct client API without CREATE]" time="1.793"><failure message="AssertionError: Action failed with unexpected error for user test-user-9kwqjxo5: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}. Expected permission/authentication error.">self = &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f187b0272f0&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f187b0272f0&gt;&gt;
test_data = Test Data: name=User with UPDATE cannot create a bare Skill via the direct client API without CREATE user_info=UserInf...m', resource_type=[&lt;ResourceType.SKILLS: 'skills'&gt;], verbs=['update']) workspace=workspace1-x27l4wom resource_slot=None

    @pytest.mark.parametrize(
        "test_data",
        test_scenarios,
        ids=lambda scenario: scenario.test_name,
    )
    def test_skill_registry(self, create_user_with_permissions, test_data):
        logger.info("Starting test: %s", test_data.test_name)
    
        if test_data.user_info:
            user_info = create_user_with_permissions(
                workspace=test_data.user_info.workspace,
                verbs=test_data.user_info.verbs,
                resource_types=test_data.user_info.resource_types,
                subresources=test_data.user_info.subresources,
                resource_names=test_data.user_info.resource_names,
            )
            self.test_context.active_user = user_info
            self.test_context.user_client = user_info.client
    
        if test_data.workspace_to_use:
            self.test_context.active_workspace = test_data.workspace_to_use
            mlflow.set_workspace(test_data.workspace_to_use)
    
&gt;       self._execute_test_steps(test_data=test_data)

tests/test_skill_registry.py:672: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/base.py:634: in _execute_test_steps
    self._execute_validation(validate_func=step.validate_func, step_number=i, action_name=action_name)
tests/base.py:712: in _execute_validation
    validate_func(self.test_context)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

test_context = TestContext(workspaces=['workspace1-x27l4wom', 'workspace2-x27l4wom'], active_workspace='workspace1-x27l4wom', active_..._observed_state={}, k8_manager=None, discovered_workspaces=set(), unlabeled_namespace=None, namespaces_to_delete=set())

    def validate_authentication_denied(test_context: TestContext) -&gt; None:
        """Validate that an action failed due to authentication denial.
    
        Checks that an authentication or authorization error occurred during the action.
    
        Args:
            test_context: Test context containing structured error information.
    
        Raises:
            AssertionError: If no error occurred or error is not permission-related.
        """
        user_name = test_context.active_user.uname
        workspace = test_context.active_workspace
        logger.info(f"Validating that action failed as expected for user '{user_name}' in workspace '{workspace}'")
    
        # Validate that an error occurred
        if test_context.last_error is None:
            logger.error(f"Validation failed: Action should have failed for unauthorized user '{user_name}', but succeeded")
            raise AssertionError(f"Action should have failed for unauthorized user '{user_name}', but succeeded")
    
        error_response: ErrorResponse = test_context.last_error
    
        # Check if it's a permission or authentication error
        if not error_response.is_permission_error():
            logger.error(f"Validation failed: Expected permission/authentication error, got: {error_response.error.code} - {error_response.error.message}")
&gt;           raise AssertionError(
                f"Action failed with unexpected error for user {user_name}: {error_response.error.code} - {error_response.error.message}. "
                f"Expected permission/authentication error."
            )
E           AssertionError: Action failed with unexpected error for user test-user-9kwqjxo5: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}. Expected permission/authentication error.

tests/validations/validation_utils.py:38: AssertionError</failure></testcase><testcase classname="tests.test_skill_registry.TestSkillRegistry" name="test_skill_registry[User with GET can retrieve a Skill]" time="1.788"><failure message="AssertionError: Action 'action_create_skill_shell' failed for user test-user-ddeqjg3p in workspace workspace1-x27l4wom: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-ddeqjg3p, Workspace: workspace1-x27l4wom">self = &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f187b0273b0&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f187b0273b0&gt;&gt;
test_data = Test Data: name=User with GET can retrieve a Skill user_info=None workspace=workspace1-x27l4wom resource_slot=None

    @pytest.mark.parametrize(
        "test_data",
        test_scenarios,
        ids=lambda scenario: scenario.test_name,
    )
    def test_skill_registry(self, create_user_with_permissions, test_data):
        logger.info("Starting test: %s", test_data.test_name)
    
        if test_data.user_info:
            user_info = create_user_with_permissions(
                workspace=test_data.user_info.workspace,
                verbs=test_data.user_info.verbs,
                resource_types=test_data.user_info.resource_types,
                subresources=test_data.user_info.subresources,
                resource_names=test_data.user_info.resource_names,
            )
            self.test_context.active_user = user_info
            self.test_context.user_client = user_info.client
    
        if test_data.workspace_to_use:
            self.test_context.active_workspace = test_data.workspace_to_use
            mlflow.set_workspace(test_data.workspace_to_use)
    
&gt;       self._execute_test_steps(test_data=test_data)

tests/test_skill_registry.py:672: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/base.py:634: in _execute_test_steps
    self._execute_validation(validate_func=step.validate_func, step_number=i, action_name=action_name)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f187b0273b0&gt;
validate_func = &lt;function validate_skill_created at 0x7f187b072f20&gt;
step_number = 1, action_name = 'action_create_skill_shell'

    def _execute_validation(self, validate_func, step_number: int, action_name: str) -&gt; None:
        """Execute a single validation function.
    
        Args:
            validate_func: The validation function to execute.
            step_number: The step number for logging.
            action_name: The action that was executed before this validation.
    
        Raises:
            AssertionError: If validation fails.
        """
        validation_name = validate_func.__name__
        logger.info(f"Step {step_number}: Executing validation '{validation_name}' for action '{action_name}'")
    
        # Generic error handling: if action failed and this is not an "expected failure" validation,
        # show the actual action error instead of letting validation give misleading messages
        if (
            self.test_context.last_error is not None
            and validation_name
            not in {
                "validate_authentication_denied",
                "validate_authentication_denied_or_resource_not_found",
                "validate_mcp_access_endpoint_deleted",
                "validate_skill_artifact_registration_unavailable",
                "validate_skill_deleted",
            }
        ):
    
            error_response = self.test_context.last_error
            user_name = self.test_context.active_user.uname if self.test_context.active_user else "unknown"
            workspace = self.test_context.active_workspace or "unknown"
    
            logger.error(f"Validation '{validation_name}' failed because action '{action_name}' encountered an error for user '{user_name}' in workspace '{workspace}': {error_response.error.code} - {error_response.error.message}")
    
            # Provide detailed error message showing the actual action failure
            error_msg = f"Action '{action_name}' failed for user {user_name} in workspace {workspace}: {error_response.error.code} - {error_response.error.message}"
            if error_response.error.details:
                error_msg += f"\nDetails: {error_response.error.details}"
    
&gt;           raise AssertionError(error_msg)
E           AssertionError: Action 'action_create_skill_shell' failed for user test-user-ddeqjg3p in workspace workspace1-x27l4wom: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-ddeqjg3p, Workspace: workspace1-x27l4wom

tests/base.py:709: AssertionError</failure></testcase><testcase classname="tests.test_skill_registry.TestSkillRegistry" name="test_skill_registry[User without GET cannot retrieve a Skill]" time="1.802"><failure message="AssertionError: Action 'action_create_skill_shell' failed for user test-user-c87byljg in workspace workspace1-x27l4wom: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-c87byljg, Workspace: workspace1-x27l4wom">self = &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f187b027470&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f187b027470&gt;&gt;
test_data = Test Data: name=User without GET cannot retrieve a Skill user_info=None workspace=workspace1-x27l4wom resource_slot=None

    @pytest.mark.parametrize(
        "test_data",
        test_scenarios,
        ids=lambda scenario: scenario.test_name,
    )
    def test_skill_registry(self, create_user_with_permissions, test_data):
        logger.info("Starting test: %s", test_data.test_name)
    
        if test_data.user_info:
            user_info = create_user_with_permissions(
                workspace=test_data.user_info.workspace,
                verbs=test_data.user_info.verbs,
                resource_types=test_data.user_info.resource_types,
                subresources=test_data.user_info.subresources,
                resource_names=test_data.user_info.resource_names,
            )
            self.test_context.active_user = user_info
            self.test_context.user_client = user_info.client
    
        if test_data.workspace_to_use:
            self.test_context.active_workspace = test_data.workspace_to_use
            mlflow.set_workspace(test_data.workspace_to_use)
    
&gt;       self._execute_test_steps(test_data=test_data)

tests/test_skill_registry.py:672: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/base.py:634: in _execute_test_steps
    self._execute_validation(validate_func=step.validate_func, step_number=i, action_name=action_name)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f187b027470&gt;
validate_func = &lt;function validate_skill_created at 0x7f187b072f20&gt;
step_number = 1, action_name = 'action_create_skill_shell'

    def _execute_validation(self, validate_func, step_number: int, action_name: str) -&gt; None:
        """Execute a single validation function.
    
        Args:
            validate_func: The validation function to execute.
            step_number: The step number for logging.
            action_name: The action that was executed before this validation.
    
        Raises:
            AssertionError: If validation fails.
        """
        validation_name = validate_func.__name__
        logger.info(f"Step {step_number}: Executing validation '{validation_name}' for action '{action_name}'")
    
        # Generic error handling: if action failed and this is not an "expected failure" validation,
        # show the actual action error instead of letting validation give misleading messages
        if (
            self.test_context.last_error is not None
            and validation_name
            not in {
                "validate_authentication_denied",
                "validate_authentication_denied_or_resource_not_found",
                "validate_mcp_access_endpoint_deleted",
                "validate_skill_artifact_registration_unavailable",
                "validate_skill_deleted",
            }
        ):
    
            error_response = self.test_context.last_error
            user_name = self.test_context.active_user.uname if self.test_context.active_user else "unknown"
            workspace = self.test_context.active_workspace or "unknown"
    
            logger.error(f"Validation '{validation_name}' failed because action '{action_name}' encountered an error for user '{user_name}' in workspace '{workspace}': {error_response.error.code} - {error_response.error.message}")
    
            # Provide detailed error message showing the actual action failure
            error_msg = f"Action '{action_name}' failed for user {user_name} in workspace {workspace}: {error_response.error.code} - {error_response.error.message}"
            if error_response.error.details:
                error_msg += f"\nDetails: {error_response.error.details}"
    
&gt;           raise AssertionError(error_msg)
E           AssertionError: Action 'action_create_skill_shell' failed for user test-user-c87byljg in workspace workspace1-x27l4wom: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-c87byljg, Workspace: workspace1-x27l4wom

tests/base.py:709: AssertionError</failure></testcase><testcase classname="tests.test_skill_registry.TestSkillRegistry" name="test_skill_registry[User with LIST can search Skills]" time="1.790"><failure message="AssertionError: Action 'action_create_skill_shell' failed for user test-user-9tlpl1aq in workspace workspace1-x27l4wom: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-9tlpl1aq, Workspace: workspace1-x27l4wom">self = &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f187b027590&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f187b027590&gt;&gt;
test_data = Test Data: name=User with LIST can search Skills user_info=None workspace=workspace1-x27l4wom resource_slot=None

    @pytest.mark.parametrize(
        "test_data",
        test_scenarios,
        ids=lambda scenario: scenario.test_name,
    )
    def test_skill_registry(self, create_user_with_permissions, test_data):
        logger.info("Starting test: %s", test_data.test_name)
    
        if test_data.user_info:
            user_info = create_user_with_permissions(
                workspace=test_data.user_info.workspace,
                verbs=test_data.user_info.verbs,
                resource_types=test_data.user_info.resource_types,
                subresources=test_data.user_info.subresources,
                resource_names=test_data.user_info.resource_names,
            )
            self.test_context.active_user = user_info
            self.test_context.user_client = user_info.client
    
        if test_data.workspace_to_use:
            self.test_context.active_workspace = test_data.workspace_to_use
            mlflow.set_workspace(test_data.workspace_to_use)
    
&gt;       self._execute_test_steps(test_data=test_data)

tests/test_skill_registry.py:672: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/base.py:634: in _execute_test_steps
    self._execute_validation(validate_func=step.validate_func, step_number=i, action_name=action_name)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f187b027590&gt;
validate_func = &lt;function validate_skill_created at 0x7f187b072f20&gt;
step_number = 1, action_name = 'action_create_skill_shell'

    def _execute_validation(self, validate_func, step_number: int, action_name: str) -&gt; None:
        """Execute a single validation function.
    
        Args:
            validate_func: The validation function to execute.
            step_number: The step number for logging.
            action_name: The action that was executed before this validation.
    
        Raises:
            AssertionError: If validation fails.
        """
        validation_name = validate_func.__name__
        logger.info(f"Step {step_number}: Executing validation '{validation_name}' for action '{action_name}'")
    
        # Generic error handling: if action failed and this is not an "expected failure" validation,
        # show the actual action error instead of letting validation give misleading messages
        if (
            self.test_context.last_error is not None
            and validation_name
            not in {
                "validate_authentication_denied",
                "validate_authentication_denied_or_resource_not_found",
                "validate_mcp_access_endpoint_deleted",
                "validate_skill_artifact_registration_unavailable",
                "validate_skill_deleted",
            }
        ):
    
            error_response = self.test_context.last_error
            user_name = self.test_context.active_user.uname if self.test_context.active_user else "unknown"
            workspace = self.test_context.active_workspace or "unknown"
    
            logger.error(f"Validation '{validation_name}' failed because action '{action_name}' encountered an error for user '{user_name}' in workspace '{workspace}': {error_response.error.code} - {error_response.error.message}")
    
            # Provide detailed error message showing the actual action failure
            error_msg = f"Action '{action_name}' failed for user {user_name} in workspace {workspace}: {error_response.error.code} - {error_response.error.message}"
            if error_response.error.details:
                error_msg += f"\nDetails: {error_response.error.details}"
    
&gt;           raise AssertionError(error_msg)
E           AssertionError: Action 'action_create_skill_shell' failed for user test-user-9tlpl1aq in workspace workspace1-x27l4wom: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-9tlpl1aq, Workspace: workspace1-x27l4wom

tests/base.py:709: AssertionError</failure></testcase><testcase classname="tests.test_skill_registry.TestSkillRegistry" name="test_skill_registry[User without LIST cannot search Skills]" time="1.792"><failure message="AssertionError: Action failed with unexpected error for user test-user-5e0ov7ps: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}. Expected permission/authentication error.">self = &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f187b0276b0&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f187b0276b0&gt;&gt;
test_data = Test Data: name=User without LIST cannot search Skills user_info=UserInfo(workspace='workspace1-x27l4wom', resource_type=[&lt;ResourceType.SKILLS: 'skills'&gt;], verbs=['get']) workspace=workspace1-x27l4wom resource_slot=None

    @pytest.mark.parametrize(
        "test_data",
        test_scenarios,
        ids=lambda scenario: scenario.test_name,
    )
    def test_skill_registry(self, create_user_with_permissions, test_data):
        logger.info("Starting test: %s", test_data.test_name)
    
        if test_data.user_info:
            user_info = create_user_with_permissions(
                workspace=test_data.user_info.workspace,
                verbs=test_data.user_info.verbs,
                resource_types=test_data.user_info.resource_types,
                subresources=test_data.user_info.subresources,
                resource_names=test_data.user_info.resource_names,
            )
            self.test_context.active_user = user_info
            self.test_context.user_client = user_info.client
    
        if test_data.workspace_to_use:
            self.test_context.active_workspace = test_data.workspace_to_use
            mlflow.set_workspace(test_data.workspace_to_use)
    
&gt;       self._execute_test_steps(test_data=test_data)

tests/test_skill_registry.py:672: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/base.py:634: in _execute_test_steps
    self._execute_validation(validate_func=step.validate_func, step_number=i, action_name=action_name)
tests/base.py:712: in _execute_validation
    validate_func(self.test_context)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

test_context = TestContext(workspaces=['workspace1-x27l4wom', 'workspace2-x27l4wom'], active_workspace='workspace1-x27l4wom', active_..._observed_state={}, k8_manager=None, discovered_workspaces=set(), unlabeled_namespace=None, namespaces_to_delete=set())

    def validate_authentication_denied(test_context: TestContext) -&gt; None:
        """Validate that an action failed due to authentication denial.
    
        Checks that an authentication or authorization error occurred during the action.
    
        Args:
            test_context: Test context containing structured error information.
    
        Raises:
            AssertionError: If no error occurred or error is not permission-related.
        """
        user_name = test_context.active_user.uname
        workspace = test_context.active_workspace
        logger.info(f"Validating that action failed as expected for user '{user_name}' in workspace '{workspace}'")
    
        # Validate that an error occurred
        if test_context.last_error is None:
            logger.error(f"Validation failed: Action should have failed for unauthorized user '{user_name}', but succeeded")
            raise AssertionError(f"Action should have failed for unauthorized user '{user_name}', but succeeded")
    
        error_response: ErrorResponse = test_context.last_error
    
        # Check if it's a permission or authentication error
        if not error_response.is_permission_error():
            logger.error(f"Validation failed: Expected permission/authentication error, got: {error_response.error.code} - {error_response.error.message}")
&gt;           raise AssertionError(
                f"Action failed with unexpected error for user {user_name}: {error_response.error.code} - {error_response.error.message}. "
                f"Expected permission/authentication error."
            )
E           AssertionError: Action failed with unexpected error for user test-user-5e0ov7ps: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}. Expected permission/authentication error.

tests/validations/validation_utils.py:38: AssertionError</failure></testcase><testcase classname="tests.test_skill_registry.TestSkillRegistry" name="test_skill_registry[User with UPDATE can update a Skill]" time="1.806"><failure message="AssertionError: Action 'action_create_skill_shell' failed for user test-user-5h95zs9m in workspace workspace1-x27l4wom: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-5h95zs9m, Workspace: workspace1-x27l4wom">self = &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f187b0277a0&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f187b0277a0&gt;&gt;
test_data = Test Data: name=User with UPDATE can update a Skill user_info=None workspace=workspace1-x27l4wom resource_slot=None

    @pytest.mark.parametrize(
        "test_data",
        test_scenarios,
        ids=lambda scenario: scenario.test_name,
    )
    def test_skill_registry(self, create_user_with_permissions, test_data):
        logger.info("Starting test: %s", test_data.test_name)
    
        if test_data.user_info:
            user_info = create_user_with_permissions(
                workspace=test_data.user_info.workspace,
                verbs=test_data.user_info.verbs,
                resource_types=test_data.user_info.resource_types,
                subresources=test_data.user_info.subresources,
                resource_names=test_data.user_info.resource_names,
            )
            self.test_context.active_user = user_info
            self.test_context.user_client = user_info.client
    
        if test_data.workspace_to_use:
            self.test_context.active_workspace = test_data.workspace_to_use
            mlflow.set_workspace(test_data.workspace_to_use)
    
&gt;       self._execute_test_steps(test_data=test_data)

tests/test_skill_registry.py:672: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/base.py:634: in _execute_test_steps
    self._execute_validation(validate_func=step.validate_func, step_number=i, action_name=action_name)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f187b0277a0&gt;
validate_func = &lt;function validate_skill_created at 0x7f187b072f20&gt;
step_number = 1, action_name = 'action_create_skill_shell'

    def _execute_validation(self, validate_func, step_number: int, action_name: str) -&gt; None:
        """Execute a single validation function.
    
        Args:
            validate_func: The validation function to execute.
            step_number: The step number for logging.
            action_name: The action that was executed before this validation.
    
        Raises:
            AssertionError: If validation fails.
        """
        validation_name = validate_func.__name__
        logger.info(f"Step {step_number}: Executing validation '{validation_name}' for action '{action_name}'")
    
        # Generic error handling: if action failed and this is not an "expected failure" validation,
        # show the actual action error instead of letting validation give misleading messages
        if (
            self.test_context.last_error is not None
            and validation_name
            not in {
                "validate_authentication_denied",
                "validate_authentication_denied_or_resource_not_found",
                "validate_mcp_access_endpoint_deleted",
                "validate_skill_artifact_registration_unavailable",
                "validate_skill_deleted",
            }
        ):
    
            error_response = self.test_context.last_error
            user_name = self.test_context.active_user.uname if self.test_context.active_user else "unknown"
            workspace = self.test_context.active_workspace or "unknown"
    
            logger.error(f"Validation '{validation_name}' failed because action '{action_name}' encountered an error for user '{user_name}' in workspace '{workspace}': {error_response.error.code} - {error_response.error.message}")
    
            # Provide detailed error message showing the actual action failure
            error_msg = f"Action '{action_name}' failed for user {user_name} in workspace {workspace}: {error_response.error.code} - {error_response.error.message}"
            if error_response.error.details:
                error_msg += f"\nDetails: {error_response.error.details}"
    
&gt;           raise AssertionError(error_msg)
E           AssertionError: Action 'action_create_skill_shell' failed for user test-user-5h95zs9m in workspace workspace1-x27l4wom: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-5h95zs9m, Workspace: workspace1-x27l4wom

tests/base.py:709: AssertionError</failure></testcase><testcase classname="tests.test_skill_registry.TestSkillRegistry" name="test_skill_registry[User without UPDATE cannot update a Skill]" time="1.789"><failure message="AssertionError: Action 'action_create_skill_shell' failed for user test-user-crz7wcfi in workspace workspace1-x27l4wom: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-crz7wcfi, Workspace: workspace1-x27l4wom">self = &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f187b027860&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f187b027860&gt;&gt;
test_data = Test Data: name=User without UPDATE cannot update a Skill user_info=None workspace=workspace1-x27l4wom resource_slot=None

    @pytest.mark.parametrize(
        "test_data",
        test_scenarios,
        ids=lambda scenario: scenario.test_name,
    )
    def test_skill_registry(self, create_user_with_permissions, test_data):
        logger.info("Starting test: %s", test_data.test_name)
    
        if test_data.user_info:
            user_info = create_user_with_permissions(
                workspace=test_data.user_info.workspace,
                verbs=test_data.user_info.verbs,
                resource_types=test_data.user_info.resource_types,
                subresources=test_data.user_info.subresources,
                resource_names=test_data.user_info.resource_names,
            )
            self.test_context.active_user = user_info
            self.test_context.user_client = user_info.client
    
        if test_data.workspace_to_use:
            self.test_context.active_workspace = test_data.workspace_to_use
            mlflow.set_workspace(test_data.workspace_to_use)
    
&gt;       self._execute_test_steps(test_data=test_data)

tests/test_skill_registry.py:672: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/base.py:634: in _execute_test_steps
    self._execute_validation(validate_func=step.validate_func, step_number=i, action_name=action_name)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f187b027860&gt;
validate_func = &lt;function validate_skill_created at 0x7f187b072f20&gt;
step_number = 1, action_name = 'action_create_skill_shell'

    def _execute_validation(self, validate_func, step_number: int, action_name: str) -&gt; None:
        """Execute a single validation function.
    
        Args:
            validate_func: The validation function to execute.
            step_number: The step number for logging.
            action_name: The action that was executed before this validation.
    
        Raises:
            AssertionError: If validation fails.
        """
        validation_name = validate_func.__name__
        logger.info(f"Step {step_number}: Executing validation '{validation_name}' for action '{action_name}'")
    
        # Generic error handling: if action failed and this is not an "expected failure" validation,
        # show the actual action error instead of letting validation give misleading messages
        if (
            self.test_context.last_error is not None
            and validation_name
            not in {
                "validate_authentication_denied",
                "validate_authentication_denied_or_resource_not_found",
                "validate_mcp_access_endpoint_deleted",
                "validate_skill_artifact_registration_unavailable",
                "validate_skill_deleted",
            }
        ):
    
            error_response = self.test_context.last_error
            user_name = self.test_context.active_user.uname if self.test_context.active_user else "unknown"
            workspace = self.test_context.active_workspace or "unknown"
    
            logger.error(f"Validation '{validation_name}' failed because action '{action_name}' encountered an error for user '{user_name}' in workspace '{workspace}': {error_response.error.code} - {error_response.error.message}")
    
            # Provide detailed error message showing the actual action failure
            error_msg = f"Action '{action_name}' failed for user {user_name} in workspace {workspace}: {error_response.error.code} - {error_response.error.message}"
            if error_response.error.details:
                error_msg += f"\nDetails: {error_response.error.details}"
    
&gt;           raise AssertionError(error_msg)
E           AssertionError: Action 'action_create_skill_shell' failed for user test-user-crz7wcfi in workspace workspace1-x27l4wom: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-crz7wcfi, Workspace: workspace1-x27l4wom

tests/base.py:709: AssertionError</failure></testcase><testcase classname="tests.test_skill_registry.TestSkillRegistry" name="test_skill_registry[User with DELETE can delete a Skill]" time="1.786"><failure message="AssertionError: Action 'action_create_skill_shell' failed for user test-user-ahbxu0sb in workspace workspace1-x27l4wom: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-ahbxu0sb, Workspace: workspace1-x27l4wom">self = &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f187b027950&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f187b027950&gt;&gt;
test_data = Test Data: name=User with DELETE can delete a Skill user_info=None workspace=workspace1-x27l4wom resource_slot=None

    @pytest.mark.parametrize(
        "test_data",
        test_scenarios,
        ids=lambda scenario: scenario.test_name,
    )
    def test_skill_registry(self, create_user_with_permissions, test_data):
        logger.info("Starting test: %s", test_data.test_name)
    
        if test_data.user_info:
            user_info = create_user_with_permissions(
                workspace=test_data.user_info.workspace,
                verbs=test_data.user_info.verbs,
                resource_types=test_data.user_info.resource_types,
                subresources=test_data.user_info.subresources,
                resource_names=test_data.user_info.resource_names,
            )
            self.test_context.active_user = user_info
            self.test_context.user_client = user_info.client
    
        if test_data.workspace_to_use:
            self.test_context.active_workspace = test_data.workspace_to_use
            mlflow.set_workspace(test_data.workspace_to_use)
    
&gt;       self._execute_test_steps(test_data=test_data)

tests/test_skill_registry.py:672: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/base.py:634: in _execute_test_steps
    self._execute_validation(validate_func=step.validate_func, step_number=i, action_name=action_name)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f187b027950&gt;
validate_func = &lt;function validate_skill_created at 0x7f187b072f20&gt;
step_number = 1, action_name = 'action_create_skill_shell'

    def _execute_validation(self, validate_func, step_number: int, action_name: str) -&gt; None:
        """Execute a single validation function.
    
        Args:
            validate_func: The validation function to execute.
            step_number: The step number for logging.
            action_name: The action that was executed before this validation.
    
        Raises:
            AssertionError: If validation fails.
        """
        validation_name = validate_func.__name__
        logger.info(f"Step {step_number}: Executing validation '{validation_name}' for action '{action_name}'")
    
        # Generic error handling: if action failed and this is not an "expected failure" validation,
        # show the actual action error instead of letting validation give misleading messages
        if (
            self.test_context.last_error is not None
            and validation_name
            not in {
                "validate_authentication_denied",
                "validate_authentication_denied_or_resource_not_found",
                "validate_mcp_access_endpoint_deleted",
                "validate_skill_artifact_registration_unavailable",
                "validate_skill_deleted",
            }
        ):
    
            error_response = self.test_context.last_error
            user_name = self.test_context.active_user.uname if self.test_context.active_user else "unknown"
            workspace = self.test_context.active_workspace or "unknown"
    
            logger.error(f"Validation '{validation_name}' failed because action '{action_name}' encountered an error for user '{user_name}' in workspace '{workspace}': {error_response.error.code} - {error_response.error.message}")
    
            # Provide detailed error message showing the actual action failure
            error_msg = f"Action '{action_name}' failed for user {user_name} in workspace {workspace}: {error_response.error.code} - {error_response.error.message}"
            if error_response.error.details:
                error_msg += f"\nDetails: {error_response.error.details}"
    
&gt;           raise AssertionError(error_msg)
E           AssertionError: Action 'action_create_skill_shell' failed for user test-user-ahbxu0sb in workspace workspace1-x27l4wom: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-ahbxu0sb, Workspace: workspace1-x27l4wom

tests/base.py:709: AssertionError</failure></testcase><testcase classname="tests.test_skill_registry.TestSkillRegistry" name="test_skill_registry[User without DELETE cannot delete a Skill]" time="1.791"><failure message="AssertionError: Action 'action_create_skill_shell' failed for user test-user-mpyawih5 in workspace workspace1-x27l4wom: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-mpyawih5, Workspace: workspace1-x27l4wom">self = &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f187b027a40&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f187b027a40&gt;&gt;
test_data = Test Data: name=User without DELETE cannot delete a Skill user_info=None workspace=workspace1-x27l4wom resource_slot=None

    @pytest.mark.parametrize(
        "test_data",
        test_scenarios,
        ids=lambda scenario: scenario.test_name,
    )
    def test_skill_registry(self, create_user_with_permissions, test_data):
        logger.info("Starting test: %s", test_data.test_name)
    
        if test_data.user_info:
            user_info = create_user_with_permissions(
                workspace=test_data.user_info.workspace,
                verbs=test_data.user_info.verbs,
                resource_types=test_data.user_info.resource_types,
                subresources=test_data.user_info.subresources,
                resource_names=test_data.user_info.resource_names,
            )
            self.test_context.active_user = user_info
            self.test_context.user_client = user_info.client
    
        if test_data.workspace_to_use:
            self.test_context.active_workspace = test_data.workspace_to_use
            mlflow.set_workspace(test_data.workspace_to_use)
    
&gt;       self._execute_test_steps(test_data=test_data)

tests/test_skill_registry.py:672: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/base.py:634: in _execute_test_steps
    self._execute_validation(validate_func=step.validate_func, step_number=i, action_name=action_name)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f187b027a40&gt;
validate_func = &lt;function validate_skill_created at 0x7f187b072f20&gt;
step_number = 1, action_name = 'action_create_skill_shell'

    def _execute_validation(self, validate_func, step_number: int, action_name: str) -&gt; None:
        """Execute a single validation function.
    
        Args:
            validate_func: The validation function to execute.
            step_number: The step number for logging.
            action_name: The action that was executed before this validation.
    
        Raises:
            AssertionError: If validation fails.
        """
        validation_name = validate_func.__name__
        logger.info(f"Step {step_number}: Executing validation '{validation_name}' for action '{action_name}'")
    
        # Generic error handling: if action failed and this is not an "expected failure" validation,
        # show the actual action error instead of letting validation give misleading messages
        if (
            self.test_context.last_error is not None
            and validation_name
            not in {
                "validate_authentication_denied",
                "validate_authentication_denied_or_resource_not_found",
                "validate_mcp_access_endpoint_deleted",
                "validate_skill_artifact_registration_unavailable",
                "validate_skill_deleted",
            }
        ):
    
            error_response = self.test_context.last_error
            user_name = self.test_context.active_user.uname if self.test_context.active_user else "unknown"
            workspace = self.test_context.active_workspace or "unknown"
    
            logger.error(f"Validation '{validation_name}' failed because action '{action_name}' encountered an error for user '{user_name}' in workspace '{workspace}': {error_response.error.code} - {error_response.error.message}")
    
            # Provide detailed error message showing the actual action failure
            error_msg = f"Action '{action_name}' failed for user {user_name} in workspace {workspace}: {error_response.error.code} - {error_response.error.message}"
            if error_response.error.details:
                error_msg += f"\nDetails: {error_response.error.details}"
    
&gt;           raise AssertionError(error_msg)
E           AssertionError: Action 'action_create_skill_shell' failed for user test-user-mpyawih5 in workspace workspace1-x27l4wom: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-mpyawih5, Workspace: workspace1-x27l4wom

tests/base.py:709: AssertionError</failure></testcase><testcase classname="tests.test_skill_registry.TestSkillRegistry" name="test_skill_registry[User cannot retrieve a Skill from another workspace]" time="1.805"><failure message="AssertionError: Action 'action_create_skill_shell' failed for user test-user-y9l5fcds in workspace workspace1-x27l4wom: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-y9l5fcds, Workspace: workspace1-x27l4wom">self = &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f187b027b00&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f187b027b00&gt;&gt;
test_data = Test Data: name=User cannot retrieve a Skill from another workspace user_info=None workspace=workspace1-x27l4wom resource_slot=None

    @pytest.mark.parametrize(
        "test_data",
        test_scenarios,
        ids=lambda scenario: scenario.test_name,
    )
    def test_skill_registry(self, create_user_with_permissions, test_data):
        logger.info("Starting test: %s", test_data.test_name)
    
        if test_data.user_info:
            user_info = create_user_with_permissions(
                workspace=test_data.user_info.workspace,
                verbs=test_data.user_info.verbs,
                resource_types=test_data.user_info.resource_types,
                subresources=test_data.user_info.subresources,
                resource_names=test_data.user_info.resource_names,
            )
            self.test_context.active_user = user_info
            self.test_context.user_client = user_info.client
    
        if test_data.workspace_to_use:
            self.test_context.active_workspace = test_data.workspace_to_use
            mlflow.set_workspace(test_data.workspace_to_use)
    
&gt;       self._execute_test_steps(test_data=test_data)

tests/test_skill_registry.py:672: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/base.py:634: in _execute_test_steps
    self._execute_validation(validate_func=step.validate_func, step_number=i, action_name=action_name)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f187b027b00&gt;
validate_func = &lt;function validate_skill_created at 0x7f187b072f20&gt;
step_number = 1, action_name = 'action_create_skill_shell'

    def _execute_validation(self, validate_func, step_number: int, action_name: str) -&gt; None:
        """Execute a single validation function.
    
        Args:
            validate_func: The validation function to execute.
            step_number: The step number for logging.
            action_name: The action that was executed before this validation.
    
        Raises:
            AssertionError: If validation fails.
        """
        validation_name = validate_func.__name__
        logger.info(f"Step {step_number}: Executing validation '{validation_name}' for action '{action_name}'")
    
        # Generic error handling: if action failed and this is not an "expected failure" validation,
        # show the actual action error instead of letting validation give misleading messages
        if (
            self.test_context.last_error is not None
            and validation_name
            not in {
                "validate_authentication_denied",
                "validate_authentication_denied_or_resource_not_found",
                "validate_mcp_access_endpoint_deleted",
                "validate_skill_artifact_registration_unavailable",
                "validate_skill_deleted",
            }
        ):
    
            error_response = self.test_context.last_error
            user_name = self.test_context.active_user.uname if self.test_context.active_user else "unknown"
            workspace = self.test_context.active_workspace or "unknown"
    
            logger.error(f"Validation '{validation_name}' failed because action '{action_name}' encountered an error for user '{user_name}' in workspace '{workspace}': {error_response.error.code} - {error_response.error.message}")
    
            # Provide detailed error message showing the actual action failure
            error_msg = f"Action '{action_name}' failed for user {user_name} in workspace {workspace}: {error_response.error.code} - {error_response.error.message}"
            if error_response.error.details:
                error_msg += f"\nDetails: {error_response.error.details}"
    
&gt;           raise AssertionError(error_msg)
E           AssertionError: Action 'action_create_skill_shell' failed for user test-user-y9l5fcds in workspace workspace1-x27l4wom: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-y9l5fcds, Workspace: workspace1-x27l4wom

tests/base.py:709: AssertionError</failure></testcase><testcase classname="tests.test_skill_registry.TestSkillRegistry" name="test_skill_registry[Skill search excludes Skills from another workspace]" time="1.805"><failure message="AssertionError: Action 'action_create_skill_shell' failed for user test-user-bh7cuqiv in workspace workspace1-x27l4wom: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-bh7cuqiv, Workspace: workspace1-x27l4wom">self = &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f187b027b90&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f187b027b90&gt;&gt;
test_data = Test Data: name=Skill search excludes Skills from another workspace user_info=None workspace=workspace1-x27l4wom resource_slot=None

    @pytest.mark.parametrize(
        "test_data",
        test_scenarios,
        ids=lambda scenario: scenario.test_name,
    )
    def test_skill_registry(self, create_user_with_permissions, test_data):
        logger.info("Starting test: %s", test_data.test_name)
    
        if test_data.user_info:
            user_info = create_user_with_permissions(
                workspace=test_data.user_info.workspace,
                verbs=test_data.user_info.verbs,
                resource_types=test_data.user_info.resource_types,
                subresources=test_data.user_info.subresources,
                resource_names=test_data.user_info.resource_names,
            )
            self.test_context.active_user = user_info
            self.test_context.user_client = user_info.client
    
        if test_data.workspace_to_use:
            self.test_context.active_workspace = test_data.workspace_to_use
            mlflow.set_workspace(test_data.workspace_to_use)
    
&gt;       self._execute_test_steps(test_data=test_data)

tests/test_skill_registry.py:672: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/base.py:634: in _execute_test_steps
    self._execute_validation(validate_func=step.validate_func, step_number=i, action_name=action_name)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f187b027b90&gt;
validate_func = &lt;function validate_skill_created at 0x7f187b072f20&gt;
step_number = 1, action_name = 'action_create_skill_shell'

    def _execute_validation(self, validate_func, step_number: int, action_name: str) -&gt; None:
        """Execute a single validation function.
    
        Args:
            validate_func: The validation function to execute.
            step_number: The step number for logging.
            action_name: The action that was executed before this validation.
    
        Raises:
            AssertionError: If validation fails.
        """
        validation_name = validate_func.__name__
        logger.info(f"Step {step_number}: Executing validation '{validation_name}' for action '{action_name}'")
    
        # Generic error handling: if action failed and this is not an "expected failure" validation,
        # show the actual action error instead of letting validation give misleading messages
        if (
            self.test_context.last_error is not None
            and validation_name
            not in {
                "validate_authentication_denied",
                "validate_authentication_denied_or_resource_not_found",
                "validate_mcp_access_endpoint_deleted",
                "validate_skill_artifact_registration_unavailable",
                "validate_skill_deleted",
            }
        ):
    
            error_response = self.test_context.last_error
            user_name = self.test_context.active_user.uname if self.test_context.active_user else "unknown"
            workspace = self.test_context.active_workspace or "unknown"
    
            logger.error(f"Validation '{validation_name}' failed because action '{action_name}' encountered an error for user '{user_name}' in workspace '{workspace}': {error_response.error.code} - {error_response.error.message}")
    
            # Provide detailed error message showing the actual action failure
            error_msg = f"Action '{action_name}' failed for user {user_name} in workspace {workspace}: {error_response.error.code} - {error_response.error.message}"
            if error_response.error.details:
                error_msg += f"\nDetails: {error_response.error.details}"
    
&gt;           raise AssertionError(error_msg)
E           AssertionError: Action 'action_create_skill_shell' failed for user test-user-bh7cuqiv in workspace workspace1-x27l4wom: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-bh7cuqiv, Workspace: workspace1-x27l4wom

tests/base.py:709: AssertionError</failure></testcase><testcase classname="tests.test_skill_registry.TestSkillRegistry" name="test_skill_registry[Named GET permission allows the named Skill]" time="1.790"><failure message="AssertionError: Action 'action_create_skill_shell' failed for user test-user-827rgd41 in workspace workspace1-x27l4wom: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-827rgd41, Workspace: workspace1-x27l4wom">self = &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f187b027d40&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f187b027d40&gt;&gt;
test_data = Test Data: name=Named GET permission allows the named Skill user_info=None workspace=workspace1-x27l4wom resource_slot=None

    @pytest.mark.parametrize(
        "test_data",
        test_scenarios,
        ids=lambda scenario: scenario.test_name,
    )
    def test_skill_registry(self, create_user_with_permissions, test_data):
        logger.info("Starting test: %s", test_data.test_name)
    
        if test_data.user_info:
            user_info = create_user_with_permissions(
                workspace=test_data.user_info.workspace,
                verbs=test_data.user_info.verbs,
                resource_types=test_data.user_info.resource_types,
                subresources=test_data.user_info.subresources,
                resource_names=test_data.user_info.resource_names,
            )
            self.test_context.active_user = user_info
            self.test_context.user_client = user_info.client
    
        if test_data.workspace_to_use:
            self.test_context.active_workspace = test_data.workspace_to_use
            mlflow.set_workspace(test_data.workspace_to_use)
    
&gt;       self._execute_test_steps(test_data=test_data)

tests/test_skill_registry.py:672: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/base.py:634: in _execute_test_steps
    self._execute_validation(validate_func=step.validate_func, step_number=i, action_name=action_name)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f187b027d40&gt;
validate_func = &lt;function validate_skill_created at 0x7f187b072f20&gt;
step_number = 2, action_name = 'action_create_skill_shell'

    def _execute_validation(self, validate_func, step_number: int, action_name: str) -&gt; None:
        """Execute a single validation function.
    
        Args:
            validate_func: The validation function to execute.
            step_number: The step number for logging.
            action_name: The action that was executed before this validation.
    
        Raises:
            AssertionError: If validation fails.
        """
        validation_name = validate_func.__name__
        logger.info(f"Step {step_number}: Executing validation '{validation_name}' for action '{action_name}'")
    
        # Generic error handling: if action failed and this is not an "expected failure" validation,
        # show the actual action error instead of letting validation give misleading messages
        if (
            self.test_context.last_error is not None
            and validation_name
            not in {
                "validate_authentication_denied",
                "validate_authentication_denied_or_resource_not_found",
                "validate_mcp_access_endpoint_deleted",
                "validate_skill_artifact_registration_unavailable",
                "validate_skill_deleted",
            }
        ):
    
            error_response = self.test_context.last_error
            user_name = self.test_context.active_user.uname if self.test_context.active_user else "unknown"
            workspace = self.test_context.active_workspace or "unknown"
    
            logger.error(f"Validation '{validation_name}' failed because action '{action_name}' encountered an error for user '{user_name}' in workspace '{workspace}': {error_response.error.code} - {error_response.error.message}")
    
            # Provide detailed error message showing the actual action failure
            error_msg = f"Action '{action_name}' failed for user {user_name} in workspace {workspace}: {error_response.error.code} - {error_response.error.message}"
            if error_response.error.details:
                error_msg += f"\nDetails: {error_response.error.details}"
    
&gt;           raise AssertionError(error_msg)
E           AssertionError: Action 'action_create_skill_shell' failed for user test-user-827rgd41 in workspace workspace1-x27l4wom: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-827rgd41, Workspace: workspace1-x27l4wom

tests/base.py:709: AssertionError</failure></testcase><testcase classname="tests.test_skill_registry.TestSkillRegistry" name="test_skill_registry[Named GET permission denies a different Skill]" time="1.780"><failure message="AssertionError: Action 'action_create_skill_shell' failed for user test-user-uue3wkwk in workspace workspace1-x27l4wom: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-uue3wkwk, Workspace: workspace1-x27l4wom">self = &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f187b027e00&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f187b027e00&gt;&gt;
test_data = Test Data: name=Named GET permission denies a different Skill user_info=None workspace=workspace1-x27l4wom resource_slot=None

    @pytest.mark.parametrize(
        "test_data",
        test_scenarios,
        ids=lambda scenario: scenario.test_name,
    )
    def test_skill_registry(self, create_user_with_permissions, test_data):
        logger.info("Starting test: %s", test_data.test_name)
    
        if test_data.user_info:
            user_info = create_user_with_permissions(
                workspace=test_data.user_info.workspace,
                verbs=test_data.user_info.verbs,
                resource_types=test_data.user_info.resource_types,
                subresources=test_data.user_info.subresources,
                resource_names=test_data.user_info.resource_names,
            )
            self.test_context.active_user = user_info
            self.test_context.user_client = user_info.client
    
        if test_data.workspace_to_use:
            self.test_context.active_workspace = test_data.workspace_to_use
            mlflow.set_workspace(test_data.workspace_to_use)
    
&gt;       self._execute_test_steps(test_data=test_data)

tests/test_skill_registry.py:672: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/base.py:634: in _execute_test_steps
    self._execute_validation(validate_func=step.validate_func, step_number=i, action_name=action_name)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f187b027e00&gt;
validate_func = &lt;function validate_skill_created at 0x7f187b072f20&gt;
step_number = 2, action_name = 'action_create_skill_shell'

    def _execute_validation(self, validate_func, step_number: int, action_name: str) -&gt; None:
        """Execute a single validation function.
    
        Args:
            validate_func: The validation function to execute.
            step_number: The step number for logging.
            action_name: The action that was executed before this validation.
    
        Raises:
            AssertionError: If validation fails.
        """
        validation_name = validate_func.__name__
        logger.info(f"Step {step_number}: Executing validation '{validation_name}' for action '{action_name}'")
    
        # Generic error handling: if action failed and this is not an "expected failure" validation,
        # show the actual action error instead of letting validation give misleading messages
        if (
            self.test_context.last_error is not None
            and validation_name
            not in {
                "validate_authentication_denied",
                "validate_authentication_denied_or_resource_not_found",
                "validate_mcp_access_endpoint_deleted",
                "validate_skill_artifact_registration_unavailable",
                "validate_skill_deleted",
            }
        ):
    
            error_response = self.test_context.last_error
            user_name = self.test_context.active_user.uname if self.test_context.active_user else "unknown"
            workspace = self.test_context.active_workspace or "unknown"
    
            logger.error(f"Validation '{validation_name}' failed because action '{action_name}' encountered an error for user '{user_name}' in workspace '{workspace}': {error_response.error.code} - {error_response.error.message}")
    
            # Provide detailed error message showing the actual action failure
            error_msg = f"Action '{action_name}' failed for user {user_name} in workspace {workspace}: {error_response.error.code} - {error_response.error.message}"
            if error_response.error.details:
                error_msg += f"\nDetails: {error_response.error.details}"
    
&gt;           raise AssertionError(error_msg)
E           AssertionError: Action 'action_create_skill_shell' failed for user test-user-uue3wkwk in workspace workspace1-x27l4wom: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-uue3wkwk, Workspace: workspace1-x27l4wom

tests/base.py:709: AssertionError</failure></testcase><testcase classname="tests.test_skill_registry.TestSkillRegistry" name="test_skill_registry[Named UPDATE permission denies a different Skill]" time="1.800"><failure message="AssertionError: Action 'action_create_skill_shell' failed for user test-user-dsxpy4w7 in workspace workspace1-x27l4wom: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-dsxpy4w7, Workspace: workspace1-x27l4wom">self = &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f187b027ec0&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f187b027ec0&gt;&gt;
test_data = Test Data: name=Named UPDATE permission denies a different Skill user_info=None workspace=workspace1-x27l4wom resource_slot=None

    @pytest.mark.parametrize(
        "test_data",
        test_scenarios,
        ids=lambda scenario: scenario.test_name,
    )
    def test_skill_registry(self, create_user_with_permissions, test_data):
        logger.info("Starting test: %s", test_data.test_name)
    
        if test_data.user_info:
            user_info = create_user_with_permissions(
                workspace=test_data.user_info.workspace,
                verbs=test_data.user_info.verbs,
                resource_types=test_data.user_info.resource_types,
                subresources=test_data.user_info.subresources,
                resource_names=test_data.user_info.resource_names,
            )
            self.test_context.active_user = user_info
            self.test_context.user_client = user_info.client
    
        if test_data.workspace_to_use:
            self.test_context.active_workspace = test_data.workspace_to_use
            mlflow.set_workspace(test_data.workspace_to_use)
    
&gt;       self._execute_test_steps(test_data=test_data)

tests/test_skill_registry.py:672: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/base.py:634: in _execute_test_steps
    self._execute_validation(validate_func=step.validate_func, step_number=i, action_name=action_name)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f187b027ec0&gt;
validate_func = &lt;function validate_skill_created at 0x7f187b072f20&gt;
step_number = 2, action_name = 'action_create_skill_shell'

    def _execute_validation(self, validate_func, step_number: int, action_name: str) -&gt; None:
        """Execute a single validation function.
    
        Args:
            validate_func: The validation function to execute.
            step_number: The step number for logging.
            action_name: The action that was executed before this validation.
    
        Raises:
            AssertionError: If validation fails.
        """
        validation_name = validate_func.__name__
        logger.info(f"Step {step_number}: Executing validation '{validation_name}' for action '{action_name}'")
    
        # Generic error handling: if action failed and this is not an "expected failure" validation,
        # show the actual action error instead of letting validation give misleading messages
        if (
            self.test_context.last_error is not None
            and validation_name
            not in {
                "validate_authentication_denied",
                "validate_authentication_denied_or_resource_not_found",
                "validate_mcp_access_endpoint_deleted",
                "validate_skill_artifact_registration_unavailable",
                "validate_skill_deleted",
            }
        ):
    
            error_response = self.test_context.last_error
            user_name = self.test_context.active_user.uname if self.test_context.active_user else "unknown"
            workspace = self.test_context.active_workspace or "unknown"
    
            logger.error(f"Validation '{validation_name}' failed because action '{action_name}' encountered an error for user '{user_name}' in workspace '{workspace}': {error_response.error.code} - {error_response.error.message}")
    
            # Provide detailed error message showing the actual action failure
            error_msg = f"Action '{action_name}' failed for user {user_name} in workspace {workspace}: {error_response.error.code} - {error_response.error.message}"
            if error_response.error.details:
                error_msg += f"\nDetails: {error_response.error.details}"
    
&gt;           raise AssertionError(error_msg)
E           AssertionError: Action 'action_create_skill_shell' failed for user test-user-dsxpy4w7 in workspace workspace1-x27l4wom: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-dsxpy4w7, Workspace: workspace1-x27l4wom

tests/base.py:709: AssertionError</failure></testcase><testcase classname="tests.test_skill_registry.TestSkillRegistry" name="test_skill_registry[Named DELETE permission denies a different Skill]" time="1.799"><failure message="AssertionError: Action 'action_create_skill_shell' failed for user test-user-yaos7zpr in workspace workspace1-x27l4wom: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-yaos7zpr, Workspace: workspace1-x27l4wom">self = &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f187b027f80&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f187b027f80&gt;&gt;
test_data = Test Data: name=Named DELETE permission denies a different Skill user_info=None workspace=workspace1-x27l4wom resource_slot=None

    @pytest.mark.parametrize(
        "test_data",
        test_scenarios,
        ids=lambda scenario: scenario.test_name,
    )
    def test_skill_registry(self, create_user_with_permissions, test_data):
        logger.info("Starting test: %s", test_data.test_name)
    
        if test_data.user_info:
            user_info = create_user_with_permissions(
                workspace=test_data.user_info.workspace,
                verbs=test_data.user_info.verbs,
                resource_types=test_data.user_info.resource_types,
                subresources=test_data.user_info.subresources,
                resource_names=test_data.user_info.resource_names,
            )
            self.test_context.active_user = user_info
            self.test_context.user_client = user_info.client
    
        if test_data.workspace_to_use:
            self.test_context.active_workspace = test_data.workspace_to_use
            mlflow.set_workspace(test_data.workspace_to_use)
    
&gt;       self._execute_test_steps(test_data=test_data)

tests/test_skill_registry.py:672: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/base.py:634: in _execute_test_steps
    self._execute_validation(validate_func=step.validate_func, step_number=i, action_name=action_name)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f187b027f80&gt;
validate_func = &lt;function validate_skill_created at 0x7f187b072f20&gt;
step_number = 2, action_name = 'action_create_skill_shell'

    def _execute_validation(self, validate_func, step_number: int, action_name: str) -&gt; None:
        """Execute a single validation function.
    
        Args:
            validate_func: The validation function to execute.
            step_number: The step number for logging.
            action_name: The action that was executed before this validation.
    
        Raises:
            AssertionError: If validation fails.
        """
        validation_name = validate_func.__name__
        logger.info(f"Step {step_number}: Executing validation '{validation_name}' for action '{action_name}'")
    
        # Generic error handling: if action failed and this is not an "expected failure" validation,
        # show the actual action error instead of letting validation give misleading messages
        if (
            self.test_context.last_error is not None
            and validation_name
            not in {
                "validate_authentication_denied",
                "validate_authentication_denied_or_resource_not_found",
                "validate_mcp_access_endpoint_deleted",
                "validate_skill_artifact_registration_unavailable",
                "validate_skill_deleted",
            }
        ):
    
            error_response = self.test_context.last_error
            user_name = self.test_context.active_user.uname if self.test_context.active_user else "unknown"
            workspace = self.test_context.active_workspace or "unknown"
    
            logger.error(f"Validation '{validation_name}' failed because action '{action_name}' encountered an error for user '{user_name}' in workspace '{workspace}': {error_response.error.code} - {error_response.error.message}")
    
            # Provide detailed error message showing the actual action failure
            error_msg = f"Action '{action_name}' failed for user {user_name} in workspace {workspace}: {error_response.error.code} - {error_response.error.message}"
            if error_response.error.details:
                error_msg += f"\nDetails: {error_response.error.details}"
    
&gt;           raise AssertionError(error_msg)
E           AssertionError: Action 'action_create_skill_shell' failed for user test-user-yaos7zpr in workspace workspace1-x27l4wom: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-yaos7zpr, Workspace: workspace1-x27l4wom

tests/base.py:709: AssertionError</failure></testcase><testcase classname="tests.test_skill_registry.TestSkillRegistry" name="test_skill_registry[Named UPDATE permission allows the matching Skill]" time="1.793"><failure message="AssertionError: Action 'action_create_skill_shell' failed for user test-user-j74cfxox in workspace workspace1-x27l4wom: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-j74cfxox, Workspace: workspace1-x27l4wom">self = &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f187b02e300&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f187b02e300&gt;&gt;
test_data = Test Data: name=Named UPDATE permission allows the matching Skill user_info=None workspace=workspace1-x27l4wom resource_slot=None

    @pytest.mark.parametrize(
        "test_data",
        test_scenarios,
        ids=lambda scenario: scenario.test_name,
    )
    def test_skill_registry(self, create_user_with_permissions, test_data):
        logger.info("Starting test: %s", test_data.test_name)
    
        if test_data.user_info:
            user_info = create_user_with_permissions(
                workspace=test_data.user_info.workspace,
                verbs=test_data.user_info.verbs,
                resource_types=test_data.user_info.resource_types,
                subresources=test_data.user_info.subresources,
                resource_names=test_data.user_info.resource_names,
            )
            self.test_context.active_user = user_info
            self.test_context.user_client = user_info.client
    
        if test_data.workspace_to_use:
            self.test_context.active_workspace = test_data.workspace_to_use
            mlflow.set_workspace(test_data.workspace_to_use)
    
&gt;       self._execute_test_steps(test_data=test_data)

tests/test_skill_registry.py:672: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/base.py:634: in _execute_test_steps
    self._execute_validation(validate_func=step.validate_func, step_number=i, action_name=action_name)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f187b02e300&gt;
validate_func = &lt;function validate_skill_created at 0x7f187b072f20&gt;
step_number = 2, action_name = 'action_create_skill_shell'

    def _execute_validation(self, validate_func, step_number: int, action_name: str) -&gt; None:
        """Execute a single validation function.
    
        Args:
            validate_func: The validation function to execute.
            step_number: The step number for logging.
            action_name: The action that was executed before this validation.
    
        Raises:
            AssertionError: If validation fails.
        """
        validation_name = validate_func.__name__
        logger.info(f"Step {step_number}: Executing validation '{validation_name}' for action '{action_name}'")
    
        # Generic error handling: if action failed and this is not an "expected failure" validation,
        # show the actual action error instead of letting validation give misleading messages
        if (
            self.test_context.last_error is not None
            and validation_name
            not in {
                "validate_authentication_denied",
                "validate_authentication_denied_or_resource_not_found",
                "validate_mcp_access_endpoint_deleted",
                "validate_skill_artifact_registration_unavailable",
                "validate_skill_deleted",
            }
        ):
    
            error_response = self.test_context.last_error
            user_name = self.test_context.active_user.uname if self.test_context.active_user else "unknown"
            workspace = self.test_context.active_workspace or "unknown"
    
            logger.error(f"Validation '{validation_name}' failed because action '{action_name}' encountered an error for user '{user_name}' in workspace '{workspace}': {error_response.error.code} - {error_response.error.message}")
    
            # Provide detailed error message showing the actual action failure
            error_msg = f"Action '{action_name}' failed for user {user_name} in workspace {workspace}: {error_response.error.code} - {error_response.error.message}"
            if error_response.error.details:
                error_msg += f"\nDetails: {error_response.error.details}"
    
&gt;           raise AssertionError(error_msg)
E           AssertionError: Action 'action_create_skill_shell' failed for user test-user-j74cfxox in workspace workspace1-x27l4wom: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-j74cfxox, Workspace: workspace1-x27l4wom

tests/base.py:709: AssertionError</failure></testcase><testcase classname="tests.test_skill_registry.TestSkillRegistry" name="test_skill_registry[Named DELETE permission allows the matching Skill]" time="1.783"><failure message="AssertionError: Action 'action_create_skill_shell' failed for user test-user-t2gfkpqv in workspace workspace1-x27l4wom: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-t2gfkpqv, Workspace: workspace1-x27l4wom">self = &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f187b02c110&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f187b02c110&gt;&gt;
test_data = Test Data: name=Named DELETE permission allows the matching Skill user_info=None workspace=workspace1-x27l4wom resource_slot=None

    @pytest.mark.parametrize(
        "test_data",
        test_scenarios,
        ids=lambda scenario: scenario.test_name,
    )
    def test_skill_registry(self, create_user_with_permissions, test_data):
        logger.info("Starting test: %s", test_data.test_name)
    
        if test_data.user_info:
            user_info = create_user_with_permissions(
                workspace=test_data.user_info.workspace,
                verbs=test_data.user_info.verbs,
                resource_types=test_data.user_info.resource_types,
                subresources=test_data.user_info.subresources,
                resource_names=test_data.user_info.resource_names,
            )
            self.test_context.active_user = user_info
            self.test_context.user_client = user_info.client
    
        if test_data.workspace_to_use:
            self.test_context.active_workspace = test_data.workspace_to_use
            mlflow.set_workspace(test_data.workspace_to_use)
    
&gt;       self._execute_test_steps(test_data=test_data)

tests/test_skill_registry.py:672: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/base.py:634: in _execute_test_steps
    self._execute_validation(validate_func=step.validate_func, step_number=i, action_name=action_name)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f187b02c110&gt;
validate_func = &lt;function validate_skill_created at 0x7f187b072f20&gt;
step_number = 2, action_name = 'action_create_skill_shell'

    def _execute_validation(self, validate_func, step_number: int, action_name: str) -&gt; None:
        """Execute a single validation function.
    
        Args:
            validate_func: The validation function to execute.
            step_number: The step number for logging.
            action_name: The action that was executed before this validation.
    
        Raises:
            AssertionError: If validation fails.
        """
        validation_name = validate_func.__name__
        logger.info(f"Step {step_number}: Executing validation '{validation_name}' for action '{action_name}'")
    
        # Generic error handling: if action failed and this is not an "expected failure" validation,
        # show the actual action error instead of letting validation give misleading messages
        if (
            self.test_context.last_error is not None
            and validation_name
            not in {
                "validate_authentication_denied",
                "validate_authentication_denied_or_resource_not_found",
                "validate_mcp_access_endpoint_deleted",
                "validate_skill_artifact_registration_unavailable",
                "validate_skill_deleted",
            }
        ):
    
            error_response = self.test_context.last_error
            user_name = self.test_context.active_user.uname if self.test_context.active_user else "unknown"
            workspace = self.test_context.active_workspace or "unknown"
    
            logger.error(f"Validation '{validation_name}' failed because action '{action_name}' encountered an error for user '{user_name}' in workspace '{workspace}': {error_response.error.code} - {error_response.error.message}")
    
            # Provide detailed error message showing the actual action failure
            error_msg = f"Action '{action_name}' failed for user {user_name} in workspace {workspace}: {error_response.error.code} - {error_response.error.message}"
            if error_response.error.details:
                error_msg += f"\nDetails: {error_response.error.details}"
    
&gt;           raise AssertionError(error_msg)
E           AssertionError: Action 'action_create_skill_shell' failed for user test-user-t2gfkpqv in workspace workspace1-x27l4wom: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-t2gfkpqv, Workspace: workspace1-x27l4wom

tests/base.py:709: AssertionError</failure></testcase><testcase classname="tests.test_skill_registry.TestSkillRegistry" name="test_skill_registry[Named GET permission does not grant unrestricted Skill search]" time="1.781"><failure message="AssertionError: Action 'action_create_skill_shell' failed for user test-user-tytl15o5 in workspace workspace1-x27l4wom: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-tytl15o5, Workspace: workspace1-x27l4wom">self = &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f187b02c170&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f187b02c170&gt;&gt;
test_data = Test Data: name=Named GET permission does not grant unrestricted Skill search user_info=None workspace=workspace1-x27l4wom resource_slot=None

    @pytest.mark.parametrize(
        "test_data",
        test_scenarios,
        ids=lambda scenario: scenario.test_name,
    )
    def test_skill_registry(self, create_user_with_permissions, test_data):
        logger.info("Starting test: %s", test_data.test_name)
    
        if test_data.user_info:
            user_info = create_user_with_permissions(
                workspace=test_data.user_info.workspace,
                verbs=test_data.user_info.verbs,
                resource_types=test_data.user_info.resource_types,
                subresources=test_data.user_info.subresources,
                resource_names=test_data.user_info.resource_names,
            )
            self.test_context.active_user = user_info
            self.test_context.user_client = user_info.client
    
        if test_data.workspace_to_use:
            self.test_context.active_workspace = test_data.workspace_to_use
            mlflow.set_workspace(test_data.workspace_to_use)
    
&gt;       self._execute_test_steps(test_data=test_data)

tests/test_skill_registry.py:672: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/base.py:634: in _execute_test_steps
    self._execute_validation(validate_func=step.validate_func, step_number=i, action_name=action_name)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f187b02c170&gt;
validate_func = &lt;function validate_skill_created at 0x7f187b072f20&gt;
step_number = 2, action_name = 'action_create_skill_shell'

    def _execute_validation(self, validate_func, step_number: int, action_name: str) -&gt; None:
        """Execute a single validation function.
    
        Args:
            validate_func: The validation function to execute.
            step_number: The step number for logging.
            action_name: The action that was executed before this validation.
    
        Raises:
            AssertionError: If validation fails.
        """
        validation_name = validate_func.__name__
        logger.info(f"Step {step_number}: Executing validation '{validation_name}' for action '{action_name}'")
    
        # Generic error handling: if action failed and this is not an "expected failure" validation,
        # show the actual action error instead of letting validation give misleading messages
        if (
            self.test_context.last_error is not None
            and validation_name
            not in {
                "validate_authentication_denied",
                "validate_authentication_denied_or_resource_not_found",
                "validate_mcp_access_endpoint_deleted",
                "validate_skill_artifact_registration_unavailable",
                "validate_skill_deleted",
            }
        ):
    
            error_response = self.test_context.last_error
            user_name = self.test_context.active_user.uname if self.test_context.active_user else "unknown"
            workspace = self.test_context.active_workspace or "unknown"
    
            logger.error(f"Validation '{validation_name}' failed because action '{action_name}' encountered an error for user '{user_name}' in workspace '{workspace}': {error_response.error.code} - {error_response.error.message}")
    
            # Provide detailed error message showing the actual action failure
            error_msg = f"Action '{action_name}' failed for user {user_name} in workspace {workspace}: {error_response.error.code} - {error_response.error.message}"
            if error_response.error.details:
                error_msg += f"\nDetails: {error_response.error.details}"
    
&gt;           raise AssertionError(error_msg)
E           AssertionError: Action 'action_create_skill_shell' failed for user test-user-tytl15o5 in workspace workspace1-x27l4wom: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-tytl15o5, Workspace: workspace1-x27l4wom

tests/base.py:709: AssertionError</failure></testcase><testcase classname="tests.test_skill_registry.TestSkillRegistry" name="test_skill_registry[User can complete the Skill lifecycle]" time="1.802"><failure message="AssertionError: Action 'action_create_skill_shell' failed for user test-user-us0qn0cm in workspace workspace1-x27l4wom: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-us0qn0cm, Workspace: workspace1-x27l4wom">self = &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f187b026d50&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f187b026d50&gt;&gt;
test_data = Test Data: name=User can complete the Skill lifecycle user_info=UserInfo(workspace='workspace1-x27l4wom', resource_typ...ILLS: 'skills'&gt;], verbs=['create', 'get', 'list', 'update', 'delete']) workspace=workspace1-x27l4wom resource_slot=None

    @pytest.mark.parametrize(
        "test_data",
        test_scenarios,
        ids=lambda scenario: scenario.test_name,
    )
    def test_skill_registry(self, create_user_with_permissions, test_data):
        logger.info("Starting test: %s", test_data.test_name)
    
        if test_data.user_info:
            user_info = create_user_with_permissions(
                workspace=test_data.user_info.workspace,
                verbs=test_data.user_info.verbs,
                resource_types=test_data.user_info.resource_types,
                subresources=test_data.user_info.subresources,
                resource_names=test_data.user_info.resource_names,
            )
            self.test_context.active_user = user_info
            self.test_context.user_client = user_info.client
    
        if test_data.workspace_to_use:
            self.test_context.active_workspace = test_data.workspace_to_use
            mlflow.set_workspace(test_data.workspace_to_use)
    
&gt;       self._execute_test_steps(test_data=test_data)

tests/test_skill_registry.py:672: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/base.py:634: in _execute_test_steps
    self._execute_validation(validate_func=step.validate_func, step_number=i, action_name=action_name)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f187b026d50&gt;
validate_func = &lt;function validate_skill_created at 0x7f187b072f20&gt;
step_number = 1, action_name = 'action_create_skill_shell'

    def _execute_validation(self, validate_func, step_number: int, action_name: str) -&gt; None:
        """Execute a single validation function.
    
        Args:
            validate_func: The validation function to execute.
            step_number: The step number for logging.
            action_name: The action that was executed before this validation.
    
        Raises:
            AssertionError: If validation fails.
        """
        validation_name = validate_func.__name__
        logger.info(f"Step {step_number}: Executing validation '{validation_name}' for action '{action_name}'")
    
        # Generic error handling: if action failed and this is not an "expected failure" validation,
        # show the actual action error instead of letting validation give misleading messages
        if (
            self.test_context.last_error is not None
            and validation_name
            not in {
                "validate_authentication_denied",
                "validate_authentication_denied_or_resource_not_found",
                "validate_mcp_access_endpoint_deleted",
                "validate_skill_artifact_registration_unavailable",
                "validate_skill_deleted",
            }
        ):
    
            error_response = self.test_context.last_error
            user_name = self.test_context.active_user.uname if self.test_context.active_user else "unknown"
            workspace = self.test_context.active_workspace or "unknown"
    
            logger.error(f"Validation '{validation_name}' failed because action '{action_name}' encountered an error for user '{user_name}' in workspace '{workspace}': {error_response.error.code} - {error_response.error.message}")
    
            # Provide detailed error message showing the actual action failure
            error_msg = f"Action '{action_name}' failed for user {user_name} in workspace {workspace}: {error_response.error.code} - {error_response.error.message}"
            if error_response.error.details:
                error_msg += f"\nDetails: {error_response.error.details}"
    
&gt;           raise AssertionError(error_msg)
E           AssertionError: Action 'action_create_skill_shell' failed for user test-user-us0qn0cm in workspace workspace1-x27l4wom: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-us0qn0cm, Workspace: workspace1-x27l4wom

tests/base.py:709: AssertionError</failure></testcase><testcase classname="tests.test_skill_registry.TestSkillRegistry" name="test_skill_registry[User with GET can read Skill artifact content]" time="1.785"><failure message="AssertionError: Action 'action_register_local_skill' failed for user test-user-vhmff2ek in workspace workspace1-x27l4wom: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-vhmff2ek, Workspace: workspace1-x27l4wom">self = &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f187b026a80&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f187b026a80&gt;&gt;
test_data = Test Data: name=User with GET can read Skill artifact content user_info=None workspace=workspace1-x27l4wom resource_slot=None

    @pytest.mark.parametrize(
        "test_data",
        test_scenarios,
        ids=lambda scenario: scenario.test_name,
    )
    def test_skill_registry(self, create_user_with_permissions, test_data):
        logger.info("Starting test: %s", test_data.test_name)
    
        if test_data.user_info:
            user_info = create_user_with_permissions(
                workspace=test_data.user_info.workspace,
                verbs=test_data.user_info.verbs,
                resource_types=test_data.user_info.resource_types,
                subresources=test_data.user_info.subresources,
                resource_names=test_data.user_info.resource_names,
            )
            self.test_context.active_user = user_info
            self.test_context.user_client = user_info.client
    
        if test_data.workspace_to_use:
            self.test_context.active_workspace = test_data.workspace_to_use
            mlflow.set_workspace(test_data.workspace_to_use)
    
&gt;       self._execute_test_steps(test_data=test_data)

tests/test_skill_registry.py:672: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/base.py:634: in _execute_test_steps
    self._execute_validation(validate_func=step.validate_func, step_number=i, action_name=action_name)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f187b026a80&gt;
validate_func = &lt;function validate_skill_artifact_registered at 0x7f187b073380&gt;
step_number = 1, action_name = 'action_register_local_skill'

    def _execute_validation(self, validate_func, step_number: int, action_name: str) -&gt; None:
        """Execute a single validation function.
    
        Args:
            validate_func: The validation function to execute.
            step_number: The step number for logging.
            action_name: The action that was executed before this validation.
    
        Raises:
            AssertionError: If validation fails.
        """
        validation_name = validate_func.__name__
        logger.info(f"Step {step_number}: Executing validation '{validation_name}' for action '{action_name}'")
    
        # Generic error handling: if action failed and this is not an "expected failure" validation,
        # show the actual action error instead of letting validation give misleading messages
        if (
            self.test_context.last_error is not None
            and validation_name
            not in {
                "validate_authentication_denied",
                "validate_authentication_denied_or_resource_not_found",
                "validate_mcp_access_endpoint_deleted",
                "validate_skill_artifact_registration_unavailable",
                "validate_skill_deleted",
            }
        ):
    
            error_response = self.test_context.last_error
            user_name = self.test_context.active_user.uname if self.test_context.active_user else "unknown"
            workspace = self.test_context.active_workspace or "unknown"
    
            logger.error(f"Validation '{validation_name}' failed because action '{action_name}' encountered an error for user '{user_name}' in workspace '{workspace}': {error_response.error.code} - {error_response.error.message}")
    
            # Provide detailed error message showing the actual action failure
            error_msg = f"Action '{action_name}' failed for user {user_name} in workspace {workspace}: {error_response.error.code} - {error_response.error.message}"
            if error_response.error.details:
                error_msg += f"\nDetails: {error_response.error.details}"
    
&gt;           raise AssertionError(error_msg)
E           AssertionError: Action 'action_register_local_skill' failed for user test-user-vhmff2ek in workspace workspace1-x27l4wom: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-vhmff2ek, Workspace: workspace1-x27l4wom

tests/base.py:709: AssertionError</failure></testcase><testcase classname="tests.test_skill_registry.TestSkillRegistry" name="test_skill_registry[User without GET cannot read Skill artifact content]" time="1.792"><failure message="AssertionError: Action 'action_register_local_skill' failed for user test-user-h9uad4j7 in workspace workspace1-x27l4wom: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-h9uad4j7, Workspace: workspace1-x27l4wom">self = &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f187b026960&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f187b026960&gt;&gt;
test_data = Test Data: name=User without GET cannot read Skill artifact content user_info=None workspace=workspace1-x27l4wom resource_slot=None

    @pytest.mark.parametrize(
        "test_data",
        test_scenarios,
        ids=lambda scenario: scenario.test_name,
    )
    def test_skill_registry(self, create_user_with_permissions, test_data):
        logger.info("Starting test: %s", test_data.test_name)
    
        if test_data.user_info:
            user_info = create_user_with_permissions(
                workspace=test_data.user_info.workspace,
                verbs=test_data.user_info.verbs,
                resource_types=test_data.user_info.resource_types,
                subresources=test_data.user_info.subresources,
                resource_names=test_data.user_info.resource_names,
            )
            self.test_context.active_user = user_info
            self.test_context.user_client = user_info.client
    
        if test_data.workspace_to_use:
            self.test_context.active_workspace = test_data.workspace_to_use
            mlflow.set_workspace(test_data.workspace_to_use)
    
&gt;       self._execute_test_steps(test_data=test_data)

tests/test_skill_registry.py:672: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/base.py:634: in _execute_test_steps
    self._execute_validation(validate_func=step.validate_func, step_number=i, action_name=action_name)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f187b026960&gt;
validate_func = &lt;function validate_skill_artifact_registered at 0x7f187b073380&gt;
step_number = 1, action_name = 'action_register_local_skill'

    def _execute_validation(self, validate_func, step_number: int, action_name: str) -&gt; None:
        """Execute a single validation function.
    
        Args:
            validate_func: The validation function to execute.
            step_number: The step number for logging.
            action_name: The action that was executed before this validation.
    
        Raises:
            AssertionError: If validation fails.
        """
        validation_name = validate_func.__name__
        logger.info(f"Step {step_number}: Executing validation '{validation_name}' for action '{action_name}'")
    
        # Generic error handling: if action failed and this is not an "expected failure" validation,
        # show the actual action error instead of letting validation give misleading messages
        if (
            self.test_context.last_error is not None
            and validation_name
            not in {
                "validate_authentication_denied",
                "validate_authentication_denied_or_resource_not_found",
                "validate_mcp_access_endpoint_deleted",
                "validate_skill_artifact_registration_unavailable",
                "validate_skill_deleted",
            }
        ):
    
            error_response = self.test_context.last_error
            user_name = self.test_context.active_user.uname if self.test_context.active_user else "unknown"
            workspace = self.test_context.active_workspace or "unknown"
    
            logger.error(f"Validation '{validation_name}' failed because action '{action_name}' encountered an error for user '{user_name}' in workspace '{workspace}': {error_response.error.code} - {error_response.error.message}")
    
            # Provide detailed error message showing the actual action failure
            error_msg = f"Action '{action_name}' failed for user {user_name} in workspace {workspace}: {error_response.error.code} - {error_response.error.message}"
            if error_response.error.details:
                error_msg += f"\nDetails: {error_response.error.details}"
    
&gt;           raise AssertionError(error_msg)
E           AssertionError: Action 'action_register_local_skill' failed for user test-user-h9uad4j7 in workspace workspace1-x27l4wom: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-h9uad4j7, Workspace: workspace1-x27l4wom

tests/base.py:709: AssertionError</failure></testcase><testcase classname="tests.test_skill_registry.TestSkillRegistry" name="test_skill_registry[User with CREATE cannot register a local Skill without UPDATE]" time="1.794"><failure message="AssertionError: Action failed with unexpected error for user test-user-zo6qcw9k: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}. Expected permission/authentication error.">self = &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f187b02c5f0&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f187b02c5f0&gt;&gt;
test_data = Test Data: name=User with CREATE cannot register a local Skill without UPDATE user_info=None workspace=workspace1-x27l4wom resource_slot=None

    @pytest.mark.parametrize(
        "test_data",
        test_scenarios,
        ids=lambda scenario: scenario.test_name,
    )
    def test_skill_registry(self, create_user_with_permissions, test_data):
        logger.info("Starting test: %s", test_data.test_name)
    
        if test_data.user_info:
            user_info = create_user_with_permissions(
                workspace=test_data.user_info.workspace,
                verbs=test_data.user_info.verbs,
                resource_types=test_data.user_info.resource_types,
                subresources=test_data.user_info.subresources,
                resource_names=test_data.user_info.resource_names,
            )
            self.test_context.active_user = user_info
            self.test_context.user_client = user_info.client
    
        if test_data.workspace_to_use:
            self.test_context.active_workspace = test_data.workspace_to_use
            mlflow.set_workspace(test_data.workspace_to_use)
    
&gt;       self._execute_test_steps(test_data=test_data)

tests/test_skill_registry.py:672: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/base.py:634: in _execute_test_steps
    self._execute_validation(validate_func=step.validate_func, step_number=i, action_name=action_name)
tests/base.py:712: in _execute_validation
    validate_func(self.test_context)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

test_context = TestContext(workspaces=['workspace1-x27l4wom', 'workspace2-x27l4wom'], active_workspace='workspace1-x27l4wom', active_..._observed_state={}, k8_manager=None, discovered_workspaces=set(), unlabeled_namespace=None, namespaces_to_delete=set())

    def validate_authentication_denied(test_context: TestContext) -&gt; None:
        """Validate that an action failed due to authentication denial.
    
        Checks that an authentication or authorization error occurred during the action.
    
        Args:
            test_context: Test context containing structured error information.
    
        Raises:
            AssertionError: If no error occurred or error is not permission-related.
        """
        user_name = test_context.active_user.uname
        workspace = test_context.active_workspace
        logger.info(f"Validating that action failed as expected for user '{user_name}' in workspace '{workspace}'")
    
        # Validate that an error occurred
        if test_context.last_error is None:
            logger.error(f"Validation failed: Action should have failed for unauthorized user '{user_name}', but succeeded")
            raise AssertionError(f"Action should have failed for unauthorized user '{user_name}', but succeeded")
    
        error_response: ErrorResponse = test_context.last_error
    
        # Check if it's a permission or authentication error
        if not error_response.is_permission_error():
            logger.error(f"Validation failed: Expected permission/authentication error, got: {error_response.error.code} - {error_response.error.message}")
&gt;           raise AssertionError(
                f"Action failed with unexpected error for user {user_name}: {error_response.error.code} - {error_response.error.message}. "
                f"Expected permission/authentication error."
            )
E           AssertionError: Action failed with unexpected error for user test-user-zo6qcw9k: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}. Expected permission/authentication error.

tests/validations/validation_utils.py:38: AssertionError</failure></testcase><testcase classname="tests.test_trace_archival.TestTraceArchival" name="test_trace_archival_job_archives_multiple_traces[Job created from the trace archival CronJob archives traces and keeps them readable]" time="0.001"><skipped type="pytest.skip" message="trace archival live Job requires object storage and an enabled trace archival configuration">/mlflow/mlflow-tests/tests/test_trace_archival.py:91: trace archival live Job requires object storage and an enabled trace archival configuration</skipped></testcase><testcase classname="tests.test_traces.TestTraces" name="test_trace_logging[Agent with GET and UPDATE on one experiment can send traces to that experiment]" time="2.897" /><testcase classname="tests.test_traces.TestTraces" name="test_trace_logging[Agent with GET and UPDATE on one experiment cannot send traces to a different experiment in the same workspace]" time="2.297" /><testcase classname="tests.test_traces.TestTraces" name="test_trace_logging[Agent with GET and UPDATE in one workspace cannot send traces in a different workspace]" time="2.290" /></testsuite></testsuites>