<?xml version="1.0" encoding="utf-8"?><testsuites name="pytest tests"><testsuite name="mlflow-e2e" errors="0" failures="53" skipped="7" tests="99" time="257.599" timestamp="2026-11-01T14:23:28.777277+00:00" hostname="e2e-cli-nmanos-konflux-rhoai1-smoke-s47zt-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.570" /><testcase classname="tests.test_artifacts.TestMLflowArtifacts" name="test_mlflow_artifacts[User with UPDATE &amp; GET permission can log and load models]" time="9.063" /><testcase classname="tests.test_artifacts.TestMLflowArtifacts" name="test_mlflow_artifacts[User with UPDATE permission can verify storage for artifacts]" time="2.965" /><testcase classname="tests.test_artifacts.TestMLflowArtifacts" name="test_mlflow_artifacts[User with GET permission cannot log models]" time="5.226" /><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.429" /><testcase classname="tests.test_artifacts.TestMLflowArtifacts" name="test_mlflow_artifacts[User with UPDATE permission on workspace 2 cannot log artifacts in workspace 1]" time="5.453" /><testcase classname="tests.test_artifacts.TestMLflowArtifacts" name="test_mlflow_artifacts[User with GET permission cannot end run]" time="5.148" /><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="5.017" /><testcase classname="tests.test_artifacts.TestMLflowArtifacts" name="test_mlflow_artifacts[User with LIST permission cannot log artifacts without CREATE permission]" time="2.698" /><testcase classname="tests.test_artifacts.TestMLflowArtifacts" name="test_s3_model_download_uses_runner_reachable_presigned_endpoint" time="0.001"><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.359" /><testcase classname="tests.test_experiments.TestExperiments" name="test_experiment[Validate that user with GET permission can get experiment]" time="2.406" /><testcase classname="tests.test_experiments.TestExperiments" name="test_experiment[Validate that user with GET permission cannot create experiment]" time="2.368" /><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.431" /><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.441" /><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.464" /><testcase classname="tests.test_experiments.TestExperiments" name="test_experiment[Validate that user with CREATE permission can create experiment]" time="2.554" /><testcase classname="tests.test_experiments.TestExperiments" name="test_experiment[Validate that user with GET, CREATE and DELETE permissions can delete experiment]" time="2.684" /><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="2.440" /><testcase classname="tests.test_experiments.TestExperiments" name="test_experiment[User with GET permission cannot delete experiment]" time="5.003" /><testcase classname="tests.test_experiments.TestExperiments" name="test_experiment[User with CREATE permission cannot delete experiment without DELETE permission]" time="2.642" /><testcase classname="tests.test_experiments.TestExperiments" name="test_experiment[User with UPDATE permission cannot create experiment without CREATE permission]" time="2.404" /><testcase classname="tests.test_experiments.TestExperiments" name="test_experiment[User with LIST permission cannot delete experiment without DELETE permission]" time="4.937" /><testcase classname="tests.test_garbage_collection.TestGarbageCollection" name="test_garbage_collection_job_removes_deleted_run_and_artifacts" time="0.000"><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="2.379"><failure message="AssertionError: Action 'action_create_mcp_server' failed for user test-user-4blkybbu in workspace workspace1-hoird8f5: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-4blkybbu, Workspace: workspace1-hoird8f5">self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f0c11d5f710&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f0c11d5f710&gt;&gt;
test_data = Test Data: name=Validate that user with GET permission can get MCP server user_info=None workspace=workspace1-hoird8f5 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 0x7f0c11d5f710&gt;
validate_func = &lt;function validate_mcp_server_created at 0x7f0c11a4e980&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-4blkybbu in workspace workspace1-hoird8f5: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-4blkybbu, Workspace: workspace1-hoird8f5

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="2.416"><failure message="AssertionError: Action failed with unexpected error for user test-user-jxc1eguk: 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 0x7f0c11d5fe00&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f0c11d5fe00&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-hoird8f5 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-hoird8f5', 'workspace2-hoird8f5'], active_workspace='workspace1-hoird8f5', 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-jxc1eguk: 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="2.381"><failure message="AssertionError: Action 'action_create_mcp_server' failed for user test-user-7ufcg2us in workspace workspace2-hoird8f5: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-7ufcg2us, Workspace: workspace2-hoird8f5">self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f0c11d5fec0&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f0c11d5fec0&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 0x7f0c11d5fec0&gt;
validate_func = &lt;function validate_mcp_server_created at 0x7f0c11a4e980&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-7ufcg2us in workspace workspace2-hoird8f5: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-7ufcg2us, Workspace: workspace2-hoird8f5

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="2.405"><failure message="AssertionError: Action 'action_create_mcp_server' failed for user test-user-l7d9lqe3 in workspace workspace1-hoird8f5: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-l7d9lqe3, Workspace: workspace1-hoird8f5">self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f0c11d5ff80&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f0c11d5ff80&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-hoird8f5 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 0x7f0c11d5ff80&gt;
validate_func = &lt;function validate_mcp_server_created at 0x7f0c11a4e980&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-l7d9lqe3 in workspace workspace1-hoird8f5: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-l7d9lqe3, Workspace: workspace1-hoird8f5

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="2.380"><failure message="AssertionError: Action 'action_create_mcp_server' failed for user test-user-qccpzprd in workspace workspace1-hoird8f5: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-qccpzprd, Workspace: workspace1-hoird8f5">self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f0c12af3560&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f0c12af3560&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-hoird8f5 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 0x7f0c12af3560&gt;
validate_func = &lt;function validate_mcp_server_created at 0x7f0c11a4e980&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-qccpzprd in workspace workspace1-hoird8f5: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-qccpzprd, Workspace: workspace1-hoird8f5

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="2.424"><failure message="AssertionError: Action failed with unexpected error for user test-user-8j2bozsi: 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 0x7f0c11b70200&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f0c11b70200&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-hoird8f5 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-hoird8f5', 'workspace2-hoird8f5'], active_workspace='workspace1-hoird8f5', 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-8j2bozsi: 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="2.423"><failure message="AssertionError: Action failed with unexpected error for user test-user-oz2l31nt: 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 0x7f0c11b720f0&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f0c11b720f0&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-hoird8f5 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-hoird8f5', 'workspace2-hoird8f5'], active_workspace='workspace1-hoird8f5', 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-oz2l31nt: 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="2.393"><failure message="AssertionError: Action 'action_create_mcp_server_shell' failed for user test-user-whvjqgy2 in workspace workspace1-hoird8f5: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-whvjqgy2, Workspace: workspace1-hoird8f5">self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f0c11b73530&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f0c11b73530&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-hoird8f5 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 0x7f0c11b73530&gt;
validate_func = &lt;function validate_mcp_server_created at 0x7f0c11a4e980&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-whvjqgy2 in workspace workspace1-hoird8f5: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-whvjqgy2, Workspace: workspace1-hoird8f5

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="2.393"><failure message="AssertionError: Action failed with unexpected error for user test-user-2i4p48qt: 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 0x7f0c11b70080&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f0c11b70080&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-hoird8f5 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-hoird8f5', 'workspace2-hoird8f5'], active_workspace='workspace1-hoird8f5', 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-2i4p48qt: 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="2.383"><failure message="AssertionError: Action 'action_create_mcp_server' failed for user test-user-w2v7esuc in workspace workspace1-hoird8f5: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-w2v7esuc, Workspace: workspace1-hoird8f5">self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f0c11d5f680&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f0c11d5f680&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-hoird8f5 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 0x7f0c11d5f680&gt;
validate_func = &lt;function validate_mcp_server_created at 0x7f0c11a4e980&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-w2v7esuc in workspace workspace1-hoird8f5: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-w2v7esuc, Workspace: workspace1-hoird8f5

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="2.353"><failure message="AssertionError: Action failed with unexpected error for user test-user-cdmc8mbt: 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 0x7f0c11d5f3b0&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f0c11d5f3b0&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-hoird8f5 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-hoird8f5', 'workspace2-hoird8f5'], active_workspace='workspace2-hoird8f5', 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-cdmc8mbt: 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="2.386"><failure message="AssertionError: Action 'action_create_mcp_server' failed for user test-user-jmokjmx7 in workspace workspace1-hoird8f5: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-jmokjmx7, Workspace: workspace1-hoird8f5">self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f0c11d5f2c0&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f0c11d5f2c0&gt;&gt;
test_data = Test Data: name=User with GET permission cannot delete MCP server user_info=None workspace=workspace1-hoird8f5 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 0x7f0c11d5f2c0&gt;
validate_func = &lt;function validate_mcp_server_created at 0x7f0c11a4e980&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-jmokjmx7 in workspace workspace1-hoird8f5: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-jmokjmx7, Workspace: workspace1-hoird8f5

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="2.394"><failure message="AssertionError: Action 'action_create_mcp_server' failed for user test-user-uu2uy2tw in workspace workspace1-hoird8f5: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-uu2uy2tw, Workspace: workspace1-hoird8f5">self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f0c11b70230&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f0c11b70230&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-hoird8f5 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 0x7f0c11b70230&gt;
validate_func = &lt;function validate_mcp_server_created at 0x7f0c11a4e980&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-uu2uy2tw in workspace workspace1-hoird8f5: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-uu2uy2tw, Workspace: workspace1-hoird8f5

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="2.378"><failure message="AssertionError: Action failed with unexpected error for user test-user-rgcm9h1r: 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 0x7f0c11b70320&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f0c11b70320&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-hoird8f5 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-hoird8f5', 'workspace2-hoird8f5'], active_workspace='workspace1-hoird8f5', 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-rgcm9h1r: 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="2.427"><failure message="AssertionError: Action 'action_create_mcp_server' failed for user test-user-3mu5cu59 in workspace workspace1-hoird8f5: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-3mu5cu59, Workspace: workspace1-hoird8f5">self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f0c11b703e0&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f0c11b703e0&gt;&gt;
test_data = Test Data: name=User with DELETE permission cannot get MCP server without GET permission user_info=None workspace=workspace1-hoird8f5 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 0x7f0c11b703e0&gt;
validate_func = &lt;function validate_mcp_server_created at 0x7f0c11a4e980&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-3mu5cu59 in workspace workspace1-hoird8f5: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-3mu5cu59, Workspace: workspace1-hoird8f5

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="2.373"><failure message="AssertionError: Action 'action_create_mcp_server' failed for user test-user-mkk7dp2x in workspace workspace1-hoird8f5: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-mkk7dp2x, Workspace: workspace1-hoird8f5">self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f0c11b704a0&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f0c11b704a0&gt;&gt;
test_data = Test Data: name=User with UPDATE permission can create MCP server user_info=UserInfo(workspace='workspace1-hoird8f5', ...rce_type=[&lt;ResourceType.MCP_SERVERS: 'mcpservers'&gt;], verbs=['update']) workspace=workspace1-hoird8f5 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 0x7f0c11b704a0&gt;
validate_func = &lt;function validate_mcp_server_created at 0x7f0c11a4e980&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-mkk7dp2x in workspace workspace1-hoird8f5: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-mkk7dp2x, Workspace: workspace1-hoird8f5

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="2.370"><failure message="AssertionError: Action 'action_create_mcp_server' failed for user test-user-7xwhea1h in workspace workspace1-hoird8f5: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-7xwhea1h, Workspace: workspace1-hoird8f5">self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f0c11b70560&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f0c11b70560&gt;&gt;
test_data = Test Data: name=User with LIST permission cannot delete MCP server without DELETE permission user_info=None workspace=workspace1-hoird8f5 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 0x7f0c11b70560&gt;
validate_func = &lt;function validate_mcp_server_created at 0x7f0c11a4e980&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-7xwhea1h in workspace workspace1-hoird8f5: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-7xwhea1h, Workspace: workspace1-hoird8f5

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="2.405"><failure message="AssertionError: Action 'action_create_mcp_server' failed for user test-user-8xsio8av in workspace workspace2-hoird8f5: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-8xsio8av, Workspace: workspace2-hoird8f5">self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f0c11b70650&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f0c11b70650&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 0x7f0c11b70650&gt;
validate_func = &lt;function validate_mcp_server_created at 0x7f0c11a4e980&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-8xsio8av in workspace workspace2-hoird8f5: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-8xsio8av, Workspace: workspace2-hoird8f5

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="2.448"><failure message="AssertionError: Action 'action_create_mcp_server' failed for user test-user-le5vbqcb in workspace workspace1-hoird8f5: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-le5vbqcb, Workspace: workspace1-hoird8f5">self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f0c11b70710&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f0c11b70710&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-hoird8f5 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 0x7f0c11b70710&gt;
validate_func = &lt;function validate_mcp_server_created at 0x7f0c11a4e980&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-le5vbqcb in workspace workspace1-hoird8f5: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-le5vbqcb, Workspace: workspace1-hoird8f5

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="2.417"><failure message="AssertionError: Action 'action_create_mcp_server' failed for user test-user-07a96d9y in workspace workspace1-hoird8f5: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-07a96d9y, Workspace: workspace1-hoird8f5">self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f0c11b70800&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f0c11b70800&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-hoird8f5 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 0x7f0c11b70800&gt;
validate_func = &lt;function validate_mcp_server_created at 0x7f0c11a4e980&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-07a96d9y in workspace workspace1-hoird8f5: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-07a96d9y, Workspace: workspace1-hoird8f5

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="2.450"><failure message="AssertionError: Action 'action_create_mcp_server' failed for user test-user-xa1yl0w2 in workspace workspace1-hoird8f5: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-xa1yl0w2, Workspace: workspace1-hoird8f5">self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f0c11b708f0&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f0c11b708f0&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-hoird8f5 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 0x7f0c11b708f0&gt;
validate_func = &lt;function validate_mcp_server_created at 0x7f0c11a4e980&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-xa1yl0w2 in workspace workspace1-hoird8f5: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-xa1yl0w2, Workspace: workspace1-hoird8f5

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="2.362"><failure message="AssertionError: Action 'action_create_mcp_server' failed for user test-user-6sgjos59 in workspace workspace1-hoird8f5: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-6sgjos59, Workspace: workspace1-hoird8f5">self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f0c11b709e0&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f0c11b709e0&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-hoird8f5 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 0x7f0c11b709e0&gt;
validate_func = &lt;function validate_mcp_server_created at 0x7f0c11a4e980&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-6sgjos59 in workspace workspace1-hoird8f5: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-6sgjos59, Workspace: workspace1-hoird8f5

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="2.400"><failure message="AssertionError: Action 'action_create_mcp_server' failed for user test-user-sxl8w8w8 in workspace workspace1-hoird8f5: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-sxl8w8w8, Workspace: workspace1-hoird8f5">self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f0c11b70ad0&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f0c11b70ad0&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-hoird8f5 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 0x7f0c11b70ad0&gt;
validate_func = &lt;function validate_mcp_server_created at 0x7f0c11a4e980&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-sxl8w8w8 in workspace workspace1-hoird8f5: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-sxl8w8w8, Workspace: workspace1-hoird8f5

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="2.367"><failure message="AssertionError: Action 'action_create_mcp_server' failed for user test-user-zpnm3lxb in workspace workspace2-hoird8f5: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-zpnm3lxb, Workspace: workspace2-hoird8f5">self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f0c11b70b90&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f0c11b70b90&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 0x7f0c11b70b90&gt;
validate_func = &lt;function validate_mcp_server_created at 0x7f0c11a4e980&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-zpnm3lxb in workspace workspace2-hoird8f5: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-zpnm3lxb, Workspace: workspace2-hoird8f5

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="2.385"><failure message="AssertionError: Action 'action_create_mcp_server' failed for user test-user-ommcn8ls in workspace workspace1-hoird8f5: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-ommcn8ls, Workspace: workspace1-hoird8f5">self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f0c11b70c80&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f0c11b70c80&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-hoird8f5 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 0x7f0c11b70c80&gt;
validate_func = &lt;function validate_mcp_server_created at 0x7f0c11a4e980&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-ommcn8ls in workspace workspace1-hoird8f5: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-ommcn8ls, Workspace: workspace1-hoird8f5

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="2.391"><failure message="AssertionError: Action 'action_create_mcp_server' failed for user test-user-istreizf in workspace workspace1-hoird8f5: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-istreizf, Workspace: workspace1-hoird8f5">self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f0c11b70d70&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f0c11b70d70&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-hoird8f5 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 0x7f0c11b70d70&gt;
validate_func = &lt;function validate_mcp_server_created at 0x7f0c11a4e980&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-istreizf in workspace workspace1-hoird8f5: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-istreizf, Workspace: workspace1-hoird8f5

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="2.418"><failure message="AssertionError: Action 'action_create_mcp_server' failed for user test-user-f73azswb in workspace workspace1-hoird8f5: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-f73azswb, Workspace: workspace1-hoird8f5">self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f0c11b70e30&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f0c11b70e30&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-hoird8f5 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 0x7f0c11b70e30&gt;
validate_func = &lt;function validate_mcp_server_created at 0x7f0c11a4e980&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-f73azswb in workspace workspace1-hoird8f5: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-f73azswb, Workspace: workspace1-hoird8f5

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="2.378"><failure message="AssertionError: Action 'action_create_mcp_server' failed for user test-user-f3s7yae9 in workspace workspace1-hoird8f5: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-f3s7yae9, Workspace: workspace1-hoird8f5">self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f0c11b70ef0&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f0c11b70ef0&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-hoird8f5 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 0x7f0c11b70ef0&gt;
validate_func = &lt;function validate_mcp_server_created at 0x7f0c11a4e980&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-f3s7yae9 in workspace workspace1-hoird8f5: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-f3s7yae9, Workspace: workspace1-hoird8f5

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="2.406"><failure message="AssertionError: Action 'action_create_mcp_server' failed for user test-user-0tp8i7ea in workspace workspace1-hoird8f5: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-0tp8i7ea, Workspace: workspace1-hoird8f5">self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f0c11b70fb0&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f0c11b70fb0&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-hoird8f5 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 0x7f0c11b70fb0&gt;
validate_func = &lt;function validate_mcp_server_created at 0x7f0c11a4e980&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-0tp8i7ea in workspace workspace1-hoird8f5: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-0tp8i7ea, Workspace: workspace1-hoird8f5

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="2.384"><failure message="AssertionError: Action 'action_create_mcp_server' failed for user test-user-eog2a1k5 in workspace workspace1-hoird8f5: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-eog2a1k5, Workspace: workspace1-hoird8f5">self = &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f0c11b71070&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_mcp_servers.TestMCPServers object at 0x7f0c11b71070&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-hoird8f5 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 0x7f0c11b71070&gt;
validate_func = &lt;function validate_mcp_server_created at 0x7f0c11a4e980&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-eog2a1k5 in workspace workspace1-hoird8f5: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-eog2a1k5, Workspace: workspace1-hoird8f5

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="2.421" /><testcase classname="tests.test_models.TestRegisteredModels" name="test_registered_model[Validate that user with GET permission cannot create registered model]" time="2.422" /><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.433" /><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.538" /><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.406" /><testcase classname="tests.test_models.TestRegisteredModels" name="test_registered_model[Validate that user with CREATE permission can create registered model]" time="2.487" /><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.718" /><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="2.418" /><testcase classname="tests.test_models.TestRegisteredModels" name="test_registered_model[User with GET permission cannot delete registered model]" time="5.164" /><testcase classname="tests.test_models.TestRegisteredModels" name="test_registered_model[User with CREATE permission cannot delete registered model without DELETE permission]" time="2.567" /><testcase classname="tests.test_models.TestRegisteredModels" name="test_registered_model[User with DELETE permission cannot create registered model without CREATE permission]" time="2.388" /><testcase classname="tests.test_models.TestRegisteredModels" name="test_registered_model[User with DELETE permission cannot get registered model without GET permission]" time="2.448" /><testcase classname="tests.test_models.TestRegisteredModels" name="test_registered_model[User with UPDATE permission cannot create registered model without CREATE permission]" time="2.398" /><testcase classname="tests.test_models.TestRegisteredModels" name="test_registered_model[User with LIST permission cannot delete registered model without DELETE permission]" time="4.880" /><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="2.374"><failure message="AssertionError: Action 'action_create_skill_shell' failed for user test-user-b4cwtmpy in workspace workspace1-hoird8f5: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-b4cwtmpy, Workspace: workspace1-hoird8f5">self = &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f0c11a02ab0&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f0c11a02ab0&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...5', resource_type=[&lt;ResourceType.SKILLS: 'skills'&gt;], verbs=['create']) workspace=workspace1-hoird8f5 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 0x7f0c11a02ab0&gt;
validate_func = &lt;function validate_skill_created at 0x7f0c11a4ef20&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-b4cwtmpy in workspace workspace1-hoird8f5: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-b4cwtmpy, Workspace: workspace1-hoird8f5

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="2.381"><failure message="AssertionError: Action failed with unexpected error for user test-user-zc5tkokc: 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 0x7f0c11a03020&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f0c11a03020&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...5', resource_type=[&lt;ResourceType.SKILLS: 'skills'&gt;], verbs=['update']) workspace=workspace1-hoird8f5 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-hoird8f5', 'workspace2-hoird8f5'], active_workspace='workspace1-hoird8f5', 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-zc5tkokc: 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="2.360"><failure message="AssertionError: Action 'action_create_skill_shell' failed for user test-user-uqj51jqk in workspace workspace1-hoird8f5: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-uqj51jqk, Workspace: workspace1-hoird8f5">self = &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f0c11a030e0&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f0c11a030e0&gt;&gt;
test_data = Test Data: name=User with GET can retrieve a Skill user_info=None workspace=workspace1-hoird8f5 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 0x7f0c11a030e0&gt;
validate_func = &lt;function validate_skill_created at 0x7f0c11a4ef20&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-uqj51jqk in workspace workspace1-hoird8f5: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-uqj51jqk, Workspace: workspace1-hoird8f5

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="2.376"><failure message="AssertionError: Action 'action_create_skill_shell' failed for user test-user-4hg9ohsq in workspace workspace1-hoird8f5: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-4hg9ohsq, Workspace: workspace1-hoird8f5">self = &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f0c11a031a0&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f0c11a031a0&gt;&gt;
test_data = Test Data: name=User without GET cannot retrieve a Skill user_info=None workspace=workspace1-hoird8f5 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 0x7f0c11a031a0&gt;
validate_func = &lt;function validate_skill_created at 0x7f0c11a4ef20&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-4hg9ohsq in workspace workspace1-hoird8f5: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-4hg9ohsq, Workspace: workspace1-hoird8f5

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="2.385"><failure message="AssertionError: Action 'action_create_skill_shell' failed for user test-user-gn700add in workspace workspace1-hoird8f5: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-gn700add, Workspace: workspace1-hoird8f5">self = &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f0c11a03260&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f0c11a03260&gt;&gt;
test_data = Test Data: name=User with LIST can search Skills user_info=None workspace=workspace1-hoird8f5 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 0x7f0c11a03260&gt;
validate_func = &lt;function validate_skill_created at 0x7f0c11a4ef20&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-gn700add in workspace workspace1-hoird8f5: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-gn700add, Workspace: workspace1-hoird8f5

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="2.386"><failure message="AssertionError: Action failed with unexpected error for user test-user-ljvyqcvy: 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 0x7f0c11a03320&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f0c11a03320&gt;&gt;
test_data = Test Data: name=User without LIST cannot search Skills user_info=UserInfo(workspace='workspace1-hoird8f5', resource_type=[&lt;ResourceType.SKILLS: 'skills'&gt;], verbs=['get']) workspace=workspace1-hoird8f5 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-hoird8f5', 'workspace2-hoird8f5'], active_workspace='workspace1-hoird8f5', 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-ljvyqcvy: 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="2.384"><failure message="AssertionError: Action 'action_create_skill_shell' failed for user test-user-2vlypw63 in workspace workspace1-hoird8f5: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-2vlypw63, Workspace: workspace1-hoird8f5">self = &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f0c11a03440&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f0c11a03440&gt;&gt;
test_data = Test Data: name=User with UPDATE can update a Skill user_info=None workspace=workspace1-hoird8f5 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 0x7f0c11a03440&gt;
validate_func = &lt;function validate_skill_created at 0x7f0c11a4ef20&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-2vlypw63 in workspace workspace1-hoird8f5: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-2vlypw63, Workspace: workspace1-hoird8f5

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="2.385"><failure message="AssertionError: Action 'action_create_skill_shell' failed for user test-user-u3mwkpgv in workspace workspace1-hoird8f5: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-u3mwkpgv, Workspace: workspace1-hoird8f5">self = &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f0c11a03560&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f0c11a03560&gt;&gt;
test_data = Test Data: name=User without UPDATE cannot update a Skill user_info=None workspace=workspace1-hoird8f5 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 0x7f0c11a03560&gt;
validate_func = &lt;function validate_skill_created at 0x7f0c11a4ef20&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-u3mwkpgv in workspace workspace1-hoird8f5: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-u3mwkpgv, Workspace: workspace1-hoird8f5

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="2.382"><failure message="AssertionError: Action 'action_create_skill_shell' failed for user test-user-9f592h69 in workspace workspace1-hoird8f5: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-9f592h69, Workspace: workspace1-hoird8f5">self = &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f0c11a03620&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f0c11a03620&gt;&gt;
test_data = Test Data: name=User with DELETE can delete a Skill user_info=None workspace=workspace1-hoird8f5 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 0x7f0c11a03620&gt;
validate_func = &lt;function validate_skill_created at 0x7f0c11a4ef20&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-9f592h69 in workspace workspace1-hoird8f5: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-9f592h69, Workspace: workspace1-hoird8f5

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="2.398"><failure message="AssertionError: Action 'action_create_skill_shell' failed for user test-user-ri2i3383 in workspace workspace1-hoird8f5: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-ri2i3383, Workspace: workspace1-hoird8f5">self = &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f0c11a036e0&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f0c11a036e0&gt;&gt;
test_data = Test Data: name=User without DELETE cannot delete a Skill user_info=None workspace=workspace1-hoird8f5 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 0x7f0c11a036e0&gt;
validate_func = &lt;function validate_skill_created at 0x7f0c11a4ef20&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-ri2i3383 in workspace workspace1-hoird8f5: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-ri2i3383, Workspace: workspace1-hoird8f5

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="2.396"><failure message="AssertionError: Action 'action_create_skill_shell' failed for user test-user-nplgyuto in workspace workspace1-hoird8f5: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-nplgyuto, Workspace: workspace1-hoird8f5">self = &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f0c11a03800&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f0c11a03800&gt;&gt;
test_data = Test Data: name=User cannot retrieve a Skill from another workspace user_info=None workspace=workspace1-hoird8f5 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 0x7f0c11a03800&gt;
validate_func = &lt;function validate_skill_created at 0x7f0c11a4ef20&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-nplgyuto in workspace workspace1-hoird8f5: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-nplgyuto, Workspace: workspace1-hoird8f5

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="2.391"><failure message="AssertionError: Action 'action_create_skill_shell' failed for user test-user-nbz09qn4 in workspace workspace1-hoird8f5: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-nbz09qn4, Workspace: workspace1-hoird8f5">self = &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f0c11a039b0&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f0c11a039b0&gt;&gt;
test_data = Test Data: name=Skill search excludes Skills from another workspace user_info=None workspace=workspace1-hoird8f5 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 0x7f0c11a039b0&gt;
validate_func = &lt;function validate_skill_created at 0x7f0c11a4ef20&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-nbz09qn4 in workspace workspace1-hoird8f5: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-nbz09qn4, Workspace: workspace1-hoird8f5

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="2.385"><failure message="AssertionError: Action 'action_create_skill_shell' failed for user test-user-7js9550e in workspace workspace1-hoird8f5: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-7js9550e, Workspace: workspace1-hoird8f5">self = &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f0c11a03a70&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f0c11a03a70&gt;&gt;
test_data = Test Data: name=Named GET permission allows the named Skill user_info=None workspace=workspace1-hoird8f5 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 0x7f0c11a03a70&gt;
validate_func = &lt;function validate_skill_created at 0x7f0c11a4ef20&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-7js9550e in workspace workspace1-hoird8f5: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-7js9550e, Workspace: workspace1-hoird8f5

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="2.424"><failure message="AssertionError: Action 'action_create_skill_shell' failed for user test-user-fravblpc in workspace workspace1-hoird8f5: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-fravblpc, Workspace: workspace1-hoird8f5">self = &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f0c11a03b30&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f0c11a03b30&gt;&gt;
test_data = Test Data: name=Named GET permission denies a different Skill user_info=None workspace=workspace1-hoird8f5 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 0x7f0c11a03b30&gt;
validate_func = &lt;function validate_skill_created at 0x7f0c11a4ef20&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-fravblpc in workspace workspace1-hoird8f5: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-fravblpc, Workspace: workspace1-hoird8f5

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="2.395"><failure message="AssertionError: Action 'action_create_skill_shell' failed for user test-user-mz3r3nar in workspace workspace1-hoird8f5: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-mz3r3nar, Workspace: workspace1-hoird8f5">self = &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f0c11a03bf0&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f0c11a03bf0&gt;&gt;
test_data = Test Data: name=Named UPDATE permission denies a different Skill user_info=None workspace=workspace1-hoird8f5 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 0x7f0c11a03bf0&gt;
validate_func = &lt;function validate_skill_created at 0x7f0c11a4ef20&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-mz3r3nar in workspace workspace1-hoird8f5: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-mz3r3nar, Workspace: workspace1-hoird8f5

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="2.406"><failure message="AssertionError: Action 'action_create_skill_shell' failed for user test-user-wq415uu5 in workspace workspace1-hoird8f5: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-wq415uu5, Workspace: workspace1-hoird8f5">self = &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f0c11a03ce0&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f0c11a03ce0&gt;&gt;
test_data = Test Data: name=Named DELETE permission denies a different Skill user_info=None workspace=workspace1-hoird8f5 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 0x7f0c11a03ce0&gt;
validate_func = &lt;function validate_skill_created at 0x7f0c11a4ef20&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-wq415uu5 in workspace workspace1-hoird8f5: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-wq415uu5, Workspace: workspace1-hoird8f5

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="2.428"><failure message="AssertionError: Action 'action_create_skill_shell' failed for user test-user-n3brzqy4 in workspace workspace1-hoird8f5: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-n3brzqy4, Workspace: workspace1-hoird8f5">self = &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f0c11a03da0&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f0c11a03da0&gt;&gt;
test_data = Test Data: name=Named UPDATE permission allows the matching Skill user_info=None workspace=workspace1-hoird8f5 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 0x7f0c11a03da0&gt;
validate_func = &lt;function validate_skill_created at 0x7f0c11a4ef20&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-n3brzqy4 in workspace workspace1-hoird8f5: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-n3brzqy4, Workspace: workspace1-hoird8f5

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="2.422"><failure message="AssertionError: Action 'action_create_skill_shell' failed for user test-user-5qfofh48 in workspace workspace1-hoird8f5: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-5qfofh48, Workspace: workspace1-hoird8f5">self = &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f0c11a03e60&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f0c11a03e60&gt;&gt;
test_data = Test Data: name=Named DELETE permission allows the matching Skill user_info=None workspace=workspace1-hoird8f5 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 0x7f0c11a03e60&gt;
validate_func = &lt;function validate_skill_created at 0x7f0c11a4ef20&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-5qfofh48 in workspace workspace1-hoird8f5: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-5qfofh48, Workspace: workspace1-hoird8f5

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="2.410"><failure message="AssertionError: Action 'action_create_skill_shell' failed for user test-user-b2a7fu4z in workspace workspace1-hoird8f5: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-b2a7fu4z, Workspace: workspace1-hoird8f5">self = &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f0c11a03f20&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f0c11a03f20&gt;&gt;
test_data = Test Data: name=Named GET permission does not grant unrestricted Skill search user_info=None workspace=workspace1-hoird8f5 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 0x7f0c11a03f20&gt;
validate_func = &lt;function validate_skill_created at 0x7f0c11a4ef20&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-b2a7fu4z in workspace workspace1-hoird8f5: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-b2a7fu4z, Workspace: workspace1-hoird8f5

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="2.380"><failure message="AssertionError: Action 'action_create_skill_shell' failed for user test-user-rj2avpaf in workspace workspace1-hoird8f5: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-rj2avpaf, Workspace: workspace1-hoird8f5">self = &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f0c11a03fe0&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f0c11a03fe0&gt;&gt;
test_data = Test Data: name=User can complete the Skill lifecycle user_info=UserInfo(workspace='workspace1-hoird8f5', resource_typ...ILLS: 'skills'&gt;], verbs=['create', 'get', 'list', 'update', 'delete']) workspace=workspace1-hoird8f5 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 0x7f0c11a03fe0&gt;
validate_func = &lt;function validate_skill_created at 0x7f0c11a4ef20&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-rj2avpaf in workspace workspace1-hoird8f5: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-rj2avpaf, Workspace: workspace1-hoird8f5

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="2.394"><failure message="AssertionError: Action 'action_register_local_skill' failed for user test-user-8llao3q6 in workspace workspace1-hoird8f5: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-8llao3q6, Workspace: workspace1-hoird8f5">self = &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f0c11a029f0&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f0c11a029f0&gt;&gt;
test_data = Test Data: name=User with GET can read Skill artifact content user_info=None workspace=workspace1-hoird8f5 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 0x7f0c11a029f0&gt;
validate_func = &lt;function validate_skill_artifact_registered at 0x7f0c11a4f380&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-8llao3q6 in workspace workspace1-hoird8f5: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-8llao3q6, Workspace: workspace1-hoird8f5

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="2.469"><failure message="AssertionError: Action 'action_register_local_skill' failed for user test-user-01tp8iqe in workspace workspace1-hoird8f5: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}&#10;Details: Context: User: test-user-01tp8iqe, Workspace: workspace1-hoird8f5">self = &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f0c11a026c0&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f0c11a026c0&gt;&gt;
test_data = Test Data: name=User without GET cannot read Skill artifact content user_info=None workspace=workspace1-hoird8f5 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 0x7f0c11a026c0&gt;
validate_func = &lt;function validate_skill_artifact_registered at 0x7f0c11a4f380&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-01tp8iqe in workspace workspace1-hoird8f5: RESOURCE_NOT_FOUND - INTERNAL_ERROR: Response: {'error': {'code': 'ENDPOINT_NOT_FOUND', 'message': 'Endpoint not found.'}}
E           Details: Context: User: test-user-01tp8iqe, Workspace: workspace1-hoird8f5

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="2.510"><failure message="AssertionError: Action failed with unexpected error for user test-user-5vva3g5t: 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 0x7f0c11a04050&gt;
create_user_with_permissions = &lt;bound method TestBase._create_user of &lt;tests.test_skill_registry.TestSkillRegistry object at 0x7f0c11a04050&gt;&gt;
test_data = Test Data: name=User with CREATE cannot register a local Skill without UPDATE user_info=None workspace=workspace1-hoird8f5 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-hoird8f5', 'workspace2-hoird8f5'], active_workspace='workspace1-hoird8f5', 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-5vva3g5t: 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.000"><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.966" /><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.647" /><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.612" /></testsuite></testsuites>