| | 86 | |
| | 87 | class SocketTests(unittest.TestCase): |
| | 88 | def setUp(self): |
| | 89 | self.orgsocket=socket.socket |
| | 90 | socket.socket=MockSocket |
| | 91 | self.server=Server() |
| | 92 | |
| | 93 | |
| | 94 | def tearDown(self): |
| | 95 | socket.socket=self.orgsocket |
| | 96 | |
| | 97 | |
| | 98 | def testBind(self): |
| | 99 | self.server.BindToAddress("192.168.13.13") |
| | 100 | self.assertEqual(len(self.server.authfds), 1) |
| | 101 | self.assertEqual(self.server.authfds[0].address, |
| | 102 | ("192.168.13.13", 1812)) |
| | 103 | |
| | 104 | self.assertEqual(len(self.server.acctfds), 1) |
| | 105 | self.assertEqual(self.server.acctfds[0].address, |
| | 106 | ("192.168.13.13", 1813)) |
| | 107 | |
| | 108 | |
| | 109 | def testGrabPacket(self): |
| | 110 | def gen(data): |
| | 111 | res=TrivialObject() |
| | 112 | res.data=data |
| | 113 | return res |
| | 114 | |
| | 115 | |
| | 116 | fd=MockFd() |
| | 117 | fd.source=object() |
| | 118 | pkt=self.server._GrabPacket(gen, fd) |
| | 119 | self.failUnless(isinstance(pkt, TrivialObject)) |
| | 120 | self.failUnless(pkt.fd is fd) |
| | 121 | self.failUnless(pkt.source is fd.source) |
| | 122 | self.failUnless(pkt.data is fd.data) |
| | 123 | |
| | 124 | |
| | 125 | def testPrepareSocketNoFds(self): |
| | 126 | self.server._poll=MockPoll() |
| | 127 | self.server._PrepareSockets() |
| | 128 | |
| | 129 | self.assertEqual(self.server._poll.registry, []) |
| | 130 | self.assertEqual(self.server._realauthfds, []) |
| | 131 | self.assertEqual(self.server._realacctfds, []) |
| | 132 | |
| | 133 | |
| | 134 | def testPrepareSocketAuthFds(self): |
| | 135 | self.server._poll=MockPoll() |
| | 136 | self.server._fdmap={} |
| | 137 | self.server.authfds=[MockFd(12), MockFd(14)] |
| | 138 | self.server._PrepareSockets() |
| | 139 | |
| | 140 | self.assertEqual(self.server._fdmap.keys(), [12, 14]) |
| | 141 | self.assertEqual(self.server._poll.registry, |
| | 142 | [(12, select.POLLIN|select.POLLPRI|select.POLLERR), |
| | 143 | (14, select.POLLIN|select.POLLPRI|select.POLLERR)]) |
| | 144 | |
| | 145 | |
| | 146 | def testPrepareSocketAcctFds(self): |
| | 147 | self.server._poll=MockPoll() |
| | 148 | self.server._fdmap={} |
| | 149 | self.server.acctfds=[MockFd(12), MockFd(14)] |
| | 150 | self.server._PrepareSockets() |
| | 151 | |
| | 152 | self.assertEqual(self.server._fdmap.keys(), [12, 14]) |
| | 153 | self.assertEqual(self.server._poll.registry, |
| | 154 | [(12, select.POLLIN|select.POLLPRI|select.POLLERR), |
| | 155 | (14, select.POLLIN|select.POLLPRI|select.POLLERR)]) |
| | 156 | |
| | 157 | |
| | 158 | class AuthPacketHandlingTests(unittest.TestCase): |
| | 159 | def setUp(self): |
| | 160 | self.server=Server() |
| | 161 | self.server.hosts["host"]=TrivialObject() |
| | 162 | self.server.hosts["host"].secret="supersecret" |
| | 163 | self.packet=TrivialObject() |
| | 164 | self.packet.code=AccessRequest |
| | 165 | self.packet.source=("host", "port") |
| | 166 | |
| | 167 | |
| | 168 | def testHandleAuthPacketUnknownHost(self): |
| | 169 | self.packet.source=("stranger", "port") |
| | 170 | try: |
| | 171 | self.server._HandleAuthPacket(self.packet) |
| | 172 | except PacketError, e: |
| | 173 | self.failUnless("unknown host" in str(e)) |
| | 174 | else: |
| | 175 | self.fail() |
| | 176 | |
| | 177 | |
| | 178 | def testHandleAuthPacketWrongPort(self): |
| | 179 | self.packet.code=AccountingRequest |
| | 180 | try: |
| | 181 | self.server._HandleAuthPacket(self.packet) |
| | 182 | except PacketError, e: |
| | 183 | self.failUnless("port" in str(e)) |
| | 184 | else: |
| | 185 | self.fail() |
| | 186 | |
| | 187 | |
| | 188 | def testHandleAuthPacket(self): |
| | 189 | def HandleAuthPacket(self, pkt): |
| | 190 | self.handled=pkt |
| | 191 | hap=Server.HandleAuthPacket |
| | 192 | Server.HandleAuthPacket=HandleAuthPacket |
| | 193 | |
| | 194 | self.server._HandleAuthPacket(self.packet) |
| | 195 | self.failUnless(self.server.handled is self.packet) |
| | 196 | |
| | 197 | Server.HandleAuthPacket=hap |
| | 198 | |
| | 199 | |
| | 200 | |
| | 201 | class AcctPacketHandlingTests(unittest.TestCase): |
| | 202 | def setUp(self): |
| | 203 | self.server=Server() |
| | 204 | self.server.hosts["host"]=TrivialObject() |
| | 205 | self.server.hosts["host"].secret="supersecret" |
| | 206 | self.packet=TrivialObject() |
| | 207 | self.packet.code=AccountingRequest |
| | 208 | self.packet.source=("host", "port") |
| | 209 | |
| | 210 | |
| | 211 | def testHandleAcctPacketUnknownHost(self): |
| | 212 | self.packet.source=("stranger", "port") |
| | 213 | try: |
| | 214 | self.server._HandleAcctPacket(self.packet) |
| | 215 | except PacketError, e: |
| | 216 | self.failUnless("unknown host" in str(e)) |
| | 217 | else: |
| | 218 | self.fail() |
| | 219 | |
| | 220 | |
| | 221 | def testHandleAcctPacketWrongPort(self): |
| | 222 | self.packet.code=AccessRequest |
| | 223 | try: |
| | 224 | self.server._HandleAcctPacket(self.packet) |
| | 225 | except PacketError, e: |
| | 226 | self.failUnless("port" in str(e)) |
| | 227 | else: |
| | 228 | self.fail() |
| | 229 | |
| | 230 | |
| | 231 | def testHandleAcctPacket(self): |
| | 232 | def HandleAcctPacket(self, pkt): |
| | 233 | self.handled=pkt |
| | 234 | hap=Server.HandleAcctPacket |
| | 235 | Server.HandleAcctPacket=HandleAcctPacket |
| | 236 | |
| | 237 | self.server._HandleAcctPacket(self.packet) |
| | 238 | self.failUnless(self.server.handled is self.packet) |
| | 239 | |
| | 240 | Server.HandleAcctPacket=hap |
| | 241 | |