Exemple #1
0
    def test_bulktable(self, mck_transport):
        responses = readbytes_multiple('bulktable_response.hex')
        mck_transport().send.side_effect = responses

        request_ids = [1, 2, 3, 4, 5]
        mck_transport().get_request_id.side_effect = request_ids

        result = list(bulktable('127.0.0.1', 'private', '1.3.6.1.2.1.2.2'))

        expected = [{
            '0': '1',
            '1': Integer(1),
            '2': OctetString(b'lo'),
            '3': Integer(24),
            '4': Integer(65536),
            '5': Gauge(10000000),
            '6': OctetString(b''),
            '7': Integer(1),
            '8': Integer(1),
            '9': TimeTicks(0),
            '10': Counter(172),
            '11': Counter(2),
            '12': Counter(0),
            '13': Counter(0),
            '14': Counter(0),
            '15': Counter(0),
            '16': Counter(172),
            '17': Counter(2),
            '18': Counter(0),
            '19': Counter(0),
            '20': Counter(0),
            '21': Gauge(0),
            '22': ObjectIdentifier(0, 0),
        }, {
            '0': '4',
            '1': Integer(4),
            '2': OctetString(b'eth0'),
            '3': Integer(6),
            '4': Integer(1500),
            '5': Gauge(4294967295),
            '6': OctetString(b'\x02B\xac\x11\x00\x02'),
            '7': Integer(1),
            '8': Integer(1),
            '9': TimeTicks(0),
            '10': Counter(548760),
            '11': Counter(3888),
            '12': Counter(0),
            '13': Counter(0),
            '14': Counter(0),
            '15': Counter(0),
            '16': Counter(186660),
            '17': Counter(1875),
            '18': Counter(0),
            '19': Counter(0),
            '20': Counter(0),
            '21': Gauge(0),
            '22': ObjectIdentifier(0, 0),
        }]
        self.assertEqual(sorted(result, key=lambda x: x['0']), expected)
Exemple #2
0
 def test_get_call_args(self):
     data = readbytes('dummy.hex')  # any dump would do
     packet = Sequence(
         Integer(Version.V2C), OctetString('public'),
         BulkGetRequest(0, 1, 2, ObjectIdentifier(1, 2, 3),
                        ObjectIdentifier(1, 2, 4)))
     with patch('puresnmp.api.raw.send') as mck, \
             patch('puresnmp.api.raw.get_request_id') as mck2:
         mck2.return_value = 0
         mck.return_value = data
         bulkget('::1', 'public', ['1.2.3'], ['1.2.4'], max_list_size=2)
         mck.assert_called_with('::1', 161, to_bytes(packet), timeout=2)
Exemple #3
0
    async def test_bulkwalk(self):
        request_ids = [1001613222, 1001613223, 1001613224]
        with patch('puresnmp.aio.api.pythonic.raw',
                   new_callable=AsyncGenMock) as mck:
            mck.multiwalk.return_value = [
                VarBind('1.3.6.1.2.1.2.2.1.1.1', Integer(1)),
                VarBind('1.3.6.1.2.1.2.2.1.1.10', Integer(10)),
                VarBind('1.3.6.1.2.1.2.2.1.2.1', OctetString(b"lo")),
                VarBind('1.3.6.1.2.1.2.2.1.22.10', ObjectIdentifier(0, 0))
            ]

            result = []
            async for x in bulkwalk('127.0.0.1',
                                    'private', ['1.3.6.1.2.1.2.2'],
                                    bulk_size=20):
                result.append(x)

        expected = [
            VarBind('1.3.6.1.2.1.2.2.1.1.1', 1),
            VarBind('1.3.6.1.2.1.2.2.1.1.10', 10),
            VarBind('1.3.6.1.2.1.2.2.1.2.1', b"lo"),
            VarBind('1.3.6.1.2.1.2.2.1.22.10', '0.0'),
        ]

        assert result == expected
