blob: c182e821b4cae11cd197848c53d2ac969227cac5 [file] [log] [blame]
Matteo Scandolof6f3a7f2019-10-11 11:19:29 -07001/*
2 * Copyright 2018-present Open Networking Foundation
3
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7
8 * http://www.apache.org/licenses/LICENSE-2.0
9
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package packetHandlers_test
18
19import (
20 "github.com/google/gopacket"
21 "github.com/google/gopacket/layers"
22 "github.com/opencord/bbsim/internal/bbsim/packetHandlers"
Matteo Scandolo618a6582020-09-09 12:21:29 -070023 "github.com/opencord/bbsim/internal/bbsim/responders/igmp"
Matteo Scandolof6f3a7f2019-10-11 11:19:29 -070024 "gotest.tools/assert"
25 "net"
26 "testing"
27)
28
29func Test_IsDhcpPacket_True(t *testing.T) {
30 dhcp := &layers.DHCPv4{
31 Operation: layers.DHCPOpReply,
32 }
33
34 buffer := gopacket.NewSerializeBuffer()
35 opts := gopacket.SerializeOptions{FixLengths: true}
36 err := gopacket.SerializeLayers(buffer, opts, dhcp)
37 if err != nil {
38 t.Fatal(err)
39 }
40
41 dhcpPkt := gopacket.NewPacket(buffer.Bytes(), layers.LayerTypeDHCPv4, gopacket.DecodeOptions{})
42
43 res := packetHandlers.IsDhcpPacket(dhcpPkt)
44 assert.Equal(t, res, true)
45}
46
47func Test_IsDhcpPacket_False(t *testing.T) {
48 eth := &layers.Ethernet{
49 DstMAC: net.HardwareAddr{0x2e, 0x60, 0x70, 0x13, 0x15, 0x16},
50 SrcMAC: net.HardwareAddr{0x2e, 0x60, 0x70, 0x13, 0x15, 0x17},
51 }
52
53 buffer := gopacket.NewSerializeBuffer()
54 opts := gopacket.SerializeOptions{FixLengths: true}
55 err := gopacket.SerializeLayers(buffer, opts, eth)
56 if err != nil {
57 t.Fatal(err)
58 }
59
60 ethernetPkt := gopacket.NewPacket(buffer.Bytes(), layers.LayerTypeEthernet, gopacket.DecodeOptions{})
61
62 res := packetHandlers.IsDhcpPacket(ethernetPkt)
63 assert.Equal(t, res, false)
64}
65
Matteo Scandolo618a6582020-09-09 12:21:29 -070066func Test_IsIgmpPacket(t *testing.T) {
67 igmp := &igmp.IGMP{
68 Type: layers.IGMPMembershipReportV2, //IGMPV2 Membership Report
69 Checksum: 0,
70 GroupAddress: net.IPv4(224, 0, 0, 22),
71 Version: 2,
72 }
73 buffer := gopacket.NewSerializeBuffer()
74 options := gopacket.SerializeOptions{
75 ComputeChecksums: true,
76 FixLengths: true,
77 }
78
79 if err := gopacket.SerializeLayers(buffer, options, igmp); err != nil {
80 t.Fatal(err)
81 }
82
83 pkt := gopacket.NewPacket(buffer.Bytes(), layers.LayerTypeIGMP, gopacket.DecodeOptions{})
84
85 res := packetHandlers.IsIgmpPacket(pkt)
86 assert.Equal(t, res, true)
87}
88
Matteo Scandolo73c488d2019-11-01 14:44:22 -070089func Test_IsLldpPacket_True(t *testing.T) {
90 layer := &layers.LinkLayerDiscovery{
91 PortID: layers.LLDPPortID{
92 ID: []byte{1, 2, 3, 4},
93 Subtype: layers.LLDPPortIDSubtypeMACAddr,
94 },
95 ChassisID: layers.LLDPChassisID{
96 ID: []byte{1, 2, 3, 4},
97 Subtype: layers.LLDPChassisIDSubTypeMACAddr,
98 },
99 }
100
101 buffer := gopacket.NewSerializeBuffer()
102 opts := gopacket.SerializeOptions{FixLengths: true}
103 err := gopacket.SerializeLayers(buffer, opts, layer)
104 if err != nil {
105 t.Fatal(err)
106 }
107
108 packet := gopacket.NewPacket(buffer.Bytes(), layers.LayerTypeLinkLayerDiscovery, gopacket.DecodeOptions{})
109
110 res := packetHandlers.IsLldpPacket(packet)
111 assert.Equal(t, res, true)
112}
113
114func Test_IsLldpPacket_False(t *testing.T) {
115 eth := &layers.Ethernet{
116 DstMAC: net.HardwareAddr{0x2e, 0x60, 0x70, 0x13, 0x15, 0x16},
117 SrcMAC: net.HardwareAddr{0x2e, 0x60, 0x70, 0x13, 0x15, 0x17},
118 }
119
120 buffer := gopacket.NewSerializeBuffer()
121 opts := gopacket.SerializeOptions{FixLengths: true}
122 err := gopacket.SerializeLayers(buffer, opts, eth)
123 if err != nil {
124 t.Fatal(err)
125 }
126
127 ethernetPkt := gopacket.NewPacket(buffer.Bytes(), layers.LayerTypeEthernet, gopacket.DecodeOptions{})
128
129 res := packetHandlers.IsLldpPacket(ethernetPkt)
130 assert.Equal(t, res, false)
131}
132
Matteo Scandolof6f3a7f2019-10-11 11:19:29 -0700133func Test_IsIncomingPacket_True(t *testing.T) {
134 eth := &layers.IPv4{
Matteo Scandolo40e067f2019-10-16 16:59:41 -0700135 SrcIP: net.ParseIP("192.168.254.1"),
Matteo Scandolof6f3a7f2019-10-11 11:19:29 -0700136 DstIP: net.ParseIP("182.21.0.122"),
137 }
138
139 buffer := gopacket.NewSerializeBuffer()
140 opts := gopacket.SerializeOptions{FixLengths: true}
141 err := gopacket.SerializeLayers(buffer, opts, eth)
142 if err != nil {
143 t.Fatal(err)
144 }
145
146 ethernetPkt := gopacket.NewPacket(buffer.Bytes(), layers.LayerTypeIPv4, gopacket.DecodeOptions{})
147
148 res := packetHandlers.IsIncomingPacket(ethernetPkt)
149 assert.Equal(t, res, true)
150}
151
152func Test_IsIncomingPacket_False(t *testing.T) {
153 eth := &layers.IPv4{
154 SrcIP: net.ParseIP("182.21.0.122"),
Matteo Scandolo40e067f2019-10-16 16:59:41 -0700155 DstIP: net.ParseIP("192.168.254.1"),
Matteo Scandolof6f3a7f2019-10-11 11:19:29 -0700156 }
157
158 buffer := gopacket.NewSerializeBuffer()
159 opts := gopacket.SerializeOptions{FixLengths: true}
160 err := gopacket.SerializeLayers(buffer, opts, eth)
161 if err != nil {
162 t.Fatal(err)
163 }
164
165 ethernetPkt := gopacket.NewPacket(buffer.Bytes(), layers.LayerTypeIPv4, gopacket.DecodeOptions{})
166
167 res := packetHandlers.IsIncomingPacket(ethernetPkt)
168 assert.Equal(t, res, false)
169}
170
171func Test_GetDstMacAddressFromPacket(t *testing.T) {
172 dstMac := net.HardwareAddr{0x2e, 0x60, 0x70, 0x13, 0x15, 0x16}
173 eth := &layers.Ethernet{
174 DstMAC: dstMac,
175 SrcMAC: net.HardwareAddr{0x2e, 0x60, 0x70, 0x13, 0x15, 0x17},
176 }
177
178 buffer := gopacket.NewSerializeBuffer()
179 opts := gopacket.SerializeOptions{FixLengths: true}
180 err := gopacket.SerializeLayers(buffer, opts, eth)
181 if err != nil {
182 t.Fatal(err)
183 }
184
185 ethernetPkt := gopacket.NewPacket(buffer.Bytes(), layers.LayerTypeEthernet, gopacket.DecodeOptions{})
186
187 res, err := packetHandlers.GetDstMacAddressFromPacket(ethernetPkt)
188 assert.Equal(t, err, nil)
189 assert.Equal(t, res.String(), dstMac.String())
190}