Changeset View
Changeset View
Standalone View
Standalone View
swh/search/tests/test_server.py
- This file was added.
# Copyright (C) 2021 The Software Heritage developers | ||||||||||||
ardumont: copyright headers ;) | ||||||||||||
# See the AUTHORS file at the top-level directory of this distribution | ||||||||||||
# License: GNU General Public License version 3, or any later version | ||||||||||||
# See top-level LICENSE file for more information | ||||||||||||
import os | ||||||||||||
from typing import Any, Dict | ||||||||||||
import pytest | ||||||||||||
import yaml | ||||||||||||
from swh.core.api import RPCServerApp | ||||||||||||
from swh.core.config import load_from_envvar | ||||||||||||
from swh.search.api.server import load_and_check_config, make_app_from_configfile | ||||||||||||
@pytest.fixture | ||||||||||||
def swh_search_server_config() -> Dict[str, Any]: | ||||||||||||
return {"search": {"cls": "elasticsearch", "hosts": ["es1"],}} | ||||||||||||
@pytest.fixture | ||||||||||||
def swh_search_config(monkeypatch, swh_search_server_config, tmp_path): | ||||||||||||
conf_path = os.path.join(str(tmp_path), "search.yml") | ||||||||||||
with open(conf_path, "w") as f: | ||||||||||||
f.write(yaml.dump(swh_search_server_config)) | ||||||||||||
monkeypatch.setenv("SWH_CONFIG_FILENAME", conf_path) | ||||||||||||
return conf_path | ||||||||||||
def prepare_config_file(tmpdir, config_dict: Dict, name: str = "config.yml") -> str: | ||||||||||||
Not Done Inline Actions
make those type appear directly in the signature and drop them from the docstring. ardumont: make those type appear directly in the signature and drop them from the docstring. | ||||||||||||
"""Prepare configuration file in `$tmpdir/name` with content `content`. | ||||||||||||
Args: | ||||||||||||
tmpdir (LocalPath): root directory | ||||||||||||
content: Content of the file either as string or as a dict. | ||||||||||||
If a dict, converts the dict into a yaml string. | ||||||||||||
name: configuration filename | ||||||||||||
Returns | ||||||||||||
path of the configuration file prepared. | ||||||||||||
""" | ||||||||||||
config_path = tmpdir / name | ||||||||||||
config_path.write_text(yaml.dump(config_dict), encoding="utf-8") | ||||||||||||
# pytest on python3.5 does not support LocalPath manipulation, so | ||||||||||||
# convert path to string | ||||||||||||
Not Done Inline Actions
so you can drop the "str/dict" type (Union[str, Dict]) in the signature. ardumont: so you can drop the "str/dict" type (Union[str, Dict]) in the signature. | ||||||||||||
return str(config_path) | ||||||||||||
@pytest.mark.parametrize("config_file", [None, ""]) | ||||||||||||
def test_load_and_check_config_no_configuration(config_file): | ||||||||||||
"""Inexistent configuration files raises""" | ||||||||||||
with pytest.raises(EnvironmentError, match="Configuration file must be defined"): | ||||||||||||
Not Done Inline Actionsconfig_path ardumont: config_path | ||||||||||||
load_and_check_config(config_file) | ||||||||||||
def test_load_and_check_config_inexistent_file(): | ||||||||||||
config_path = "/some/inexistent/config.yml" | ||||||||||||
expected_error = f"Configuration file {config_path} does not exist" | ||||||||||||
with pytest.raises(EnvironmentError, match=expected_error): | ||||||||||||
load_and_check_config(config_path) | ||||||||||||
def test_load_and_check_config_wrong_configuration(tmpdir): | ||||||||||||
"""Wrong configuration raises""" | ||||||||||||
config_path = prepare_config_file(tmpdir, {"something": "useless"}) | ||||||||||||
with pytest.raises(KeyError, match="Missing 'search' configuration"): | ||||||||||||
load_and_check_config(config_path) | ||||||||||||
Not Done Inline Actions
ardumont: | ||||||||||||
def test_load_and_check_config_local_config_fine(swh_search_server_config, tmpdir): | ||||||||||||
"""'local' complete configuration is fine""" | ||||||||||||
config_path = prepare_config_file(tmpdir, swh_search_server_config) | ||||||||||||
cfg = load_and_check_config(config_path) | ||||||||||||
assert cfg == swh_search_server_config | ||||||||||||
def test_server_make_app_from_config_file(swh_search_config): | ||||||||||||
app = make_app_from_configfile() | ||||||||||||
expected_cfg = load_from_envvar() | ||||||||||||
assert app is not None | ||||||||||||
assert isinstance(app, RPCServerApp) | ||||||||||||
assert app.config["search"] == expected_cfg["search"] | ||||||||||||
app2 = make_app_from_configfile() | ||||||||||||
assert app is app2 |
copyright headers ;)