Exemple #4
0
 async def test_get_call_args(self):
     data = readbytes('dummy.hex')  # any dump would do
     packet = Sequence(Integer(Version.V2C), OctetString('public'),
                       GetNextRequest(0, ObjectIdentifier(1, 2, 3)))
     with patch('puresnmp.aio.api.raw.send', new_callable=AsyncMock) as mck, \
             patch('puresnmp.aio.api.raw.get_request_id') as mck2:
         mck2.return_value = 0
         mck.return_value = data
         await getnext('::1', 'public', '1.2.3')
         mck.assert_called_with('::1', 161, to_bytes(packet), timeout=6)
Exemple #5
0
 def test_get_call_args(self):
     data = readbytes('dummy.hex')  # any dump would do
     packet = Sequence(Integer(Version.V2C), OctetString('public'),
                       GetNextRequest(0, ObjectIdentifier(1, 2, 3)))
     with patch('puresnmp.api.raw.Transport') as mck:
         mck().send.return_value = data
         mck().get_request_id.return_value = 0
         getnext('::1', 'public', '1.2.3')
         mck.assert_called_with(timeout=6)
         mck().send.assert_called_with('::1', 161, to_bytes(packet))
Exemple #6
0
 def test_get_call_args(self):
     data = readbytes('dummy.hex')  # any dump would do
     packet = Sequence(Integer(Version.V2C), OctetString('public'),
                       GetNextRequest(0, ObjectIdentifier(1, 2, 3)))
     with patch('puresnmp.send') as mck, \
             patch('puresnmp.get_request_id') as mck2:
         mck2.return_value = 0
         mck.return_value = data
         getnext('::1', 'public', '1.2.3')
         mck.assert_called_with('::1', 161, bytes(packet))
Exemple #7
0
    def test_get_call_args_issue_22(self):
        data = readbytes('dummy.hex')  # any dump would do
        packet = Sequence(Integer(Version.V2C), OctetString('public'),
                          BulkGetRequest(0, 0, 2, ObjectIdentifier(1, 2, 3)))
        with patch('puresnmp.api.raw.Transport') as mck:
            mck().send.return_value = data
            mck().get_request_id.return_value = 0

            with six.assertRaisesRegex(self, TypeError, 'OIDS.*list'):
                # we need to wrap this in a list to consume the generator.
                list(bulkwalk('::1', 'public', '1.2.3', bulk_size=2))
Exemple #8
0
    def test_get_call_args(self):
        data = readbytes('dummy.hex')  # any dump would do
        packet = Sequence(Integer(Version.V2C), OctetString('public'),
                          BulkGetRequest(0, 0, 2, ObjectIdentifier(1, 2, 3)))
        with patch('puresnmp.api.raw.send') as mck, \
                patch('puresnmp.api.raw.get_request_id') as mck2:
            mck2.return_value = 0
            mck.return_value = data

            # we need to wrap this in a list to consume the generator.
            list(bulkwalk('::1', 'public', ['1.2.3'], bulk_size=2))
            mck.assert_called_with('::1', 161, to_bytes(packet), timeout=2)
Exemple #9
0
    async def test_get_call_args_issue_22(self):
        data = readbytes('dummy.hex')  # any dump would do
        packet = Sequence(Integer(Version.V2C), OctetString('public'),
                          BulkGetRequest(0, 0, 2, ObjectIdentifier(1, 2, 3)))
        with patch('puresnmp.aio.api.raw.send', new_callable=AsyncMock) as mck, \
                patch('puresnmp.aio.api.raw.get_request_id') as mck2:
            mck2.return_value = 0
            mck.return_value = data

            with pytest.raises(TypeError, match=r'OIDS.*list'):
                # we need to wrap this in a list to consume the generator.
                async for x in bulkwalk('::1', 'public', '1.2.3', bulk_size=2):
                    pass
