diff options
author | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2019-02-12 16:16:41 +0100 |
---|---|---|
committer | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2019-02-24 10:39:03 +0100 |
commit | 0b5e0a57b1863f4190bd312a8dc47642a2eed385 (patch) | |
tree | 989464e375528cc617df71994724f9de6bbbca15 | |
parent | e485a6395548fa2745f0328d5c00de8d70bbbdb4 (diff) | |
download | urlgrabber-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.py | 20 |
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): |