diff --git a/bigchaindb/config_utils.py b/bigchaindb/config_utils.py index 87a25d3f..5a72a7d6 100644 --- a/bigchaindb/config_utils.py +++ b/bigchaindb/config_utils.py @@ -220,11 +220,14 @@ def write_config(config, filename=None): json.dump(config, f, indent=4) +def is_configured(): + return bool(bigchaindb.config.get('CONFIGURED')) + + def autoconfigure(filename=None, config=None, force=False): """Run ``file_config`` and ``env_config`` if the module has not been initialized.""" - - if not force and bigchaindb.config.get('CONFIGURED'): + if not force and is_configured(): logger.debug('System already configured, skipping autoconfiguration') return diff --git a/tests/commands/test_utils.py b/tests/commands/test_utils.py index aadd24b5..6879e0eb 100644 --- a/tests/commands/test_utils.py +++ b/tests/commands/test_utils.py @@ -1,9 +1,50 @@ import argparse import pytest +from argparse import ArgumentTypeError, Namespace from unittest.mock import patch +@pytest.fixture +def reset_bigchaindb_config(monkeypatch): + import bigchaindb + monkeypatch.setattr('bigchaindb.config', bigchaindb._config) + + +@pytest.mark.usefixtures('ignore_local_config_file', 'reset_bigchaindb_config') +def test_configure_bigchaindb_configures_bigchaindb(): + from bigchaindb.commands.utils import configure_bigchaindb + from bigchaindb.config_utils import is_configured + assert not is_configured() + + @configure_bigchaindb + def test_configure(args): + assert is_configured() + + args = Namespace(config=None) + test_configure(args) + + +@pytest.mark.usefixtures('ignore_local_config_file', + 'reset_bigchaindb_config', + 'reset_logging_config') +@pytest.mark.parametrize('log_level', ('DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL')) +def test_configure_bigchaindb_configures_logging(log_level): + import logging + from logging import getLogger + from bigchaindb.commands.utils import configure_bigchaindb + root_logger = getLogger() + assert root_logger.level == 0 + + @configure_bigchaindb + def test_configure_logger(args): + root_logger = getLogger() + assert root_logger.level == getattr(logging, log_level) + + args = Namespace(config=None, log_level=log_level) + test_configure_logger(args) + + def test_start_raises_if_command_not_implemented(): from bigchaindb.commands import utils from bigchaindb.commands.bigchain import create_parser @@ -51,13 +92,13 @@ def test_mongodb_host_type(): from bigchaindb.commands.utils import mongodb_host # bad port provided - with pytest.raises(argparse.ArgumentTypeError): + with pytest.raises(ArgumentTypeError): mongodb_host('localhost:11111111111') # no port information provided - with pytest.raises(argparse.ArgumentTypeError): + with pytest.raises(ArgumentTypeError): mongodb_host('localhost') # bad host provided - with pytest.raises(argparse.ArgumentTypeError): + with pytest.raises(ArgumentTypeError): mongodb_host(':27017') diff --git a/tests/conftest.py b/tests/conftest.py index e943d0a9..210d526e 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -12,6 +12,8 @@ import random import pytest +from logging import getLogger +from logging.config import dictConfig from bigchaindb.common import crypto TEST_DB_NAME = 'bigchain_test' @@ -203,6 +205,15 @@ def ignore_local_config_file(monkeypatch): mock_file_config) +@pytest.fixture +def reset_logging_config(): + # root_logger_level = getLogger().level + root_logger_level = 'DEBUG' + dictConfig({'version': 1, 'root': {'level': 'NOTSET'}}) + yield + getLogger().setLevel(root_logger_level) + + @pytest.fixture def user_sk(): return USER_PRIVATE_KEY