11import pytest
22
3- from tests .model_explainability .trustyai_service .constants import DRIFT_BASE_DATA_PATH
3+ from tests .model_explainability .trustyai_service .service .utils import (
4+ wait_for_trustyai_db_migration_complete_log ,
5+ patch_trustyai_service_cr ,
6+ )
7+ from tests .model_explainability .trustyai_service .constants import DRIFT_BASE_DATA_PATH , TRUSTYAI_DB_MIGRATION_PATCH
48from tests .model_explainability .trustyai_service .trustyai_service_utils import (
59 send_inferences_and_verify_trustyai_service_registered ,
610 verify_upload_data_to_trustyai_service ,
1014)
1115from utilities .constants import MinIo
1216from utilities .manifests .openvino import OPENVINO_KSERVE_INFERENCE_CONFIG
17+ from timeout_sampler import retry
1318
1419
1520@pytest .mark .parametrize (
@@ -78,7 +83,7 @@ def test_trustyai_service_pre_upgrade_drift_metric_schedule_meanshift(
7883 token = current_client_token ,
7984 metric_name = TrustyAIServiceMetrics .Drift .MEANSHIFT ,
8085 json_data = {
81- "modelId" : gaussian_credit_model . name ,
86+ "modelId" : "gaussian-credit-model" ,
8287 "referenceTag" : "TRAINING" ,
8388 },
8489 )
@@ -98,7 +103,7 @@ def test_trustyai_service_pre_upgrade_drift_metric_schedule_meanshift(
98103@pytest .mark .usefixtures ("minio_pod" )
99104class TestPostUpgradeTrustyAIService :
100105 @pytest .mark .post_upgrade
101- def test_drift_metric_delete (
106+ def test_drift_metric_delete_pre_db_migration (
102107 self ,
103108 admin_client ,
104109 minio_data_connection ,
@@ -112,3 +117,80 @@ def test_drift_metric_delete(
112117 token = current_client_token ,
113118 metric_name = TrustyAIServiceMetrics .Drift .MEANSHIFT ,
114119 )
120+
121+ @pytest .mark .dependency (name = "db_migration" )
122+ @pytest .mark .post_upgrade
123+ def test_trustyai_service_db_migration (
124+ self ,
125+ admin_client ,
126+ current_client_token ,
127+ mariadb ,
128+ trustyai_db_ca_secret ,
129+ trustyai_service ,
130+ gaussian_credit_model ,
131+ ) -> None :
132+ """Verify if TrustyAI DB Migration works as expected.
133+ This test initializes TrustyAI Service with PVC Storage at first with a database on standby but the service is
134+ not
135+ configured to use it.
136+ Data is uploaded to the PVC, then the TrustyAI CR is patched to trigger a migration from PVC to DB storage.
137+ config.
138+ Then waits for the migration success entry in the container logs and patches the service again to remove PVC
139+ config.
140+ Finally, a metric is scheduled and checked if the service works as expected post-migration.
141+
142+ Args:
143+ admin_client: DynamicClient
144+ current_client_token: RedactedString
145+ mariadb: MariaDB
146+ trustyai_db_ca_secret: None
147+ trustyai_service: TrustyAIService
148+ gaussian_credit_model: Generator[InferenceService, Any, Any]
149+
150+ Returns:
151+ None
152+ """
153+ trustyai_db_migration_patched_service = patch_trustyai_service_cr (
154+ trustyai_service = trustyai_service , patches = TRUSTYAI_DB_MIGRATION_PATCH
155+ )
156+
157+ wait_for_trustyai_db_migration_complete_log (
158+ client = admin_client ,
159+ trustyai_service = trustyai_db_migration_patched_service ,
160+ )
161+
162+ @retry (wait_timeout = 30 , sleep = 5 )
163+ def _retry_metric_verify_on_err ():
164+ return bool (
165+ verify_trustyai_service_metric_scheduling_request (
166+ client = admin_client ,
167+ trustyai_service = trustyai_db_migration_patched_service ,
168+ token = current_client_token ,
169+ metric_name = TrustyAIServiceMetrics .Drift .MEANSHIFT ,
170+ json_data = {
171+ "modelId" : "gaussian-credit-model" ,
172+ "referenceTag" : "TRAINING" ,
173+ },
174+ )
175+ is None
176+ )
177+
178+ _retry_metric_verify_on_err ()
179+
180+ @pytest .mark .dependency (depends = ["db_migration" ])
181+ @pytest .mark .post_upgrade
182+ def test_drift_metric_delete_post_db_migration (
183+ self ,
184+ admin_client ,
185+ minio_data_connection ,
186+ current_client_token ,
187+ trustyai_db_ca_secret ,
188+ trustyai_service ,
189+ ):
190+ """Retrieve the metric scheduled post-migration and delete it."""
191+ verify_trustyai_service_metric_delete_request (
192+ client = admin_client ,
193+ trustyai_service = trustyai_service ,
194+ token = current_client_token ,
195+ metric_name = TrustyAIServiceMetrics .Drift .MEANSHIFT ,
196+ )
0 commit comments