mirror of
https://github.com/TheNetworkGuy/netbox-zabbix-sync.git
synced 2025-07-14 09:51:26 -06:00
Added tests for config file, added logger for config file
This commit is contained in:
parent
04a610cf84
commit
819126ce36
@ -6,6 +6,8 @@ from importlib import util
|
|||||||
from os import environ
|
from os import environ
|
||||||
from logging import getLogger
|
from logging import getLogger
|
||||||
|
|
||||||
|
logger = getLogger(__name__)
|
||||||
|
|
||||||
DEFAULT_CONFIG = {
|
DEFAULT_CONFIG = {
|
||||||
"templates_config_context": False,
|
"templates_config_context": False,
|
||||||
"templates_config_context_overrule": False,
|
"templates_config_context_overrule": False,
|
||||||
@ -56,7 +58,7 @@ def load_config_file(config_default, config_file="config.py"):
|
|||||||
dconf[key] = getattr(config_module, key)
|
dconf[key] = getattr(config_module, key)
|
||||||
return dconf
|
return dconf
|
||||||
else:
|
else:
|
||||||
getLogger(__name__).warning(
|
logger.warning(
|
||||||
"Config file %s not found. Using default config "
|
"Config file %s not found. Using default config "
|
||||||
"and environment variables.", config_file)
|
"and environment variables.", config_file)
|
||||||
return None
|
return None
|
||||||
|
130
tests/test_configuration_parsing.py
Normal file
130
tests/test_configuration_parsing.py
Normal file
@ -0,0 +1,130 @@
|
|||||||
|
"""Tests for configuration parsing in the modules.config module."""
|
||||||
|
from unittest.mock import patch, MagicMock
|
||||||
|
from pathlib import Path
|
||||||
|
import os
|
||||||
|
from modules.config import load_config, DEFAULT_CONFIG, load_config_file, load_env_variable
|
||||||
|
|
||||||
|
|
||||||
|
def test_load_config_defaults():
|
||||||
|
"""Test that load_config returns default values when no config file or env vars are present"""
|
||||||
|
with patch('modules.config.load_config_file', return_value=DEFAULT_CONFIG.copy()), \
|
||||||
|
patch('modules.config.load_env_variable', return_value=None):
|
||||||
|
config = load_config()
|
||||||
|
assert config == DEFAULT_CONFIG
|
||||||
|
assert config["templates_config_context"] is False
|
||||||
|
assert config["create_hostgroups"] is True
|
||||||
|
|
||||||
|
|
||||||
|
def test_load_config_file():
|
||||||
|
"""Test that load_config properly loads values from config file"""
|
||||||
|
mock_config = DEFAULT_CONFIG.copy()
|
||||||
|
mock_config["templates_config_context"] = True
|
||||||
|
mock_config["sync_vms"] = True
|
||||||
|
|
||||||
|
with patch('modules.config.load_config_file', return_value=mock_config), \
|
||||||
|
patch('modules.config.load_env_variable', return_value=None):
|
||||||
|
config = load_config()
|
||||||
|
assert config["templates_config_context"] is True
|
||||||
|
assert config["sync_vms"] is True
|
||||||
|
# Unchanged values should remain as defaults
|
||||||
|
assert config["create_journal"] is False
|
||||||
|
|
||||||
|
|
||||||
|
def test_load_env_variables():
|
||||||
|
"""Test that load_config properly loads values from environment variables"""
|
||||||
|
# Mock env variable loading to return values for specific keys
|
||||||
|
def mock_load_env(key):
|
||||||
|
if key == "sync_vms":
|
||||||
|
return True
|
||||||
|
if key == "create_journal":
|
||||||
|
return True
|
||||||
|
return None
|
||||||
|
|
||||||
|
with patch('modules.config.load_config_file', return_value=DEFAULT_CONFIG.copy()), \
|
||||||
|
patch('modules.config.load_env_variable', side_effect=mock_load_env):
|
||||||
|
config = load_config()
|
||||||
|
assert config["sync_vms"] is True
|
||||||
|
assert config["create_journal"] is True
|
||||||
|
# Unchanged values should remain as defaults
|
||||||
|
assert config["templates_config_context"] is False
|
||||||
|
|
||||||
|
|
||||||
|
def test_env_vars_override_config_file():
|
||||||
|
"""Test that environment variables override values from config file"""
|
||||||
|
mock_config = DEFAULT_CONFIG.copy()
|
||||||
|
mock_config["templates_config_context"] = True
|
||||||
|
mock_config["sync_vms"] = False
|
||||||
|
|
||||||
|
# Mock env variable that will override the config file value
|
||||||
|
def mock_load_env(key):
|
||||||
|
if key == "sync_vms":
|
||||||
|
return True
|
||||||
|
return None
|
||||||
|
|
||||||
|
with patch('modules.config.load_config_file', return_value=mock_config), \
|
||||||
|
patch('modules.config.load_env_variable', side_effect=mock_load_env):
|
||||||
|
config = load_config()
|
||||||
|
# This should be overridden by the env var
|
||||||
|
assert config["sync_vms"] is True
|
||||||
|
# This should remain from the config file
|
||||||
|
assert config["templates_config_context"] is True
|
||||||
|
|
||||||
|
|
||||||
|
def test_load_config_file_function():
|
||||||
|
"""Test the load_config_file function directly"""
|
||||||
|
# Test when the file exists
|
||||||
|
with patch('pathlib.Path.exists', return_value=True), \
|
||||||
|
patch('importlib.util.spec_from_file_location') as mock_spec:
|
||||||
|
# Setup the mock module with attributes
|
||||||
|
mock_module = MagicMock()
|
||||||
|
mock_module.templates_config_context = True
|
||||||
|
mock_module.sync_vms = True
|
||||||
|
|
||||||
|
# Setup the mock spec
|
||||||
|
mock_spec_instance = MagicMock()
|
||||||
|
mock_spec.return_value = mock_spec_instance
|
||||||
|
mock_spec_instance.loader.exec_module = lambda x: None
|
||||||
|
|
||||||
|
# Patch module_from_spec to return our mock module
|
||||||
|
with patch('importlib.util.module_from_spec', return_value=mock_module):
|
||||||
|
config = load_config_file(DEFAULT_CONFIG.copy())
|
||||||
|
assert config["templates_config_context"] is True
|
||||||
|
assert config["sync_vms"] is True
|
||||||
|
|
||||||
|
|
||||||
|
def test_load_config_file_not_found():
|
||||||
|
"""Test load_config_file when the config file doesn't exist"""
|
||||||
|
# Instead of trying to assert on the logger call, we'll just check the return value
|
||||||
|
# and verify the function works as expected in this case
|
||||||
|
with patch('pathlib.Path.exists', return_value=False):
|
||||||
|
result = load_config_file(DEFAULT_CONFIG.copy())
|
||||||
|
assert result is None
|
||||||
|
|
||||||
|
|
||||||
|
def test_load_env_variable_function():
|
||||||
|
"""Test the load_env_variable function directly"""
|
||||||
|
# Test when the environment variable exists
|
||||||
|
with patch.dict(os.environ, {"templates_config_context": "True"}):
|
||||||
|
value = load_env_variable("templates_config_context")
|
||||||
|
assert value == "True"
|
||||||
|
|
||||||
|
# Test when the environment variable doesn't exist
|
||||||
|
with patch.dict(os.environ, {}, clear=True):
|
||||||
|
value = load_env_variable("nonexistent_variable")
|
||||||
|
assert value is None
|
||||||
|
|
||||||
|
|
||||||
|
def test_load_config_file_exception_handling():
|
||||||
|
"""Test that load_config_file handles exceptions gracefully"""
|
||||||
|
# This test requires modifying the load_config_file function to handle exceptions
|
||||||
|
# For now, we're just checking that an exception is raised
|
||||||
|
with patch('pathlib.Path.exists', return_value=True), \
|
||||||
|
patch('importlib.util.spec_from_file_location', side_effect=Exception("Import error")):
|
||||||
|
# Since the current implementation doesn't handle exceptions, we should
|
||||||
|
# expect an exception to be raised
|
||||||
|
try:
|
||||||
|
result = load_config_file(DEFAULT_CONFIG.copy())
|
||||||
|
assert False, "An exception should have been raised"
|
||||||
|
except Exception:
|
||||||
|
# This is expected
|
||||||
|
pass
|
Loading…
Reference in New Issue
Block a user