Exemple #10
0
    async def test_get_call_args(self):
        data = readbytes('dummy.hex')  # any dump would do
        packet = Sequence(Integer(Version.V2C), OctetString('public'),
                          BulkGetRequest(0, 0, 2, ObjectIdentifier(1, 2, 3)))
        with patch('puresnmp.aio.api.raw.Transport') as mck:
            mck().send = AsyncMock()
            mck().get_request_id.return_value = 0
            mck().send.return_value = data

            # we need to wrap this in a list to consume the generator.
            async for x in bulkwalk('::1', 'public', ['1.2.3'], bulk_size=2):
                pass
            mck.assert_called_with(timeout=6)
            mck().send.assert_called_with('::1', 161, to_bytes(packet))
Exemple #11
0
    def test_walk_endless_loop(self):
        '''
        In rare cases, some devices fall into an endless loop by returning the
        requested OID on a "getnext" call during a "walk" operation. A SNMP
        client behaving according to the SNMP spec will fall into an endless
        loop. This test fakes such a case and revents the loop.
        '''
        response_binds = [
            VarBind(ObjectIdentifier(1, 2, 3), Integer(123)),
            VarBind(ObjectIdentifier(1, 2, 4), Integer(124)),
            VarBind(ObjectIdentifier(1, 2, 5), Integer(125)),
            VarBind(ObjectIdentifier(1, 2, 5), Integer(125)),  # same OID
            VarBind(ObjectIdentifier(1, 2, 5), Integer(125)),  # same OID
            VarBind(ObjectIdentifier(1, 2, 5), Integer(125)),  # same OID
        ]
        response_packets = [
            Sequence(Integer(1), OctetString(b'public'),
                     GetResponse(234, [bind])) for bind in response_binds
        ]
        response_bytes = [to_bytes(packet) for packet in response_packets]

        handler = CapturingHandler()
        logger = getLogger('puresnmp')
        logger.addHandler(handler)
        with patch('puresnmp.api.raw.Transport') as mck:
            mck().send.side_effect = response_bytes
            mck().get_request_id.return_value = 0
            result = list(walk('::1', 'private', '1.2', errors='warn'))
        logger.removeHandler(handler)

        # The last OID in the mocked responses is decreasing so we want to read
        # just up to that point.
        expected = [
            VarBind(ObjectIdentifier(1, 2, 3), Integer(123)),
            VarBind(ObjectIdentifier(1, 2, 4), Integer(124)),
            VarBind(ObjectIdentifier(1, 2, 5), Integer(125)),
        ]
        self.assertEqual(result, expected)

        # We also want to make sure that we have a proper warning about this
        handler.assertContains(WARNING, r'.*1.2.5.*')
Exemple #12
0
    def test_getnext_increasing_oid_strict(self):
        '''
        When running "getnext" we expect a different OID than the one we passed
        in. If not, this can cause endless-loops in the worst case. Faulty SNMP
        implementations may behave this way!
        '''
        requested_oid = ObjectIdentifier(1, 2, 3, 4)
        response_object = Sequence(
            Integer(1), OctetString(b'public'),
            GetResponse(234, [VarBind(requested_oid, Integer(123))]))
        response_bytes = to_bytes(response_object)

        with patch('puresnmp.api.raw.send') as mck:
            mck.return_value = response_bytes
            with self.assertRaises(FaultySNMPImplementation):
                getnext('::1', 'private', '1.2.3.4')
Exemple #13
0
 def test_traps(self):
     with patch('puresnmp.api.pythonic.raw') as mck:
         oid = ObjectIdentifier.from_string
         mck.traps.return_value = [
             Trap(request_id=1,
                  error_status=0,
                  error_index=0,
                  varbinds=[
                      VarBind(oid('1.2.1.1'), OctetString(b'fake-uptime')),
                      VarBind(oid('1.2.1.2'), ObjectIdentifier(1, 2, 3, 4)),
                      VarBind(oid('1.2.1.3'), Integer(13)),
                      VarBind(oid('1.2.1.4'), OctetString(b'fake-value-2')),
                  ])
         ]
         result = []
         for trap in traps():
             result.append((trap.uptime, trap.oid, trap.values))
     expected = [(b'fake-uptime', u'1.2.3.4', {
         u'1.2.1.3': 13,
         u'1.2.1.4': b'fake-value-2',
     })]
     self.assertEqual(result, expected)
