Ejemplo n.º 1
0
    def test_multiwalk(self):
        response_1 = readbytes('apiv1/multiwalk_response_1.hex')
        response_2 = readbytes('apiv1/multiwalk_response_2.hex')
        response_3 = readbytes('apiv1/multiwalk_response_3.hex')

        self.transport.send.side_effect = [
            response_1,
            response_2,
            response_3,
        ]
        result = snmp.multiwalk('127.0.0.1', 'private', [
            '1.3.6.1.2.1.2.2.1.1',
            '1.3.6.1.2.1.1.2.1',
        ])
        expected = [
            VarBind(OID('1.3.6.1.2.1.2.2.1.1.1'), 1),
            VarBind(OID('1.3.6.1.2.1.2.2.1.1.6'), 6),
        ]
        result = list(result)
        self.assertEqual(result, expected)

        expected_types = [
            (ObjectIdentifier, int),
            (ObjectIdentifier, int),
        ]
        returned_values = [(row.oid, row.value) for row in result]
        assert_of_types(returned_values, expected_types)
Ejemplo n.º 2
0
 def test_table_base_oid(self, mck_walk):
     """
     The "table" function should be capable of detecting the
     "num_base_nodes" value by itself
     """
     mck_walk.return_value = [
         VarBind('1.2.1.1.1.1.1', OctetString(b'row 1.1.1 col 1')),
         VarBind('1.2.1.1.2.1.1', OctetString(b'row 2.1.1 col 1')),
         VarBind('1.2.1.2.1.1.1', OctetString(b'row 1.1.1 col 2')),
         VarBind('1.2.1.2.2.1.1', OctetString(b'row 2.1.1 col 2')),
     ]
     result = table('192.0.2.1', 'private', '1.2')
     expected = [
         {
             '0': '1.1.1',
             '1': OctetString('row 1.1.1 col 1'),
             '2': OctetString('row 1.1.1 col 2')
         },
         {
             '0': '2.1.1',
             '1': OctetString('row 2.1.1 col 1'),
             '2': OctetString('row 2.1.1 col 2')
         },
     ]
     self.assertEqual(sorted(result, key=lambda x: x['0']), expected)
Ejemplo n.º 3
0
    def test_walk(self):
        response_1 = readbytes('walk_response_1.hex')
        response_2 = readbytes('walk_response_2.hex')
        response_3 = readbytes('walk_response_3.hex')

        num_call = 0

        def mocked_responses(*args, **kwargs):
            nonlocal num_call
            num_call += 1
            if num_call == 1:
                return response_1
            elif num_call == 2:
                return response_2
            elif num_call == 3:
                return response_3
            else:
                raise AssertionError('Expected no more than 3 calls!')

        expected = [
            VarBind(ObjectIdentifier.from_string('1.3.6.1.2.1.2.2.1.5.1'),
                    10000000),
            VarBind(ObjectIdentifier.from_string('1.3.6.1.2.1.2.2.1.5.13'),
                    4294967295)
        ]

        with patch('puresnmp.send') as mck:
            mck.side_effect = mocked_responses
            result = list(walk('::1', 'public', '1.3.6.1.2.1.2.2.1.5'))
        self.assertEqual(result, expected)
Ejemplo n.º 4
0
    async def test_multi_walk(self):
        response_1 = readbytes('multiwalk_response_1.hex')
        response_2 = readbytes('multiwalk_response_2.hex')
        response_3 = readbytes('multiwalk_response_3.hex')

        expected = [VarBind(
            ObjectIdentifier.from_string('1.3.6.1.2.1.2.2.1.1.1'), Integer(1)
        ), VarBind(
            ObjectIdentifier.from_string('1.3.6.1.2.1.2.2.1.2.1'),
            OctetString(b'lo')
        ), VarBind(
            ObjectIdentifier.from_string('1.3.6.1.2.1.2.2.1.1.78'), Integer(78)
        ), VarBind(
            ObjectIdentifier.from_string('1.3.6.1.2.1.2.2.1.2.78'),
            OctetString(b'eth0')
        )]

        with patch('puresnmp.aio.api.raw.Transport') as mck:
            mck().send = AsyncMock()
            mck().get_request_id.return_value = 0
            mck().send.side_effect = [response_1, response_2, response_3]
            result = []
            async for x in multiwalk('::1', 'public', [
                '1.3.6.1.2.1.2.2.1.1',
                '1.3.6.1.2.1.2.2.1.2'
            ]):
                result.append(x)
        # TODO (advanced): should order matter in the following result?
        assert len(result) == len(expected)
