Changeset View
Changeset View
Standalone View
Standalone View
swh/indexer/tests/storage/test_server.py
Show All 25 Lines | def prepare_config_file(tmpdir, content, name="config.yml") -> str: | ||||
if isinstance(content, dict): # convert if needed | if isinstance(content, dict): # convert if needed | ||||
content = yaml.dump(content) | content = yaml.dump(content) | ||||
config_path.write_text(content, encoding="utf-8") | config_path.write_text(content, encoding="utf-8") | ||||
# pytest on python3.5 does not support LocalPath manipulation, so | # pytest on python3.5 does not support LocalPath manipulation, so | ||||
# convert path to string | # convert path to string | ||||
return str(config_path) | return str(config_path) | ||||
def test_load_and_check_config_no_configuration() -> None: | @pytest.mark.parametrize("config_path", [None, ""]) | ||||
def test_load_and_check_config_no_configuration(config_path) -> None: | |||||
"""Inexistent configuration files raises""" | """Inexistent configuration files raises""" | ||||
with pytest.raises(EnvironmentError) as e: | with pytest.raises(EnvironmentError, match="Configuration file must be defined"): | ||||
load_and_check_config(None) | load_and_check_config(config_path) | ||||
assert e.value.args[0] == "Configuration file must be defined" | |||||
def test_load_and_check_inexistent_config_path() -> None: | |||||
config_path = "/indexer/inexistent/config.yml" | config_path = "/indexer/inexistent/config.yml" | ||||
with pytest.raises(FileNotFoundError) as e: | expected_error = f"Configuration file {config_path} does not exist" | ||||
with pytest.raises(FileNotFoundError, match=expected_error): | |||||
load_and_check_config(config_path) | load_and_check_config(config_path) | ||||
assert e.value.args[0] == "Configuration file %s does not exist" % (config_path,) | |||||
def test_load_and_check_config_wrong_configuration(tmpdir) -> None: | def test_load_and_check_config_wrong_configuration(tmpdir) -> None: | ||||
"""Wrong configuration raises""" | """Wrong configuration raises""" | ||||
config_path = prepare_config_file(tmpdir, "something: useless") | config_path = prepare_config_file(tmpdir, "something: useless") | ||||
with pytest.raises(KeyError) as e: | with pytest.raises(KeyError, match="Missing '%indexer_storage' configuration"): | ||||
load_and_check_config(config_path) | load_and_check_config(config_path) | ||||
assert e.value.args[0] == "Missing '%indexer_storage' configuration" | |||||
def test_load_and_check_config_remote_config_local_type_raise(tmpdir) -> None: | def test_load_and_check_config_remote_config_local_type_raise(tmpdir) -> None: | ||||
"""'local' configuration without 'local' storage raises""" | """'local' configuration without 'local' storage raises""" | ||||
config = {"indexer_storage": {"cls": "remote", "args": {}}} | config = {"indexer_storage": {"cls": "remote", "args": {}}} | ||||
config_path = prepare_config_file(tmpdir, config) | config_path = prepare_config_file(tmpdir, config) | ||||
with pytest.raises(ValueError) as e: | |||||
load_and_check_config(config_path, type="local") | |||||
assert ( | expected_error = ( | ||||
e.value.args[0] | "The indexer_storage backend can only be started with a 'local' " | ||||
== "The indexer_storage backend can only be started with a 'local' " | |||||
"configuration" | "configuration" | ||||
) | ) | ||||
with pytest.raises(ValueError, match=expected_error): | |||||
load_and_check_config(config_path, type="local") | |||||
def test_load_and_check_config_local_incomplete_configuration(tmpdir) -> None: | def test_load_and_check_config_local_incomplete_configuration(tmpdir) -> None: | ||||
"""Incomplete 'local' configuration should raise""" | """Incomplete 'local' configuration should raise""" | ||||
config = {"indexer_storage": {"cls": "local", "args": {}}} | config = {"indexer_storage": {"cls": "local", "args": {}}} | ||||
expected_error = "Invalid configuration; missing 'db' config entry" | |||||
config_path = prepare_config_file(tmpdir, config) | config_path = prepare_config_file(tmpdir, config) | ||||
with pytest.raises(ValueError) as e: | with pytest.raises(ValueError, match=expected_error): | ||||
load_and_check_config(config_path) | load_and_check_config(config_path) | ||||
assert e.value.args[0] == "Invalid configuration; missing 'db' config entry" | |||||
def test_load_and_check_config_local_config_fine(tmpdir) -> None: | def test_load_and_check_config_local_config_fine(tmpdir) -> None: | ||||
"""'Remote configuration is fine""" | """'Remote configuration is fine""" | ||||
config = {"indexer_storage": {"cls": "local", "args": {"db": "db",}}} | config = {"indexer_storage": {"cls": "local", "args": {"db": "db",}}} | ||||
config_path = prepare_config_file(tmpdir, config) | config_path = prepare_config_file(tmpdir, config) | ||||
cfg = load_and_check_config(config_path, type="local") | cfg = load_and_check_config(config_path, type="local") | ||||
assert cfg == config | assert cfg == config | ||||
def test_load_and_check_config_remote_config_fine(tmpdir) -> None: | def test_load_and_check_config_remote_config_fine(tmpdir) -> None: | ||||
"""'Remote configuration is fine""" | """'Remote configuration is fine""" | ||||
config = {"indexer_storage": {"cls": "remote", "args": {}}} | config = {"indexer_storage": {"cls": "remote", "args": {}}} | ||||
config_path = prepare_config_file(tmpdir, config) | config_path = prepare_config_file(tmpdir, config) | ||||
cfg = load_and_check_config(config_path, type="any") | cfg = load_and_check_config(config_path, type="any") | ||||
assert cfg == config | assert cfg == config |