From: Michal 'vorner' Vaner Date: Tue, 3 Jan 2012 16:28:29 +0000 (+0100) Subject: [1454] Call handle_incoming when there's data X-Git-Tag: trac2351_base~275^2~7^2~13 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=b6aa3ff5422ec34da9c413aabff15145d86596e6;p=thirdparty%2Fkea.git [1454] Call handle_incoming when there's data --- diff --git a/src/bin/ddns/ddns.py.in b/src/bin/ddns/ddns.py.in index b5a03831df..97c0a3fa6e 100755 --- a/src/bin/ddns/ddns.py.in +++ b/src/bin/ddns/ddns.py.in @@ -138,6 +138,12 @@ class DDNSServer: session = isc.util.io.socketsession.SocketSessionReceiver(socket) self._socket_sessions[fileno] = (socket, session) + def handle_incoming(self, fileno): + """ + Handle incoming event on the socket with given fileno. + """ + pass + def run(self): ''' Get and process all commands sent from cfgmgr or other modules. @@ -155,14 +161,15 @@ class DDNSServer: # TODO: Catch select exceptions, like EINTR (reads, writes, exceptions) = \ - select.select([cc_fileno, listen_fileno], [], []) + select.select([cc_fileno, listen_fileno] + + list(self._socket_sessions.keys()), [], []) for fileno in reads: if fileno == cc_fileno: self._cc.check_command(True) elif fileno == listen_fileno: self.accept() else: - pass # TODO + self.handle_incoming(fileno) self.shutdown_cleanup() logger.info(DDNS_STOPPED) diff --git a/src/bin/ddns/tests/ddns_test.py b/src/bin/ddns/tests/ddns_test.py index 53ecfd21dc..0680c14aad 100755 --- a/src/bin/ddns/tests/ddns_test.py +++ b/src/bin/ddns/tests/ddns_test.py @@ -202,6 +202,21 @@ class TestDDNSServer(unittest.TestCase): self.assertTrue(isinstance(session, FakeSession)) self.assertEqual(socket, session.socket()) + def test_incoming_called(self): + """ + Test the run calls handle_incoming when there's something on the + socket. + """ + socket = FakeSocket(3) + self.ddns_server._socket_sessions = {3: (socket, FakeSession(socket))} + self.ddns_server.handle_incoming = self.__hook + self.__select_expected = ([1, 2, 3], [], [], None) + self.__select_answer = ([3], [], []) + self.ddns_server.run() + self.assertTrue(self.ddns_server._shutdown) + self.assertIsNone(self.__select_answer) + self.assertEqual(3, self.__hook_called) + class TestMain(unittest.TestCase): def setUp(self): self._server = MyDDNSServer()