Ejemplo n.º 5
0
    def test_getnext(self):
        expected = VarBind('1.3.6.1.6.3.1.1.6.1.0', 354522558)

        with patch('puresnmp.api.pythonic.raw') as mck:
            mck.multigetnext.return_value = [
                VarBind('1.3.6.1.6.3.1.1.6.1.0', Integer(354522558))
            ]
            result = getnext('::1', 'private', '1.3.6.1.5')
        self.assertEqual(result, expected)
    async def test_getnext(self):
        expected = VarBind('1.3.6.1.6.3.1.1.6.1.0', 354522558)

        with patch('puresnmp.aio.api.pythonic.raw', new_callable=AsyncMock) as mck:
            mck.multigetnext.return_value = [
                VarBind('1.3.6.1.6.3.1.1.6.1.0', Integer(354522558))
            ]
            result = await getnext('::1', 'private', '1.3.6.1.5')
        assert result == expected
Ejemplo n.º 7
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)
Ejemplo n.º 8
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)
Ejemplo n.º 9
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
Ejemplo n.º 10
0
    async def test_multi_walk(self):
        expected = [
            VarBind('1.3.6.1.2.1.2.2.1.1.1', 1),
            VarBind('1.3.6.1.2.1.2.2.1.2.1', b'lo'),
            VarBind('1.3.6.1.2.1.2.2.1.1.78', 78),
            VarBind('1.3.6.1.2.1.2.2.1.2.78', b'eth0')
        ]

        with patch('puresnmp.aio.api.pythonic.raw',
                   new_callable=AsyncGenMock) as mck:
            mck.multiwalk.return_value = [
                VarBind(ObjectIdentifier.from_string('1.3.6.1.2.1.2.2.1.1.1'),
                        1),
                VarBind(ObjectIdentifier.from_string('1.3.6.1.2.1.2.2.1.2.1'),
                        b'lo'),
                VarBind(ObjectIdentifier.from_string('1.3.6.1.2.1.2.2.1.1.78'),
                        78),
                VarBind(ObjectIdentifier.from_string('1.3.6.1.2.1.2.2.1.2.78'),
                        b'eth0')
            ]
            result = []
            async for x in multiwalk(
                    '::1', 'public',
                ['1.3.6.1.2.1.2.2.1.1', '1.3.6.1.2.1.2.2.1.2']):
                result.append(x)
        # TODO (advanced): should order matter in the following result?
        assert len(result) == len(expected)
Ejemplo n.º 11
0
    def test_multi_walk(self):
        expected = [
            VarBind('1.3.6.1.2.1.2.2.1.1.1', 1),
            VarBind('1.3.6.1.2.1.2.2.1.2.1', b'lo'),
            VarBind('1.3.6.1.2.1.2.2.1.1.78', 78),
            VarBind('1.3.6.1.2.1.2.2.1.2.78', b'eth0')
        ]

        with patch('puresnmp.api.pythonic.raw') as mck:
            mck.multiwalk.return_value = [
                VarBind(
                    ObjectIdentifier.from_string('1.3.6.1.2.1.2.2.1.1.1'),
                    1,
                ),
                VarBind(ObjectIdentifier.from_string('1.3.6.1.2.1.2.2.1.2.1'),
                        b'lo'),
                VarBind(ObjectIdentifier.from_string('1.3.6.1.2.1.2.2.1.1.78'),
                        78),
                VarBind(ObjectIdentifier.from_string('1.3.6.1.2.1.2.2.1.2.78'),
                        b'eth0')
            ]
            result = list(
                multiwalk('::1', 'public',
                          ['1.3.6.1.2.1.2.2.1.1', '1.3.6.1.2.1.2.2.1.2']))
        # TODO (advanced): should order matter in the following result?
        six.assertCountEqual(self, result, expected)
