File: test_v1_walk.py

package info (click to toggle)
python-pysnmp4 7.1.21-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 3,564 kB
  • sloc: python: 33,654; makefile: 166; javascript: 4
file content (126 lines) | stat: -rw-r--r-- 4,622 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
import pytest
from pysnmp.hlapi.v3arch.asyncio import *
from pysnmp.smi.builder import MibBuilder
from pysnmp.smi.view import MibViewController
from tests.agent_context import AGENT_PORT, AgentContextManager

total_count = 212  # 267


@pytest.mark.asyncio
async def test_v1_walk():
    async with AgentContextManager():
        with SnmpEngine() as snmpEngine:
            objects = walk_cmd(
                snmpEngine,
                CommunityData("public", mpModel=0),
                await UdpTransportTarget.create(("localhost", AGENT_PORT)),
                ContextData(),
                ObjectType(ObjectIdentity("SNMPv2-MIB", "sysDescr", 0)),
            )

            objects_list = [item async for item in objects]

            errorIndication, errorStatus, errorIndex, varBinds = objects_list[0]

            assert errorIndication is None
            assert errorStatus == 0
            assert len(varBinds) == 1
            assert varBinds[0][0].prettyPrint() == "SNMPv2-MIB::sysObjectID.0"

            errorIndication, errorStatus, errorIndex, varBinds = objects_list[1]

            assert errorIndication is None
            assert errorStatus == 0
            assert len(varBinds) == 1
            assert varBinds[0][0].prettyPrint() == "SNMPv2-MIB::sysUpTime.0"

            assert len(objects_list) == total_count


@pytest.mark.asyncio
async def test_v1_walk_mib():
    async with AgentContextManager():
        mib_builder = MibBuilder()
        mib_view_controller = MibViewController(mib_builder)
        mib_builder.load_modules(
            "SNMP-COMMUNITY-MIB",
            "PYSNMP-MIB",
            "PYSNMP-USM-MIB",
            "SNMP-VIEW-BASED-ACM-MIB",
        )

        with SnmpEngine() as snmpEngine:
            snmpEngine.cache["mibViewController"] = mib_view_controller
            objects = walk_cmd(
                snmpEngine,
                CommunityData("public", mpModel=0),
                await UdpTransportTarget.create(("localhost", AGENT_PORT)),
                ContextData(),
                ObjectType(ObjectIdentity("SNMPv2-MIB", "sysDescr", 0)),
            )

            objects_list = [item async for item in objects]

            errorIndication, errorStatus, errorIndex, varBinds = objects_list[0]

            assert errorIndication is None
            assert errorStatus == 0
            assert len(varBinds) == 1
            assert varBinds[0][0].prettyPrint() == "SNMPv2-MIB::sysObjectID.0"

            errorIndication, errorStatus, errorIndex, varBinds = objects_list[1]

            assert errorIndication is None
            assert errorStatus == 0
            assert len(varBinds) == 1
            assert varBinds[0][0].prettyPrint() == "SNMPv2-MIB::sysUpTime.0"

            assert len(objects_list) == total_count

            errorIndication, errorStatus, errorIndex, varBinds = objects_list[-1]
            assert (
                varBinds[0][0].prettyPrint()
                == 'SNMP-COMMUNITY-MIB::snmpCommunityStatus."public"'
            )

            for errorIndication, errorStatus, errorIndex, varBinds in objects_list:
                content = varBinds[0][0].prettyPrint()
                if (
                    not content.startswith("PYSNMP-USM-MIB::")
                    and not content.startswith("SNMP-USER-BASED-SM-MIB::")
                    and not content.startswith("SNMP-VIEW-BASED-ACM-MIB::")
                ):
                    assert content.count(".") == 1  # fully resolved.


@pytest.mark.asyncio
async def test_v1_walk_subtree():
    async with AgentContextManager():
        with SnmpEngine() as snmpEngine:
            objects = walk_cmd(
                snmpEngine,
                CommunityData("public", mpModel=0),
                await UdpTransportTarget.create(("localhost", AGENT_PORT)),
                ContextData(),
                ObjectType(ObjectIdentity("SNMPv2-MIB", "system")),
                lexicographicMode=False,
            )

            objects_list = [item async for item in objects]

            errorIndication, errorStatus, errorIndex, varBinds = objects_list[0]

            assert errorIndication is None
            assert errorStatus == 0
            assert len(varBinds) == 1
            assert varBinds[0][0].prettyPrint() == "SNMPv2-MIB::sysDescr.0"

            errorIndication, errorStatus, errorIndex, varBinds = objects_list[1]

            assert errorIndication is None
            assert errorStatus == 0
            assert len(varBinds) == 1
            assert varBinds[0][0].prettyPrint() == "SNMPv2-MIB::sysObjectID.0"

            assert len(objects_list) == 8