mirror of
https://github.com/aljazceru/python-teos.git
synced 2025-12-17 14:14:22 +01:00
Adds missing common/tools unit tests and removes pisad tests
`test_pisad.py` was only covering config parsing tests, that are now part of `common/tools.py`.
This commit is contained in:
@@ -1,7 +1,26 @@
|
|||||||
from common.tools import check_sha256_hex_format
|
import os
|
||||||
|
import pytest
|
||||||
|
import logging
|
||||||
|
from copy import deepcopy
|
||||||
|
|
||||||
|
from pisa import conf_fields
|
||||||
|
|
||||||
|
from common.constants import LOCATOR_LEN_BYTES
|
||||||
|
from common.tools import (
|
||||||
|
check_sha256_hex_format,
|
||||||
|
check_locator_format,
|
||||||
|
compute_locator,
|
||||||
|
setup_data_folder,
|
||||||
|
check_conf_fields,
|
||||||
|
extend_paths,
|
||||||
|
setup_logging,
|
||||||
|
)
|
||||||
from test.common.unit.conftest import get_random_value_hex
|
from test.common.unit.conftest import get_random_value_hex
|
||||||
|
|
||||||
|
|
||||||
|
conf_fields_copy = deepcopy(conf_fields)
|
||||||
|
|
||||||
|
|
||||||
def test_check_sha256_hex_format():
|
def test_check_sha256_hex_format():
|
||||||
# Only 32-byte hex encoded strings should pass the test
|
# Only 32-byte hex encoded strings should pass the test
|
||||||
wrong_inputs = [None, str(), 213, 46.67, dict(), "A" * 63, "C" * 65, bytes(), get_random_value_hex(31)]
|
wrong_inputs = [None, str(), 213, 46.67, dict(), "A" * 63, "C" * 65, bytes(), get_random_value_hex(31)]
|
||||||
@@ -10,3 +29,98 @@ def test_check_sha256_hex_format():
|
|||||||
|
|
||||||
for v in range(100):
|
for v in range(100):
|
||||||
assert check_sha256_hex_format(get_random_value_hex(32)) is True
|
assert check_sha256_hex_format(get_random_value_hex(32)) is True
|
||||||
|
|
||||||
|
|
||||||
|
def test_check_locator_format():
|
||||||
|
# Check that only LOCATOR_LEN_BYTES long string pass the test
|
||||||
|
|
||||||
|
wrong_inputs = [
|
||||||
|
None,
|
||||||
|
str(),
|
||||||
|
213,
|
||||||
|
46.67,
|
||||||
|
dict(),
|
||||||
|
"A" * (2 * LOCATOR_LEN_BYTES - 1),
|
||||||
|
"C" * (2 * LOCATOR_LEN_BYTES + 1),
|
||||||
|
bytes(),
|
||||||
|
get_random_value_hex(LOCATOR_LEN_BYTES - 1),
|
||||||
|
]
|
||||||
|
for wtype in wrong_inputs:
|
||||||
|
assert check_sha256_hex_format(wtype) is False
|
||||||
|
|
||||||
|
for _ in range(100):
|
||||||
|
assert check_locator_format(get_random_value_hex(LOCATOR_LEN_BYTES)) is True
|
||||||
|
|
||||||
|
|
||||||
|
def test_compute_locator():
|
||||||
|
# The best way of checking that compute locator is correct is by using check_locator_format
|
||||||
|
for _ in range(100):
|
||||||
|
assert check_locator_format(compute_locator(get_random_value_hex(LOCATOR_LEN_BYTES))) is True
|
||||||
|
|
||||||
|
# String of length smaller than LOCATOR_LEN_BYTES bytes must fail
|
||||||
|
for i in range(1, LOCATOR_LEN_BYTES):
|
||||||
|
assert check_locator_format(compute_locator(get_random_value_hex(i))) is False
|
||||||
|
|
||||||
|
|
||||||
|
def test_setup_data_folder():
|
||||||
|
# This method should create a folder if it does not exist, and do nothing otherwise
|
||||||
|
test_folder = "test_folder"
|
||||||
|
assert not os.path.isdir(test_folder)
|
||||||
|
|
||||||
|
setup_data_folder(test_folder)
|
||||||
|
|
||||||
|
assert os.path.isdir(test_folder)
|
||||||
|
|
||||||
|
os.rmdir(test_folder)
|
||||||
|
|
||||||
|
|
||||||
|
def test_check_conf_fields():
|
||||||
|
# The test should work with a valid config_fields (obtained from a valid conf.py)
|
||||||
|
assert type(check_conf_fields(conf_fields_copy)) == dict
|
||||||
|
|
||||||
|
|
||||||
|
def test_bad_check_conf_fields():
|
||||||
|
# Create a messed up version of the file that should throw an error.
|
||||||
|
conf_fields_copy["BTC_RPC_USER"] = 0000
|
||||||
|
conf_fields_copy["BTC_RPC_PASSWD"] = "password"
|
||||||
|
conf_fields_copy["BTC_RPC_HOST"] = 000
|
||||||
|
|
||||||
|
# We should get a ValueError here.
|
||||||
|
with pytest.raises(Exception):
|
||||||
|
check_conf_fields(conf_fields_copy)
|
||||||
|
|
||||||
|
|
||||||
|
def test_extend_paths():
|
||||||
|
# Test that only items with the path flag are extended
|
||||||
|
config_fields = {
|
||||||
|
"foo": {"value": "foofoo"},
|
||||||
|
"var": {"value": "varvar", "path": True},
|
||||||
|
"foovar": {"value": "foovarfoovar"},
|
||||||
|
}
|
||||||
|
base_path = "base_path/"
|
||||||
|
extended_config_field = extend_paths(base_path, config_fields)
|
||||||
|
|
||||||
|
for k, field in extended_config_field.items():
|
||||||
|
if field.get("path") is True:
|
||||||
|
assert base_path in field.get("value")
|
||||||
|
else:
|
||||||
|
assert base_path not in field.get("value")
|
||||||
|
|
||||||
|
|
||||||
|
def test_setup_logging():
|
||||||
|
# Check that setup_logging creates two new logs for every prefix
|
||||||
|
prefix = "foo"
|
||||||
|
log_file = "var.log"
|
||||||
|
|
||||||
|
f_log_suffix = "_file_log"
|
||||||
|
c_log_suffix = "_console_log"
|
||||||
|
|
||||||
|
assert len(logging.getLogger(prefix + f_log_suffix).handlers) is 0
|
||||||
|
assert len(logging.getLogger(prefix + c_log_suffix).handlers) is 0
|
||||||
|
|
||||||
|
setup_logging(log_file, prefix)
|
||||||
|
|
||||||
|
assert len(logging.getLogger(prefix + f_log_suffix).handlers) is 1
|
||||||
|
assert len(logging.getLogger(prefix + c_log_suffix).handlers) is 1
|
||||||
|
|
||||||
|
os.remove(log_file)
|
||||||
|
|||||||
@@ -1,51 +0,0 @@
|
|||||||
import importlib
|
|
||||||
import os
|
|
||||||
import pytest
|
|
||||||
from shutil import copyfile
|
|
||||||
|
|
||||||
from pisa.pisad import load_config
|
|
||||||
|
|
||||||
test_conf_file_path = os.getcwd() + "/test/pisa/unit/test_conf.py"
|
|
||||||
|
|
||||||
|
|
||||||
def test_load_config():
|
|
||||||
# Copy the sample-conf.py file to use as a test config file.
|
|
||||||
copyfile(os.getcwd() + "/pisa/sample_conf.py", test_conf_file_path)
|
|
||||||
|
|
||||||
import test.pisa.unit.test_conf as conf
|
|
||||||
|
|
||||||
# If the file has all the correct fields and data, it should return a dict.
|
|
||||||
conf_dict = load_config(conf)
|
|
||||||
assert type(conf_dict) == dict
|
|
||||||
|
|
||||||
# Delete the file.
|
|
||||||
os.remove(test_conf_file_path)
|
|
||||||
|
|
||||||
|
|
||||||
def test_bad_load_config():
|
|
||||||
# Create a messed up version of the file that should throw an error.
|
|
||||||
with open(test_conf_file_path, "w") as f:
|
|
||||||
f.write('# bitcoind\nBTC_RPC_USER = 0000\nBTC_RPC_PASSWD = "password"\nBTC_RPC_HOST = 000')
|
|
||||||
|
|
||||||
import test.pisa.unit.test_conf as conf
|
|
||||||
|
|
||||||
importlib.reload(conf)
|
|
||||||
|
|
||||||
with pytest.raises(Exception):
|
|
||||||
conf_dict = load_config(conf)
|
|
||||||
|
|
||||||
os.remove(test_conf_file_path)
|
|
||||||
|
|
||||||
|
|
||||||
def test_empty_load_config():
|
|
||||||
# Create an empty version of the file that should throw an error.
|
|
||||||
open(test_conf_file_path, "a")
|
|
||||||
|
|
||||||
import test.pisa.unit.test_conf as conf
|
|
||||||
|
|
||||||
importlib.reload(conf)
|
|
||||||
|
|
||||||
with pytest.raises(Exception):
|
|
||||||
conf_dict = load_config(conf)
|
|
||||||
|
|
||||||
os.remove(test_conf_file_path)
|
|
||||||
Reference in New Issue
Block a user