예제 #1
0
    def test_waitForResponse(self):
        pkts = [AP.PingPDU(True, 1, 2, 3),
                AP.ResponsePDU(True, 10, 20, 30, 0, 0, 0),
                AP.ResponsePDU(True, 5, 23, 100, 0, 0, 0),
                AP.ResponsePDU(True, 42, 23, 100, 0, 0, 0),
                AP.ResponsePDU(True, 100, 200, 300, 0, 0, 0)]
        opkt = AP.PingPDU(True, 42, 23, 100)

        def packetEater_jig(self):
            self.receivedPackets.append(pkts.pop(0))

        p = AX.PacketControl(None, None)
        p.packetEater = (lambda : packetEater_jig(p))
        p.spinGap = 0
        # Test with session id match required
        ret = p.waitForResponse(opkt)
        self.assertEqual(pkts, [AP.ResponsePDU(True, 100, 200, 300, 0, 0, 0)])
        self.assertEqual(ret, AP.ResponsePDU(True, 42, 23, 100, 0, 0, 0))
        # Test ignoring session id
        pkts = [AP.PingPDU(True, 1, 2, 3),
                AP.ResponsePDU(True, 10, 20, 30, 0, 0, 0),
                AP.ResponsePDU(True, 5, 23, 100, 0, 0, 0),
                AP.ResponsePDU(True, 42, 23, 100, 0, 0, 0)]
        ret = p.waitForResponse(opkt, True)
        self.assertEqual(pkts, [AP.ResponsePDU(True, 42, 23, 100, 0, 0, 0)])
        self.assertEqual(ret, AP.ResponsePDU(True, 5, 23, 100, 0, 0, 0))
예제 #2
0
    def test_handle_ResponsePDU(self):
        cbreturn = []

        def callback(pkt, origpkt):
            cbreturn.append((pkt, origpkt))
        opkt = AP.PingPDU(True, 42, 4, 50)
        incorrect_rpkt = AP.ResponsePDU(True, 23, 1, 99, 0, 0, 0)
        correct_rpkt = AP.ResponsePDU(True, 42, 4, 50, 0, 0, 0)
        sock = jigs.SocketJig()
        p = AX.PacketControl(sock, None)
        p.sessionID = 42
        p.packetLog = {(42, 4, 50): (30.0, opkt, callback)}
        # Test non-expected response (likely to happen in a timeout)
        p.handle_ResponsePDU(incorrect_rpkt)
        self.assertEqual(p.packetLog, {(42, 4, 50): (30.0, opkt, callback)})
        # Test expected response
        p.handle_ResponsePDU(correct_rpkt)
        self.assertEqual(p.packetLog, {})
예제 #3
0
 def test_sendPacket(self):
     sock = jigs.SocketJig()
     p = AX.PacketControl(sock, None)
     testpkt = AP.PingPDU(True, 0, 1, 2, "fake")
     # Test not expecting reply
     p.sendPacket(testpkt, False)
     self.assertEqual(sock.data, [b"\x01\r\x18\x00"
                                  b"\x00\x00\x00\x00\x00\x00\x00\x01"
                                  b"\x00\x00\x00\x02\x00\x00\x00\x08"
                                  b"\x00\x00\x00\x04fake"])
     self.assertEqual(p.packetLog, {})
     sock.data = []
     # Test expecting reply
     p.sendPacket(testpkt, True, callback="foo")
     self.assertEqual(sock.data, [b"\x01\r\x18\x00"
                                  b"\x00\x00\x00\x00\x00\x00\x00\x01"
                                  b"\x00\x00\x00\x02\x00\x00\x00\x08"
                                  b"\x00\x00\x00\x04fake"])
     self.assertEqual(p.packetLog, {(0, 1, 2): (30.0, testpkt, "foo")})
예제 #4
0
    def test__doloop(self):
        # need jigs for
        # time
        pkts = []
        # recpTimes = []
        handler_calls = [0]

        def packetEater_jig(self):
            self.receivedPackets = pkts
            self.lastReception = recpTime

        def pinghandler_jig(self):
            handler_calls[0] += 1

        faketimemod = jigs.TimeModuleJig()
        sock = jigs.SocketJig()
        p = AX.PacketControl(sock, None)
        p.packetEater = (lambda: packetEater_jig(p))
        p.checkResponses = (lambda: None)
        p.pduHandlers[AP.PDU_PING] = pinghandler_jig
        p.sessionID = 42
        try:
            timetemp = AX.time
            AX.time = faketimemod
            # Test first time, no reception
            recpTime = None
            faketimemod.time_returns = []
            p._doloop()
            self.assertEqual(sock.data, [])
            # Test wrong session ID
            pkts = [AP.PingPDU(True, 13, 0, 0)]
            recpTime = 50
            faketimemod.time_returns = [55]
            p._doloop()
            self.assertEqual(len(sock.data), 1)
            sentPkt = AP.decode_packet(sock.data[0])[0]
            respPkt = AP.ResponsePDU(True, 13, 0, 0, 0, AP.RSPERR_NOT_OPEN, 0)
            self.assertEqual(sentPkt, respPkt)
            # Test unimplemented packet type
            faketimemod.time_returns = [55]
            sock.data = []
            pkts = [AP.PingPDU(True, 42, 0, 0)]
            pkts[0].pduType = 1337  # spoof the type
            p._doloop()
            self.assertEqual(sock.data, [])
            self.assertEqual(handler_calls, [0])
            # Test successful
            faketimemod.time_returns = [55]
            sock.data = []
            pkts = [AP.PingPDU(True, 42, 0, 0)]
            p._doloop()
            self.assertEqual(sock.data, [])
            self.assertEqual(handler_calls, [1])
            # Test pinging
            handler_calls = [0]
            faketimemod.time_returns = [120]
            sock.data = []
            p._doloop()
            self.assertEqual(len(sock.data), 1)
            sentPkt = AP.decode_packet(sock.data[0])[0]
            respPkt = AP.PingPDU(True, 42, 5, 1)
            self.assertEqual(sentPkt, respPkt)
            self.assertEqual(handler_calls, [0])
        finally:
            AX.time = timetemp