Exemple #14
0
    def test_bulkwalk(self):
        request_ids = [1001613222, 1001613223, 1001613224]
        with patch('puresnmp.api.pythonic.raw') as mck:
            mck.multiwalk.return_value = [
                VarBind('1.3.6.1.2.1.2.2.1.1.1', Integer(1)),
                VarBind('1.3.6.1.2.1.2.2.1.1.10', Integer(10)),
                VarBind('1.3.6.1.2.1.2.2.1.2.1', OctetString(b"lo")),
                VarBind('1.3.6.1.2.1.2.2.1.22.10', ObjectIdentifier(0, 0))
            ]

            result = list(
                bulkwalk('127.0.0.1',
                         'private', ['1.3.6.1.2.1.2.2'],
                         bulk_size=20))

        expected = [
            VarBind('1.3.6.1.2.1.2.2.1.1.1', 1),
            VarBind('1.3.6.1.2.1.2.2.1.1.10', 10),
            VarBind('1.3.6.1.2.1.2.2.1.2.1', b"lo"),
            VarBind('1.3.6.1.2.1.2.2.1.22.10', '0.0'),
        ]

        self.assertEqual(result, expected)
Exemple #15
0
    def test_walk_increasing_oid_lenient(self):
        '''
        We want to be able to allow faulty SNMP implementations to at least try
        to fetch the values in a walk which are not increasing. It should read
        up to the values which are no longer increasing and emit a warning.
        '''
        logger = getLogger('puresnmp')
        handler = CapturingHandler()
        logger.addHandler(handler)

        response_binds = [
            VarBind(ObjectIdentifier(1, 2, 3), Integer(123)),
            VarBind(ObjectIdentifier(1, 2, 4), Integer(124)),
            VarBind(ObjectIdentifier(1, 2, 5), Integer(125)),
            VarBind(ObjectIdentifier(1, 2, 1), Integer(121)),  # non-increasing
        ]
        response_packets = [
            Sequence(Integer(1), OctetString(b'public'),
                     GetResponse(234, [bind])) for bind in response_binds
        ]
        response_bytes = [to_bytes(packet) for packet in response_packets]

        with patch('puresnmp.api.raw.Transport') as mck:
            mck().send.side_effect = response_bytes
            mck().get_request_id.return_value = 0
            result = list(walk('::1', 'private', '1.2', errors='warn'))

        # The last OID in the mocked responses is decreasing so we want to read
        # just up to that point.
        expected = [
            VarBind(ObjectIdentifier(1, 2, 3), Integer(123)),
            VarBind(ObjectIdentifier(1, 2, 4), Integer(124)),
            VarBind(ObjectIdentifier(1, 2, 5), Integer(125)),
        ]
        self.assertEqual(result, expected)

        # We also want to make sure that we have a proper warning about this
        handler.assertContains(WARNING, r'.*1.2.1.*1.2.5.*')
        logger.removeHandler(handler)
    async def test_bulkwalk(self):
        req1 = readbytes('bulkwalk_request_1.hex')
        req2 = readbytes('bulkwalk_request_2.hex')
        req3 = readbytes('bulkwalk_request_3.hex')

        responses = [
            readbytes('bulkwalk_response_1.hex'),
            readbytes('bulkwalk_response_2.hex'),
            readbytes('bulkwalk_response_3.hex'),
        ]
        with patch('puresnmp.aio.api.raw.Transport') as mck:
            mck().send = AsyncMock()
            mck().send.side_effect = responses

            request_ids = [1001613222, 1001613223, 1001613224]
            mck().get_request_id.side_effect = request_ids

            result = []
            async for x in bulkwalk('127.0.0.1', 'private', ['1.3.6.1.2.1.2.2'],
                                   bulk_size=20):
                result.append(x)

            mck.assert_called_with(timeout=6)
            assert mck().send.mock_calls == [
                call('127.0.0.1', 161, req1),
                call('127.0.0.1', 161, req2),
                call('127.0.0.1', 161, req3),
            ]

            expected = [
                VarBind('1.3.6.1.2.1.2.2.1.1.1', Integer(1)),
                VarBind('1.3.6.1.2.1.2.2.1.1.10', Integer(10)),
                VarBind('1.3.6.1.2.1.2.2.1.2.1', OctetString(b"lo")),
                VarBind('1.3.6.1.2.1.2.2.1.2.10', OctetString(b"eth0")),
                VarBind('1.3.6.1.2.1.2.2.1.3.1', Integer(24)),
                VarBind('1.3.6.1.2.1.2.2.1.3.10', Integer(6)),
                VarBind('1.3.6.1.2.1.2.2.1.4.1', Integer(65536)),
                VarBind('1.3.6.1.2.1.2.2.1.4.10', Integer(1500)),
                VarBind('1.3.6.1.2.1.2.2.1.5.1',  Gauge(10000000)),
                VarBind('1.3.6.1.2.1.2.2.1.5.10',  Gauge(4294967295)),
                VarBind('1.3.6.1.2.1.2.2.1.6.1', OctetString(b"")),
                VarBind('1.3.6.1.2.1.2.2.1.6.10',
                    OctetString(b"\x02\x42\xAC\x11\x00\x02")),
                VarBind('1.3.6.1.2.1.2.2.1.7.1', Integer(1)),
                VarBind('1.3.6.1.2.1.2.2.1.7.10', Integer(1)),
                VarBind('1.3.6.1.2.1.2.2.1.8.1', Integer(1)),
                VarBind('1.3.6.1.2.1.2.2.1.8.10', Integer(1)),
                VarBind('1.3.6.1.2.1.2.2.1.9.1', TimeTicks(0)),
                VarBind('1.3.6.1.2.1.2.2.1.9.10', TimeTicks(0)),
                VarBind('1.3.6.1.2.1.2.2.1.10.1', Counter(172)),
                VarBind('1.3.6.1.2.1.2.2.1.10.10', Counter(60558)),
                VarBind('1.3.6.1.2.1.2.2.1.11.1', Counter(2)),
                VarBind('1.3.6.1.2.1.2.2.1.11.10', Counter(564)),
                VarBind('1.3.6.1.2.1.2.2.1.12.1', Counter(0)),
                VarBind('1.3.6.1.2.1.2.2.1.12.10', Counter(0)),
                VarBind('1.3.6.1.2.1.2.2.1.13.1', Counter(0)),
                VarBind('1.3.6.1.2.1.2.2.1.13.10', Counter(0)),
                VarBind('1.3.6.1.2.1.2.2.1.14.1', Counter(0)),
                VarBind('1.3.6.1.2.1.2.2.1.14.10', Counter(0)),
                VarBind('1.3.6.1.2.1.2.2.1.15.1', Counter(0)),
                VarBind('1.3.6.1.2.1.2.2.1.15.10', Counter(0)),
                VarBind('1.3.6.1.2.1.2.2.1.16.1', Counter(172)),
                VarBind('1.3.6.1.2.1.2.2.1.16.10', Counter(44295)),
                VarBind('1.3.6.1.2.1.2.2.1.17.1', Counter(2)),
                VarBind('1.3.6.1.2.1.2.2.1.17.10', Counter(442)),
                VarBind('1.3.6.1.2.1.2.2.1.18.1', Counter(0)),
                VarBind('1.3.6.1.2.1.2.2.1.18.10', Counter(0)),
                VarBind('1.3.6.1.2.1.2.2.1.19.1', Counter(0)),
                VarBind('1.3.6.1.2.1.2.2.1.19.10', Counter(0)),
                VarBind('1.3.6.1.2.1.2.2.1.20.1', Counter(0)),
                VarBind('1.3.6.1.2.1.2.2.1.20.10', Counter(0)),
                VarBind('1.3.6.1.2.1.2.2.1.21.1',  Gauge(0)),
                VarBind('1.3.6.1.2.1.2.2.1.21.10',  Gauge(0)),
                VarBind('1.3.6.1.2.1.2.2.1.22.1', ObjectIdentifier(0, 0)),
                VarBind('1.3.6.1.2.1.2.2.1.22.10', ObjectIdentifier(0, 0))
            ]
        assert result == expected
