Files
borgmatic/tests/integration/config/test_schema.py

48 lines
1.4 KiB
Python

import pkgutil
import borgmatic.actions
import borgmatic.config.load
import borgmatic.config.validate
MAXIMUM_LINE_LENGTH = 80
def test_schema_line_length_stays_under_limit():
schema_file = open(borgmatic.config.validate.schema_filename())
for line in schema_file.readlines():
assert len(line.rstrip('\n')) <= MAXIMUM_LINE_LENGTH
ACTIONS_MODULE_NAMES_TO_OMIT = {
'arguments',
'change_passphrase',
'export_key',
'import_key',
'json',
'pattern',
}
ACTIONS_MODULE_NAMES_TO_ADD = {'key', 'umount'}
def test_schema_actions_correspond_to_supported_actions():
'''
Ensure that the allowed actions in the schema's various options don't drift from borgmatic's
actual supported actions.
'''
schema = borgmatic.config.load.load_configuration(borgmatic.config.validate.schema_filename())
supported_actions = {
module.name.replace('_', '-')
for module in pkgutil.iter_modules(borgmatic.actions.__path__)
if module.name not in ACTIONS_MODULE_NAMES_TO_OMIT
}.union(ACTIONS_MODULE_NAMES_TO_ADD)
properties = schema['properties']
commands_one_of = properties['commands']['items']['oneOf']
for schema_actions in (
set(properties['skip_actions']['items']['enum']),
set(commands_one_of[0]['properties']['when']['items']['enum']),
set(commands_one_of[1]['properties']['when']['items']['enum']),
):
assert schema_actions == supported_actions