-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtest_konfig.py
93 lines (75 loc) · 4.61 KB
/
test_konfig.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
import logging
import os
import pytest
from tunsberg.konfig import check_required_env_vars, uvicorn_log_config
class TestUvicornLogConfig:
def test_default_config(self):
log_lvl = logging.NOTSET
config = uvicorn_log_config(log_level=log_lvl)
assert config['version'] == 1
assert not config['disable_existing_loggers']
assert config['formatters']['default']['format'] == '%(asctime)s - %(levelname)s - %(name)s - %(message)s'
assert config['handlers']['file']['class'] == 'logging.FileHandler'
assert config['handlers']['file']['filename'] == 'uvicorn.log'
assert config['handlers']['file']['formatter'] == 'default'
assert config['handlers']['console']['class'] == 'logging.StreamHandler'
assert config['handlers']['console']['formatter'] == 'default'
assert config['loggers']['uvicorn']['handlers'] == ['file', 'console']
assert config['loggers']['uvicorn']['level'] == logging.getLevelName(log_lvl)
assert not config['loggers']['uvicorn']['propagate']
assert config['loggers']['uvicorn.error']['handlers'] == ['file', 'console']
assert config['loggers']['uvicorn.error']['level'] == logging.getLevelName(log_lvl)
assert not config['loggers']['uvicorn.error']['propagate']
assert config['loggers']['uvicorn.access']['handlers'] == ['file', 'console']
assert config['loggers']['uvicorn.access']['level'] == logging.getLevelName(log_lvl)
assert not config['loggers']['uvicorn.access']['propagate']
def test_invalid_log_level(self):
with pytest.raises(ValueError):
uvicorn_log_config(log_level=999)
def test_empty_log_format(self):
with pytest.raises(ValueError):
uvicorn_log_config(log_level=logging.NOTSET, log_format='')
def test_empty_log_file_path(self):
with pytest.raises(ValueError):
uvicorn_log_config(log_level=logging.NOTSET, log_file_path='')
def test_custom_log_format(self):
log_format = '%(asctime)s - %(levelname)s - %(name)s - %(message)s - %(filename)s - %(lineno)s'
config = uvicorn_log_config(log_level=logging.NOTSET, log_format=log_format)
assert config['formatters']['default']['format'] == log_format
def test_custom_log_file_path(self):
log_file_path = 'custom.log'
config = uvicorn_log_config(log_level=logging.NOTSET, log_file_path=log_file_path)
assert config['handlers']['file']['filename'] == log_file_path
def test_custom_log_level(self):
log_lvl = logging.INFO
config = uvicorn_log_config(log_level=log_lvl)
assert config['loggers']['uvicorn']['level'] == logging.getLevelName(log_lvl)
assert config['loggers']['uvicorn.error']['level'] == logging.getLevelName(log_lvl)
assert config['loggers']['uvicorn.access']['level'] == logging.getLevelName(log_lvl)
class TestCheckRequiredEnvVars:
# Set the environment variable for testing
os.environ['RANDOM_ENV_VAR'] = 'random_value'
def test_validate_if_true_in_local_development_env(self):
req_envs = {'RANDOM_ENV_VAR': {'runtime': True, 'build': True}}
check = check_required_env_vars(required_env_vars=req_envs, env='local')
assert check
def test_validate_if_true_in_staging_env(self):
req_envs = {'RANDOM_ENV_VAR': {'runtime': True, 'build': True}}
check = check_required_env_vars(required_env_vars=req_envs, env='staging', live_envs=['staging'])
assert check
def test_validate_if_true_in_prod_env(self):
req_envs = {'RANDOM_ENV_VAR': {'runtime': True, 'build': True}}
check = check_required_env_vars(required_env_vars=req_envs, env='prod', live_envs=['prod'])
assert check
def test_validate_that_it_fails_if_env_var_is_not_set(self):
req_envs = {'SOME_OTHER_RANDOM_ENV_VAR': {'runtime': True, 'build': True}}
with pytest.raises(ValueError):
check_required_env_vars(required_env_vars=req_envs, env='production', live_envs=['production'])
def test_validate_that_it_fails_for_code_build_if_env_var_is_not_set(self):
req_envs = {'SOME_OTHER_RANDOM_ENV_VAR': {'runtime': False, 'build': True}}
with pytest.raises(ValueError):
check_required_env_vars(required_env_vars=req_envs, env='production', live_envs=['production'], code_build=True)
def test_validate_that_it_fails_for_runtime_if_env_var_is_not_set(self):
req_envs = {'SOME_OTHER_RANDOM_ENV_VAR': {'runtime': True, 'build': False}}
with pytest.raises(ValueError):
check_required_env_vars(required_env_vars=req_envs, env='production', live_envs=['production'])