Skip to content

Commit eade4c8

Browse files
mwaykoleMilind Waykole
andauthored
test: Add test for kserve-raw model car (#337)
* test: Add test for kserve-raw model car Signed-off-by: Milind Waykole <mwaykole@mwaykole-thinkpadp1gen4i.bengluru.csb> * test: Add test for kserve-raw model car Signed-off-by: Milind Waykole <mwaykole@mwaykole-thinkpadp1gen4i.bengluru.csb> * test: Add test for kserve-raw model car Signed-off-by: Milind Waykole <mwaykole@mwaykole-thinkpadp1gen4i.bengluru.csb> --------- Signed-off-by: Milind Waykole <mwaykole@mwaykole-thinkpadp1gen4i.bengluru.csb> Co-authored-by: Milind Waykole <mwaykole@mwaykole-thinkpadp1gen4i.bengluru.csb>
1 parent 55baa49 commit eade4c8

File tree

3 files changed

+38
-14
lines changed

3 files changed

+38
-14
lines changed

tests/model_serving/model_server/model_car/conftest.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,20 +12,22 @@
1212

1313

1414
@pytest.fixture(scope="class")
15-
def model_car_serverless_inference_service(
15+
def model_car_inference_service(
1616
request: FixtureRequest,
1717
unprivileged_client: DynamicClient,
1818
unprivileged_model_namespace: Namespace,
1919
serving_runtime_from_template: ServingRuntime,
2020
) -> Generator[InferenceService, Any, Any]:
21+
deployment_mode = request.param.get("deployment-mode", KServeDeploymentType.SERVERLESS)
2122
with create_isvc(
2223
client=unprivileged_client,
23-
name="serverless-model-car",
24+
name=f"model-car-{deployment_mode.lower()}",
2425
namespace=unprivileged_model_namespace.name,
2526
runtime=serving_runtime_from_template.name,
2627
storage_uri=request.param["storage-uri"],
2728
model_format=serving_runtime_from_template.instance.spec.supportedModelFormats[0].name,
28-
deployment_mode=KServeDeploymentType.SERVERLESS,
29+
deployment_mode=deployment_mode,
30+
external_route=request.param.get("external-route", True),
2931
wait_for_predictor_pods=False, # Until modelcar initContainer completed, other containers may have Error status
3032
) as isvc:
3133
yield isvc

tests/model_serving/model_server/model_car/test_oci_image.py

Lines changed: 27 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,15 @@
22

33
from tests.model_serving.model_server.utils import verify_inference_response
44
from utilities.infra import get_pods_by_isvc_label
5-
from utilities.constants import ModelFormat, ModelName, Protocols, RuntimeTemplates
5+
from utilities.constants import ModelCarImage, ModelFormat, ModelName, Protocols, RuntimeTemplates, KServeDeploymentType
66
from utilities.inference_utils import Inference
77
from utilities.manifests.onnx import ONNX_INFERENCE_CONFIG
88

9-
pytestmark = pytest.mark.serverless
9+
pytestmark = [pytest.mark.serverless, pytest.mark.rawdeployment]
1010

1111

1212
@pytest.mark.parametrize(
13-
"unprivileged_model_namespace, serving_runtime_from_template, model_car_serverless_inference_service",
13+
"unprivileged_model_namespace, serving_runtime_from_template, model_car_inference_service",
1414
[
1515
pytest.param(
1616
{"name": f"{ModelFormat.OPENVINO}-model-car"},
@@ -21,33 +21,49 @@
2121
},
2222
{
2323
# Using mnist-8-1 model from OCI image
24-
"storage-uri": "oci://quay.io/mwaykole/test@sha256:8a3217bcfa2cc5fa3d07496cff8b234acdf2c9725dd307dc0a80401f55e1a11c" # noqa: E501
24+
"storage-uri": ModelCarImage.MNIST_8_1,
25+
"deployment-mode": KServeDeploymentType.SERVERLESS,
2526
},
26-
)
27+
marks=[pytest.mark.serverless],
28+
),
29+
pytest.param(
30+
{"name": f"{ModelFormat.OPENVINO}-model-car"},
31+
{
32+
"name": f"{ModelName.MNIST}-runtime",
33+
"template-name": RuntimeTemplates.OVMS_KSERVE,
34+
"multi-model": False,
35+
},
36+
{
37+
# Using mnist-8-1 model from OCI image
38+
"storage-uri": ModelCarImage.MNIST_8_1,
39+
"deployment-mode": KServeDeploymentType.RAW_DEPLOYMENT,
40+
},
41+
marks=[pytest.mark.rawdeployment],
42+
),
2743
],
2844
indirect=True,
2945
)
3046
class TestKserveModelCar:
3147
@pytest.mark.smoke
3248
@pytest.mark.jira("RHOAIENG-13465")
33-
def test_model_car_no_restarts(self, model_car_serverless_inference_service):
49+
def test_model_car_no_restarts(self, model_car_inference_service):
3450
"""Verify that model pod doesn't restart"""
3551
pod = get_pods_by_isvc_label(
36-
client=model_car_serverless_inference_service.client,
37-
isvc=model_car_serverless_inference_service,
52+
client=model_car_inference_service.client,
53+
isvc=model_car_inference_service,
3854
)[0]
3955
restarted_containers = [
40-
container.name for container in pod.instance.status.containerStatuses if container.restartCount > 1
56+
container.name for container in pod.instance.status.containerStatuses if container.restartCount > 2
4157
]
4258
assert not restarted_containers, f"Containers {restarted_containers} restarted"
4359

4460
@pytest.mark.smoke
4561
@pytest.mark.ocp_interop
4662
@pytest.mark.jira("RHOAIENG-12306")
47-
def test_model_car_using_rest(self, model_car_serverless_inference_service):
63+
def test_model_car_using_rest(self, model_car_inference_service):
4864
"""Verify model query with token using REST"""
4965
verify_inference_response(
50-
inference_service=model_car_serverless_inference_service,
66+
inference_service=model_car_inference_service,
5167
inference_config=ONNX_INFERENCE_CONFIG,
5268
inference_type=Inference.INFER,
5369
protocol=Protocols.HTTPS,

utilities/constants.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -211,6 +211,12 @@ class RunTimeConfigs:
211211
}
212212

213213

214+
class ModelCarImage:
215+
MNIST_8_1: str = (
216+
"oci://quay.io/mwaykole/test@sha256:8a3217bcfa2cc5fa3d07496cff8b234acdf2c9725dd307dc0a80401f55e1a11c" # noqa: E501
217+
)
218+
219+
214220
class MinIo:
215221
class Metadata:
216222
NAME: str = "minio"

0 commit comments

Comments
 (0)