2 changed files with 141 additions and 3 deletions
@ -0,0 +1,138 @@ |
|||||
|
#!/usr/bin/env python3 |
||||
|
# -*- coding: utf-8 -*- |
||||
|
|
||||
|
import os |
||||
|
import pytest |
||||
|
from src import boot |
||||
|
|
||||
|
|
||||
|
@pytest.fixture(autouse=True) |
||||
|
def env_cleanup(): |
||||
|
""" |
||||
|
Clean up the environment variables before each test. |
||||
|
""" |
||||
|
boot.init_opts() |
||||
|
env_backup = os.environ.copy() |
||||
|
os.environ.clear() |
||||
|
os.environ['UNKNOWN'] = 'unknown_value' |
||||
|
os.environ['ANOTHER_UNKNOWN'] = 'something' |
||||
|
yield |
||||
|
os.environ.update(env_backup) |
||||
|
|
||||
|
|
||||
|
def test_env_empty(): |
||||
|
""" |
||||
|
Test environment variables in the empty case. |
||||
|
""" |
||||
|
options = boot.load_from_env() |
||||
|
assert isinstance(options, dict) and not options |
||||
|
|
||||
|
|
||||
|
@pytest.mark.parametrize( |
||||
|
'name, env_tag', |
||||
|
[ |
||||
|
('port', 'PORT'), |
||||
|
('max_username', 'MAX_USERNAME'), |
||||
|
('max_chat_message', 'MAX_CHAT_MESSAGE'), |
||||
|
], |
||||
|
) |
||||
|
def test_env_int(name: str, env_tag: str): |
||||
|
""" |
||||
|
Test environment variables for single integer option. |
||||
|
""" |
||||
|
os.environ[env_tag] = '0' |
||||
|
assert boot.load_from_env() == {name: 0} |
||||
|
|
||||
|
os.environ[env_tag] = '42' |
||||
|
assert boot.load_from_env() == {name: 42} |
||||
|
|
||||
|
|
||||
|
@pytest.mark.parametrize( |
||||
|
'name, env_tag', |
||||
|
[ |
||||
|
('config', 'CONFIG'), |
||||
|
('password', 'PASSWORD'), |
||||
|
('motd', 'MOTD'), |
||||
|
('salt', 'SALT'), |
||||
|
('listen_ipv4', 'LISTEN_IPV4'), |
||||
|
('listen_ipv6', 'LISTEN_IPV6'), |
||||
|
], |
||||
|
) |
||||
|
def test_env_str(name: str, env_tag: str): |
||||
|
""" |
||||
|
Test environment variables for single string option. |
||||
|
""" |
||||
|
os.environ[env_tag] = '' |
||||
|
assert boot.load_from_env() == {name: ''} |
||||
|
|
||||
|
os.environ[env_tag] = 'TeSt \n0123456789\t' |
||||
|
assert boot.load_from_env() == {name: 'TeSt \n0123456789\t'} |
||||
|
|
||||
|
|
||||
|
@pytest.mark.parametrize( |
||||
|
'name, env_tag', |
||||
|
[ |
||||
|
('random_salt', 'RANDOM_SALT'), |
||||
|
('isolate_rooms', 'ISOLATE_ROOMS'), |
||||
|
('disable_chat', 'DISABLE_CHAT'), |
||||
|
('disable_ready', 'DISABLE_READY'), |
||||
|
('enable_stats', 'ENABLE_STATS'), |
||||
|
('enable_tls', 'ENABLE_TLS'), |
||||
|
('persistent', 'PERSISTENT'), |
||||
|
], |
||||
|
) |
||||
|
def test_env_bool(name: str, env_tag: str): |
||||
|
""" |
||||
|
Test environment variables for single boolean option. |
||||
|
""" |
||||
|
for val in ['TRUE', 'TrUe', 'true', 'ON', 'on']: # TODO: allow `1` |
||||
|
os.environ[env_tag] = val |
||||
|
assert boot.load_from_env() == {name: True} |
||||
|
|
||||
|
for val in ['FALSE', 'FaLsE', 'false', 'OFF', 'off', '0']: |
||||
|
os.environ[env_tag] = val |
||||
|
assert boot.load_from_env() == {name: False} |
||||
|
|
||||
|
|
||||
|
def test_env_full(): |
||||
|
""" |
||||
|
Test all environment variable options. |
||||
|
""" |
||||
|
env_data = { |
||||
|
'CONFIG': 'config.yml', |
||||
|
'PORT': '8999', |
||||
|
'PASSWORD': 'PASSWD', |
||||
|
'MOTD': 'MESSAGE', |
||||
|
'SALT': 'SALT', |
||||
|
'RANDOM_SALT': 'OFF', |
||||
|
'ISOLATE_ROOMS': 'ON', |
||||
|
'DISABLE_CHAT': 'OFF', |
||||
|
'DISABLE_READY': 'ON', |
||||
|
'ENABLE_STATS': 'OFF', |
||||
|
'ENABLE_TLS': 'ON', |
||||
|
'PERSISTENT': 'OFF', |
||||
|
'MAX_USERNAME': '120', |
||||
|
'MAX_CHAT_MESSAGE': '240', |
||||
|
'LISTEN_IPV4': '127.0.0.1', |
||||
|
'LISTEN_IPV6': '::1', |
||||
|
} |
||||
|
excepted_opts = { |
||||
|
'config': 'config.yml', |
||||
|
'port': 8999, |
||||
|
'password': 'PASSWD', |
||||
|
'motd': 'MESSAGE', |
||||
|
'salt': 'SALT', |
||||
|
'random_salt': False, |
||||
|
'isolate_rooms': True, |
||||
|
'disable_chat': False, |
||||
|
'disable_ready': True, |
||||
|
'enable_stats': False, |
||||
|
'enable_tls': True, |
||||
|
'persistent': False, |
||||
|
'max_username': 120, |
||||
|
'max_chat_message': 240, |
||||
|
'listen_ipv4': '127.0.0.1', |
||||
|
'listen_ipv6': '::1', |
||||
|
} |
||||
|
os.environ.update(env_data) |
||||
|
assert boot.load_from_env() == excepted_opts |
Loading…
Reference in new issue