From: Mukund Sivaraman Date: Mon, 19 Nov 2012 22:04:56 +0000 (+0530) Subject: [2353] Test BoB._socket_data() directly X-Git-Tag: bind10-1.0.0-beta-release~19^2~58 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=fa3e24bb027671b5c53a5fa1b004920cf8252f0f;p=thirdparty%2Fkea.git [2353] Test BoB._socket_data() directly --- diff --git a/src/bin/bind10/tests/bind10_test.py.in b/src/bin/bind10/tests/bind10_test.py.in index 99e4abf5d0..8672e528a8 100644 --- a/src/bin/bind10/tests/bind10_test.py.in +++ b/src/bin/bind10/tests/bind10_test.py.in @@ -1849,6 +1849,61 @@ class TestBossComponents(unittest.TestCase): self.assertEqual('b10-cmdctl', bob.started_process_name) self.assertEqual(['b10-cmdctl', '--port=9353', '-v'], bob.started_process_args) + def test_socket_data(self): + '''Test that BoB._socket_data works as expected.''' + class MockSock: + def __init__(self, fd, throw): + self.fd = fd + self.throw = throw + self.buf = b'Hello World.\nYou are so nice today.\nXX' + self.i = 0 + + def recv(self, bufsize, flags = 0): + if bufsize != 1: + raise Exception('bufsize != 1') + if flags != socket.MSG_DONTWAIT: + raise Exception('flags != socket.MSG_DONTWAIT') + if self.throw and self.i > 15: + raise socket.error(errno.EAGAIN, 'Try again') + if self.i >= len(self.buf): + return b''; + t = self.i + self.i += 1 + return self.buf[t:t+1] + + def close(self): + return + + class MockBobSocketData(BoB): + def __init__(self, throw): + self._unix_sockets = {42: (MockSock(42, throw), b'')} + self.requests = [] + self.dead = [] + + def socket_request_handler(self, previous, sock): + self.requests.append({sock.fd: previous}) + + def socket_consumer_dead(self, sock): + self.dead.append(sock.fd) + + # All is well case + bob = MockBobSocketData(False) + bob._socket_data(42) + self.assertEqual(bob.requests, + [{42: b'Hello World.'}, + {42: b'You are so nice today.'}]) + self.assertEqual(bob.dead, [42]) + self.assertFalse(bob._unix_sockets) + + # Case where socket raises EAGAIN. In this case, the routine is + # supposed to save what it has back to BoB._unix_sockets. + bob = MockBobSocketData(True) + bob._socket_data(42) + self.assertEqual(bob.requests, [{42: b'Hello World.'}]) + self.assertFalse(bob.dead) + self.assertEqual(len(bob._unix_sockets), 1) + self.assertEqual(bob._unix_sockets[42][1], b'You') + class SocketSrvTest(unittest.TestCase): """ This tests some methods of boss related to the unix domain sockets used