Skip to content

Commit bbac0b9

Browse files
Stabilize vector index test resources
1 parent 0ffecc5 commit bbac0b9

7 files changed

Lines changed: 194 additions & 139 deletions

‎tests/vector_index/conftest.py‎

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
import logging
99
import os
10+
import uuid
1011
from pathlib import Path
1112

1213
import pytest
@@ -103,7 +104,27 @@ def vcidx_params(
103104
embedding_location,
104105
vcidx_object_store_credentials,
105106
):
107+
py_suffix = os.environ.get("PYTHON_VERSION_WITHOUT_DOT")
108+
run_suffix = os.environ.get("GITHUB_RUN_ID")
109+
run_attempt = os.environ.get("GITHUB_RUN_ATTEMPT")
110+
if run_suffix and run_attempt:
111+
run_suffix = f"{run_suffix}_{run_attempt}"
112+
elif not run_suffix:
113+
run_suffix = uuid.uuid4().hex[:12].upper()
114+
115+
if py_suffix:
116+
resource_suffix = f"PY{py_suffix}_{run_suffix}"
117+
else:
118+
resource_suffix = f"PYSAI_{run_suffix}"
119+
106120
return {
121+
"resource_suffix": resource_suffix,
122+
"genai_cred": f"GENAI_CRED_{resource_suffix}",
123+
"objstore_cred": f"OBJSTORE_CRED_{resource_suffix}",
124+
"profile_name": f"vector_ai_profile_{resource_suffix}",
125+
"attr_index_name": f"test_vector_index_attr_{resource_suffix}",
126+
"list_index_prefix": f"test_vector_index_{resource_suffix}",
127+
"list_vecidx_prefix": f"test_vecidx_{resource_suffix}",
107128
"user": test_env.admin_user,
108129
"password": test_env.admin_password,
109130
"dsn": test_env.connect_string,

‎tests/vector_index/test_5200_async_setindex_attributes.py‎

Lines changed: 24 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
# http://oss.oracle.com/licenses/upl.
66
# -----------------------------------------------------------------------------
77

8+
import asyncio
89
import logging
910

1011
import oracledb
@@ -45,18 +46,21 @@ async def setup_and_teardown(request, async_connect, set_vec_params, test_env):
4546
request.cls.cred_password = p["cred_password"]
4647
request.cls.oci_compartment_id = p["oci_compartment_id"]
4748
request.cls.embedding_location = p["embedding_location"]
48-
request.cls.objstore_cred = "OBJSTORE_CRED"
49+
request.cls.resource_suffix = p["resource_suffix"]
50+
request.cls.genai_cred = p["genai_cred"]
51+
request.cls.objstore_cred = p["objstore_cred"]
52+
request.cls.profile_name = p["profile_name"]
4953
request.cls.reconnect_params = test_env.connect_params()
5054

5155
logger.info("Fetching credential secrets and OCI configuration...")
5256
await request.cls.create_credential()
5357
request.cls.profile = await request.cls.create_profile()
54-
logger.info("Profile 'vector_ai_profile' created successfully.")
58+
logger.info("Profile %s created successfully.", request.cls.profile_name)
5559

56-
request.cls.index_name = "test_vector_index_attr"
60+
request.cls.index_name = p["attr_index_name"]
5761
vi_attrs = OracleVectorIndexAttributes(
5862
location=p["embedding_location"],
59-
object_storage_credential_name="OBJSTORE_CRED",
63+
object_storage_credential_name=request.cls.objstore_cred,
6064
)
6165
request.cls.vector_index_attributes = vi_attrs
6266

@@ -152,8 +156,10 @@ def get_cred_param(cls, cred_name=None) -> dict:
152156

153157
@classmethod
154158
async def create_credential(
155-
cls, genai_cred="GENAI_CRED", objstore_cred="OBJSTORE_CRED"
159+
cls, genai_cred=None, objstore_cred=None
156160
):
161+
genai_cred = genai_cred or cls.genai_cred
162+
objstore_cred = objstore_cred or cls.objstore_cred
157163
logger.info("Creating credentials: %s, %s", genai_cred, objstore_cred)
158164

159165
genai_credential = cls.get_native_cred_param(genai_cred)
@@ -177,12 +183,13 @@ async def create_credential(
177183
)
178184

179185
@classmethod
180-
async def create_profile(cls, profile_name="vector_ai_profile"):
186+
async def create_profile(cls, profile_name=None):
181187
p = cls.set_vec_params
188+
profile_name = profile_name or cls.profile_name
182189
return await select_ai.AsyncProfile(
183190
profile_name=profile_name,
184191
attributes=select_ai.ProfileAttributes(
185-
credential_name="GENAI_CRED",
192+
credential_name=cls.genai_cred,
186193
provider=select_ai.OCIGenAIProvider(
187194
oci_compartment_id=p["oci_compartment_id"],
188195
oci_apiformat="GENERIC",
@@ -200,12 +207,12 @@ async def delete_profile(cls, profile):
200207
@classmethod
201208
async def delete_credential(cls):
202209
try:
203-
await select_ai.async_delete_credential("GENAI_CRED", force=True)
210+
await select_ai.async_delete_credential(cls.genai_cred, force=True)
204211
except Exception as exc:
205212
logger.warning("delete_credential() raised %s unexpectedly.", exc)
206213
try:
207214
await select_ai.async_delete_credential(
208-
"OBJSTORE_CRED", force=True
215+
cls.objstore_cred, force=True
209216
)
210217
except Exception as exc:
211218
logger.warning("delete_credential() raised %s unexpectedly.", exc)
@@ -533,7 +540,7 @@ async def test_5212(self):
533540
)
534541
await self.async_vector_index.set_attribute(
535542
"object_storage_credential_name",
536-
"OBJSTORE_CRED",
543+
self.objstore_cred,
537544
)
538545
logger.info("Restarting pipeline: %s", pipeline_name)
539546
async with select_ai.async_cursor() as cursor:
@@ -544,7 +551,7 @@ async def test_5212(self):
544551
)
545552
logger.info("Pipeline '%s' restarted successfully.", pipeline_name)
546553
attrs = await self.async_vector_index.get_attributes()
547-
assert attrs.object_storage_credential_name == "OBJSTORE_CRED"
554+
assert attrs.object_storage_credential_name == self.objstore_cred
548555
logger.info("Object Store credential restored successfully.")
549556

550557
async def test_5213(self):
@@ -611,12 +618,12 @@ async def test_5213(self):
611618
"Restoring original Object Store credential: OBJSTORE_CRED"
612619
)
613620
await select_ai.async_create_credential(
614-
credential=self.get_cred_param("OBJSTORE_CRED"),
621+
credential=self.get_cred_param(self.objstore_cred),
615622
replace=True,
616623
)
617624
await self.async_vector_index.set_attribute(
618625
"object_storage_credential_name",
619-
"OBJSTORE_CRED",
626+
self.objstore_cred,
620627
)
621628
logger.info("Restarting pipeline: %s", pipeline_name)
622629
async with select_ai.async_cursor() as cursor:
@@ -627,7 +634,7 @@ async def test_5213(self):
627634
)
628635
logger.info("Pipeline '%s' restarted successfully.", pipeline_name)
629636
attrs = await self.async_vector_index.get_attributes()
630-
assert attrs.object_storage_credential_name == "OBJSTORE_CRED"
637+
assert attrs.object_storage_credential_name == self.objstore_cred
631638
logger.info(
632639
"Object Store credential restoration after delete "
633640
"verified successfully."
@@ -677,12 +684,12 @@ async def test_5214(self):
677684
assert "ORA-20004" in str(exc_info.value)
678685
assert temp_credential_name in str(exc_info.value)
679686
await select_ai.async_create_credential(
680-
credential=self.get_cred_param("OBJSTORE_CRED"),
687+
credential=self.get_cred_param(self.objstore_cred),
681688
replace=True,
682689
)
683690
await self.async_vector_index.set_attribute(
684691
"object_storage_credential_name",
685-
"OBJSTORE_CRED",
692+
self.objstore_cred,
686693
)
687694
async with select_ai.async_cursor() as cursor:
688695
await cursor.execute(
@@ -736,7 +743,7 @@ async def test_5217(self):
736743
)
737744
assert "ORA-20048" in str(exc_info.value)
738745
attrs = await self.async_vector_index.get_attributes()
739-
assert attrs.pipeline_name == "TEST_VECTOR_INDEX_ATTR$VECPIPELINE"
746+
assert attrs.pipeline_name == f"{self.index_name.upper()}$VECPIPELINE"
740747
logger.info(
741748
"Pipeline update correctly raised error and original value retained."
742749
)

‎tests/vector_index/test_5200_setindex_attributes.py‎

Lines changed: 24 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -65,19 +65,22 @@ def setup_and_teardown(
6565
request.cls.cred_password = p["cred_password"]
6666
request.cls.oci_compartment_id = p["oci_compartment_id"]
6767
request.cls.embedding_location = p["embedding_location"]
68-
request.cls.objstore_cred = "OBJSTORE_CRED"
68+
request.cls.resource_suffix = p["resource_suffix"]
69+
request.cls.genai_cred = p["genai_cred"]
70+
request.cls.objstore_cred = p["objstore_cred"]
71+
request.cls.profile_name = p["profile_name"]
6972
request.cls.shared_oci_credential = oci_credential
7073
request.cls.reconnect_params = test_env.connect_params()
7174

7275
logger.info("Fetching credential secrets and OCI configuration...")
7376
request.cls.create_credential()
7477
request.cls.profile = request.cls.create_profile()
75-
logger.info("Profile 'vector_ai_profile' created successfully.")
78+
logger.info("Profile %s created successfully.", request.cls.profile_name)
7679

77-
request.cls.index_name = "test_vector_index_attr"
80+
request.cls.index_name = p["attr_index_name"]
7881
vi_attrs = OracleVectorIndexAttributes(
7982
location=p["embedding_location"],
80-
object_storage_credential_name="OBJSTORE_CRED",
83+
object_storage_credential_name=request.cls.objstore_cred,
8184
)
8285
request.cls.vector_index_attributes = vi_attrs
8386

@@ -150,8 +153,10 @@ def get_cred_param(cls, cred_name=None) -> dict:
150153

151154
@classmethod
152155
def create_credential(
153-
cls, genai_cred="GENAI_CRED", objstore_cred="OBJSTORE_CRED"
156+
cls, genai_cred=None, objstore_cred=None
154157
):
158+
genai_cred = genai_cred or cls.genai_cred
159+
objstore_cred = objstore_cred or cls.objstore_cred
155160
logger.info(f"Creating credentials: {genai_cred}, {objstore_cred}")
156161

157162
genai_credential = cls.get_native_cred_param(genai_cred)
@@ -171,12 +176,13 @@ def create_credential(
171176
)
172177

173178
@classmethod
174-
def create_profile(cls, profile_name="vector_ai_profile"):
179+
def create_profile(cls, profile_name=None):
175180
p = cls.set_vec_params
181+
profile_name = profile_name or cls.profile_name
176182
return select_ai.Profile(
177183
profile_name=profile_name,
178184
attributes=select_ai.ProfileAttributes(
179-
credential_name="GENAI_CRED",
185+
credential_name=cls.genai_cred,
180186
provider=select_ai.OCIGenAIProvider(
181187
oci_compartment_id=p["oci_compartment_id"],
182188
oci_apiformat="GENERIC",
@@ -194,11 +200,11 @@ def delete_profile(cls, profile):
194200
@classmethod
195201
def delete_credential(cls):
196202
try:
197-
select_ai.delete_credential("GENAI_CRED", force=True)
203+
select_ai.delete_credential(cls.genai_cred, force=True)
198204
except Exception as e:
199205
logger.warning(f"delete_credential() raised {e} unexpectedly.")
200206
try:
201-
select_ai.delete_credential("OBJSTORE_CRED", force=True)
207+
select_ai.delete_credential(cls.objstore_cred, force=True)
202208
except Exception as e:
203209
logger.warning(f"delete_credential() raised {e} unexpectedly.")
204210

@@ -533,7 +539,7 @@ def test_5212(self):
533539
"Restoring original Object Store credential: OBJSTORE_CRED"
534540
)
535541
self.vector_index.set_attribute(
536-
"object_storage_credential_name", "OBJSTORE_CRED"
542+
"object_storage_credential_name", self.objstore_cred
537543
)
538544
logger.info(f"Restarting pipeline: {pipeline_name}")
539545
with select_ai.cursor() as cursor:
@@ -543,7 +549,7 @@ def test_5212(self):
543549
)
544550
logger.info(f"Pipeline '{pipeline_name}' restarted successfully.")
545551
attrs = self.vector_index.get_attributes()
546-
assert attrs.object_storage_credential_name == "OBJSTORE_CRED"
552+
assert attrs.object_storage_credential_name == self.objstore_cred
547553
logger.info("Object Store credential restored successfully.")
548554

549555
def test_5213(self):
@@ -604,13 +610,13 @@ def test_5213(self):
604610
logger.info(
605611
"Restoring original Object Store credential: OBJSTORE_CRED"
606612
)
607-
self.get_cred_param("OBJSTORE_CRED")
613+
self.get_cred_param(self.objstore_cred)
608614
select_ai.create_credential(
609-
credential=self.get_cred_param("OBJSTORE_CRED"),
615+
credential=self.get_cred_param(self.objstore_cred),
610616
replace=True,
611617
)
612618
self.vector_index.set_attribute(
613-
"object_storage_credential_name", "OBJSTORE_CRED"
619+
"object_storage_credential_name", self.objstore_cred
614620
)
615621
logger.info(f"Restarting pipeline: {pipeline_name}")
616622
with select_ai.cursor() as cursor:
@@ -620,7 +626,7 @@ def test_5213(self):
620626
)
621627
logger.info(f"Pipeline '{pipeline_name}' restarted successfully.")
622628
attrs = self.vector_index.get_attributes()
623-
assert attrs.object_storage_credential_name == "OBJSTORE_CRED"
629+
assert attrs.object_storage_credential_name == self.objstore_cred
624630
logger.info(
625631
"Object Store credential restoration after delete verified successfully."
626632
)
@@ -666,12 +672,12 @@ def test_5214(self):
666672
assert "ORA-20004" in str(exc_info.value)
667673
assert temp_credential_name in str(exc_info.value)
668674
select_ai.create_credential(
669-
credential=self.get_cred_param("OBJSTORE_CRED"),
675+
credential=self.get_cred_param(self.objstore_cred),
670676
replace=True,
671677
)
672678
self.vector_index.set_attribute(
673679
"object_storage_credential_name",
674-
"OBJSTORE_CRED",
680+
self.objstore_cred,
675681
)
676682
with select_ai.cursor() as cursor:
677683
cursor.execute(
@@ -721,7 +727,7 @@ def test_5217(self):
721727
self.vector_index.set_attribute("pipeline_name", "test_pipeline")
722728
assert "ORA-20048" in str(exc_info.value)
723729
attrs = self.vector_index.get_attributes()
724-
assert attrs.pipeline_name == "TEST_VECTOR_INDEX_ATTR$VECPIPELINE"
730+
assert attrs.pipeline_name == f"{self.index_name.upper()}$VECPIPELINE"
725731
logger.info(
726732
"Pipeline update correctly raised error and original value retained."
727733
)

0 commit comments

Comments
 (0)