Exemple #17
0
    def test_bulkwalk(self, mck_rid, mck_send):
        req1 = readbytes('bulkwalk_request_1.hex')
        req2 = readbytes('bulkwalk_request_2.hex')
        req3 = readbytes('bulkwalk_request_3.hex')

        responses = [
            readbytes('bulkwalk_response_1.hex'),
            readbytes('bulkwalk_response_2.hex'),
            readbytes('bulkwalk_response_3.hex'),
        ]
        mck_send.side_effect = responses

        request_ids = [1001613222, 1001613223, 1001613224]
        mck_rid.side_effect = request_ids

        result = list(
            bulkwalk('127.0.0.1', 'private', ['1.3.6.1.2.1.2.2'],
                     bulk_size=20))

        self.assertEqual(mck_send.mock_calls, [
            call('127.0.0.1', 161, req1, timeout=2),
            call('127.0.0.1', 161, req2, timeout=2),
            call('127.0.0.1', 161, req3, timeout=2),
        ])

        expected = [
            VarBind('1.3.6.1.2.1.2.2.1.1.1', Integer(1)),
            VarBind('1.3.6.1.2.1.2.2.1.1.10', Integer(10)),
            VarBind('1.3.6.1.2.1.2.2.1.2.1', OctetString(b"lo")),
            VarBind('1.3.6.1.2.1.2.2.1.2.10', OctetString(b"eth0")),
            VarBind('1.3.6.1.2.1.2.2.1.3.1', Integer(24)),
            VarBind('1.3.6.1.2.1.2.2.1.3.10', Integer(6)),
            VarBind('1.3.6.1.2.1.2.2.1.4.1', Integer(65536)),
            VarBind('1.3.6.1.2.1.2.2.1.4.10', Integer(1500)),
            VarBind('1.3.6.1.2.1.2.2.1.5.1', Gauge(10000000)),
            VarBind('1.3.6.1.2.1.2.2.1.5.10', Gauge(4294967295)),
            VarBind('1.3.6.1.2.1.2.2.1.6.1', OctetString(b"")),
            VarBind('1.3.6.1.2.1.2.2.1.6.10',
                    OctetString(b"\x02\x42\xAC\x11\x00\x02")),
            VarBind('1.3.6.1.2.1.2.2.1.7.1', Integer(1)),
            VarBind('1.3.6.1.2.1.2.2.1.7.10', Integer(1)),
            VarBind('1.3.6.1.2.1.2.2.1.8.1', Integer(1)),
            VarBind('1.3.6.1.2.1.2.2.1.8.10', Integer(1)),
            VarBind('1.3.6.1.2.1.2.2.1.9.1', TimeTicks(0)),
            VarBind('1.3.6.1.2.1.2.2.1.9.10', TimeTicks(0)),
            VarBind('1.3.6.1.2.1.2.2.1.10.1', Counter(172)),
            VarBind('1.3.6.1.2.1.2.2.1.10.10', Counter(60558)),
            VarBind('1.3.6.1.2.1.2.2.1.11.1', Counter(2)),
            VarBind('1.3.6.1.2.1.2.2.1.11.10', Counter(564)),
            VarBind('1.3.6.1.2.1.2.2.1.12.1', Counter(0)),
            VarBind('1.3.6.1.2.1.2.2.1.12.10', Counter(0)),
            VarBind('1.3.6.1.2.1.2.2.1.13.1', Counter(0)),
            VarBind('1.3.6.1.2.1.2.2.1.13.10', Counter(0)),
            VarBind('1.3.6.1.2.1.2.2.1.14.1', Counter(0)),
            VarBind('1.3.6.1.2.1.2.2.1.14.10', Counter(0)),
            VarBind('1.3.6.1.2.1.2.2.1.15.1', Counter(0)),
            VarBind('1.3.6.1.2.1.2.2.1.15.10', Counter(0)),
            VarBind('1.3.6.1.2.1.2.2.1.16.1', Counter(172)),
            VarBind('1.3.6.1.2.1.2.2.1.16.10', Counter(44295)),
            VarBind('1.3.6.1.2.1.2.2.1.17.1', Counter(2)),
            VarBind('1.3.6.1.2.1.2.2.1.17.10', Counter(442)),
            VarBind('1.3.6.1.2.1.2.2.1.18.1', Counter(0)),
            VarBind('1.3.6.1.2.1.2.2.1.18.10', Counter(0)),
            VarBind('1.3.6.1.2.1.2.2.1.19.1', Counter(0)),
            VarBind('1.3.6.1.2.1.2.2.1.19.10', Counter(0)),
            VarBind('1.3.6.1.2.1.2.2.1.20.1', Counter(0)),
            VarBind('1.3.6.1.2.1.2.2.1.20.10', Counter(0)),
            VarBind('1.3.6.1.2.1.2.2.1.21.1', Gauge(0)),
            VarBind('1.3.6.1.2.1.2.2.1.21.10', Gauge(0)),
            VarBind('1.3.6.1.2.1.2.2.1.22.1', ObjectIdentifier(0, 0)),
            VarBind('1.3.6.1.2.1.2.2.1.22.10', ObjectIdentifier(0, 0))
        ]
        self.assertEqual(result, expected)
