def test_handleGetNextPDU(self): readReturns = [1] read = (lambda oid: AP.Varbind(AP.VALUE_INTEGER, oid, readReturns.pop(0))) mjig = AX.MIBControl() mjig.addNode((0, 0), read) mjig.addNode((0, 1), read) sock = jigs.SocketJig() p = AX.PacketControl(sock, mjig) p.sessionID = 42 # Test successful pkt = AP.GetNextPDU(True, 42, 23, 100, [AP.SearchRange((0, 0), ())]) p.handle_GetNextPDU(pkt) self.assertEqual(len(sock.data), 1) sentPkt = AP.decode_packet(sock.data[0])[0] respPkt = AP.ResponsePDU(True, 42, 23, 100, 0, 0, 0, (AP.Varbind(AP.VALUE_INTEGER, (0, 1), 1),)) self.assertEqual(sentPkt, respPkt) # Test non-existent sock.data = [] pkt = AP.GetNextPDU(True, 42, 23, 100, [AP.SearchRange((1, 0), ())]) p.handle_GetNextPDU(pkt) self.assertEqual(len(sock.data), 1) sentPkt = AP.decode_packet(sock.data[0])[0] respPkt = AP.ResponsePDU(True, 42, 23, 100, 0, 0, 0, (AP.Varbind(AP.VALUE_END_OF_MIB_VIEW, (1, 0)),)) self.assertEqual(sentPkt, respPkt)
def test_sendNotify(self): sock = jigs.SocketJig() p = AX.PacketControl(sock, None) p.sessionID = 42 vb = AP.Varbind(AP.VALUE_INTEGER, (0, 1, 2), 23) p.sendNotify([vb]) self.assertEqual(sock.data, [b"\x01\x0c\x10\x00" b"\x00\x00\x00*\x00\x00\x00\x05" b"\x00\x00\x00\x01\x00\x00\x00\x18" b"\x00\x02\x00\x00" b"\x03\x00\x00\x00\x00\x00\x00\x00" b"\x00\x00\x00\x01\x00\x00\x00\x02" b"\x00\x00\x00\x17"]) self.assertEqual(list(p.packetLog.keys()), [(42, 5, 1)])
def test_handle_GetBulkPDU(self): readReturns = [1, 2, 3, 4, 5, 6] read = ( lambda oid: AP.Varbind(AP.VALUE_INTEGER, oid, readReturns.pop(0))) mjig = AX.MIBControl() # non-repeated mjig.addNode((0, 0), read) mjig.addNode((0, 1), read) # shouldn't see mjig.addNode((1, 0), read) mjig.addNode((1, 1), read) # shouldn't see # repeated mjig.addNode((2, 0), read) mjig.addNode((2, 1), read) mjig.addNode((2, 2), read) # shouldn't see mjig.addNode((3, 0), read) mjig.addNode((3, 1), read) mjig.addNode((3, 2), read) # shouldn't see mjig.addNode((4, 0), read) # shouldn't see sock = jigs.SocketJig() p = AX.PacketControl(sock, mjig) p.sessionID = 42 pkt = AP.GetBulkPDU(True, 42, 23, 100, 2, 2, [ AP.SearchRange((0, ), (1, ), True), AP.SearchRange((1, ), (2, ), True), AP.SearchRange((2, 0), (3, ), True), AP.SearchRange((3, 0), (), True) ]) p.handle_GetBulkPDU(pkt) self.assertEqual(len(sock.data), 1) sentPkt = AP.decode_packet(sock.data[0])[0] respPkt = AP.ResponsePDU( True, 42, 23, 100, 0, 0, 0, (AP.Varbind(AP.VALUE_INTEGER, (0, 0), 1), AP.Varbind(AP.VALUE_INTEGER, (1, 0), 2), AP.Varbind(AP.VALUE_INTEGER, (2, 0), 3), AP.Varbind(AP.VALUE_INTEGER, (2, 1), 4), AP.Varbind(AP.VALUE_INTEGER, (3, 0), 5), AP.Varbind(AP.VALUE_INTEGER, (3, 1), 6))) self.assertEqual(sentPkt, respPkt)
def test_handle_TestSetPDU(self): mjig = AX.MIBControl() readReturns = [] read = (lambda oid: AP.Varbind(AP.VALUE_INTEGER, oid, readReturns.pop(0))) writeCalls = [] writeReturns = [] write = (lambda a, vb: (writeCalls.append((a, vb)), writeReturns.pop(0))[1]) mjig.addNode((0,), read, write) mjig.addNode((1,), read) sock = jigs.SocketJig() p = AX.PacketControl(sock, mjig) p.sessionID = 42 # Test success readReturns = [10] writeReturns = [AP.ERR_NOERROR] pkt = AP.TestSetPDU(True, 42, 23, 100, [AP.Varbind(AP.VALUE_INTEGER, (0,), 16)]) p.handle_TestSetPDU(pkt) self.assertEqual(len(sock.data), 1) sentPkt = AP.decode_packet(sock.data[0])[0] respPkt = AP.ResponsePDU(True, 42, 23, 100, 0, 0, 0) self.assertEqual(sentPkt, respPkt) self.assertEqual(writeCalls, [("test", AP.Varbind(AP.VALUE_INTEGER, (0,), 16))]) self.assertEqual(mjig.setVarbinds, [AP.Varbind(AP.VALUE_INTEGER, (0,), 16)]) self.assertEqual(mjig.setHandlers, [write]) self.assertEqual(mjig.setUndoData, [AP.Varbind(AP.VALUE_INTEGER, (0,), 10)]) # Test failure, no access mjig.setVarbinds = [] mjig.setHandlers = [] mjig.setUndoData = [] sock.data = [] readReturns = [10] writeReturns = [AP.ERR_NOERROR] writeCalls = [] pkt = AP.TestSetPDU(True, 42, 23, 100, [AP.Varbind(AP.VALUE_INTEGER, (0, 1), 16)]) p.handle_TestSetPDU(pkt) self.assertEqual(len(sock.data), 1) sentPkt = AP.decode_packet(sock.data[0])[0] respPkt = AP.ResponsePDU(True, 42, 23, 100, 0, 6, 0) self.assertEqual(sentPkt, respPkt) self.assertEqual(writeCalls, []) self.assertEqual(mjig.setVarbinds, []) self.assertEqual(mjig.setHandlers, []) self.assertEqual(mjig.setUndoData, []) # Test failure, not writable mjig.setVarbinds = [] mjig.setHandlers = [] mjig.setUndoData = [] sock.data = [] readReturns = [10] writeReturns = [AP.ERR_NOERROR] writeCalls = [] pkt = AP.TestSetPDU(True, 42, 23, 100, [AP.Varbind(AP.VALUE_INTEGER, (1,), 16)]) p.handle_TestSetPDU(pkt) self.assertEqual(len(sock.data), 1) sentPkt = AP.decode_packet(sock.data[0])[0] respPkt = AP.ResponsePDU(True, 42, 23, 100, 0, 17, 0) self.assertEqual(sentPkt, respPkt) self.assertEqual(writeCalls, []) self.assertEqual(mjig.setVarbinds, []) self.assertEqual(mjig.setHandlers, []) self.assertEqual(mjig.setUndoData, [])