mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-03 13:01:59 +00:00
tests: Add some test cases for snmp
Noticed that we were not really attempting to even test large swaths of our snmp infrastructure. Let's load up some very simple configs for those daemons that FRR supports and ensure that SNMP is working to some extent. Signed-off-by: Donald Sharp <sharpd@nvidia.com>
This commit is contained in:
parent
a92854047b
commit
04361b3059
@ -104,12 +104,16 @@ class SnmpTester(object):
|
||||
return None
|
||||
return self._get_snmp_value(result)
|
||||
|
||||
def walk(self, oid):
|
||||
def walk(self, oid, raw=False):
|
||||
cmd = "snmpwalk {0} {1} 2>&1 | grep -v SNMPv2-PDU".format(
|
||||
self._snmp_config(), oid
|
||||
)
|
||||
|
||||
result = self.router.cmd(cmd)
|
||||
|
||||
if raw:
|
||||
return result
|
||||
|
||||
return self._parse_multiline(result)
|
||||
|
||||
def parse_notif_ipv4(self, notif):
|
||||
|
@ -3,6 +3,8 @@ log stdout debugging
|
||||
! debug isis route-events
|
||||
! debug isis events
|
||||
!
|
||||
agentx
|
||||
!
|
||||
interface r1-eth0
|
||||
ip router isis ISIS1
|
||||
ipv6 router isis ISIS1
|
||||
|
12
tests/topotests/simple_snmp_test/r1/ospf6d.conf
Normal file
12
tests/topotests/simple_snmp_test/r1/ospf6d.conf
Normal file
@ -0,0 +1,12 @@
|
||||
agentx
|
||||
|
||||
int r1-eth0
|
||||
ipv6 ospf6 area 0.0.0.0
|
||||
|
||||
int r1-eth1
|
||||
ipv6 ospf6 area 0.0.0.0
|
||||
int r1-eth2
|
||||
ipv6 ospf6 area 0.0.0.0
|
||||
|
||||
router ospf6
|
||||
redistribute local
|
11
tests/topotests/simple_snmp_test/r1/ospfd.conf
Normal file
11
tests/topotests/simple_snmp_test/r1/ospfd.conf
Normal file
@ -0,0 +1,11 @@
|
||||
agentx
|
||||
|
||||
int r1-eth0
|
||||
ip ospf area 0.0.0.0
|
||||
int r1-eth1
|
||||
ip ospf area 0.0.0.0
|
||||
int r1-eth2
|
||||
ip ospf area 0.0.0.0
|
||||
|
||||
router ospf
|
||||
redistribute local
|
8
tests/topotests/simple_snmp_test/r1/ripd.conf
Normal file
8
tests/topotests/simple_snmp_test/r1/ripd.conf
Normal file
@ -0,0 +1,8 @@
|
||||
!
|
||||
!
|
||||
router rip
|
||||
network 0.0.0.0/0
|
||||
redistribute local
|
||||
!
|
||||
agentx
|
||||
!
|
@ -1,5 +1,7 @@
|
||||
log file zebra.log
|
||||
!
|
||||
agentx
|
||||
!
|
||||
interface r1-eth0
|
||||
ip address 192.168.12.12/24
|
||||
ipv6 address 2000:1:1:12::12/64
|
||||
@ -18,5 +20,4 @@ interface lo
|
||||
ipv6 address 2000:1:1:1::1/128
|
||||
!
|
||||
!
|
||||
!
|
||||
line vty
|
||||
|
@ -24,7 +24,8 @@ sys.path.append(os.path.join(CWD, "../"))
|
||||
# Import topogen and topotest helpers
|
||||
from lib.topogen import Topogen, TopoRouter, get_topogen
|
||||
from lib.snmptest import SnmpTester
|
||||
|
||||
from time import sleep
|
||||
from lib.topolog import logger
|
||||
|
||||
pytestmark = [pytest.mark.bgpd, pytest.mark.isisd, pytest.mark.snmp]
|
||||
|
||||
@ -59,16 +60,35 @@ def setup_module(mod):
|
||||
# For all registered routers, load the zebra configuration file
|
||||
for rname, router in router_list.items():
|
||||
router.load_config(
|
||||
TopoRouter.RD_ZEBRA, os.path.join(CWD, "{}/zebra.conf".format(rname))
|
||||
TopoRouter.RD_ZEBRA,
|
||||
os.path.join(CWD, "{}/zebra.conf".format(rname)),
|
||||
"-M snmp",
|
||||
)
|
||||
router.load_config(
|
||||
TopoRouter.RD_ISIS, os.path.join(CWD, "{}/isisd.conf".format(rname))
|
||||
TopoRouter.RD_ISIS,
|
||||
os.path.join(CWD, "{}/isisd.conf".format(rname)),
|
||||
"-M snmp",
|
||||
)
|
||||
router.load_config(
|
||||
TopoRouter.RD_BGP,
|
||||
os.path.join(CWD, "{}/bgpd.conf".format(rname)),
|
||||
"-M snmp",
|
||||
)
|
||||
router.load_config(
|
||||
TopoRouter.RD_RIP,
|
||||
os.path.join(CWD, "{}/ripd.conf".format(rname)),
|
||||
"-M snmp",
|
||||
)
|
||||
router.load_config(
|
||||
TopoRouter.RD_OSPF,
|
||||
os.path.join(CWD, "{}/ospfd.conf".format(rname)),
|
||||
"-M snmp",
|
||||
)
|
||||
router.load_config(
|
||||
TopoRouter.RD_OSPF6,
|
||||
os.path.join(CWD, "{}/ospf6d.conf".format(rname)),
|
||||
"-M snmp",
|
||||
)
|
||||
router.load_config(
|
||||
TopoRouter.RD_SNMP,
|
||||
os.path.join(CWD, "{}/snmpd.conf".format(rname)),
|
||||
@ -77,6 +97,16 @@ def setup_module(mod):
|
||||
|
||||
# After loading the configurations, this function loads configured daemons.
|
||||
tgen.start_router()
|
||||
# Why this sleep? If you are using zebra w/ snmp we have a chicken
|
||||
# and egg problem with the snmpd. snmpd is being started up with
|
||||
# ip addresses, and as such snmpd may not be ready to listen yet
|
||||
# (see startup stuff in topotest.py ) with the 2 second delay
|
||||
# on starting snmpd after zebra. As such if we want to test
|
||||
# anything in zebra we need to sleep a bit to allow the connection
|
||||
# to happen. I have no good way to test to see if zebra is up
|
||||
# and running with snmp at this point in time. So this will have
|
||||
# to do.
|
||||
sleep(17)
|
||||
|
||||
|
||||
def teardown_module():
|
||||
@ -103,6 +133,22 @@ def test_r1_bgp_version():
|
||||
assert r1_snmp.test_oid_walk("bgpVersion", ["10"])
|
||||
assert r1_snmp.test_oid_walk("bgpVersion", ["10"], ["0"])
|
||||
|
||||
assert r1_snmp.test_oid(
|
||||
"IP-FORWARD-MIB::ipForwardDest.192.168.12.0", "192.168.12.0"
|
||||
)
|
||||
|
||||
assert r1_snmp.test_oid("ISIS-MIB::isisSysVersion", "one(1)")
|
||||
# rip is not auto-loading agentx from mgmtd
|
||||
# assert r1_snmp.test_oid("RIPv2-MIB::rip2GlobalQueries", "0")
|
||||
|
||||
assert r1_snmp.test_oid("OSPF-MIB::ospfVersionNumber", "version2(2)")
|
||||
assert r1_snmp.test_oid("OSPFV3-MIB::ospfv3VersionNumber", "version3(3)")
|
||||
|
||||
# Let's just dump everything and make sure we get some additional test
|
||||
# coverage
|
||||
logger.info("Let's walk everything")
|
||||
logger.info(r1_snmp.walk(".1", raw=True))
|
||||
|
||||
|
||||
def test_memory_leak():
|
||||
"Run the memory leak test and report results."
|
||||
|
Loading…
Reference in New Issue
Block a user