Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion src/configuration.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,10 @@ def load_configuration(self, filename: str) -> None:
with open(filename, encoding="utf-8") as fin:
config_dict = yaml.safe_load(fin)
logger.info("Loaded configuration: %s", config_dict)
self._configuration = Configuration(**config_dict)
self.init_from_dict(config_dict)

def init_from_dict(self, config_dict: dict[Any, Any]):
self._configuration = Configuration(**config_dict)

@property
def configuration(self) -> Configuration:
Expand Down
28 changes: 28 additions & 0 deletions tests/integration/test_configuration.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
"""Integration tests for configuration loading and handling."""

import pytest
from src.configuration import configuration


@pytest.fixture
def configuration_filename():
return "tests/configuration/lightspeed-stack.yaml"


def test_default_configuration():
cfg = configuration
assert cfg is not None
with pytest.raises(Exception, match="logic error: configuration is not loaded"):
configuration.configuration


def test_loading_proper_configuration(configuration_filename):
cfg = configuration
cfg.load_configuration(configuration_filename)
assert cfg is not None
assert cfg.configuration is not None
assert cfg.llama_stack_configuration is not None
name = cfg.configuration.name
assert name == "foo bar baz"
ls_config = cfg.llama_stack_configuration
assert ls_config.url == "http://localhost:8321"
54 changes: 52 additions & 2 deletions tests/unit/test_configuration.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,58 @@
"""Unit tests for functions defined in src/configuration.py."""

from src.configuration import configuration
import pytest
from src.configuration import AppConfig


def test_default_configuration():
cfg = configuration
cfg = AppConfig()
assert cfg is not None

# configuration is not loaded
with pytest.raises(Exception, match="logic error: configuration is not loaded"):
# try to read property
cfg.configuration

with pytest.raises(Exception, match="logic error: configuration is not loaded"):
# try to read property
cfg.llama_stack_configuration


def test_configuration_is_singleton():
cfg1 = AppConfig()
cfg2 = AppConfig()
assert cfg1 == cfg2


def test_init_from_dict():
config_dict = {
"name": "foo",
"llama_stack": {
"api_key": "xyzzy",
"url": "http://x.y.com:1234",
"use_as_library_client": False,
},
}
cfg = AppConfig()
cfg.init_from_dict(config_dict)
assert cfg.configuration is not None
assert cfg.llama_stack_configuration is not None


def test_load_proper_configuration(tmpdir):
cfg_filename = tmpdir / "config.yaml"
with open(cfg_filename, "w") as fout:
fout.write(
"""
name: foo bar baz
llama_stack:
use_as_library_client: false
url: http://localhost:8321
api_key: xyzzy
"""
)

cfg = AppConfig()
cfg.load_configuration(cfg_filename)
assert cfg.configuration is not None
assert cfg.llama_stack_configuration is not None