Beispiel #1
0
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}
Beispiel #2
0
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
Beispiel #3
0
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'
    }
Beispiel #4
0
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
Beispiel #5
0
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'}
Beispiel #6
0
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}
Beispiel #7
0
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}
Beispiel #8
0
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()}
Beispiel #9
0
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
Beispiel #10
0
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
Beispiel #11
0
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}
Beispiel #12
0
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}