Skip to content

Commit 46a6796

Browse files
authored
Add post-upgrade DB migration tests to TrustyAI [Cherry Pick to 2.25, 3.0, 3.2 and 3.3 required] (#1087)
* feat: add test to migrate trustyai db * feat: retry metrics verify on failure
1 parent 572bf92 commit 46a6796

File tree

1 file changed

+85
-3
lines changed

1 file changed

+85
-3
lines changed

tests/model_explainability/trustyai_service/upgrade/test_trustyai_service_upgrade.py

Lines changed: 85 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
import 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
48
from tests.model_explainability.trustyai_service.trustyai_service_utils import (
59
send_inferences_and_verify_trustyai_service_registered,
610
verify_upload_data_to_trustyai_service,
@@ -10,6 +14,7 @@
1014
)
1115
from utilities.constants import MinIo
1216
from 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")
99104
class 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

Comments
 (0)