Skip to content

Commit b53d565

Browse files
committed
feat: add test for incorrect DB TLS config in Trusty AI
1 parent 3d17823 commit b53d565

3 files changed

Lines changed: 76 additions & 7 deletions

File tree

tests/model_explainability/trustyai_service/conftest.py

Lines changed: 52 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,9 @@
1414
from ocp_resources.secret import Secret
1515
from ocp_resources.subscription import Subscription
1616
from ocp_resources.trustyai_service import TrustyAIService
17+
from ocp_resources.utils.constants import TIMEOUT_2MINUTES
1718
from ocp_utilities.operators import install_operator, uninstall_operator
19+
from timeout_sampler import TimeoutExpiredError
1820

1921
from tests.model_explainability.trustyai_service.trustyai_service_utils import TRUSTYAI_SERVICE_NAME
2022
from tests.model_explainability.trustyai_service.utils import (
@@ -35,6 +37,11 @@
3537
DB_NAME: str = "trustyai_db"
3638
DB_USERNAME: str = "trustyai_user"
3739
DB_PASSWORD: str = "trustyai_password"
40+
FAKE_TLS_CERTIFICATE: str = (
41+
"LS0tLS1CRUdJTiBDRVJUSUZJQ0FUR"
42+
"S0tLS0tXG5kMzRkYjMzZlxuLS0tLS"
43+
"1FTkQgQ0VSVElGSUNBVEUtLS0tLQ=="
44+
) # pragma: allowlist secret
3845

3946

4047
@pytest.fixture(scope="class")
@@ -82,6 +89,29 @@ def trustyai_service_with_db_storage(
8289
yield trustyai_service
8390

8491

92+
@pytest.fixture(scope="class")
93+
def trustyai_service_with_invalid_cert_db_storage(
94+
admin_client: DynamicClient,
95+
model_namespace: Namespace,
96+
cluster_monitoring_config: ConfigMap,
97+
user_workload_monitoring_config: ConfigMap,
98+
mariadb: MariaDB,
99+
trustyai_invalid_db_ca_secret: None,
100+
) -> None:
101+
with TrustyAIService(
102+
client=admin_client,
103+
name=TRUSTYAI_SERVICE_NAME,
104+
namespace=model_namespace.name,
105+
storage={"format": "DATABASE", "size": "1Gi", "databaseConfigurations": "db-credentials"},
106+
metrics={"schedule": "5s"},
107+
):
108+
trustyai_deployment = Deployment(
109+
namespace=model_namespace.name, name=TRUSTYAI_SERVICE_NAME, wait_for_resource=True
110+
)
111+
with pytest.raises(TimeoutExpiredError):
112+
trustyai_deployment.wait_for_replicas(timeout=TIMEOUT_2MINUTES)
113+
114+
85115
@pytest.fixture(scope="session")
86116
def user_workload_monitoring_config(admin_client: DynamicClient) -> Generator[ConfigMap, Any, Any]:
87117
data = {"config.yaml": yaml.dump({"prometheus": {"logLevel": "debug", "retention": "15d"}})}
@@ -238,17 +268,32 @@ def mariadb(
238268
yield mariadb
239269

240270

241-
@pytest.fixture(scope="class")
242-
def trustyai_db_ca_secret(
243-
admin_client: DynamicClient, model_namespace: Namespace, mariadb: MariaDB
271+
def set_trustyai_db_ca_secret(
272+
admin_client: DynamicClient, mariadb_ca_cert: str, model_namespace: Namespace
244273
) -> Generator[None, Any, None]:
245-
mariadb_ca_secret = Secret(
246-
client=admin_client, name=f"{mariadb.name}-ca", namespace=model_namespace.name, ensure_exists=True
247-
)
248274
with Secret(
249275
client=admin_client,
250276
name=f"{TRUSTYAI_SERVICE_NAME}-db-ca",
251277
namespace=model_namespace.name,
252-
data_dict={"ca.crt": mariadb_ca_secret.instance.data["ca.crt"]},
278+
data_dict={"ca.crt": mariadb_ca_cert},
253279
):
254280
yield
281+
282+
283+
@pytest.fixture(scope="class")
284+
def trustyai_db_ca_secret(
285+
admin_client: DynamicClient, model_namespace: Namespace, mariadb: MariaDB
286+
) -> Generator[None, Any, None]:
287+
mariadb_ca_secret = Secret(
288+
client=admin_client, name=f"{mariadb.name}-ca", namespace=model_namespace.name, ensure_exists=True
289+
)
290+
mariadb_ca_cert = mariadb_ca_secret.instance.data["ca.crt"]
291+
yield from set_trustyai_db_ca_secret(admin_client, mariadb_ca_cert, model_namespace)
292+
293+
294+
@pytest.fixture(scope="class")
295+
def trustyai_invalid_db_ca_secret(
296+
admin_client: DynamicClient, model_namespace: Namespace, mariadb: MariaDB
297+
) -> Generator[None, Any, None]:
298+
mariadb_ca_cert = FAKE_TLS_CERTIFICATE
299+
yield from set_trustyai_db_ca_secret(admin_client, mariadb_ca_cert, model_namespace)

tests/model_explainability/trustyai_service/fairness/test_fairness.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,16 @@ def test_fairness_send_inference_and_verify_trustyai_service_with_db_storage(
156156
inference_config=OPENVINO_KSERVE_INFERENCE_CONFIG,
157157
)
158158

159+
def test_invalid_db_certificate_trustyai_service_with_db_storage(
160+
self,
161+
admin_client,
162+
current_client_token,
163+
model_namespace,
164+
trustyai_service_with_invalid_cert_db_storage,
165+
minio_data_connection,
166+
):
167+
return
168+
159169
def test_name_mappings_with_db_storage(
160170
self, admin_client, current_client_token, model_namespace, trustyai_service_with_db_storage, onnx_loan_model
161171
):

tests/model_explainability/trustyai_service/trustyai_service_utils.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -634,3 +634,17 @@ def verify_trustyai_service_name_mappings(
634634
assert response_output_mappings == output_mappings, (
635635
f"Output mappings mismatch. Expected: {output_mappings}, Got: {response_output_mappings}"
636636
)
637+
638+
639+
def invalid_db_cert_trustyai_service_with_db_storage(
640+
client: DynamicClient, token: str, data_path: str, trustyai_service: TrustyAIService
641+
) -> None:
642+
"""
643+
Creates a MariaDB pod with TLS enabled but sets the wrong certificate as a secret to trustyai_service.
644+
Args:
645+
client (DynamicClient): The client instance for making API calls.
646+
token (str): Authentication token for API access.
647+
data_path (str): Directory path containing data batch files.
648+
trustyai_service (TrustyAIService): TrustyAIService that will register the model.
649+
"""
650+
return

0 commit comments

Comments
 (0)