• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# GXRP unit tests
2#
3# Type the following command to launch start the tests:
4# $ test/run_tests -P "load_contrib('gxrp')" -t test/contrib/gxrp.uts
5
6+ GVRP test
7
8= Construction test
9
10pkt = GVRP(vlan=2)
11assert pkt.vlan == 2
12assert pkt == GVRP(raw(pkt))
13
14+ GMRP test
15
16= GMRP_GROUP Construction test
17
18pkt = GMRP_GROUP(addr="01:23:45:67:89:00")
19assert pkt.addr == "01:23:45:67:89:00"
20assert pkt == GMRP_GROUP(raw(pkt))
21
22= GMRP_SERVICE Construction test
23
24pkt = GMRP_SERVICE(event="All Groups")
25assert pkt.event == 0
26pkt = GMRP_SERVICE(event="All Unregistered Groups")
27assert pkt.event == 1
28assert pkt == GMRP_SERVICE(raw(pkt))
29
30+ GARP Attribute test
31
32= GMRP_GROUP Construction test
33
34pkt = GARP_ATTRIBUTE(event='LeaveAll')
35assert pkt.event == 0
36assert GARP_ATTRIBUTE(pkt.build()).len == 2
37assert len(pkt.build()) == 2
38pkt = GARP_ATTRIBUTE(event='JoinEmpty')/GVRP()
39assert pkt.event == 1
40assert GARP_ATTRIBUTE(pkt.build()).len == 4
41assert len(pkt.build()) == 4
42pkt = GARP_ATTRIBUTE(event='JoinIn')/GVRP()
43assert pkt.event == 2
44assert GARP_ATTRIBUTE(pkt.build()).len == 4
45assert len(pkt.build()) == 4
46pkt = GARP_ATTRIBUTE(event='LeaveEmpty')/GVRP()
47assert pkt.event == 3
48assert GARP_ATTRIBUTE(pkt.build()).len == 4
49assert len(pkt.build()) == 4
50pkt = GARP_ATTRIBUTE(event='LeaveIn')/GVRP()
51assert pkt.event == 4
52assert GARP_ATTRIBUTE(pkt.build()).len == 4
53assert len(pkt.build()) == 4
54pkt = GARP_ATTRIBUTE(event='Empty')/GVRP()
55assert pkt.event == 5
56assert GARP_ATTRIBUTE(pkt.build()).len == 4
57assert len(pkt.build()) == 4
58pkt = GARP_ATTRIBUTE(event='JoinEmpty')/GVRP()
59del pkt.payload
60assert pkt == GARP_ATTRIBUTE(event='JoinEmpty')
61assert GARP_ATTRIBUTE(raw(pkt)) == GARP_ATTRIBUTE(raw(GARP_ATTRIBUTE(event='JoinEmpty')))
62assert len(pkt.build()) == 2
63
64= GVRP Stacking test
65
66pkt = Dot3(dst="01:80:c2:00:00:21")/LLC_GARP(dsap=0x42, ssap=0x42, ctrl=3)/GARP(
67    msgs=[GARP_MESSAGE(attrs=[GARP_ATTRIBUTE(event='JoinIn')/GVRP(vlan=1),
68                              GARP_ATTRIBUTE(event='JoinIn')/GVRP(vlan=2)]),
69          GARP_MESSAGE(attrs=[GARP_ATTRIBUTE(event='JoinIn')/GVRP(vlan=3),
70                              GARP_ATTRIBUTE(event='JoinIn')/GVRP(vlan=4)])])
71assert pkt.getlayer(GARP_MESSAGE, 1).getlayer(GARP_ATTRIBUTE, 1)[GVRP].vlan == 1
72assert pkt.getlayer(GARP_MESSAGE, 1).getlayer(GARP_ATTRIBUTE, 2)[GVRP].vlan == 2
73assert pkt.getlayer(GARP_MESSAGE, 2).getlayer(GARP_ATTRIBUTE, 1)[GVRP].vlan == 3
74assert pkt.getlayer(GARP_MESSAGE, 2).getlayer(GARP_ATTRIBUTE, 2)[GVRP].vlan == 4
75pkt = Dot3(pkt.build())
76assert pkt.getlayer(GARP_MESSAGE, 1).getlayer(GARP_ATTRIBUTE, 1)[GVRP].vlan == 1
77assert pkt.getlayer(GARP_MESSAGE, 1).getlayer(GARP_ATTRIBUTE, 2)[GVRP].vlan == 2
78assert pkt.getlayer(GARP_MESSAGE, 2).getlayer(GARP_ATTRIBUTE, 1)[GVRP].vlan == 3
79assert pkt.getlayer(GARP_MESSAGE, 2).getlayer(GARP_ATTRIBUTE, 2)[GVRP].vlan == 4
80
81= GMRP Stacking test
82
83pkt = Dot3(dst="01:80:c2:00:00:20")/LLC_GARP(dsap=0x42, ssap=0x42, ctrl=3)/GARP(
84    msgs=[GARP_MESSAGE(type = 1, attrs=[GARP_ATTRIBUTE(event='JoinIn')/GMRP_GROUP(addr="00:00:00:00:00:01"),
85                                        GARP_ATTRIBUTE(event='JoinIn')/GMRP_GROUP(addr="00:00:00:00:00:02")]),
86          GARP_MESSAGE(type = 2, attrs=[GARP_ATTRIBUTE(event='JoinIn')/GMRP_SERVICE(event="All Groups"),
87                                        GARP_ATTRIBUTE(event='JoinIn')/GMRP_SERVICE(event="All Unregistered Groups")])])
88assert pkt.getlayer(GARP_MESSAGE, 1).getlayer(GARP_ATTRIBUTE, 1)[GMRP_GROUP].addr == "00:00:00:00:00:01"
89assert pkt.getlayer(GARP_MESSAGE, 1).getlayer(GARP_ATTRIBUTE, 2)[GMRP_GROUP].addr == "00:00:00:00:00:02"
90assert pkt.getlayer(GARP_MESSAGE, 2).getlayer(GARP_ATTRIBUTE, 1)[GMRP_SERVICE].event == 0
91assert pkt.getlayer(GARP_MESSAGE, 2).getlayer(GARP_ATTRIBUTE, 2)[GMRP_SERVICE].event == 1
92pkt = Dot3(pkt.build())
93assert pkt.getlayer(GARP_MESSAGE, 1).getlayer(GARP_ATTRIBUTE, 1)[GMRP_GROUP].addr == "00:00:00:00:00:01"
94assert pkt.getlayer(GARP_MESSAGE, 1).getlayer(GARP_ATTRIBUTE, 2)[GMRP_GROUP].addr == "00:00:00:00:00:02"
95assert pkt.getlayer(GARP_MESSAGE, 2).getlayer(GARP_ATTRIBUTE, 1)[GMRP_SERVICE].event == 0
96assert pkt.getlayer(GARP_MESSAGE, 2).getlayer(GARP_ATTRIBUTE, 2)[GMRP_SERVICE].event == 1
97
98= GARP from pcap
99
100pkts = rdpcap(scapy_path("test/pcaps/gvrp.pcapng.gz"))
101for p in pkts:
102    if len(p[GARP_ATTRIBUTE].payload) > 0:
103        assert p[GVRP] is not None
104
105= GARP tshark check
106~ tshark
107
108import tempfile, os
109pkt = Dot3(dst="01:80:c2:00:00:21")/LLC_GARP(dsap=0x42, ssap=0x42, ctrl=3)/GARP(
110    msgs=[GARP_MESSAGE(attrs=[GARP_ATTRIBUTE(event='JoinIn')/GVRP(vlan=1),
111                              GARP_ATTRIBUTE(event='JoinIn')/GVRP(vlan=2)]),
112          GARP_MESSAGE(attrs=[GARP_ATTRIBUTE(event='JoinIn')/GVRP(vlan=3),
113                              GARP_ATTRIBUTE(event='JoinIn')/GVRP(vlan=4)])])
114
115fd, pcapfilename = tempfile.mkstemp()
116wrpcap(pcapfilename, pkt)
117rv = tcpdump(pcapfilename, prog=conf.prog.tshark, getfd=True, args=['-Y', 'gvrp'], dump=True, wait=True)
118assert rv != b""
119os.close(fd)
120os.unlink(pcapfilename)
121
122= GARP tshark check
123~ tshark
124
125import tempfile, os
126pkt = Dot3(dst="01:80:c2:00:00:20")/LLC_GARP(dsap=0x42, ssap=0x42, ctrl=3)/GARP(
127    msgs=[GARP_MESSAGE(type = 1, attrs=[GARP_ATTRIBUTE(event='JoinIn')/GMRP_GROUP(addr="00:00:00:00:00:01"),
128                                        GARP_ATTRIBUTE(event='JoinIn')/GMRP_GROUP(addr="00:00:00:00:00:02")]),
129          GARP_MESSAGE(type = 2, attrs=[GARP_ATTRIBUTE(event='JoinIn')/GMRP_SERVICE(event="All Groups"),
130                                        GARP_ATTRIBUTE(event='JoinIn')/GMRP_SERVICE(event="All Unregistered Groups")])])
131
132fd, pcapfilename = tempfile.mkstemp()
133wrpcap(pcapfilename, pkt)
134rv = tcpdump(pcapfilename, prog=conf.prog.tshark, getfd=True, args=['-Y', 'gmrp'], dump=True, wait=True)
135assert rv != b""
136os.close(fd)
137os.unlink(pcapfilename)
138