def test_handle_UndoSetPDU(self): handlerCalls = [] handlerReturns = [AP.ERR_NOERROR, AP.ERR_NOERROR] handler = (lambda a, vb, ud: (handlerCalls.append((a, vb, ud)), handlerReturns.pop(0))[1]) mjig = AX.MIBControl() mjig.setVarbinds = ["foo", "bar"] mjig.setHandlers = [handler, handler] mjig.setUndoData = ["fey", "yar"] sock = jigs.SocketJig() p = AX.PacketControl(sock, mjig) p.sessionID = 42 # Test success pkt = AP.UndoSetPDU(True, 42, 23, 100) p.handle_UndoSetPDU(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(handlerCalls, [("undo", "foo", "fey"), ("undo", "bar", "yar")]) # Test failure sock.data = [] handlerCalls = [] handlerReturns = [AP.ERR_NOERROR, AP.ERR_GENERR] p.handle_UndoSetPDU(pkt) self.assertEqual(len(sock.data), 1) sentPkt = AP.decode_packet(sock.data[0])[0] respPkt = AP.ResponsePDU(True, 42, 23, 100, 0, 5, 1) self.assertEqual(sentPkt, respPkt) self.assertEqual(handlerCalls, [("undo", "foo", "fey"), ('undo', 'bar', 'yar')])
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_initNewSession(self): resp_returns = [] resp_calls = [] def waitForResponse_jig(opkt, ignoreSID=False): resp_calls.append((opkt, ignoreSID)) return resp_returns.pop(0) mjig = AX.MIBControl(mibRoot=(0, 1, 2), rangeSubid=0, upperBound=None, mibContext="foo") sock = jigs.SocketJig() p = AX.PacketControl(sock, mjig) p.waitForResponse = waitForResponse_jig resp_returns = [AP.ResponsePDU(True, 42, 1, 1, 0, 0, 0), AP.ResponsePDU(True, 42, 1, 1, 0, 0, 0)] p.initNewSession() self.assertEqual(resp_returns, []) self.assertEqual(len(sock.data), 2) openpkt = AP.decode_packet(sock.data[0])[0] registerpkt = AP.decode_packet(sock.data[1])[0] self.assertEqual(openpkt, AP.OpenPDU(True, 23, 0, 0, 30, (), "NTPsec SNMP subagent")) self.assertEqual(registerpkt, AP.RegisterPDU(True, 42, 1, 1, 30, 1, mjig.mib_rootOID(), mjig.mib_rangeSubid(), mjig.mib_upperBound(), mjig.mib_context())) self.assertEqual(p.sessionID, 42) self.assertEqual(p.stillConnected, True)
def test_addNode(self): c = AX.MIBControl() # Top level, non-dynamic c.addNode((0,), 1, 2) self.assertEqual(c.oidTree, {0: {"reader": 1, "writer": 2, "subids": None}}) # Top level, non-dynamic, class OID c.addNode(AP.OID((1,)), 1, 2) self.assertEqual(c.oidTree, {0: {"reader": 1, "writer": 2, "subids": None}, 1: {"reader": 1, "writer": 2, "subids": None}}) # Top level, dynamic c.addNode((2,), dynamic=3) self.assertEqual(c.oidTree, {0: {"reader": 1, "writer": 2, "subids": None}, 1: {"reader": 1, "writer": 2, "subids": None}, 2: {"reader": None, "writer": None, "subids": 3}}) # Sub level c.addNode((1, 2, 3), 1, 2) self.assertEqual(c.oidTree, {0: {"reader": 1, "writer": 2, "subids": None}, 1: {"reader": 1, "writer": 2, "subids": {2: {"reader": None, "writer": None, "subids": { 3: {"reader": 1, "writer": 2, "subids": None}}}}}, 2: {"reader": None, "writer": None, "subids": 3}})
def test_getOIDsInRange(self): c = AX.MIBControl() c.addNode((0, 1)) c.addNode((0, 2, 0), 10, 11) c.addNode((0, 2, 1), 20, 21) c.addNode((0, 2, 2), 30, 31) c.addNode((0, 2, 3), 40, 41) c.addNode((0, 4, 1, 0), 50, 51) # Test range too early rng = AP.SearchRange((0, 0, 0), (0, 0, 5)) self.assertEqual(c.getOIDsInRange(rng), []) # Test range too late rng = AP.SearchRange((6, 0, 0), (6, 0, 5)) self.assertEqual(c.getOIDsInRange(rng), []) # Test nothing implemented in range rng = AP.SearchRange((0,), (0, 1, 5)) self.assertEqual(c.getOIDsInRange(rng), []) # Test in range rng = AP.SearchRange((0, 2, 0), (0, 2, 3)) self.assertEqual(c.getOIDsInRange(rng), [(AP.OID((0, 2, 1)), 20, 21), (AP.OID((0, 2, 2)), 30, 31)]) # Test unbounded range rng = AP.SearchRange((0, 2, 0), ()) self.assertEqual(c.getOIDsInRange(rng), [(AP.OID((0, 2, 1)), 20, 21), (AP.OID((0, 2, 2)), 30, 31), (AP.OID((0, 2, 3)), 40, 41), (AP.OID((0, 4, 1, 0)), 50, 51)])
def test___init__(self): c = AX.MIBControl(1, 2, 3, 4, 5) self.assertEqual(c.oidTree, 1) self.assertEqual(c.inSetP, False) self.assertEqual(c.setVarbinds, []) self.assertEqual(c.setHandlers, []) self.assertEqual(c.setUndoData, []) self.assertEqual(c.mibRoot, 2) self.assertEqual(c.rangeSubid, 3) self.assertEqual(c.upperBound, 4) self.assertEqual(c.context, 5)
def test_handle_CleanupSetPDU(self): handlerCalls = [] handler = (lambda a, vb: handlerCalls.append((a, vb))) mjig = AX.MIBControl() mjig.setVarbinds = ["foo", "bar"] mjig.setHandlers = [handler, handler] p = AX.PacketControl(None, mjig) p.sessionID = 42 pkt = AP.CleanupSetPDU(True, 42, 23, 100) p.handle_CleanupSetPDU(pkt) self.assertEqual(p.database.inSetP, False) self.assertEqual(handlerCalls, [("clean", "foo"), ("clean", "bar")])
def test_getOID_andNext(self): c = AX.MIBControl() c.addNode((0, 1)) c.addNode((0, 2, 0), 10, 11) c.addNode((0, 2, 1), 20, 21) c.addNode((0, 2, 2), 30, 31) c.addNode((0, 2, 3), 40, 41) c.addNode((0, 4, 1, 0), 50, 51) # Test getOID # Test non-existent, no generator self.assertEqual(c.getOID(AP.OID((0, 0))), (None, None, None)) # Test empty, no generator self.assertEqual(c.getOID(AP.OID((0, 1))), (None, None, None)) # Test empty, with generator self.assertEqual(c.getOID(AP.OID((0, 1)), True), (None, None, None, None)) # Test existent, no generator self.assertEqual(c.getOID(AP.OID((0, 2, 1))), (AP.OID((0, 2, 1)), 20, 21)) # Test existent, with generator r = c.getOID(AP.OID((0, 2, 1)), True) self.assertEqual(r[:3], (AP.OID((0, 2, 1)), 20, 21)) self.assertEqual(isinstance(r[3], types.GeneratorType), True) # Test getNextOID # Test non-existent, no generator self.assertEqual(c.getNextOID(AP.OID((0, 0))), (AP.OID((0, 2, 0)), 10, 11)) # Test empty, no generator self.assertEqual(c.getNextOID(AP.OID((0, 1))), (AP.OID((0, 2, 0)), 10, 11)) # Test empty, with generator r = c.getNextOID(AP.OID((0, 1)), True) self.assertEqual(r[:3], (AP.OID((0, 2, 0)), 10, 11)) self.assertEqual(isinstance(r[3], types.GeneratorType), True) # Test existent, no generator self.assertEqual(c.getNextOID(AP.OID((0, 2, 1))), (AP.OID((0, 2, 2)), 30, 31)) # Test existent, with generator r = c.getNextOID(AP.OID((0, 2, 1)), True) self.assertEqual(r[:3], (AP.OID((0, 2, 2)), 30, 31)) self.assertEqual(isinstance(r[3], types.GeneratorType), True) # Test walking off the end self.assertEqual(c.getNextOID(AP.OID((0, 4, 1, 0))), (None, None, None))
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, [])
def test_mib_context(self): c = AX.MIBControl(mibContext="foo") self.assertEqual(c.mib_context(), "foo")
def test_mib_upperBound(self): c = AX.MIBControl(upperBound="foo") self.assertEqual(c.mib_upperBound(), "foo")
def test_mib_rangeSubid(self): c = AX.MIBControl(rangeSubid="foo") self.assertEqual(c.mib_rangeSubid(), "foo")
def test_mib_rootOID(self): c = AX.MIBControl(mibRoot="foo") self.assertEqual(c.mib_rootOID(), "foo")