Changeset View
Changeset View
Standalone View
Standalone View
swh/scheduler/tests/test_server.py
# Copyright (C) 2019 The Software Heritage developers | # Copyright (C) 2019-2020 The Software Heritage developers | ||||
# See the AUTHORS file at the top-level directory of this distribution | # See the AUTHORS file at the top-level directory of this distribution | ||||
# License: GNU General Public License version 3, or any later version | # License: GNU General Public License version 3, or any later version | ||||
# See top-level LICENSE file for more information | # See top-level LICENSE file for more information | ||||
import copy | import copy | ||||
import pytest | import pytest | ||||
import yaml | import yaml | ||||
Show All 20 Lines | def prepare_config_file(tmpdir, content, name="config.yml"): | ||||
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(): | def test_load_and_check_config_no_configuration(): | ||||
"""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(None) | ||||
assert e.value.args[0] == "Configuration file must be defined" | |||||
config_path = "/some/inexistent/config.yml" | config_path = "/some/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): | def test_load_and_check_config_wrong_configuration(tmpdir): | ||||
"""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 '%scheduler' configuration"): | ||||
load_and_check_config(config_path) | load_and_check_config(config_path) | ||||
assert e.value.args[0] == "Missing '%scheduler' configuration" | |||||
def test_load_and_check_config_remote_config_local_type_raise(tmpdir): | def test_load_and_check_config_remote_config_local_type_raise(tmpdir): | ||||
"""'local' configuration without 'local' storage raises""" | """'local' configuration without 'local' storage raises""" | ||||
config = {"scheduler": {"cls": "remote", "args": {}}} | config = {"scheduler": {"cls": "remote", "args": {}}} | ||||
config_path = prepare_config_file(tmpdir, config) | config_path = prepare_config_file(tmpdir, config) | ||||
with pytest.raises(ValueError) as e: | expected_error = ( | ||||
load_and_check_config(config_path, type="local") | "The scheduler backend can only be started with a 'local'" " configuration" | ||||
assert ( | |||||
e.value.args[0] == "The scheduler backend can only be started with a 'local'" | |||||
" 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): | def test_load_and_check_config_local_incomplete_configuration(tmpdir): | ||||
"""Incomplete 'local' configuration should raise""" | """Incomplete 'local' configuration should raise""" | ||||
config = { | config = { | ||||
"scheduler": { | "scheduler": { | ||||
"cls": "local", | "cls": "local", | ||||
"args": {"db": "database", "something": "needed-for-test",}, | "args": {"db": "database", "something": "needed-for-test",}, | ||||
} | } | ||||
} | } | ||||
for key in ["db", "args"]: | for key in ["db", "args"]: | ||||
c = copy.deepcopy(config) | c = copy.deepcopy(config) | ||||
if key == "db": | if key == "db": | ||||
source = c["scheduler"]["args"] | source = c["scheduler"]["args"] | ||||
else: | else: | ||||
source = c["scheduler"] | source = c["scheduler"] | ||||
source.pop(key) | source.pop(key) | ||||
config_path = prepare_config_file(tmpdir, c) | config_path = prepare_config_file(tmpdir, c) | ||||
with pytest.raises(KeyError) as e: | expected_error = f"Invalid configuration; missing '{key}' config entry" | ||||
with pytest.raises(KeyError, match=expected_error): | |||||
load_and_check_config(config_path) | load_and_check_config(config_path) | ||||
assert ( | |||||
e.value.args[0] == "Invalid configuration; missing '%s' config entry" % key | |||||
) | |||||
def test_load_and_check_config_local_config_fine(tmpdir): | def test_load_and_check_config_local_config_fine(tmpdir): | ||||
"""Local configuration is fine""" | """Local configuration is fine""" | ||||
config = {"scheduler": {"cls": "local", "args": {"db": "db",}}} | config = {"scheduler": {"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): | def test_load_and_check_config_remote_config_fine(tmpdir): | ||||
"""'Remote configuration is fine""" | """Remote configuration is fine""" | ||||
config = {"scheduler": {"cls": "remote", "args": {}}} | config = {"scheduler": {"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 |