FreedomBox/plinth/tests/test_cfg.py
Sunil Mohan Adapa a33160d6a4
cfg: Remove redundant data in develop.config
Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2020-06-28 21:01:47 -04:00

124 lines
4.4 KiB
Python

# SPDX-License-Identifier: AGPL-3.0-or-later
"""
Test module for configuration module.
"""
import configparser
import logging
import os
import pathlib
from unittest.mock import patch
import pytest
from plinth import cfg
TEST_CONFIG_DIR = \
os.path.join(os.path.dirname(os.path.realpath(__file__)),
'data', 'configs')
CONFIG_FILE_WITH_MISSING_OPTIONS = \
os.path.join(TEST_CONFIG_DIR, 'freedombox.config.with_missing_options')
CONFIG_FILE_WITH_MISSING_SECTIONS = \
os.path.join(TEST_CONFIG_DIR, 'freedombox.config.with_missing_sections')
logging.disable(logging.CRITICAL)
pytestmark = pytest.mark.usefixtures('load_cfg')
def test_read_default_config_file():
"""Verify that the default config file can be read correctly."""
path = pathlib.Path(__file__).resolve().parent
config_file = path / 'data' / 'configs' / 'freedombox.config'
# Read the freedombox.config file directly
parser = configparser.ConfigParser(
defaults={
'parent_dir': config_file.parent,
'parent_parent_dir': config_file.parent.parent
})
parser.read(config_file)
# Read the freedombox.config file via the cfg module
cfg.read_file(config_file)
# Compare the two results
compare_configurations(parser)
@patch('plinth.cfg.get_config_paths')
def test_read_primary_config_file(get_config_paths):
"""Verify that the primary config file is used by default."""
config_path = CONFIG_FILE_WITH_MISSING_OPTIONS
get_config_paths.return_value = [config_path]
cfg.read()
assert cfg.config_files[-1] == config_path
@patch('plinth.cfg.get_config_paths')
def test_read_dot_d_config_files(get_config_paths):
"""Verify that the configuration is read from .d directories."""
root_dir = pathlib.Path(__file__).resolve().parent
config_path = root_dir / 'data' / 'configs' / 'freedombox.config'
config_path_d = config_path.with_suffix(config_path.suffix + '.d')
get_config_paths.return_value = [str(config_path)]
cfg.read()
assert cfg.config_files[-3] == str(config_path)
assert cfg.config_files[-2] == str(config_path_d / '01_first.config')
assert cfg.config_files[-1] == str(config_path_d / '02_second.config')
assert cfg.box_name == 'FreedomBox02'
def test_read_develop_config_file():
"""Verify that the correct develop config file is used."""
test_dir = os.path.dirname(os.path.realpath(__file__))
develop_root = os.path.realpath(os.path.join(test_dir, '..', '..'))
develop_config_file = os.path.join(develop_root, 'plinth',
'develop.config')
config_path = cfg.get_develop_config_path()
cfg.read_file(config_path)
assert cfg.config_files[-1] == develop_config_file
assert cfg.file_root == develop_root
def test_read_missing_config_file():
"""Verify that an exception is raised when there's no config file."""
cfg.read_file('x-non-existant-file')
def test_read_config_file_with_missing_sections():
"""Verify that missing configuration sections can be detected."""
cfg.read_file(CONFIG_FILE_WITH_MISSING_SECTIONS)
assert cfg.box_name == 'FreedomBoxTestMissingSections'
def test_read_config_file_with_missing_options():
"""Verify that missing configuration options can be detected."""
cfg.read_file(CONFIG_FILE_WITH_MISSING_OPTIONS)
assert cfg.box_name == 'FreedomBoxTestMissingOptions'
def compare_configurations(parser):
"""Compare two sets of configuration values."""
assert parser.get('Path', 'file_root') == cfg.file_root
assert parser.get('Path', 'config_dir') == cfg.config_dir
assert parser.get('Path', 'custom_static_dir') == cfg.custom_static_dir
assert parser.get('Path', 'data_dir') == cfg.data_dir
assert parser.get('Path', 'store_file') == cfg.store_file
assert parser.get('Path', 'actions_dir') == cfg.actions_dir
assert parser.get('Path', 'doc_dir') == cfg.doc_dir
assert parser.get('Network', 'host') == cfg.host
assert int(parser.get('Network', 'port')) == cfg.port
assert parser.get('Network', 'secure_proxy_ssl_header') == \
cfg.secure_proxy_ssl_header
assert isinstance(cfg.use_x_forwarded_for, bool)
assert parser.get('Network', 'use_x_forwarded_for') == \
str(cfg.use_x_forwarded_for)
assert isinstance(cfg.use_x_forwarded_host, bool)
assert parser.get('Network', 'use_x_forwarded_host') == \
str(cfg.use_x_forwarded_host)
assert parser.get('Misc', 'box_name') == cfg.box_name