Ejemplo n.º 12
0
    def test_walk(self):
        expected = [
            VarBind('1.3.6.1.2.1.2.2.1.5.1', 10000000),
            VarBind('1.3.6.1.2.1.2.2.1.5.13', 4294967295)
        ]

        with patch('puresnmp.api.pythonic.raw') as mck:
            mck.walk.return_value = [
                VarBind(ObjectIdentifier.from_string('1.3.6.1.2.1.2.2.1.5.1'),
                        Gauge(10000000)),
                VarBind(ObjectIdentifier.from_string('1.3.6.1.2.1.2.2.1.5.13'),
                        Integer(4294967295))
            ]
            result = list(walk('::1', 'public', '1.3.6.1.2.1.2.2.1.5'))
        self.assertEqual(result, expected)
Ejemplo n.º 13
0
 async def test_table(self):
     with patch('puresnmp.aio.api.pythonic.raw', new_callable=AsyncGenMock) as mck:
         oid = ObjectIdentifier.from_string
         mck.walk.return_value = [
             VarBind(oid('1.2.1.1'), OctetString(b'test-11')),
             VarBind(oid('1.2.2.1'), OctetString(b'test-21')),
             VarBind(oid('1.2.1.2'), OctetString(b'test-21')),
             VarBind(oid('1.2.2.2'), OctetString(b'test-22')),
         ]
         result = await table('1.2.3.4', 'private', ['1.2'])
     expected = [
         {'0': '1', '1': b'test-11', '2': b'test-21'},
         {'0': '2', '1': b'test-21', '2': b'test-22'},
     ]
     assert len(result) == len(expected)
Ejemplo n.º 14
0
    def test_walk(self):
        response_1 = readbytes('walk_response_1.hex')
        response_2 = readbytes('walk_response_2.hex')
        response_3 = readbytes('walk_response_3.hex')

        expected = [
            VarBind(ObjectIdentifier.from_string('1.3.6.1.2.1.2.2.1.5.1'),
                    Gauge(10000000)),
            VarBind(ObjectIdentifier.from_string('1.3.6.1.2.1.2.2.1.5.13'),
                    Gauge(4294967295))
        ]

        with patch('puresnmp.api.raw.send') as mck:
            mck.side_effect = [response_1, response_2, response_3]
            result = list(walk('::1', 'public', '1.3.6.1.2.1.2.2.1.5'))
        self.assertEqual(result, expected)
Ejemplo n.º 15
0
    async def test_getnext(self):
        data = readbytes('getnext_response.hex')
        expected = VarBind('1.3.6.1.6.3.1.1.6.1.0', Integer(354522558))

        with patch('puresnmp.aio.api.raw.send', new_callable=AsyncMock) as mck:
            mck.return_value = data
            result = await getnext('::1', 'private', '1.3.6.1.5')
        assert result == expected
Ejemplo n.º 16
0
    def test_getnext(self):
        data = readbytes('getnext_response.hex')
        expected = VarBind('1.3.6.1.6.3.1.1.6.1.0', Integer(354522558))

        with patch('puresnmp.api.raw.send') as mck:
            mck.return_value = data
            result = getnext('::1', 'private', '1.3.6.1.5')
        self.assertEqual(result, expected)
Ejemplo n.º 17
0
    def test_walk(self):
        responses = readbytes_multiple('apiv1/walk_response.hex')
        self.transport.send.side_effect = responses
        result = snmp.walk('127.0.0.1', 'private', '1.3.6.1.2.1.2.2.1.1')
        result = list(result)
        expected = [
            VarBind(oid=OID('1.3.6.1.2.1.2.2.1.1.1'), value=1),
            VarBind(oid=OID('1.3.6.1.2.1.2.2.1.1.12'), value=12)
        ]
        six.assertCountEqual(self, result, expected)
        self.assertEqual(self.transport.send.call_count, 3)

        expected_types = [
            (ObjectIdentifier, int),
            (ObjectIdentifier, int),
        ]
        returned_values = [(row.oid, row.value) for row in result]
        assert_of_types(returned_values, expected_types)
