diff --git a/.circleci/config.yml b/.circleci/config.yml new file mode 100644 index 0000000..ae0798c --- /dev/null +++ b/.circleci/config.yml @@ -0,0 +1,71 @@ +# Python CircleCI 2.0 configuration file +# +# Check https://circleci.com/docs/2.0/language-python/ for more details +# +version: 2 +jobs: + build: + docker: + # specify the version you desire here + # use `-browsers` prefix for selenium tests, e.g. `3.6.1-browsers` + - image: circleci/python:3.6.1 + + # Specify service dependencies here if necessary + # CircleCI maintains a library of pre-built images + # documented at https://circleci.com/docs/2.0/circleci-images/ + # - image: circleci/postgres:9.4 + + working_directory: ~/repo + + steps: + - checkout + + # Download and cache dependencies + - restore_cache: + keys: + - v1-dependencies-{{ checksum "pisa/requirements.txt" }} + # fallback to using the latest cache if no exact match is found + - v1-dependencies- + + - run: + name: install dependencies + command: | + python3 -m venv venv + . venv/bin/activate + pip install -r pisa/requirements.txt + + - save_cache: + paths: + - ./venv + key: v1-dependencies-{{ checksum "pisa/requirements.txt" }} + + # run tests! + # this example uses Django's built-in test-runner + # other common Python testing frameworks include pytest and nose + # https://pytest.org + # https://nose.readthedocs.io + - run: + name: create config + command: cp pisa/sample_conf.py pisa/conf.py + + - run: + name: run pisa unit tests + command: | + . venv/bin/activate + pytest test/pisa/unit/ + + - run: + name: run common unit tests + command: | + . venv/bin/activate + pytest test/common/unit + +# - run: +# name: run cli unit tests +# command: | +# . venv/bin/activate +# pytest test/apps/cli/unit + + # - store_artifacts: + # path: test-reports + # destination: test-reports diff --git a/pisa/requirements.txt b/pisa/requirements.txt index 8ec7402..024cf09 100644 --- a/pisa/requirements.txt +++ b/pisa/requirements.txt @@ -1,4 +1,6 @@ zmq flask cryptography -requests \ No newline at end of file +requests +plyvel +pytest \ No newline at end of file diff --git a/pisa/sample_conf.py b/pisa/sample_conf.py index e664e81..71e64a0 100644 --- a/pisa/sample_conf.py +++ b/pisa/sample_conf.py @@ -1,14 +1,14 @@ # bitcoind -BTC_RPC_USER = None -BTC_RPC_PASSWD = None -BTC_RPC_HOST = None -BTC_RPC_PORT = None -BTC_NETWORK = None +BTC_RPC_USER = "user" +BTC_RPC_PASSWD = "passwd" +BTC_RPC_HOST = "localhost" +BTC_RPC_PORT = 18443 +BTC_NETWORK = "regtest" # ZMQ -FEED_PROTOCOL = None -FEED_ADDR = None -FEED_PORT = None +FEED_PROTOCOL = "tcp" +FEED_ADDR = "127.0.0.1" +FEED_PORT = 28332 # PISA MAX_APPOINTMENTS = 100 diff --git a/test/unit/__init__.py b/test.file similarity index 100% rename from test/unit/__init__.py rename to test.file diff --git a/test/apps/__init__.py b/test/apps/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/test/apps/cli/__init__.py b/test/apps/cli/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/test/apps/cli/unit/__init__.py b/test/apps/cli/unit/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/test/apps/cli/unit/conftest.py b/test/apps/cli/unit/conftest.py new file mode 100644 index 0000000..c87a930 --- /dev/null +++ b/test/apps/cli/unit/conftest.py @@ -0,0 +1,7 @@ +import random + + +def get_random_value_hex(nbytes): + pseudo_random_value = random.getrandbits(8 * nbytes) + prv_hex = "{:x}".format(pseudo_random_value) + return prv_hex.zfill(2 * nbytes) diff --git a/test/apps/cli/test_pisa_cli.py b/test/apps/cli/unit/test_pisa_cli.py similarity index 98% rename from test/apps/cli/test_pisa_cli.py rename to test/apps/cli/unit/test_pisa_cli.py index 0067586..e14fd0b 100644 --- a/test/apps/cli/test_pisa_cli.py +++ b/test/apps/cli/unit/test_pisa_cli.py @@ -7,7 +7,7 @@ from cryptography.hazmat.primitives import hashes from cryptography.hazmat.primitives.asymmetric import ec import apps.cli.pisa_cli as pisa_cli -from test.unit.conftest import get_random_value_hex +from test.apps.cli.unit.conftest import get_random_value_hex # TODO: should find a way of doing without this from apps.cli.pisa_cli import build_appointment diff --git a/test/common/__init__.py b/test/common/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/test/common/unit/__init__.py b/test/common/unit/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/test/common/unit/conftest.py b/test/common/unit/conftest.py new file mode 100644 index 0000000..c87a930 --- /dev/null +++ b/test/common/unit/conftest.py @@ -0,0 +1,7 @@ +import random + + +def get_random_value_hex(nbytes): + pseudo_random_value = random.getrandbits(8 * nbytes) + prv_hex = "{:x}".format(pseudo_random_value) + return prv_hex.zfill(2 * nbytes) diff --git a/test/unit/test_cryptographer.py b/test/common/unit/test_cryptographer.py similarity index 98% rename from test/unit/test_cryptographer.py rename to test/common/unit/test_cryptographer.py index 9e4d160..36521b0 100644 --- a/test/unit/test_cryptographer.py +++ b/test/common/unit/test_cryptographer.py @@ -3,7 +3,7 @@ import binascii from apps.cli.blob import Blob from common.cryptographer import Cryptographer from pisa.encrypted_blob import EncryptedBlob -from test.unit.conftest import get_random_value_hex +from test.common.unit.conftest import get_random_value_hex data = "6097cdf52309b1b2124efeed36bd34f46dc1c25ad23ac86f28380f746254f777" key = "b2e984a570f6f49bc38ace178e09147b0aa296cbb7c92eb01412f7e2d07b5659" diff --git a/test/pisa/__init__.py b/test/pisa/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/test/pisa/unit/__init__.py b/test/pisa/unit/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/test/unit/conftest.py b/test/pisa/unit/conftest.py similarity index 100% rename from test/unit/conftest.py rename to test/pisa/unit/conftest.py diff --git a/test/unit/test_api.py b/test/pisa/unit/test_api.py similarity index 99% rename from test/unit/test_api.py rename to test/pisa/unit/test_api.py index c7ed0ad..68a845b 100644 --- a/test/unit/test_api.py +++ b/test/pisa/unit/test_api.py @@ -11,7 +11,7 @@ from pisa.tools import bitcoin_cli from pisa import HOST, PORT, c_logger from pisa.conf import MAX_APPOINTMENTS -from test.unit.conftest import ( +from test.pisa.unit.conftest import ( generate_block, generate_blocks, get_random_value_hex, diff --git a/test/unit/test_appointment.py b/test/pisa/unit/test_appointment.py similarity index 98% rename from test/unit/test_appointment.py rename to test/pisa/unit/test_appointment.py index fa1c074..8af351e 100644 --- a/test/unit/test_appointment.py +++ b/test/pisa/unit/test_appointment.py @@ -5,7 +5,7 @@ from pisa import c_logger from pisa.appointment import Appointment from pisa.encrypted_blob import EncryptedBlob -from test.unit.conftest import get_random_value_hex +from test.pisa.unit.conftest import get_random_value_hex from common.constants import LOCATOR_LEN_BYTES diff --git a/test/unit/test_blob.py b/test/pisa/unit/test_blob.py similarity index 87% rename from test/unit/test_blob.py rename to test/pisa/unit/test_blob.py index 21b7bf6..302862b 100644 --- a/test/unit/test_blob.py +++ b/test/pisa/unit/test_blob.py @@ -2,7 +2,7 @@ from binascii import unhexlify from pisa import c_logger from apps.cli.blob import Blob -from test.unit.conftest import get_random_value_hex +from test.pisa.unit.conftest import get_random_value_hex c_logger.disabled = True diff --git a/test/unit/test_block_processor.py b/test/pisa/unit/test_block_processor.py similarity index 97% rename from test/unit/test_block_processor.py rename to test/pisa/unit/test_block_processor.py index 972d42c..effd6f6 100644 --- a/test/unit/test_block_processor.py +++ b/test/pisa/unit/test_block_processor.py @@ -2,7 +2,7 @@ import pytest from pisa import c_logger from pisa.block_processor import BlockProcessor -from test.unit.conftest import get_random_value_hex, generate_block, generate_blocks +from test.pisa.unit.conftest import get_random_value_hex, generate_block, generate_blocks c_logger.disabled = True diff --git a/test/unit/test_builder.py b/test/pisa/unit/test_builder.py similarity index 95% rename from test/unit/test_builder.py rename to test/pisa/unit/test_builder.py index d1e3775..c45ef47 100644 --- a/test/unit/test_builder.py +++ b/test/pisa/unit/test_builder.py @@ -1,7 +1,7 @@ from uuid import uuid4 from pisa.builder import Builder -from test.unit.conftest import get_random_value_hex, generate_dummy_appointment, generate_dummy_tracker +from test.pisa.unit.conftest import get_random_value_hex, generate_dummy_appointment, generate_dummy_tracker def test_build_appointments(): diff --git a/test/unit/test_carrier.py b/test/pisa/unit/test_carrier.py similarity index 96% rename from test/unit/test_carrier.py rename to test/pisa/unit/test_carrier.py index 4e6eddf..3e473d1 100644 --- a/test/unit/test_carrier.py +++ b/test/pisa/unit/test_carrier.py @@ -4,7 +4,7 @@ from pisa import c_logger from pisa.carrier import Carrier from test.simulator.utils import sha256d from test.simulator.transaction import TX -from test.unit.conftest import generate_blocks, generate_block, get_random_value_hex +from test.pisa.unit.conftest import generate_blocks, get_random_value_hex from pisa.rpc_errors import RPC_VERIFY_ALREADY_IN_CHAIN, RPC_DESERIALIZATION_ERROR c_logger.disabled = True diff --git a/test/unit/test_cleaner.py b/test/pisa/unit/test_cleaner.py similarity index 99% rename from test/unit/test_cleaner.py rename to test/pisa/unit/test_cleaner.py index 0a7007b..1f99d60 100644 --- a/test/unit/test_cleaner.py +++ b/test/pisa/unit/test_cleaner.py @@ -7,7 +7,7 @@ from pisa.cleaner import Cleaner from pisa.appointment import Appointment from pisa.db_manager import WATCHER_PREFIX -from test.unit.conftest import get_random_value_hex +from test.pisa.unit.conftest import get_random_value_hex from common.constants import LOCATOR_LEN_BYTES, LOCATOR_LEN_HEX diff --git a/test/unit/test_db_manager.py b/test/pisa/unit/test_db_manager.py similarity index 99% rename from test/unit/test_db_manager.py rename to test/pisa/unit/test_db_manager.py index 60c070c..49a5e43 100644 --- a/test/unit/test_db_manager.py +++ b/test/pisa/unit/test_db_manager.py @@ -9,7 +9,7 @@ from pisa.db_manager import WATCHER_LAST_BLOCK_KEY, RESPONDER_LAST_BLOCK_KEY, LO from common.constants import LOCATOR_LEN_BYTES -from test.unit.conftest import get_random_value_hex, generate_dummy_appointment +from test.pisa.unit.conftest import get_random_value_hex, generate_dummy_appointment @pytest.fixture(scope="module") diff --git a/test/unit/test_encrypted_blob.py b/test/pisa/unit/test_encrypted_blob.py similarity index 89% rename from test/unit/test_encrypted_blob.py rename to test/pisa/unit/test_encrypted_blob.py index 33b4ece..ca15277 100644 --- a/test/unit/test_encrypted_blob.py +++ b/test/pisa/unit/test_encrypted_blob.py @@ -1,6 +1,6 @@ from pisa import c_logger from pisa.encrypted_blob import EncryptedBlob -from test.unit.conftest import get_random_value_hex +from test.pisa.unit.conftest import get_random_value_hex c_logger.disabled = True diff --git a/test/unit/test_inspector.py b/test/pisa/unit/test_inspector.py similarity index 98% rename from test/unit/test_inspector.py rename to test/pisa/unit/test_inspector.py index f7705f4..9c80dff 100644 --- a/test/unit/test_inspector.py +++ b/test/pisa/unit/test_inspector.py @@ -11,7 +11,7 @@ from pisa.appointment import Appointment from pisa.block_processor import BlockProcessor from pisa.conf import MIN_TO_SELF_DELAY -from test.unit.conftest import get_random_value_hex, generate_dummy_appointment_data, generate_keypair +from test.pisa.unit.conftest import get_random_value_hex, generate_dummy_appointment_data, generate_keypair from common.constants import LOCATOR_LEN_BYTES, LOCATOR_LEN_HEX from common.cryptographer import Cryptographer diff --git a/test/unit/test_responder.py b/test/pisa/unit/test_responder.py similarity index 99% rename from test/unit/test_responder.py rename to test/pisa/unit/test_responder.py index 67846a6..302dd00 100644 --- a/test/unit/test_responder.py +++ b/test/pisa/unit/test_responder.py @@ -18,7 +18,7 @@ from common.tools import check_sha256_hex_format from test.simulator.utils import sha256d from test.simulator.bitcoind_sim import TX -from test.unit.conftest import generate_block, generate_blocks, get_random_value_hex +from test.pisa.unit.conftest import generate_block, generate_blocks, get_random_value_hex c_logger.disabled = True diff --git a/test/unit/test_tools.py b/test/pisa/unit/test_tools.py similarity index 100% rename from test/unit/test_tools.py rename to test/pisa/unit/test_tools.py diff --git a/test/unit/test_watcher.py b/test/pisa/unit/test_watcher.py similarity index 99% rename from test/unit/test_watcher.py rename to test/pisa/unit/test_watcher.py index cd2db0d..8ea07cf 100644 --- a/test/unit/test_watcher.py +++ b/test/pisa/unit/test_watcher.py @@ -8,7 +8,7 @@ from pisa import c_logger from pisa.watcher import Watcher from pisa.responder import Responder from pisa.tools import bitcoin_cli -from test.unit.conftest import ( +from test.pisa.unit.conftest import ( generate_block, generate_blocks, generate_dummy_appointment, diff --git a/test/simulator/test_bitcoin_sim.py b/test/simulator/test_bitcoin_sim.py index 222fd9d..d24d7fd 100644 --- a/test/simulator/test_bitcoin_sim.py +++ b/test/simulator/test_bitcoin_sim.py @@ -4,7 +4,7 @@ from time import sleep from threading import Thread from test.simulator.transaction import TX -from test.unit.conftest import get_random_value_hex +from test.pisa.unit import get_random_value_hex from test.simulator.bitcoind_sim import run_simulator from pisa.utils.auth_proxy import AuthServiceProxy, JSONRPCException from pisa.conf import BTC_RPC_USER, BTC_RPC_PASSWD, BTC_RPC_HOST, BTC_RPC_PORT