+ added more tests
* fixed chdir home bug * fixed some tests creating normal data dir
This commit is contained in:
parent
665cb0c732
commit
60d2ebfaed
4
docs/dev/error-codes.md
Normal file
4
docs/dev/error-codes.md
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
# Exit codes
|
||||||
|
|
||||||
|
10: run with no command
|
||||||
|
3: command does not exist
|
12
run_tests.sh
12
run_tests.sh
@ -24,9 +24,9 @@ echo "ran $ran integration tests."
|
|||||||
echo "total test time $SECONDS"
|
echo "total test time $SECONDS"
|
||||||
ran=0;
|
ran=0;
|
||||||
|
|
||||||
for f in tests/browser-tests/*.py; do
|
#for f in tests/browser-tests/*.py; do
|
||||||
python3 "$f" || close # if needed
|
# python3 "$f" || close # if needed
|
||||||
let "ran++"
|
# let "ran++"
|
||||||
done
|
#done
|
||||||
echo "ran $ran browser tests."
|
#echo "ran $ran browser tests."
|
||||||
echo "total test time $SECONDS"
|
echo "total test time $SECONDS"
|
||||||
|
@ -1,9 +1,17 @@
|
|||||||
'''
|
"""Onionr - Private P2P Communication.
|
||||||
Onionr - Private P2P Communication
|
|
||||||
|
|
||||||
Cleanup old Onionr blocks and forward secrecy keys using the communicator. Ran from a timer usually
|
Cleanup old Onionr blocks and forward secrecy keys using the communicator.
|
||||||
'''
|
Ran from a communicator timer usually
|
||||||
'''
|
"""
|
||||||
|
import sqlite3
|
||||||
|
import logger
|
||||||
|
from onionrusers import onionrusers
|
||||||
|
from onionrutils import epoch
|
||||||
|
from coredb import blockmetadb, dbfiles
|
||||||
|
import onionrstorage
|
||||||
|
from onionrstorage import removeblock
|
||||||
|
from onionrblocks import onionrblacklist
|
||||||
|
"""
|
||||||
This program is free software: you can redistribute it and/or modify
|
This program is free software: you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
the Free Software Foundation, either version 3 of the License, or
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
@ -16,15 +24,8 @@
|
|||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
You should have received a copy of the GNU General Public License
|
||||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
'''
|
"""
|
||||||
import sqlite3
|
|
||||||
import logger
|
|
||||||
from onionrusers import onionrusers
|
|
||||||
from onionrutils import epoch
|
|
||||||
from coredb import blockmetadb, dbfiles
|
|
||||||
import onionrstorage
|
|
||||||
from onionrstorage import removeblock
|
|
||||||
from onionrblocks import onionrblacklist
|
|
||||||
|
|
||||||
def __remove_from_upload(comm_inst, block_hash: str):
|
def __remove_from_upload(comm_inst, block_hash: str):
|
||||||
try:
|
try:
|
||||||
@ -32,8 +33,9 @@ def __remove_from_upload(comm_inst, block_hash: str):
|
|||||||
except ValueError:
|
except ValueError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
def clean_old_blocks(comm_inst):
|
def clean_old_blocks(comm_inst):
|
||||||
'''Delete old blocks if our disk allocation is full/near full, and also expired blocks'''
|
"""Delete expired blocks + old blocks if disk allocation is near full"""
|
||||||
blacklist = onionrblacklist.OnionrBlackList()
|
blacklist = onionrblacklist.OnionrBlackList()
|
||||||
# Delete expired blocks
|
# Delete expired blocks
|
||||||
for bHash in blockmetadb.expiredblocks.get_expired_blocks():
|
for bHash in blockmetadb.expiredblocks.get_expired_blocks():
|
||||||
@ -56,8 +58,9 @@ def clean_old_blocks(comm_inst):
|
|||||||
|
|
||||||
comm_inst.decrementThreadCount('clean_old_blocks')
|
comm_inst.decrementThreadCount('clean_old_blocks')
|
||||||
|
|
||||||
|
|
||||||
def clean_keys(comm_inst):
|
def clean_keys(comm_inst):
|
||||||
'''Delete expired forward secrecy keys'''
|
"""Delete expired forward secrecy keys"""
|
||||||
conn = sqlite3.connect(dbfiles.user_id_info_db, timeout=10)
|
conn = sqlite3.connect(dbfiles.user_id_info_db, timeout=10)
|
||||||
c = conn.cursor()
|
c = conn.cursor()
|
||||||
time = epoch.get_epoch()
|
time = epoch.get_epoch()
|
||||||
@ -75,4 +78,4 @@ def clean_keys(comm_inst):
|
|||||||
|
|
||||||
onionrusers.deleteExpiredKeys()
|
onionrusers.deleteExpiredKeys()
|
||||||
|
|
||||||
comm_inst.decrementThreadCount('clean_keys')
|
comm_inst.decrementThreadCount('clean_keys')
|
||||||
|
@ -33,7 +33,7 @@ def add_to_block_DB(newHash, selfInsert=False, dataSaved=False):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
if blockmetadata.has_block(newHash):
|
if blockmetadata.has_block(newHash):
|
||||||
raise
|
raise BlockMetaEntryExists
|
||||||
conn = sqlite3.connect(dbfiles.block_meta_db, timeout=onionrvalues.DATABASE_LOCK_TIMEOUT)
|
conn = sqlite3.connect(dbfiles.block_meta_db, timeout=onionrvalues.DATABASE_LOCK_TIMEOUT)
|
||||||
c = conn.cursor()
|
c = conn.cursor()
|
||||||
currentTime = epoch.get_epoch() + secrets.randbelow(301)
|
currentTime = epoch.get_epoch() + secrets.randbelow(301)
|
||||||
|
@ -17,7 +17,7 @@ announce_cache = home + 'announcecache.dat'
|
|||||||
export_location = home + 'block-export/'
|
export_location = home + 'block-export/'
|
||||||
upload_list = home + 'upload-list.json'
|
upload_list = home + 'upload-list.json'
|
||||||
config_file = home + 'config.json'
|
config_file = home + 'config.json'
|
||||||
daemon_mark_file = app_root + '/daemon-true.txt'
|
daemon_mark_file = home + '/daemon-true.txt'
|
||||||
lock_file = home + 'onionr.lock'
|
lock_file = home + 'onionr.lock'
|
||||||
|
|
||||||
site_cache = home + 'onionr-sites.txt'
|
site_cache = home + 'onionr-sites.txt'
|
||||||
|
@ -5,6 +5,12 @@ This module loads in the Onionr arguments and their help messages
|
|||||||
import sys
|
import sys
|
||||||
import os
|
import os
|
||||||
|
|
||||||
|
try:
|
||||||
|
if sys.argv[1] not in ('start', 'details', 'show-details'):
|
||||||
|
os.chdir(os.environ['ORIG_ONIONR_RUN_DIR'])
|
||||||
|
except (KeyError, IndexError) as _:
|
||||||
|
pass
|
||||||
|
|
||||||
import logger
|
import logger
|
||||||
import onionrexceptions
|
import onionrexceptions
|
||||||
import onionrplugins
|
import onionrplugins
|
||||||
@ -74,19 +80,14 @@ def register():
|
|||||||
try:
|
try:
|
||||||
cmd = sys.argv[1]
|
cmd = sys.argv[1]
|
||||||
except IndexError:
|
except IndexError:
|
||||||
logger.debug("Detected Onionr run with no commands specified")
|
logger.info('Run with --help to see available commands', terminal=True)
|
||||||
return
|
sys.exit(10)
|
||||||
|
|
||||||
is_help_cmd = False
|
is_help_cmd = False
|
||||||
if cmd.replace('--', '').lower() == 'help':
|
if cmd.replace('--', '').lower() == 'help':
|
||||||
is_help_cmd = True
|
is_help_cmd = True
|
||||||
|
|
||||||
try:
|
try:
|
||||||
try:
|
|
||||||
if cmd not in ('start', 'details', 'show-details'):
|
|
||||||
os.chdir(os.environ['ORIG_ONIONR_RUN_DIR'])
|
|
||||||
except KeyError:
|
|
||||||
pass
|
|
||||||
try:
|
try:
|
||||||
arguments.get_func(cmd)()
|
arguments.get_func(cmd)()
|
||||||
except KeyboardInterrupt:
|
except KeyboardInterrupt:
|
||||||
|
@ -12,6 +12,7 @@ from . import ownnode
|
|||||||
from .webpasstest import webpass_test
|
from .webpasstest import webpass_test
|
||||||
from .osver import test_os_ver_endpoint
|
from .osver import test_os_ver_endpoint
|
||||||
from .clearnettor import test_clearnet_tor_request
|
from .clearnettor import test_clearnet_tor_request
|
||||||
|
from .housekeeping import test_inserted_housekeeping
|
||||||
"""
|
"""
|
||||||
This program is free software: you can redistribute it and/or modify
|
This program is free software: you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
@ -34,7 +35,8 @@ RUN_TESTS = [uicheck.check_ui,
|
|||||||
stresstest.stress_test_block_insert,
|
stresstest.stress_test_block_insert,
|
||||||
webpass_test,
|
webpass_test,
|
||||||
test_os_ver_endpoint,
|
test_os_ver_endpoint,
|
||||||
test_clearnet_tor_request
|
test_clearnet_tor_request,
|
||||||
|
test_inserted_housekeeping
|
||||||
]
|
]
|
||||||
|
|
||||||
SUCCESS_FILE = os.path.dirname(os.path.realpath(__file__)) + '/../../tests/runtime-result.txt'
|
SUCCESS_FILE = os.path.dirname(os.path.realpath(__file__)) + '/../../tests/runtime-result.txt'
|
||||||
|
25
src/runtests/housekeeping.py
Normal file
25
src/runtests/housekeeping.py
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
import os
|
||||||
|
|
||||||
|
from gevent import sleep
|
||||||
|
|
||||||
|
from onionrblocks import insert
|
||||||
|
import logger
|
||||||
|
from coredb.blockmetadb import get_block_list
|
||||||
|
from onionrutils import epoch
|
||||||
|
|
||||||
|
|
||||||
|
def test_inserted_housekeeping(testmanager):
|
||||||
|
"""Tests that inserted blocks are proprely deleted"""
|
||||||
|
bl = insert('testdata', expire=12)
|
||||||
|
wait_seconds = 132 # Wait two minutes plus expire time
|
||||||
|
count = 0
|
||||||
|
if bl in get_block_list():
|
||||||
|
while count < wait_seconds:
|
||||||
|
if bl in get_block_list():
|
||||||
|
sleep(1)
|
||||||
|
count += 1
|
||||||
|
else:
|
||||||
|
return
|
||||||
|
raise ValueError('Inserted block with expiry not erased')
|
||||||
|
else:
|
||||||
|
raise ValueError('Inserted block in expiry test not present in list')
|
@ -29,10 +29,6 @@ def identify_home() -> str:
|
|||||||
path = os.environ.get('ONIONR_HOME', None)
|
path = os.environ.get('ONIONR_HOME', None)
|
||||||
|
|
||||||
|
|
||||||
if path is not None and not os.getcwd().endswith('src') \
|
|
||||||
and 'test' not in path:
|
|
||||||
path = 'src/' + path
|
|
||||||
|
|
||||||
if path is None:
|
if path is None:
|
||||||
system = platform.system()
|
system = platform.system()
|
||||||
if system == 'Linux':
|
if system == 'Linux':
|
||||||
|
@ -25,7 +25,10 @@ class OnionrTests(unittest.TestCase):
|
|||||||
def test_export(self):
|
def test_export(self):
|
||||||
testargs = ["onionr.py", "flowsend", "tests", "hello"]
|
testargs = ["onionr.py", "flowsend", "tests", "hello"]
|
||||||
with patch.object(sys, 'argv', testargs):
|
with patch.object(sys, 'argv', testargs):
|
||||||
parser.register()
|
try:
|
||||||
|
parser.register()
|
||||||
|
except SystemExit:
|
||||||
|
pass
|
||||||
bl = blockmetadb.get_block_list()[0]
|
bl = blockmetadb.get_block_list()[0]
|
||||||
testargs = ["onionr.py", "export-block", bl]
|
testargs = ["onionr.py", "export-block", bl]
|
||||||
with patch.object(sys, 'argv', testargs):
|
with patch.object(sys, 'argv', testargs):
|
||||||
|
@ -7,10 +7,13 @@ TEST_DIR = 'testdata/%s-%s' % (uuid.uuid4(), os.path.basename(__file__)) + '/'
|
|||||||
os.environ["ONIONR_HOME"] = TEST_DIR
|
os.environ["ONIONR_HOME"] = TEST_DIR
|
||||||
|
|
||||||
print(f'running integration test for {__file__}')
|
print(f'running integration test for {__file__}')
|
||||||
with Popen(['./onionr.sh'], stdout=PIPE) as onionr_proc:
|
try:
|
||||||
output = onionr_proc.stdout.read().decode()
|
with Popen(['./onionr.sh'], stdout=PIPE) as onionr_proc:
|
||||||
if onionr_proc.returncode != 0:
|
output = onionr_proc.stdout.read().decode()
|
||||||
raise ValueError('Raised non zero exit ' + str(onionr_proc.returncode))
|
except SystemExit:
|
||||||
|
pass
|
||||||
|
if onionr_proc.returncode != 10:
|
||||||
|
raise ValueError('Raised non 10 exit ' + str(onionr_proc.returncode))
|
||||||
|
|
||||||
if output != '':
|
if 'Run with --help to see available commands' not in output:
|
||||||
raise ValueError('No command run returned non-blank output')
|
raise ValueError('No command run returned non-blank output')
|
||||||
|
@ -25,7 +25,10 @@ class OnionrTests(unittest.TestCase):
|
|||||||
def test_vanity(self):
|
def test_vanity(self):
|
||||||
testargs = ["onionr.py"]
|
testargs = ["onionr.py"]
|
||||||
with patch.object(sys, 'argv', testargs):
|
with patch.object(sys, 'argv', testargs):
|
||||||
parser.register()
|
try:
|
||||||
|
parser.register()
|
||||||
|
except SystemExit:
|
||||||
|
pass
|
||||||
testargs = ["onionr.py", "add-vanity", "jolt"]
|
testargs = ["onionr.py", "add-vanity", "jolt"]
|
||||||
with patch.object(sys, 'argv', testargs):
|
with patch.object(sys, 'argv', testargs):
|
||||||
parser.register()
|
parser.register()
|
||||||
|
@ -1 +1 @@
|
|||||||
1583020786
|
1583304780
|
@ -4,6 +4,10 @@ sys.path.append(".")
|
|||||||
sys.path.append("src/")
|
sys.path.append("src/")
|
||||||
import unittest, uuid, hashlib
|
import unittest, uuid, hashlib
|
||||||
|
|
||||||
|
TEST_DIR = 'testdata/%s-%s' % (uuid.uuid4(), os.path.basename(__file__)) + '/'
|
||||||
|
print("Test directory:", TEST_DIR)
|
||||||
|
os.environ["ONIONR_HOME"] = TEST_DIR
|
||||||
|
|
||||||
import onionrblocks
|
import onionrblocks
|
||||||
import onionrstorage
|
import onionrstorage
|
||||||
from utils import createdirs
|
from utils import createdirs
|
||||||
@ -24,7 +28,7 @@ class OnionrBlockTests(unittest.TestCase):
|
|||||||
bl = onionrblocks.insert(message)
|
bl = onionrblocks.insert(message)
|
||||||
self.assertTrue(bl.startswith('0'))
|
self.assertTrue(bl.startswith('0'))
|
||||||
self.assertIn(bytesconverter.str_to_bytes(message), onionrstorage.getData(bl))
|
self.assertIn(bytesconverter.str_to_bytes(message), onionrstorage.getData(bl))
|
||||||
|
|
||||||
def test_encrypted_insert(self):
|
def test_encrypted_insert(self):
|
||||||
setup_test()
|
setup_test()
|
||||||
message = 'hello world2'
|
message = 'hello world2'
|
||||||
|
@ -11,10 +11,6 @@ from onionrcommands import parser
|
|||||||
import onionrsetup as setup
|
import onionrsetup as setup
|
||||||
from netcontroller.torcontrol import customtorrc
|
from netcontroller.torcontrol import customtorrc
|
||||||
class OnionrTests(unittest.TestCase):
|
class OnionrTests(unittest.TestCase):
|
||||||
def test_no_command(self):
|
|
||||||
testargs = ["onionr.py"]
|
|
||||||
with patch.object(sys, 'argv', testargs):
|
|
||||||
parser.register()
|
|
||||||
def test_version_command(self):
|
def test_version_command(self):
|
||||||
testargs = ["onionr.py", "version"]
|
testargs = ["onionr.py", "version"]
|
||||||
with patch.object(sys, 'argv', testargs):
|
with patch.object(sys, 'argv', testargs):
|
||||||
|
25
tests/test_duplicate_block_meta_entry.py
Normal file
25
tests/test_duplicate_block_meta_entry.py
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
import sys, os
|
||||||
|
sys.path.append(".")
|
||||||
|
sys.path.append("src/")
|
||||||
|
import unittest, uuid
|
||||||
|
import json
|
||||||
|
TEST_DIR = 'testdata/%s-%s' % (uuid.uuid4(), os.path.basename(__file__)) + '/'
|
||||||
|
print("Test directory:", TEST_DIR)
|
||||||
|
os.environ["ONIONR_HOME"] = TEST_DIR
|
||||||
|
|
||||||
|
from utils import identifyhome, createdirs
|
||||||
|
from onionrsetup import setup_config
|
||||||
|
from coredb import blockmetadb
|
||||||
|
from onionrexceptions import BlockMetaEntryExists
|
||||||
|
createdirs.create_dirs()
|
||||||
|
setup_config()
|
||||||
|
|
||||||
|
class TestDuplicateMetaEntry(unittest.TestCase):
|
||||||
|
def test_no_duplicate(self):
|
||||||
|
bl_hash = '0c88c7d4515363310f0a2522706c49f3f21def5f6fd69af1f91a1849239e7ea6'
|
||||||
|
blockmetadb.add_to_block_DB(bl_hash)
|
||||||
|
self.assertRaises(
|
||||||
|
BlockMetaEntryExists, blockmetadb.add_to_block_DB, bl_hash)
|
||||||
|
|
||||||
|
unittest.main()
|
@ -1,7 +1,10 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
import sys, os
|
import sys, os, uuid
|
||||||
sys.path.append(".")
|
sys.path.append(".")
|
||||||
sys.path.append("src/")
|
sys.path.append("src/")
|
||||||
|
TEST_DIR = 'testdata/%s-%s' % (uuid.uuid4(), os.path.basename(__file__)) + '/'
|
||||||
|
print("Test directory:", TEST_DIR)
|
||||||
|
os.environ["ONIONR_HOME"] = TEST_DIR
|
||||||
import unittest, uuid
|
import unittest, uuid
|
||||||
from utils import identifyhome
|
from utils import identifyhome
|
||||||
|
|
||||||
|
@ -1,10 +1,19 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
import unittest, sys
|
import sys, os
|
||||||
sys.path.append(".")
|
sys.path.append(".")
|
||||||
sys.path.append("src/")
|
sys.path.append("src/")
|
||||||
|
import unittest, uuid
|
||||||
|
TEST_DIR = 'testdata/%s-%s' % (uuid.uuid4(), os.path.basename(__file__)) + '/'
|
||||||
|
print("Test directory:", TEST_DIR)
|
||||||
|
os.environ["ONIONR_HOME"] = TEST_DIR
|
||||||
from onionrblocks import time_insert
|
from onionrblocks import time_insert
|
||||||
from onionrblocks import onionrblockapi
|
from onionrblocks import onionrblockapi
|
||||||
|
from onionrsetup import setup_config, setup_default_plugins
|
||||||
|
from utils import createdirs
|
||||||
|
|
||||||
|
createdirs.create_dirs()
|
||||||
|
setup_config()
|
||||||
|
setup_default_plugins()
|
||||||
|
|
||||||
class TestTimeInsert(unittest.TestCase):
|
class TestTimeInsert(unittest.TestCase):
|
||||||
def test_time_insert_none(self):
|
def test_time_insert_none(self):
|
||||||
|
@ -1,6 +1,10 @@
|
|||||||
import sys, os
|
import sys, os
|
||||||
|
import uuid
|
||||||
sys.path.append(".")
|
sys.path.append(".")
|
||||||
sys.path.append("src/")
|
sys.path.append("src/")
|
||||||
|
TEST_DIR = 'testdata/%s-%s' % (uuid.uuid4(), os.path.basename(__file__)) + '/'
|
||||||
|
print("Test directory:", TEST_DIR)
|
||||||
|
os.environ["ONIONR_HOME"] = TEST_DIR
|
||||||
import unittest
|
import unittest
|
||||||
import vanityonionr
|
import vanityonionr
|
||||||
|
|
||||||
|
@ -1,5 +1,8 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
import unittest, sys
|
import unittest, sys, uuid, os
|
||||||
|
TEST_DIR = 'testdata/%s-%s' % (uuid.uuid4(), os.path.basename(__file__)) + '/'
|
||||||
|
print("Test directory:", TEST_DIR)
|
||||||
|
os.environ["ONIONR_HOME"] = TEST_DIR
|
||||||
sys.path.append(".")
|
sys.path.append(".")
|
||||||
sys.path.append("src/")
|
sys.path.append("src/")
|
||||||
|
|
||||||
@ -11,7 +14,7 @@ class ZFill_Hash(unittest.TestCase):
|
|||||||
self.assertEqual(reconstructhash.reconstruct_hash(h), b"0000" + h)
|
self.assertEqual(reconstructhash.reconstruct_hash(h), b"0000" + h)
|
||||||
h = b"4d20d791cbc293999b97cc627aa011692d317dede3d0fbd390c763210b0d"
|
h = b"4d20d791cbc293999b97cc627aa011692d317dede3d0fbd390c763210b0d"
|
||||||
self.assertEqual(reconstructhash.reconstruct_hash(h, 62), b"00" + h)
|
self.assertEqual(reconstructhash.reconstruct_hash(h, 62), b"00" + h)
|
||||||
|
|
||||||
def test_deconstruct(self):
|
def test_deconstruct(self):
|
||||||
h = b"0000e918d24999ad9b0ff00c1d414f36b74afc93871a0ece4bd452f82b56af87"
|
h = b"0000e918d24999ad9b0ff00c1d414f36b74afc93871a0ece4bd452f82b56af87"
|
||||||
h_no = b"e918d24999ad9b0ff00c1d414f36b74afc93871a0ece4bd452f82b56af87"
|
h_no = b"e918d24999ad9b0ff00c1d414f36b74afc93871a0ece4bd452f82b56af87"
|
||||||
|
Loading…
Reference in New Issue
Block a user