Ejemplo n.º 18
0
 def test_multigetnext(self):
     response = readbytes('apiv1/multigetnext_response.hex')
     self.transport.send.return_value = response
     result = snmp.multigetnext('192.168.1.1', 'private',
                                ['1.3.6.1.2.1.3.1.1', '1.3.6.1.2.1.4'])
     expected = [
         VarBind(OID('1.3.6.1.2.1.3.1.1.1.12.1.172.17.0.1'), 12),
         VarBind(OID('1.3.6.1.2.1.4.1.0'), 1)
     ]
     self.assertEqual(result, expected)
     self.assertTrue(self.transport.send.called, 'method was not called')
     expected_types = [
         (ObjectIdentifier, int),
         (ObjectIdentifier, int),
     ]
     returned_values = [(row.oid, row.value) for row in result]
     returned_types = [(type(row.oid), type(row.value)) for row in result]
     assert_of_types(returned_values, expected_types)
Ejemplo n.º 19
0
    async def test_walk(self):
        expected = [
            VarBind('1.3.6.1.2.1.2.2.1.5.1', 10000000),
            VarBind('1.3.6.1.2.1.2.2.1.5.13', 4294967295)
        ]

        with patch('puresnmp.aio.api.pythonic.raw',
                   new_callable=AsyncGenMock) as mck:
            mck.walk.return_value = [
                VarBind(ObjectIdentifier.from_string('1.3.6.1.2.1.2.2.1.5.1'),
                        Gauge(10000000)),
                VarBind(ObjectIdentifier.from_string('1.3.6.1.2.1.2.2.1.5.13'),
                        Integer(4294967295))
            ]
            result = []
            async for x in walk('::1', 'public', '1.3.6.1.2.1.2.2.1.5'):
                result.append(x)
        assert result == expected
Ejemplo n.º 20
0
    async def test_walk(self):
        response_1 = readbytes('walk_response_1.hex')
        response_2 = readbytes('walk_response_2.hex')
        response_3 = readbytes('walk_response_3.hex')

        expected = [
            VarBind(ObjectIdentifier.from_string('1.3.6.1.2.1.2.2.1.5.1'),
                    Gauge(10000000)),
            VarBind(ObjectIdentifier.from_string('1.3.6.1.2.1.2.2.1.5.13'),
                    Gauge(4294967295))
        ]

        with patch('puresnmp.aio.api.raw.send', new_callable=AsyncMock) as mck:
            mck.side_effect = [response_1, response_2, response_3]
            result = []
            async for x in walk('::1', 'public', '1.3.6.1.2.1.2.2.1.5'):
                result.append(x)
        assert result == expected
Ejemplo n.º 21
0
 def test_getnext(self):
     response = readbytes('apiv1/getnext_response.hex')
     self.transport.send.return_value = response
     result = snmp.getnext('192.168.1.1', 'private', '1.3.6.1.2.1.1.6.0',
                           port=161, timeout=1)
     expected = VarBind(OID('1.3.6.1.2.1.1.7.0'), 72)
     self.assertEqual(result, expected)
     self.assertTrue(self.transport.send.called, 'method was not called')
     self.assertIsInstance(result.oid, ObjectIdentifier)
     self.assertIsInstance(result.value, int)
Ejemplo n.º 22
0
    async def test_getnext(self):
        data = readbytes('getnext_response.hex')
        expected = VarBind('1.3.6.1.6.3.1.1.6.1.0', Integer(354522558))

        with patch('puresnmp.aio.api.raw.Transport') as mck:
            mck().send = AsyncMock()
            mck().get_request_id.return_value = 0
            mck().send.return_value = data
            result = await getnext('::1', 'private', '1.3.6.1.5')
        assert result == expected
