예제 #1
0
 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')])
예제 #2
0
 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)
예제 #3
0
    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)
예제 #4
0
 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}})
예제 #5
0
 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)])
예제 #6
0
 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)
예제 #7
0
 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")])
예제 #8
0
 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))
예제 #9
0
 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)
예제 #10
0
 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, [])
예제 #11
0
 def test_mib_context(self):
     c = AX.MIBControl(mibContext="foo")
     self.assertEqual(c.mib_context(), "foo")
예제 #12
0
 def test_mib_upperBound(self):
     c = AX.MIBControl(upperBound="foo")
     self.assertEqual(c.mib_upperBound(), "foo")
예제 #13
0
 def test_mib_rangeSubid(self):
     c = AX.MIBControl(rangeSubid="foo")
     self.assertEqual(c.mib_rangeSubid(), "foo")
예제 #14
0
 def test_mib_rootOID(self):
     c = AX.MIBControl(mibRoot="foo")
     self.assertEqual(c.mib_rootOID(), "foo")