Exemple #18
0
    def test_traps(self):
        data_generator = readbytes_multiple("trap_requests.hex")

        def socket_response_generator():
            for blob in data_generator:
                yield SocketResponse(blob, SocketInfo("192.0.2.1", 64001))

        expected = [
            VarBind(ObjectIdentifier((1, 3, 6, 1, 2, 1, 1, 3, 0)),
                    TimeTicks(794602)),
            VarBind(ObjectIdentifier((1, 3, 6, 1, 6, 3, 1, 1, 4, 1, 0)),
                    ObjectIdentifier((1, 3, 6, 1, 4, 1, 8072, 2, 3, 0, 1))),
            VarBind(ObjectIdentifier((1, 3, 6, 1, 4, 1, 8072, 2, 3, 2, 1)),
                    Integer(123456)),
            VarBind(ObjectIdentifier((1, 3, 6, 1, 2, 1, 1, 3, 0)),
                    TimeTicks(795345)),
            VarBind(ObjectIdentifier((1, 3, 6, 1, 6, 3, 1, 1, 4, 1, 0)),
                    ObjectIdentifier((1, 3, 6, 1, 4, 1, 8072, 2, 3, 0, 1))),
            VarBind(ObjectIdentifier((1, 3, 6, 1, 4, 1, 8072, 2, 3, 2, 1)),
                    Integer(123457)),
            VarBind(ObjectIdentifier((1, 3, 6, 1, 2, 1, 1, 3, 0)),
                    TimeTicks(795538)),
            VarBind(ObjectIdentifier((1, 3, 6, 1, 6, 3, 1, 1, 4, 1, 0)),
                    ObjectIdentifier((1, 3, 6, 1, 4, 1, 8072, 2, 3, 0, 1))),
            VarBind(ObjectIdentifier((1, 3, 6, 1, 4, 1, 8072, 2, 3, 2, 1)),
                    Integer(123459)),
        ]
        result = []
        with patch('puresnmp.api.raw.Transport') as mck:
            mck().listen.return_value = socket_response_generator()
            for trap in traps():
                result.extend(trap.varbinds)
        self.assertEqual(result, expected)
