Skip to content

Commit a70de1b

Browse files
committed
test: add s3 storage provider test fixtures
1 parent d2c19b9 commit a70de1b

File tree

4 files changed

+86
-0
lines changed

4 files changed

+86
-0
lines changed

tests/conftest.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@
7171
"tests.fixtures.guardrails",
7272
"tests.fixtures.trustyai",
7373
"tests.fixtures.vector_io",
74+
"tests.fixtures.files",
7475
]
7576

7677

tests/fixtures/files.py

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
from typing import Callable, Dict
2+
import pytest
3+
import os
4+
from _pytest.fixtures import FixtureRequest
5+
6+
S3_AUTO_CREATE_BUCKET = os.getenv("LLS_FILES_S3_AUTO_CREATE_BUCKET", "true")
7+
8+
9+
@pytest.fixture(scope="class")
10+
def files_provider_config_factory(
11+
request: FixtureRequest,
12+
) -> Callable[[str], list[Dict[str, str]]]:
13+
"""
14+
Factory fixture for configuring external files providers and returning their configuration.
15+
16+
This fixture returns a factory function that can configure additional files storage providers
17+
(such as S3/minio) and return the necessary environment variables
18+
for configuring the LlamaStack server to use these providers.
19+
20+
Args:
21+
request: Pytest fixture request object for accessing other fixtures
22+
23+
Returns:
24+
Callable[[str], list[Dict[str, str]]]: Factory function that takes a provider name
25+
and returns a list of environment variable dictionaries
26+
27+
Supported Providers:
28+
- "local": defaults to using just local filesystem
29+
- "s3": a remote S3/Minio storage provider
30+
31+
Environment Variables by Provider:
32+
- "s3":
33+
* ENABLE_S3: Enables S3/Minio storage provider
34+
* CI_S3_BUCKET_NAME: Name of the S3/Minio bucket
35+
* CI_S3_BUCKET_REGION: Region of the S3/Minio bucket
36+
* CI_S3_BUCKET_ENDPOINT: Endpoint URL of the S3/Minio bucket
37+
* AWS_ACCESS_KEY_ID: Access key ID for the S3/Minio bucket
38+
* AWS_SECRET_ACCESS_KEY: Secret access key for the S3/Minio bucket
39+
* S3_AUTO_CREATE_BUCKET: Whether to automatically create the S3/Minio bucket if it doesn't exist
40+
41+
Example:
42+
def test_with_s3(files_provider_config_factory):
43+
env_vars = files_provider_config_factory("s3")
44+
# env_vars contains S3_BUCKET_NAME, S3_BUCKET_ENDPOINT_URL, etc.
45+
"""
46+
47+
def _factory(provider_name: str) -> list[Dict[str, str]]:
48+
env_vars: list[dict[str, str]] = []
49+
50+
if provider_name == "local" or provider_name is None:
51+
# Default case - no additional environment variables needed
52+
pass
53+
elif provider_name == "s3":
54+
env_vars.append({"name": "ENABLE_S3", "value": "s3"})
55+
env_vars.append({"name": "S3_BUCKET_NAME", "value": request.getfixturevalue(argname="ci_s3_bucket_name")})
56+
env_vars.append({
57+
"name": "AWS_DEFAULT_REGION",
58+
"value": request.getfixturevalue(argname="ci_s3_bucket_region"),
59+
})
60+
env_vars.append({
61+
"name": "S3_ENDPOINT_URL",
62+
"value": request.getfixturevalue(argname="ci_s3_bucket_endpoint"),
63+
})
64+
env_vars.append({
65+
"name": "AWS_ACCESS_KEY_ID",
66+
"value": request.getfixturevalue(argname="aws_access_key_id"),
67+
})
68+
env_vars.append({
69+
"name": "AWS_SECRET_ACCESS_KEY",
70+
"value": request.getfixturevalue(argname="aws_secret_access_key"),
71+
})
72+
env_vars.append({"name": "S3_AUTO_CREATE_BUCKET", "value": S3_AUTO_CREATE_BUCKET})
73+
74+
return env_vars
75+
76+
return _factory

tests/llama_stack/conftest.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ def enabled_llama_stack_operator(dsc_resource: DataScienceCluster) -> Generator[
5050
def llama_stack_server_config(
5151
request: FixtureRequest,
5252
vector_io_provider_deployment_config_factory: Callable[[str], list[Dict[str, str]]],
53+
files_provider_config_factory: Callable[[str], list[Dict[str, str]]],
5354
) -> Dict[str, Any]:
5455
"""
5556
Generate server configuration for LlamaStack distribution deployment and deploy vector I/O provider resources.
@@ -189,6 +190,11 @@ def test_with_remote_milvus(llama_stack_server_config):
189190
# KUBEFLOW_PIPELINES_TOKEN: Get from current client token
190191
env_vars.append({"name": "KUBEFLOW_PIPELINES_TOKEN", "value": str(current_client_token)})
191192

193+
# Depending on parameter files_provider, configure files provider and obtain required env_vars
194+
files_provider = params.get("files_provider") or "local"
195+
env_vars_files = files_provider_config_factory(provider_name=files_provider)
196+
env_vars.extend(env_vars_files)
197+
192198
# Depending on parameter vector_io_provider, deploy vector_io provider and obtain required env_vars
193199
vector_io_provider = params.get("vector_io_provider") or "milvus"
194200
env_vars_vector_io = vector_io_provider_deployment_config_factory(provider_name=vector_io_provider)

tests/llama_stack/vector_io/test_vector_stores.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
{
2121
"llama_stack_storage_size": "2Gi",
2222
"vector_io_provider": "milvus",
23+
"files_provider": "s3",
2324
},
2425
{"vector_io_provider": "milvus"},
2526
id="vector_io_provider_milvus",
@@ -29,6 +30,7 @@
2930
{
3031
"llama_stack_storage_size": "2Gi",
3132
"vector_io_provider": "faiss",
33+
"files_provider": "local",
3234
},
3335
{"vector_io_provider": "faiss"},
3436
id="vector_io_provider_faiss",
@@ -38,6 +40,7 @@
3840
{
3941
"llama_stack_storage_size": "2Gi",
4042
"vector_io_provider": "milvus-remote",
43+
"files_provider": "s3",
4144
},
4245
{"vector_io_provider": "milvus-remote"},
4346
id="vector_io_provider_milvus-remote",

0 commit comments

Comments
 (0)