summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2019-02-12 16:16:41 +0100
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2019-02-24 10:39:03 +0100
commit0b5e0a57b1863f4190bd312a8dc47642a2eed385 (patch)
tree989464e375528cc617df71994724f9de6bbbca15
parente485a6395548fa2745f0328d5c00de8d70bbbdb4 (diff)
downloadurlgrabber-0b5e0a57b1863f4190bd312a8dc47642a2eed385.tar.gz
test_mirror: do not use a fixed port for the internal test server
The tests were fairly consistently failing with: error: [Errno 98] Address already in use Actually the port is a well-known port that could be used be some other program. So let's simplify things by opening a random port. It'd be nice to use the socket as a context manager, but unfortunately python2 does not support that.
-rw-r--r--test/test_mirror.py20
1 files changed, 14 insertions, 6 deletions
diff --git a/test/test_mirror.py b/test/test_mirror.py
index 1c9a83e..afe0d07 100644
--- a/test/test_mirror.py
+++ b/test/test_mirror.py
@@ -261,17 +261,19 @@ class ActionTests(TestCase):
self.assertEquals(urlgrabber.mirror.DEBUG.logs, expected_logs)
import threading, socket
-LOCALPORT = 'localhost', 2000
class HttpReplyCode(TestCase):
def setUp(self):
# start the server
self.exit = False
self.process = lambda data: None
+
+ s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+ s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
+ s.bind(('localhost', 0)); s.listen(1)
+ self.port = s.getsockname()[1]
+
def server():
- s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
- s.bind(LOCALPORT); s.listen(1)
while True:
c, a = s.accept()
if self.exit: c.close(); break
@@ -286,6 +288,7 @@ class HttpReplyCode(TestCase):
c.close()
s.close()
self.exit = False
+
self.thread = threading.Thread(target=server)
self.thread.start()
@@ -294,14 +297,19 @@ class HttpReplyCode(TestCase):
self.code = getattr(obj.exception, 'code', None)
return {}
self.g = URLGrabber()
- self.mg = MirrorGroup(self.g, ['http://%s:%d' % LOCALPORT],
+ self.mg = MirrorGroup(self.g, ['http://localhost:%d' % self.port],
failure_callback = failure)
def tearDown(self):
# shut down the server
self.exit = True
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- s.connect(LOCALPORT); s.close() # wake it up
+ try:
+ s.connect(('localhost', self.port)) # wake it up
+ except ConnectionRefusedError:
+ # already gone?
+ pass
+ s.close()
self.thread.join()
def test_grab(self):