Browse Source

Add test code for class ServerMixIn.

git-svn-id: svn://bind10.isc.org/svn/bind10/branches/trac352@3066 e5f2f494-b856-4b98-b285-d166d9295462
Likun Zhang 14 years ago
parent
commit
ac0220cdc3

+ 1 - 1
src/lib/python/isc/utils/serve_mixin.py

@@ -17,7 +17,7 @@ import threading
 import socket
 import select
 
-class ServeMixIn():
+class ServeMixIn:
     '''Mix-In class to override the function serve_forever()
     and shutdown() in class socketserver. 
     '''

+ 41 - 3
src/lib/python/isc/utils/tests/serve_mixin_test.py

@@ -14,13 +14,51 @@
 # WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 
 import unittest
-import isc.utils.serve_mixin
+from isc.utils.serve_mixin import ServeMixIn
+import socketserver
+import threading
+import socket
+import time
+
+class MyHandler(socketserver.BaseRequestHandler):
+    def handle(self):
+        data = self.request.recv(20)
+        self.request.send(data)
+
+class MyServer(ServeMixIn, 
+               socketserver.ThreadingMixIn,
+               socketserver.TCPServer):
+    pass
+
+
+def send_and_get_reply(ip, port, msg):
+    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+    sock.connect((ip, port))
+    sock.send(msg)
+    response = sock.recv(20)
+    sock.close()
+    return response
 
 class TestServeMixIn(unittest.TestCase):
     def test_serve_forever(self):
-        pass
+        # use port 0 to select an arbitrary unused port.
+        server = MyServer(('localhost', 0), MyHandler)
+        ip, port = server.server_address
+        server_thread = threading.Thread(target=server.serve_forever)
+        server_thread.setDaemon(True)
+        server_thread.start()
+
+        msg = b'senddata'
+        self.assertEqual(msg, send_and_get_reply(ip, port, msg))
+        self.assertTrue(server_thread.is_alive())
+
+        # Now shutdown the server
+        server.shutdown()
+        # Sleep a while, make sure the thread has finished.
+        time.sleep(0.1)
+        self.assertFalse(server_thread.is_alive())
 
-   if __name__== "__main__":
+if __name__== "__main__":
     unittest.main()