Exemple #19
0
 def test_traps(self):
     data_generator = readbytes_multiple('trap_requests.hex')
     expected = [
         VarBind(ObjectIdentifier((1, 3, 6, 1, 2, 1, 1, 3, 0)),
                 TimeTicks(794602)),
         VarBind(ObjectIdentifier((1, 3, 6, 1, 6, 3, 1, 1, 4, 1, 0)),
                 ObjectIdentifier((1, 3, 6, 1, 4, 1, 8072, 2, 3, 0, 1))),
         VarBind(ObjectIdentifier((1, 3, 6, 1, 4, 1, 8072, 2, 3, 2, 1)),
                 Integer(123456)),
         VarBind(ObjectIdentifier((1, 3, 6, 1, 2, 1, 1, 3, 0)),
                 TimeTicks(795345)),
         VarBind(ObjectIdentifier((1, 3, 6, 1, 6, 3, 1, 1, 4, 1, 0)),
                 ObjectIdentifier((1, 3, 6, 1, 4, 1, 8072, 2, 3, 0, 1))),
         VarBind(ObjectIdentifier((1, 3, 6, 1, 4, 1, 8072, 2, 3, 2, 1)),
                 Integer(123457)),
         VarBind(ObjectIdentifier((1, 3, 6, 1, 2, 1, 1, 3, 0)),
                 TimeTicks(795538)),
         VarBind(ObjectIdentifier((1, 3, 6, 1, 6, 3, 1, 1, 4, 1, 0)),
                 ObjectIdentifier((1, 3, 6, 1, 4, 1, 8072, 2, 3, 0, 1))),
         VarBind(ObjectIdentifier((1, 3, 6, 1, 4, 1, 8072, 2, 3, 2, 1)),
                 Integer(123459)),
     ]
     result = []
     with patch('puresnmp.api.raw.Transport') as mck:
         mck().listen.return_value = data_generator
         for trap in traps():
             result.extend(trap.varbinds)
     self.assertEqual(result, expected)
