def test_config_file_cli_args_precedence(option, value, monkeypatch): """ Do CLI args take precedence over config-file options? """ def mockreturn(path): cp = ConfigParser(allow_no_value=True) cp.read_string(""" [general] provider=dbip firewall=nftables address-family=ipv4 checksum=True [countries] CA """) return cp monkeypatch.setattr(__main__, "get_config_parser", mockreturn, raising=True) if option == 'no-checksum': config = __main__.get_config(['--' + option, '-c', '/tmp/dummy.conf']) assert not config.get('checksum') else: config = __main__.get_config( ['--' + option, value, '-c', '/tmp/dummy.conf']) assert config.get(option) == {value}
def test_single_cli_opts_no_config_file(option, value, expected): """ Do single value CLI options correctly override defaults? Note: specifying 'maxmind' without license key will generate a RuntimeError during real execution """ if option == 'no-checksum': config = __main__.get_config(['--' + option]) assert not config.get('checksum') else: config = __main__.get_config(['--' + option, value]) assert config.get(option) == expected
def test_config_file_provider_options(provider, monkeypatch): """ If non-default options are set in a config file, and no CLI args are present, are they used? """ def mockreturn(path): cp = ConfigParser(allow_no_value=True) cp.read_string(""" [general] provider={0} [countries] CA [{0}] license-key=abcdefg custom-option=custom-value """.format(provider)) return cp monkeypatch.setattr(__main__, "get_config_parser", mockreturn, raising=True) config = __main__.get_config(['-c', '/tmp/dummy.conf']) assert config.get(provider) == { 'license-key': 'abcdefg', 'custom-option': 'custom-value' }
def test_external_country_file(contents, expected, tmp_path): f_name = Path(tmp_path) / 'temp.conf' with open(f_name, 'w+t') as f: f.write(contents) config = __main__.get_config(['-l', str(f_name.resolve(strict=True))]) assert config.get('countries') == expected
def test_config_file_non_defaults(option, value, monkeypatch): """ If non-default options are set in a config file, and no CLI args are present, are they used? """ def mockreturn(path): cp = ConfigParser(allow_no_value=True) cp.read_string(""" [general] {0}={1} [countries] CA """.format(option, value)) return cp monkeypatch.setattr(__main__, "get_config_parser", mockreturn, raising=True) config = __main__.get_config(['-c', '/tmp/dummy.conf']) assert config.get(option) == {value} assert config.get('countries') == {'ca'}
def test_cli_repeated_option_single_value(option, val1, val2): """ If the same option is specified multiple times with different values, are options captured correctly? """ config = __main__.get_config(['--' + option, val1, '--' + option, val2]) assert config.get(option) == {val1, val2}
def test_cli_single_option_multiple_values(option, val1, val2): """ Are multiple valid values passed to a single option captured correctly? """ config = __main__.get_config(['--' + option, val1, val2]) assert config.get(option) == {val1, val2}
def test_cli_to_lowercase(option, value): """ Are option values lower-cased correctly? """ config = __main__.get_config(['--' + option, value]) assert config.get(option) == {value.lower()}
def test_invalid_country_list(country_list, expected): """ If no valid country codes are found do we correctly generate all? """ config = __main__.get_config(['-l', country_list]) assert config.get('countries') == expected
def test_no_cli_opts_no_config_file(option, expected): """ Do we get all default options if no CLI opts or config file are provided? """ config = __main__.get_config() assert config.get(option) == expected
def test_cli_repeated_option_duplicate_value(option, value): """ If the same option is specified multiple times with the same valid value, are options captured correctly? """ config = __main__.get_config(['--' + option, value, '--' + option, value]) assert config.get(option) == {value}
def test_cli_single_option_repeated_values(option, value): """ If the same value is passed to an option multiple times, is it captured correctly? """ config = __main__.get_config(['--' + option, value, value]) assert config.get(option) == {value}