Changeset View
Changeset View
Standalone View
Standalone View
swh/indexer/tests/storage/test_server.py
Show All 27 Lines | def prepare_config_file(tmpdir, content, name="config.yml") -> str: | ||||
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) | ||||
@pytest.mark.parametrize("config_path", [None, ""]) | @pytest.mark.parametrize("config_path", [None, ""]) | ||||
def test_load_and_check_config_no_configuration(config_path) -> None: | def test_load_and_check_config_no_configuration(config_path) -> None: | ||||
"""Inexistent configuration files raises""" | """Irrelevant configuration file path raises""" | ||||
with pytest.raises(EnvironmentError, match="Configuration file must be defined"): | with pytest.raises(EnvironmentError, match="Configuration file must be defined"): | ||||
load_and_check_config(config_path) | load_and_check_config(config_path) | ||||
def test_load_and_check_inexistent_config_path() -> None: | def test_load_and_check_inexistent_config_path() -> None: | ||||
"""Inexistent configuration file raises""" | |||||
config_path = "/indexer/inexistent/config.yml" | config_path = "/indexer/inexistent/config.yml" | ||||
expected_error = f"Configuration file {config_path} does not exist" | expected_error = f"Configuration file {config_path} does not exist" | ||||
with pytest.raises(FileNotFoundError, match=expected_error): | with pytest.raises(FileNotFoundError, match=expected_error): | ||||
load_and_check_config(config_path) | load_and_check_config(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, match="Missing '%indexer_storage' configuration"): | with pytest.raises(KeyError, match="Missing '%indexer_storage' configuration"): | ||||
load_and_check_config(config_path) | load_and_check_config(config_path) | ||||
def test_load_and_check_config_remote_config_local_type_raise(tmpdir) -> None: | @pytest.mark.parametrize("class_storage", ["remote", "memory"]) | ||||
"""'local' configuration without 'local' storage raises""" | def test_load_and_check_config_remote_config_local_type_raise( | ||||
config = {"indexer_storage": {"cls": "remote", "args": {}}} | class_storage, tmpdir | ||||
config_path = prepare_config_file(tmpdir, config) | ) -> None: | ||||
"""Any other configuration than 'local' (the default) is rejected""" | |||||
assert class_storage != "local" | |||||
incompatible_config = {"indexer_storage": {"cls": class_storage}} | |||||
config_path = prepare_config_file(tmpdir, incompatible_config) | |||||
expected_error = ( | expected_error = ( | ||||
"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): | with pytest.raises(ValueError, match=expected_error): | ||||
load_and_check_config(config_path) | |||||
with pytest.raises(ValueError, match=expected_error): | |||||
load_and_check_config(config_path, type="local") | load_and_check_config(config_path, type="local") | ||||
def test_load_and_check_config_remote_config_fine(tmpdir) -> None: | |||||
"""'Remote configuration is fine (when changing the default type)""" | |||||
config = {"indexer_storage": {"cls": "remote"}} | |||||
config_path = prepare_config_file(tmpdir, config) | |||||
cfg = load_and_check_config(config_path, type="any") | |||||
assert cfg == config | |||||
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"}} | ||||
expected_error = "Invalid configuration; missing 'db' config entry" | 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, match=expected_error): | with pytest.raises(ValueError, match=expected_error): | ||||
load_and_check_config(config_path) | load_and_check_config(config_path) | ||||
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""" | """'Complete 'local' configuration is fine""" | ||||
config = {"indexer_storage": {"cls": "local", "args": {"db": "db",}}} | config = {"indexer_storage": {"cls": "local", "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: | |||||
"""'Remote configuration is fine""" | |||||
config = {"indexer_storage": {"cls": "remote", "args": {}}} | |||||
config_path = prepare_config_file(tmpdir, config) | |||||
cfg = load_and_check_config(config_path, type="any") | |||||
assert cfg == config |