Exemple #20
0
    async def test_bulktable(self):
        responses = readbytes_multiple('bulktable_response.hex')

        expected = [{
            '0': '1',
            '1': Integer(1),
            '2': OctetString(b'lo'),
            '3': Integer(24),
            '4': Integer(65536),
            '5': Gauge(10000000),
            '6': OctetString(b''),
            '7': Integer(1),
            '8': Integer(1),
            '9': TimeTicks(0),
            '10': Counter(172),
            '11': Counter(2),
            '12': Counter(0),
            '13': Counter(0),
            '14': Counter(0),
            '15': Counter(0),
            '16': Counter(172),
            '17': Counter(2),
            '18': Counter(0),
            '19': Counter(0),
            '20': Counter(0),
            '21': Gauge(0),
            '22': ObjectIdentifier(0, 0),
        }, {
            '0': '4',
            '1': Integer(4),
            '2': OctetString(b'eth0'),
            '3': Integer(6),
            '4': Integer(1500),
            '5': Gauge(4294967295),
            '6': OctetString(b'\x02B\xac\x11\x00\x02'),
            '7': Integer(1),
            '8': Integer(1),
            '9': TimeTicks(0),
            '10': Counter(548760),
            '11': Counter(3888),
            '12': Counter(0),
            '13': Counter(0),
            '14': Counter(0),
            '15': Counter(0),
            '16': Counter(186660),
            '17': Counter(1875),
            '18': Counter(0),
            '19': Counter(0),
            '20': Counter(0),
            '21': Gauge(0),
            '22': ObjectIdentifier(0, 0),
        }]

        with patch('puresnmp.aio.api.raw.Transport') as mck:
            mck().send = AsyncMock()
            mck().send.side_effect = responses
            mck().get_request_id.return_value = 0
            result = []
            table = await bulktable('127.0.0.1', 'private', '1.3.6.1.2.1.2.2')
            for row in table:
                result.append(row)
        assert sorted(result, key=lambda x: x['0']) == expected