From 7a159324113876e4b6522019c6431a987a3efaba Mon Sep 17 00:00:00 2001 From: Matt Traudt <sirmatt@ksu.edu> Date: Fri, 1 Jun 2018 14:39:44 -0700 Subject: [PATCH] Add integration tests, reorg tests --- sbws/util/stem.py | 12 +++++++ tests/integration/__touch__.py | 0 tests/integration/conftest.py | 42 ++++++++++++++++++++++++ tests/integration/test_stem.py | 27 +++++++++++++++ tests/testnets/reproducible.tar | Bin 0 -> 191488 bytes tests/unit/__init__.py | 0 tests/{ => unit}/conftest.py | 0 tests/{ => unit}/core/test_cleanup.py | 2 +- tests/{ => unit}/core/test_generate.py | 0 tests/{ => unit}/core/test_stats.py | 2 +- tests/{ => unit}/globals.py | 0 tests/{ => unit}/lib/test_results.py | 2 +- tests/{ => unit}/lib/test_v3bwfile.py | 0 tests/{ => unit}/util/test_config.py | 0 tests/{ => unit}/util/test_userquery.py | 0 tox.ini | 26 +++++++++++++-- 16 files changed, 107 insertions(+), 6 deletions(-) create mode 100644 tests/integration/__touch__.py create mode 100644 tests/integration/conftest.py create mode 100644 tests/integration/test_stem.py create mode 100644 tests/testnets/reproducible.tar create mode 100644 tests/unit/__init__.py rename tests/{ => unit}/conftest.py (100%) rename tests/{ => unit}/core/test_cleanup.py (99%) rename tests/{ => unit}/core/test_generate.py (100%) rename tests/{ => unit}/core/test_stats.py (99%) rename tests/{ => unit}/globals.py (100%) rename tests/{ => unit}/lib/test_results.py (99%) rename tests/{ => unit}/lib/test_v3bwfile.py (100%) rename tests/{ => unit}/util/test_config.py (100%) rename tests/{ => unit}/util/test_userquery.py (100%) diff --git a/sbws/util/stem.py b/sbws/util/stem.py index 48a6da75..5291bbad 100644 --- a/sbws/util/stem.py +++ b/sbws/util/stem.py @@ -83,6 +83,18 @@ def init_controller(port=None, path=None, set_custom_stream_settings=True): return c, '' +def is_bootstrapped(c): + if not is_controller_okay(c): + return False + line = c.get_info('status/bootstrap-phase') + state, _, progress, *_ = line.split() + progress = int(progress.split('=')[1]) + if state == 'NOTICE' and progress == 100: + return True + log.debug('Not bootstrapped. state={} progress={}'.format(state, progress)) + return False + + def is_controller_okay(c): if not c: return False diff --git a/tests/integration/__touch__.py b/tests/integration/__touch__.py new file mode 100644 index 00000000..e69de29b diff --git a/tests/integration/conftest.py b/tests/integration/conftest.py new file mode 100644 index 00000000..a64e1650 --- /dev/null +++ b/tests/integration/conftest.py @@ -0,0 +1,42 @@ +import pytest +from tempfile import TemporaryDirectory +from sbws.util.parser import create_parser +from sbws.util.config import get_config +from sbws.util.stem import launch_tor +import sbws.core.init + + +@pytest.fixture(scope='session') +def parser(): + return create_parser() + + +@pytest.fixture(scope='session') +def persistent_empty_dotsbws(parser): + ''' + Creates a ~/.sbws with nothing in it but a config.ini + ''' + d = TemporaryDirectory() + args = parser.parse_args( + '-d {} --log-level DEBUG init'.format(d.name).split()) + conf = get_config(args) + sbws.core.init.main(args, conf) + return d + + +@pytest.fixture(scope='session') +def persistent_launch_tor(parser, persistent_empty_dotsbws): + d = persistent_empty_dotsbws + args = parser.parse_args('-d {}'.format(d.name).split()) + conf = get_config(args) + conf['tor']['extra_lines'] = ''' +DirAuthority auth1 orport=2002 no-v2 v3ident=D7DBC517EFD2BA1A5012CF1BD0BB38F17C8160BD 127.10.0.1:2003 AA45C13025C037F056E734169891878ED0880231 +DirAuthority auth2 orport=2002 no-v2 v3ident=4EE103A081F400E6622F5461D51782B876BB5C24 127.10.0.2:2003 E7B3C9A0040D628DAC88B0251AE6334D28E8F531 +DirAuthority auth3 orport=2002 no-v2 v3ident=8B85069C7FC0593801E6491A34100264FCE28980 127.10.0.3:2003 35E3B8BB71C81355649AEC5862ECB7ED7EFDBC5C +TestingTorNetwork 1 +NumCPUs 1 +LogTimeGranularity 1 +SafeLogging 0 +''' + cont = launch_tor(conf) + return cont diff --git a/tests/integration/test_stem.py b/tests/integration/test_stem.py new file mode 100644 index 00000000..c36879df --- /dev/null +++ b/tests/integration/test_stem.py @@ -0,0 +1,27 @@ +import sbws.util.stem as stem_utils +from stem.descriptor.router_status_entry import RouterStatusEntryV3 + + +def test_foo(persistent_launch_tor): + cont = persistent_launch_tor + assert stem_utils.is_controller_okay(cont) + assert stem_utils.is_bootstrapped(cont) + + +def test_get_relay_from_fp(persistent_launch_tor): + cont = persistent_launch_tor + # AA45C13025C037F056E734169891878ED0880231 is auth1 + relay = stem_utils.fp_or_nick_to_relay( + cont, 'AA45C13025C037F056E734169891878ED0880231') + assert isinstance(relay, RouterStatusEntryV3) + assert relay.fingerprint == 'AA45C13025C037F056E734169891878ED0880231' + assert relay.nickname == 'auth1' + + +def test_get_relay_from_nick(persistent_launch_tor): + cont = persistent_launch_tor + # AA45C13025C037F056E734169891878ED0880231 is auth1 + relay = stem_utils.fp_or_nick_to_relay(cont, 'auth1') + assert isinstance(relay, RouterStatusEntryV3) + assert relay.fingerprint == 'AA45C13025C037F056E734169891878ED0880231' + assert relay.nickname == 'auth1' diff --git a/tests/testnets/reproducible.tar b/tests/testnets/reproducible.tar new file mode 100644 index 0000000000000000000000000000000000000000..4f6be8893987e836dd925e19a85e7a091fd5567b GIT binary patch literal 191488 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 literal 0 HcmV?d00001 diff --git a/tests/unit/__init__.py b/tests/unit/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/tests/conftest.py b/tests/unit/conftest.py similarity index 100% rename from tests/conftest.py rename to tests/unit/conftest.py diff --git a/tests/core/test_cleanup.py b/tests/unit/core/test_cleanup.py similarity index 99% rename from tests/core/test_cleanup.py rename to tests/unit/core/test_cleanup.py index 8f35e9ad..0f6fc413 100644 --- a/tests/core/test_cleanup.py +++ b/tests/unit/core/test_cleanup.py @@ -1,7 +1,7 @@ from sbws.util.config import get_config from sbws.globals import touch_file import sbws.core.cleanup -from tests.globals import monotonic_time +from tests.unit.globals import monotonic_time from unittest.mock import patch import logging import os diff --git a/tests/core/test_generate.py b/tests/unit/core/test_generate.py similarity index 100% rename from tests/core/test_generate.py rename to tests/unit/core/test_generate.py diff --git a/tests/core/test_stats.py b/tests/unit/core/test_stats.py similarity index 99% rename from tests/core/test_stats.py rename to tests/unit/core/test_stats.py index 43c1e277..d54f83b0 100644 --- a/tests/core/test_stats.py +++ b/tests/unit/core/test_stats.py @@ -6,7 +6,7 @@ from sbws.lib.resultdump import Result from sbws.lib.resultdump import write_result_to_datadir import sbws.core.init import sbws.core.stats -from tests.globals import monotonic_time +from tests.unit.globals import monotonic_time from unittest.mock import patch from datetime import datetime import os diff --git a/tests/globals.py b/tests/unit/globals.py similarity index 100% rename from tests/globals.py rename to tests/unit/globals.py diff --git a/tests/lib/test_results.py b/tests/unit/lib/test_results.py similarity index 99% rename from tests/lib/test_results.py rename to tests/unit/lib/test_results.py index 95a356df..449222e8 100644 --- a/tests/lib/test_results.py +++ b/tests/unit/lib/test_results.py @@ -7,7 +7,7 @@ from sbws.lib.resultdump import ResultErrorAuth from sbws.lib.resultdump import ResultErrorCircuit from sbws.lib.resultdump import ResultErrorStream from sbws.lib.resultdump import _ResultType -from tests.globals import monotonic_time +from tests.unit.globals import monotonic_time @patch('time.time') diff --git a/tests/lib/test_v3bwfile.py b/tests/unit/lib/test_v3bwfile.py similarity index 100% rename from tests/lib/test_v3bwfile.py rename to tests/unit/lib/test_v3bwfile.py diff --git a/tests/util/test_config.py b/tests/unit/util/test_config.py similarity index 100% rename from tests/util/test_config.py rename to tests/unit/util/test_config.py diff --git a/tests/util/test_userquery.py b/tests/unit/util/test_userquery.py similarity index 100% rename from tests/util/test_userquery.py rename to tests/unit/util/test_userquery.py diff --git a/tox.ini b/tox.ini index fba0d656..65495b0a 100644 --- a/tox.ini +++ b/tox.ini @@ -1,10 +1,12 @@ [tox] skip_missing_interpreters = True -envlist = clean, lint, py34, py35, py36, stats +envlist = clean, lint, py34, py35, py36, stats, integration [travis] python = - 3.4: lint, py34 + 3.4: lint, py34, integration + 3.5: py35, integration + 3.6: py36, integration [testenv:clean] skip_install = True @@ -14,6 +16,24 @@ deps = commands= coverage erase +[testenv:integration] +ignore_errors = True +deps = .[test] +whitelist_externals = + rm + tar + time + bash + sleep +changedir = {toxinidir}/tests/testnets +commands = + rm -vrf reproducible + tar vxf reproducible.tar + bash ./reproducible/start.sh + time bash -c "python3 ./reproducible/wait.py ./reproducible/{auth,relay,exit}*" + coverage run --rcfile={toxinidir}/.coveragerc --source=sbws -m pytest -s {toxinidir}/tests/integration -vv + bash ./reproducible/stop.sh + [testenv:lint] skip_install = True deps = .[dev] @@ -36,7 +56,7 @@ install_command = pip install --process-dependency-links {opts} {packages} deps = .[test] commands = - coverage run --rcfile={toxinidir}/.coveragerc --source=sbws -m pytest -s {toxinidir}/tests -vv + coverage run --rcfile={toxinidir}/.coveragerc --source=sbws -m pytest -s {toxinidir}/tests/unit -vv passenv = TRAVIS TRAVIS_JOB_ID -- GitLab