Try to test with tor
This commit is contained in:
parent
6a0c3ae075
commit
a7cfe5ba32
|
@ -6,6 +6,7 @@ addons:
|
|||
packages:
|
||||
- build-essential
|
||||
- libcap-dev
|
||||
- tor
|
||||
install:
|
||||
- pip install -r requirements.txt
|
||||
- ln -s src pybitmessage # tests environment
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
python_prctl
|
||||
psutil
|
||||
pycrypto
|
||||
stem
|
||||
|
|
|
@ -193,7 +193,8 @@ class Main:
|
|||
from plugins.plugin import get_plugin
|
||||
try:
|
||||
proxyconfig_start = time.time()
|
||||
get_plugin('proxyconfig', name=proxy_type)(config)
|
||||
if not get_plugin('proxyconfig', name=proxy_type)(config):
|
||||
raise TypeError
|
||||
except TypeError:
|
||||
logger.error(
|
||||
'Failed to run proxy config plugin %s',
|
||||
|
@ -424,7 +425,7 @@ class Main:
|
|||
self.stop()
|
||||
elif not state.enableGUI:
|
||||
from tests import core as test_core # pylint: disable=relative-import
|
||||
test_core_result = test_core.run()
|
||||
test_core_result = test_core.run(self)
|
||||
state.enableGUI = True
|
||||
self.stop()
|
||||
test_core.cleanup()
|
||||
|
|
|
@ -8,6 +8,7 @@ import tempfile
|
|||
import stem
|
||||
import stem.control
|
||||
import stem.process
|
||||
import stem.version
|
||||
|
||||
|
||||
class DebugLogger(object):
|
||||
|
@ -31,7 +32,7 @@ class DebugLogger(object):
|
|||
self._logger.log(self._levels.get(level, 10), '(tor)' + line)
|
||||
|
||||
|
||||
def connect_plugin(config):
|
||||
def connect_plugin(config): # pylint: disable=too-many-branches
|
||||
"""Run stem proxy configurator"""
|
||||
logwrite = DebugLogger()
|
||||
if config.safeGet('bitmessagesettings', 'sockshostname') not in (
|
||||
|
@ -60,8 +61,14 @@ def connect_plugin(config):
|
|||
# So if there is a system wide tor, use it for outbound connections.
|
||||
try:
|
||||
stem.process.launch_tor_with_config(
|
||||
tor_config, take_ownership=True, init_msg_handler=logwrite)
|
||||
tor_config, take_ownership=True, timeout=20,
|
||||
init_msg_handler=logwrite)
|
||||
except OSError:
|
||||
if not attempt:
|
||||
try:
|
||||
stem.version.get_system_tor_version()
|
||||
except IOError:
|
||||
return
|
||||
continue
|
||||
else:
|
||||
logwrite('Started tor on port %s' % port)
|
||||
|
@ -108,3 +115,5 @@ def connect_plugin(config):
|
|||
onionhostname, 'keytype', response.private_key_type)
|
||||
config.save()
|
||||
config.set('bitmessagesettings', 'socksproxytype', 'SOCKS5')
|
||||
|
||||
return True
|
||||
|
|
|
@ -21,6 +21,7 @@ from network.tcp import Socks4aBMConnection, Socks5BMConnection, TCPConnection
|
|||
from queues import excQueue
|
||||
|
||||
knownnodes_file = os.path.join(state.appdata, 'knownnodes.dat')
|
||||
program = None
|
||||
|
||||
|
||||
def pickle_knownnodes():
|
||||
|
@ -132,6 +133,7 @@ class TestCore(unittest.TestCase):
|
|||
self._outdate_knownnodes()
|
||||
# time.sleep(303) # singleCleaner wakes up every 5 min
|
||||
knownnodes.cleanupKnownNodes()
|
||||
self.assertTrue(knownnodes.knownNodes[1])
|
||||
while True:
|
||||
try:
|
||||
thread, exc = excQueue.get(block=False)
|
||||
|
@ -140,14 +142,15 @@ class TestCore(unittest.TestCase):
|
|||
if thread == 'Asyncore' and isinstance(exc, IndexError):
|
||||
self.fail("IndexError because of empty knownNodes!")
|
||||
|
||||
def test_bootstrap(self):
|
||||
"""test bootstrapping"""
|
||||
def _initiate_bootstrap(self):
|
||||
BMConfigParser().set('bitmessagesettings', 'dontconnect', 'true')
|
||||
self._outdate_knownnodes()
|
||||
knownnodes.cleanupKnownNodes()
|
||||
# it's weird, knownnodes appear empty
|
||||
knownnodes.addKnownNode(1, state.Peer('127.0.0.1', 8444), is_self=True)
|
||||
time.sleep(0.25)
|
||||
knownnodes.cleanupKnownNodes()
|
||||
time.sleep(2)
|
||||
|
||||
def _check_bootstrap(self):
|
||||
_started = time.time()
|
||||
BMConfigParser().remove_option('bitmessagesettings', 'dontconnect')
|
||||
proxy_type = BMConfigParser().safeGet(
|
||||
'bitmessagesettings', 'socksproxytype')
|
||||
|
@ -157,20 +160,31 @@ class TestCore(unittest.TestCase):
|
|||
connection_base = Socks4aBMConnection
|
||||
else:
|
||||
connection_base = TCPConnection
|
||||
_started = time.time()
|
||||
for _ in range(180):
|
||||
time.sleep(1)
|
||||
for peer, con in BMConnectionPool().outboundConnections.iteritems():
|
||||
if not peer.host.startswith('bootstrap'):
|
||||
self.assertIsInstance(con, connection_base)
|
||||
self.assertNotEqual(peer.host, '127.0.0.1')
|
||||
return
|
||||
else: # pylint: disable=useless-else-on-loop
|
||||
self.fail(
|
||||
'Failed to connect during %s sec' % (time.time() - _started))
|
||||
|
||||
def test_bootstrap(self):
|
||||
"""test bootstrapping"""
|
||||
self._initiate_bootstrap()
|
||||
self._check_bootstrap()
|
||||
self._initiate_bootstrap()
|
||||
BMConfigParser().set('bitmessagesettings', 'socksproxytype', 'stem')
|
||||
program.start_proxyconfig(BMConfigParser())
|
||||
self._check_bootstrap()
|
||||
|
||||
def run():
|
||||
|
||||
def run(prog):
|
||||
"""Starts all tests defined in this module"""
|
||||
global program # pylint: disable=global-statement
|
||||
program = prog
|
||||
loader = unittest.TestLoader()
|
||||
loader.sortTestMethodsUsing = None
|
||||
suite = loader.loadTestsFromTestCase(TestCore)
|
||||
|
|
Reference in New Issue
Block a user