Ejemplo n.º 23
0
    async def test_walk(self):
        response_1 = readbytes('walk_response_1.hex')
        response_2 = readbytes('walk_response_2.hex')
        response_3 = readbytes('walk_response_3.hex')

        expected = [
            VarBind(ObjectIdentifier.from_string('1.3.6.1.2.1.2.2.1.5.1'),
                    Gauge(10000000)),
            VarBind(ObjectIdentifier.from_string('1.3.6.1.2.1.2.2.1.5.13'),
                    Gauge(4294967295))
        ]

        with patch('puresnmp.aio.api.raw.Transport') as mck:
            mck().send = AsyncMock()
            mck().send.side_effect = [response_1, response_2, response_3]
            mck().get_request_id.return_value = 0
            result = []
            async for x in walk('::1', 'public', '1.3.6.1.2.1.2.2.1.5'):
                result.append(x)
        assert result == expected
Ejemplo n.º 24
0
 def test_table_complex_row_id(self, mck_walk):
     mck_walk.return_value = [
         VarBind('1.2.1.1.1.1', OctetString(b'row 1.1.1 col 1')),
         VarBind('1.2.1.2.1.1', OctetString(b'row 2.1.1 col 1')),
         VarBind('1.2.2.1.1.1', OctetString(b'row 1.1.1 col 2')),
         VarBind('1.2.2.2.1.1', OctetString(b'row 2.1.1 col 2')),
     ]
     result = table('192.0.2.1', 'private', '1.2', num_base_nodes=2)
     expected = [
         {
             '0': '1.1.1',
             '1': OctetString('row 1.1.1 col 1'),
             '2': OctetString('row 1.1.1 col 2')
         },
         {
             '0': '2.1.1',
             '1': OctetString('row 2.1.1 col 1'),
             '2': OctetString('row 2.1.1 col 2')
         },
     ]
     self.assertEqual(sorted(result, key=lambda x: x['0']), expected)
Ejemplo n.º 25
0
    def test_multi_walk(self):
        response_1 = readbytes('multiwalk_response_1.hex')
        response_2 = readbytes('multiwalk_response_2.hex')
        response_3 = readbytes('multiwalk_response_3.hex')

        expected = [
            VarBind(ObjectIdentifier.from_string('1.3.6.1.2.1.2.2.1.1.1'), 1),
            VarBind(ObjectIdentifier.from_string('1.3.6.1.2.1.2.2.1.2.1'),
                    b'lo'),
            VarBind(ObjectIdentifier.from_string('1.3.6.1.2.1.2.2.1.1.78'),
                    78),
            VarBind(ObjectIdentifier.from_string('1.3.6.1.2.1.2.2.1.2.78'),
                    b'eth0')
        ]

        with patch('puresnmp.send') as mck:
            mck.side_effect = [response_1, response_2, response_3]
            result = list(
                multiwalk('::1', 'public',
                          ['1.3.6.1.2.1.2.2.1.1', '1.3.6.1.2.1.2.2.1.2']))
        # TODO (advanced): should order matter in the following result?
        self.assertCountEqual(result, expected)
Ejemplo n.º 26
0
    def test_multiwalk_non_containment(self):
        '''
        Running a multiwalk should raise an exception if the agent returns OIDs
        which are not properly increasing.
        '''
        from puresnmp.pdu import GetResponse
        OID = ObjectIdentifier.from_string

        # First case: Returned OIDs are the same
        response = Sequence(
            Integer(1), OctetString(b'public'),
            GetResponse(123, [
                VarBind(oid=OID('1.2.3'), value=Integer(30)),
                VarBind(oid=OID('2.3.4'), value=Integer(40)),
            ]))
        with patch('puresnmp.api.raw.Transport') as mck:
            mck().send.side_effect = [to_bytes(response)]
            mck().get_request_id.return_value = 0
            with self.assertRaises(FaultySNMPImplementation):
                list(multiwalk('::1', 'public', [
                    '1.2.3',
                    '2.3.4',
                ]))

        # Second case: Returned OIDs are smaller
        response = Sequence(
            Integer(1), OctetString(b'public'),
            GetResponse(123, [
                VarBind(oid=OID('1.2.2'), value=Integer(30)),
                VarBind(oid=OID('2.3.3'), value=Integer(40)),
            ]))
        with patch('puresnmp.api.raw.Transport') as mck:
            mck().send.side_effect = [to_bytes(response)]
            mck().get_request_id.return_value = 0
            with self.assertRaises(FaultySNMPImplementation):
                list(multiwalk('::1', 'public', [
                    '1.2.3',
                    '2.3.4',
                ]))
