2015-09-27 00:59:39 +00:00
|
|
|
from twisted.application import service
|
2016-03-02 00:59:46 +00:00
|
|
|
from twisted.internet import reactor, defer
|
|
|
|
from twisted.python import log
|
2015-09-27 00:59:39 +00:00
|
|
|
from ..twisted.util import allocate_ports
|
2015-10-04 19:40:12 +00:00
|
|
|
from ..servers.server import RelayServer
|
2015-09-27 00:59:39 +00:00
|
|
|
from .. import __version__
|
|
|
|
|
|
|
|
class ServerBase:
|
|
|
|
def setUp(self):
|
|
|
|
self.sp = service.MultiService()
|
|
|
|
self.sp.startService()
|
|
|
|
d = allocate_ports()
|
|
|
|
def _got_ports(ports):
|
|
|
|
relayport, transitport = ports
|
|
|
|
s = RelayServer("tcp:%d:interface=127.0.0.1" % relayport,
|
|
|
|
"tcp:%s:interface=127.0.0.1" % transitport,
|
|
|
|
__version__)
|
|
|
|
s.setServiceParent(self.sp)
|
2015-10-07 00:20:12 +00:00
|
|
|
self._relay_server = s.relay
|
2015-12-04 03:45:34 +00:00
|
|
|
self._transit_server = s.transit
|
2015-10-06 23:52:33 +00:00
|
|
|
self.relayurl = u"http://127.0.0.1:%d/wormhole-relay/" % relayport
|
2015-12-03 22:24:52 +00:00
|
|
|
self.transit = u"tcp:127.0.0.1:%d" % transitport
|
2015-09-27 00:59:39 +00:00
|
|
|
d.addCallback(_got_ports)
|
|
|
|
return d
|
|
|
|
|
|
|
|
def tearDown(self):
|
2016-03-02 00:59:46 +00:00
|
|
|
# Unit tests that spawn a (blocking) client in a thread might still
|
|
|
|
# have threads running at this point, if one is stuck waiting for a
|
|
|
|
# message from a companion which has exited with an error. Our
|
|
|
|
# relay's .stopService() drops all connections, which ought to
|
|
|
|
# encourage those threads to terminate soon. If they don't, print a
|
|
|
|
# warning to ease debugging.
|
|
|
|
tp = reactor.getThreadPool()
|
|
|
|
if not tp.working:
|
|
|
|
return self.sp.stopService()
|
|
|
|
# disconnect all callers
|
|
|
|
d = defer.maybeDeferred(self.sp.stopService)
|
|
|
|
wait_d = defer.Deferred()
|
|
|
|
# wait a second, then check to see if it worked
|
|
|
|
reactor.callLater(1.0, wait_d.callback, None)
|
|
|
|
def _later(res):
|
|
|
|
if len(tp.working):
|
|
|
|
log.msg("wormhole.test.common.ServerBase.tearDown:"
|
|
|
|
" I was unable to convince all threads to exit.")
|
|
|
|
tp.dumpStats()
|
|
|
|
print("tearDown warning: threads are still active")
|
|
|
|
print("This test will probably hang until one of the"
|
|
|
|
" clients gives up of their own accord.")
|
|
|
|
else:
|
|
|
|
log.msg("wormhole.test.common.ServerBase.tearDown:"
|
|
|
|
" I convinced all threads to exit.")
|
|
|
|
return d
|
|
|
|
wait_d.addCallback(_later)
|
|
|
|
return wait_d
|