planetmint/tests/commands/test_utils.py
Lorenz Herzberger 3954340d7d
replaced transactions module (#268)
* adjusted hashlib imports and renamed to bigchaindb error

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>

* added type hints to transactions module

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>

* moved upsert_validator txs to transactions, updated imports

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>

* removed unused imports

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>

* moved tx validate to lib

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>

* moved from_db to planetmint

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>

* removed from db from transaction

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>

* moved election validation to planetmint

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>

* moved election methods to planetmint

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>

* moved get_validators and get_recipients to planetmint

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>

* removed unnecessary election method

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>

* moved show_election_status to planetmint

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>

* moved topology check to planetmint

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>

* moved election_id_to_public_key to validator_utils

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>

* moved vote methods to planetmint

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>

* moved process_block to planetmint

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>

* removed unused code from Vote

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>

* moved has election concluded to planetmint

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>

* adjusted has_election_concluded

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>

* removed unused imports, added copyright notices

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>

* moved rollback_eleciton to planetmint

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>

* moved on_rollback behaviour to planetmint

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>

* moved some validator utils to tendermint utils, election approval now handled by planetmint

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>

* Use planetmint-transaction pypi package

Signed-off-by: cybnon <stefan.weber93@googlemail.com>

* fixed docs imports

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>

* fixed validate call on test case

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>

* resolved linting errors

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>

* fixed mock on test case

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>

* adjusted CHANGELOG

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>

* removed duplicate transactions test suite

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>

* fixed pr comments

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>

* reordered imports to be standardized

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>

* removed unused imports and reordered them

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>

* fixed linter error

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>
Signed-off-by: cybnon <stefan.weber93@googlemail.com>
Co-authored-by: cybnon <stefan.weber93@googlemail.com>
2022-10-13 09:31:19 +02:00

123 lines
4.3 KiB
Python

# Copyright © 2020 Interplanetary Database Association e.V.,
# Planetmint and IPDB software contributors.
# SPDX-License-Identifier: (Apache-2.0 AND CC-BY-4.0)
# Code is Apache-2.0 and docs are CC-BY-4.0
import argparse
import logging
import pytest
from argparse import Namespace
from planetmint.config import Config
from unittest.mock import patch
@pytest.fixture
def reset_planetmint_config(monkeypatch):
monkeypatch.setattr("planetmint.config", Config().init_config("tarantool_db"))
def test_input_on_stderr():
from planetmint.commands.utils import input_on_stderr, _convert
with patch("builtins.input", return_value="I love cats"):
assert input_on_stderr() == "I love cats"
# input_on_stderr uses `_convert` internally, from now on we will
# just use that function
assert _convert("hack the planet") == "hack the planet"
assert _convert("42") == "42"
assert _convert("42", default=10) == 42
assert _convert("", default=10) == 10
assert _convert("42", convert=int) == 42
assert _convert("True", convert=bool) is True
assert _convert("False", convert=bool) is False
assert _convert("t", convert=bool) is True
assert _convert("3.14", default=1.0) == 3.14
assert _convert("TrUe", default=False) is True
with pytest.raises(ValueError):
assert _convert("TRVE", default=False)
with pytest.raises(ValueError):
assert _convert("ಠ_ಠ", convert=int)
@pytest.mark.usefixtures("ignore_local_config_file", "reset_planetmint_config")
def test_configure_planetmint_configures_planetmint():
from planetmint.commands.utils import configure_planetmint
from planetmint.config_utils import is_configured
assert not is_configured()
@configure_planetmint
def test_configure(args):
assert is_configured()
args = Namespace(config=None)
test_configure(args)
@pytest.mark.usefixtures("ignore_local_config_file", "reset_planetmint_config", "reset_logging_config")
@pytest.mark.parametrize(
"log_level",
tuple(map(logging.getLevelName, (logging.DEBUG, logging.INFO, logging.WARNING, logging.ERROR, logging.CRITICAL))),
)
def test_configure_planetmint_logging(log_level):
# TODO: See following comment:
# This is a dirty test. If a test *preceding* this test makes use of the logger, and then another test *after* this
# test also makes use of the logger, somehow we get logger.disabled == True, and the later test fails. We need to
# either engineer this somehow to leave the test env in the same state as it finds it, or make an assessment
# whether or not we even need this test, and potentially just remove it.
from planetmint.commands.utils import configure_planetmint
@configure_planetmint
def test_configure_logger(args):
pass
args = Namespace(config=None, log_level=log_level)
test_configure_logger(args)
assert Config().get()["log"]["level_console"] == log_level
assert Config().get()["log"]["level_logfile"] == log_level
def test_start_raises_if_command_not_implemented():
from planetmint.commands import utils
from planetmint.commands.planetmint import create_parser
parser = create_parser()
with pytest.raises(NotImplementedError):
# Will raise because `scope`, the third parameter,
# doesn't contain the function `run_start`
utils.start(parser, ["start"], {})
def test_start_raises_if_no_arguments_given():
from planetmint.commands import utils
from planetmint.commands.planetmint import create_parser
parser = create_parser()
with pytest.raises(SystemExit):
utils.start(parser, [], {})
@patch("multiprocessing.cpu_count", return_value=42)
def test_start_sets_multiprocess_var_based_on_cli_args(mock_cpu_count):
from planetmint.commands import utils
def run_mp_arg_test(args):
return args
parser = argparse.ArgumentParser()
subparser = parser.add_subparsers(title="Commands", dest="command")
mp_arg_test_parser = subparser.add_parser("mp_arg_test")
mp_arg_test_parser.add_argument("-m", "--multiprocess", nargs="?", type=int, default=False)
scope = {"run_mp_arg_test": run_mp_arg_test}
assert utils.start(parser, ["mp_arg_test"], scope).multiprocess == 1
assert utils.start(parser, ["mp_arg_test", "--multiprocess"], scope).multiprocess == 42