Ejemplo n.º 27
0
    def test_multi_walk(self):
        response_1 = readbytes('multiwalk_response_1.hex')
        response_2 = readbytes('multiwalk_response_2.hex')
        response_3 = readbytes('multiwalk_response_3.hex')

        expected = [
            VarBind(ObjectIdentifier.from_string('1.3.6.1.2.1.2.2.1.1.1'),
                    Integer(1)),
            VarBind(ObjectIdentifier.from_string('1.3.6.1.2.1.2.2.1.2.1'),
                    OctetString(b'lo')),
            VarBind(ObjectIdentifier.from_string('1.3.6.1.2.1.2.2.1.1.78'),
                    Integer(78)),
            VarBind(ObjectIdentifier.from_string('1.3.6.1.2.1.2.2.1.2.78'),
                    OctetString(b'eth0'))
        ]

        with patch('puresnmp.api.raw.send') as mck:
            mck.side_effect = [response_1, response_2, response_3]
            result = list(
                multiwalk('::1', 'public',
                          ['1.3.6.1.2.1.2.2.1.1', '1.3.6.1.2.1.2.2.1.2']))
        self.assertEqual(result, expected)
Ejemplo n.º 28
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)
Ejemplo n.º 29
0
 def test_table(self):
     with patch('puresnmp.api.pythonic.raw') as mck:
         oid = ObjectIdentifier.from_string
         mck.walk.return_value = [
             VarBind(oid('1.2.1.1'), OctetString(b'test-11')),
             VarBind(oid('1.2.2.1'), OctetString(b'test-21')),
             VarBind(oid('1.2.1.2'), OctetString(b'test-21')),
             VarBind(oid('1.2.2.2'), OctetString(b'test-22')),
         ]
         result = table('1.2.3.4', 'private', ['1.2'])
     expected = [
         {
             '0': '1',
             '1': b'test-11',
             '2': b'test-21'
         },
         {
             '0': '2',
             '1': b'test-21',
             '2': b'test-22'
         },
     ]
     six.assertCountEqual(self, result, expected)
Ejemplo n.º 30
0
    def test_bulkwalk(self):
        response = readbytes_multiple('apiv1/bulkwalk_response.hex')
        self.transport.send.side_effect = response
        result = list(snmp.bulkwalk('192.168.1.1', 'private', [
            '1.3.6.1.2.1.1.9.1.4']))

        expected = [
            VarBind(OID('1.3.6.1.2.1.1.9.1.4.1'), datetime.timedelta(0)),
            VarBind(OID('1.3.6.1.2.1.1.9.1.4.2'), datetime.timedelta(0)),
            VarBind(OID('1.3.6.1.2.1.1.9.1.4.3'), datetime.timedelta(0)),
            VarBind(OID('1.3.6.1.2.1.1.9.1.4.4'), datetime.timedelta(0)),
            VarBind(OID('1.3.6.1.2.1.1.9.1.4.5'), datetime.timedelta(0)),
            VarBind(OID('1.3.6.1.2.1.1.9.1.4.6'), datetime.timedelta(0)),
            VarBind(OID('1.3.6.1.2.1.1.9.1.4.7'), datetime.timedelta(0)),
            VarBind(OID('1.3.6.1.2.1.1.9.1.4.8'), datetime.timedelta(0)),
            VarBind(OID('1.3.6.1.2.1.1.9.1.4.9'), datetime.timedelta(0)),
            VarBind(OID('1.3.6.1.2.1.1.9.1.4.10'), datetime.timedelta(0))
        ]

        self.assertEqual(result, expected)
        self.assertTrue(self.transport.send.called, 'method was not called')
        expected_types = [(ObjectIdentifier, datetime.timedelta)] * 10
        returned_values = [(row.oid, row.value) for row in result]
        assert_of_types(returned_values, expected_types)