How to write unit test for Python socketserver request handler?

How can I write unit tests for a socketserver request handler? I tried using the following code, but ran into a problem:

import socketserver, unittest, threading class TestServer(socketserver.ThreadingMixIn, socketserver.TCPServer): allow_reuse_address = True class MyRequestHandlerTest(unittest.TestCase): def setUp(self): self.server = TestServer((HOST, PORT), MyRequestHandler) self.server_thread = threading.Thread(target=self.server.serve_forever) self.client = socket.create_connection((HOST, PORT)) #self.server_thread.setDaemon(True) self.server_thread.start() def tearDown(self): self.client.close() self.server.shutdown() 

If I try to use several test functions, for example

  def test_foo(self): self.client.send(b'foo\n') result = self.client.recv(1024) self.assertEqual(b'FOO', result) def test_bar(self): self.client.send(b'bar\n') result = self.client.recv(1024) self.assertEqual(b'BAR', result) 

I get an error

 socket.error: [Errno 98] Address already in use 

in the line self.server = ... , although I instructed the allow_reuse_address test server.

Edit: deleted one of two errors that I originally posted to simplify the issue.

+4
source share
1 answer

It worked for me (after creating the RequestHandler) with:

 def tearDown(self): self.client.close() self.server.shutdown() self.server.server_close() 

This may be a bug in socketserver shutdown , which itself does not call server_close .

+2
source

All Articles