diff --git a/tests/conftest.py b/tests/conftest.py index c274307a6..cd47977a6 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -56,7 +56,7 @@ def model_namespace(request: FixtureRequest, admin_client: DynamicClient) -> Gen if request.param.get("modelmesh-enabled"): request.getfixturevalue(argname="enabled_modelmesh_in_dsc") - ns_kwargs["labels"] = {"modelmesh-enabled": "true"} + ns_kwargs["model_mesh_enabled"] = True with create_ns(**ns_kwargs) as ns: yield ns @@ -286,3 +286,23 @@ def cluster_monitoring_config(admin_client: DynamicClient) -> Generator[ConfigMa data=data, ) as cm: yield cm + + +@pytest.fixture(scope="class") +def unprivileged_model_namespace( + request: FixtureRequest, unprivileged_client: DynamicClient +) -> Generator[Namespace, Any, Any]: + ns_kwargs = { + "name": request.param["name"], + "unprivileged_client": unprivileged_client, + } + + if _annotations := request.param.get("annotations"): + ns_kwargs["ns_annotations"] = _annotations + + if request.param.get("modelmesh-enabled"): + request.getfixturevalue(argname="enabled_modelmesh_in_dsc") + ns_kwargs["model_mesh_enabled"] = True + + with create_ns(**ns_kwargs) as ns: + yield ns diff --git a/tests/model_serving/model_server/authentication/conftest.py b/tests/model_serving/model_server/authentication/conftest.py index da885839e..a72bc3401 100644 --- a/tests/model_serving/model_server/authentication/conftest.py +++ b/tests/model_serving/model_server/authentication/conftest.py @@ -15,7 +15,6 @@ from utilities.inference_utils import create_isvc from utilities.infra import ( - create_ns, create_isvc_view_role, get_pods_by_isvc_label, s3_endpoint_secret, @@ -329,12 +328,6 @@ def http_s3_caikit_raw_inference_service_2( # Unprivileged user tests -@pytest.fixture(scope="class") -def unprivileged_model_namespace( - request: FixtureRequest, unprivileged_client: DynamicClient -) -> Generator[Namespace, Any, Any]: - with create_ns(unprivileged_client=unprivileged_client, name=request.param["name"]) as ns: - yield ns @pytest.fixture(scope="class") diff --git a/tests/model_serving/model_server/upgrade/conftest.py b/tests/model_serving/model_server/upgrade/conftest.py index d051f3eb2..f111c352c 100644 --- a/tests/model_serving/model_server/upgrade/conftest.py +++ b/tests/model_serving/model_server/upgrade/conftest.py @@ -56,9 +56,7 @@ def model_namespace_scope_session( admin_client: DynamicClient, ) -> Generator[Namespace, Any, Any]: with create_ns( - admin_client=admin_client, - name=UPGRADE_NAMESPACE, - labels={"modelmesh-enabled": "true"}, + admin_client=admin_client, name=UPGRADE_NAMESPACE, model_mesh_enabled=True, add_dashboard_label=True ) as ns: yield ns diff --git a/utilities/infra.py b/utilities/infra.py index d47ec9ce0..e5a5e794d 100644 --- a/utilities/infra.py +++ b/utilities/infra.py @@ -33,7 +33,7 @@ from semver import Version from simple_logger.logger import get_logger -from utilities.constants import Timeout +from utilities.constants import Labels, Timeout from utilities.exceptions import FailedPodsError from timeout_sampler import TimeoutExpiredError, TimeoutSampler from utilities.general import create_isvc_label_selector_str, get_s3_secret_dict @@ -44,11 +44,14 @@ @contextmanager def create_ns( name: str, - admin_client: Optional[DynamicClient] = None, - unprivileged_client: Optional[DynamicClient] = None, + admin_client: DynamicClient | None = None, + unprivileged_client: DynamicClient | None = None, teardown: bool = True, delete_timeout: int = Timeout.TIMEOUT_4MIN, - labels: Optional[dict[str, str]] = None, + labels: dict[str, str] | None = None, + ns_annotations: dict[str, str] | None = None, + model_mesh_enabled: bool = False, + add_dashboard_label: bool = False, ) -> Generator[Namespace | Project, Any, Any]: """ Create namespace with admin or unprivileged client. @@ -60,30 +63,39 @@ def create_ns( teardown (bool): should run resource teardown delete_timeout (int): delete timeout. labels (dict[str, str]): labels dict to set for namespace + ns_annotations (dict[str, str]): annotations dict to set for namespace + model_mesh_enabled (bool): if True, model mesh will be enabled in namespace + add_dashboard_label (bool): if True, dashboard label will be added to namespace Yields: Namespace | Project: namespace or project """ + namespace_kwargs = { + "name": name, + "client": admin_client, + "teardown": teardown, + "delete_timeout": delete_timeout, + "label": labels or {}, + } + + if ns_annotations: + namespace_kwargs["annotations"] = ns_annotations + + if model_mesh_enabled: + namespace_kwargs["label"]["modelmesh-enabled"] = "true" # type: ignore + + if add_dashboard_label: + namespace_kwargs["label"][Labels.OpenDataHub.DASHBOARD] = "true" # type: ignore + if unprivileged_client: with ProjectRequest(name=name, client=unprivileged_client, teardown=teardown): - project = Project( - name=name, - client=unprivileged_client, - teardown=teardown, - delete_timeout=delete_timeout, - ) + project = Project(**namespace_kwargs) project.wait_for_status(status=project.Status.ACTIVE, timeout=Timeout.TIMEOUT_2MIN) yield project else: - with Namespace( - client=admin_client, - name=name, - label=labels, - teardown=teardown, - delete_timeout=delete_timeout, - ) as ns: + with Namespace(**namespace_kwargs) as ns: ns.wait_for_status(status=Namespace.Status.ACTIVE, timeout=Timeout.TIMEOUT_2MIN) yield ns