go.ligato.io/vpp-agent/v3@v3.5.0/plugins/vpp/ifplugin/vppcalls/vpp2202/gtpu_vppcalls_test.go (about) 1 // Copyright (c) 2022 Cisco and/or its affiliates. 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at: 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 package vpp2202_test 16 17 import ( 18 "testing" 19 20 . "github.com/onsi/gomega" 21 22 vpp_gtpu "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2202/gtpu" 23 vpp_ifs "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2202/interface" 24 "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2202/ip_types" 25 ifs "go.ligato.io/vpp-agent/v3/proto/ligato/vpp/interfaces" 26 ) 27 28 func TestAddGtpuTunnel(t *testing.T) { 29 ctx, ifHandler := ifTestSetup(t) 30 defer ctx.TeardownTestCtx() 31 32 ctx.MockVpp.MockReply(&vpp_gtpu.GtpuAddDelTunnelReply{ 33 SwIfIndex: 1, 34 }) 35 ctx.MockVpp.MockReply(&vpp_ifs.SwInterfaceTagAddDelReply{}) 36 37 swIfIdx, err := ifHandler.AddGtpuTunnel("ifName", &ifs.GtpuLink{ 38 SrcAddr: "10.0.0.1", 39 DstAddr: "20.0.0.1", 40 EncapVrfId: 10, 41 Teid: 100, 42 }, 2) 43 Expect(err).To(BeNil()) 44 Expect(swIfIdx).To(BeEquivalentTo(1)) 45 var msgCheck bool 46 for _, msg := range ctx.MockChannel.Msgs { 47 vppMsg, ok := msg.(*vpp_gtpu.GtpuAddDelTunnel) 48 if ok { 49 Expect(vppMsg.SrcAddress).To(Equal(ip_types.Address{ 50 Af: ip_types.ADDRESS_IP4, 51 Un: ip_types.AddressUnionIP4(ip_types.IP4Address{10, 0, 0, 1}), 52 })) 53 Expect(vppMsg.DstAddress).To(Equal(ip_types.Address{ 54 Af: ip_types.ADDRESS_IP4, 55 Un: ip_types.AddressUnionIP4(ip_types.IP4Address{20, 0, 0, 1}), 56 })) 57 Expect(vppMsg.IsAdd).To(BeTrue()) 58 Expect(vppMsg.EncapVrfID).To(BeEquivalentTo(10)) 59 Expect(vppMsg.McastSwIfIndex).To(BeEquivalentTo(2)) 60 Expect(vppMsg.Teid).To(BeEquivalentTo(100)) 61 Expect(vppMsg.SrcAddress.Af).To(Equal(ip_types.ADDRESS_IP4)) 62 msgCheck = true 63 } 64 } 65 Expect(msgCheck).To(BeTrue()) 66 } 67 68 func TestAddGtpuTunnelIPv6(t *testing.T) { 69 ctx, ifHandler := ifTestSetup(t) 70 defer ctx.TeardownTestCtx() 71 72 ctx.MockVpp.MockReply(&vpp_gtpu.GtpuAddDelTunnelReply{ 73 SwIfIndex: 1, 74 }) 75 ctx.MockVpp.MockReply(&vpp_ifs.SwInterfaceTagAddDelReply{}) 76 77 swIfIdx, err := ifHandler.AddGtpuTunnel("ifName", &ifs.GtpuLink{ 78 SrcAddr: "2001:db8:0:1:1:1:1:1", 79 DstAddr: "2002:db8:0:1:1:1:1:1", 80 EncapVrfId: 10, 81 Teid: 200, 82 }, 0xFFFFFFFF) 83 Expect(err).To(BeNil()) 84 Expect(swIfIdx).To(BeEquivalentTo(1)) 85 var msgCheck bool 86 for _, msg := range ctx.MockChannel.Msgs { 87 vppMsg, ok := msg.(*vpp_gtpu.GtpuAddDelTunnel) 88 if ok { 89 Expect(vppMsg.SrcAddress).To(Equal(ip_types.Address{ 90 Af: ip_types.ADDRESS_IP6, 91 Un: ip_types.AddressUnionIP6(ip_types.IP6Address{ 92 0x20, 0x01, 0x0d, 0xb8, 0, 0, 0, 0x01, 0, 0x01, 0, 0x01, 0, 0x01, 0, 0x01, 93 }), 94 })) 95 Expect(vppMsg.DstAddress).To(Equal(ip_types.Address{ 96 Af: ip_types.ADDRESS_IP6, 97 Un: ip_types.AddressUnionIP6(ip_types.IP6Address{ 98 0x20, 0x02, 0x0d, 0xb8, 0, 0, 0, 0x01, 0, 0x01, 0, 0x01, 0, 0x01, 0, 0x01, 99 }), 100 })) 101 msgCheck = true 102 } 103 } 104 Expect(msgCheck).To(BeTrue()) 105 } 106 107 func TestAddGtpuTunnelIPMismatch(t *testing.T) { 108 ctx, ifHandler := ifTestSetup(t) 109 defer ctx.TeardownTestCtx() 110 111 ctx.MockVpp.MockReply(&vpp_gtpu.GtpuAddDelTunnelReply{ 112 SwIfIndex: 1, 113 }) 114 ctx.MockVpp.MockReply(&vpp_ifs.SwInterfaceTagAddDelReply{}) 115 116 _, err := ifHandler.AddGtpuTunnel("ifName", &ifs.GtpuLink{ 117 SrcAddr: "10.0.0.1", 118 DstAddr: "2001:db8:0:1:1:1:1:1", 119 EncapVrfId: 0, 120 Teid: 100, 121 }, 0xFFFFFFFF) 122 Expect(err).ToNot(BeNil()) 123 } 124 125 func TestAddGtpuTunnelInvalidIPv4(t *testing.T) { 126 ctx, ifHandler := ifTestSetup(t) 127 defer ctx.TeardownTestCtx() 128 129 ctx.MockVpp.MockReply(&vpp_gtpu.GtpuAddDelTunnelReply{ 130 SwIfIndex: 1, 131 }) 132 ctx.MockVpp.MockReply(&vpp_ifs.SwInterfaceTagAddDelReply{}) 133 134 _, err := ifHandler.AddGtpuTunnel("ifName", &ifs.GtpuLink{ 135 SrcAddr: "10.0.0", 136 DstAddr: "20.0.0.1", 137 EncapVrfId: 0, 138 Teid: 100, 139 }, 0xFFFFFFFF) 140 Expect(err).ToNot(BeNil()) 141 } 142 143 func TestAddGtpuTunnelInvalidIPv6(t *testing.T) { 144 ctx, ifHandler := ifTestSetup(t) 145 defer ctx.TeardownTestCtx() 146 147 ctx.MockVpp.MockReply(&vpp_gtpu.GtpuAddDelTunnelReply{ 148 SwIfIndex: 1, 149 }) 150 ctx.MockVpp.MockReply(&vpp_ifs.SwInterfaceTagAddDelReply{}) 151 152 _, err := ifHandler.AddGtpuTunnel("ifName", &ifs.GtpuLink{ 153 SrcAddr: "2001:db8:0:1:1:1:1:1", 154 DstAddr: "2002:db8:0:1:1:1:1:1:1", 155 EncapVrfId: 0, 156 Teid: 100, 157 }, 0xFFFFFFFF) 158 Expect(err).ToNot(BeNil()) 159 } 160 161 func TestAddGtpuTunnelError(t *testing.T) { 162 ctx, ifHandler := ifTestSetup(t) 163 defer ctx.TeardownTestCtx() 164 165 ctx.MockVpp.MockReply(&vpp_gtpu.GtpuAddDelTunnel{}) 166 ctx.MockVpp.MockReply(&vpp_ifs.SwInterfaceTagAddDelReply{}) 167 168 _, err := ifHandler.AddGtpuTunnel("ifName", &ifs.GtpuLink{ 169 SrcAddr: "10.0.0.1", 170 DstAddr: "20.0.0.2", 171 EncapVrfId: 0, 172 Teid: 100, 173 }, 0xFFFFFFFF) 174 Expect(err).ToNot(BeNil()) 175 } 176 177 func TestAddGtpuTunnelRetval(t *testing.T) { 178 ctx, ifHandler := ifTestSetup(t) 179 defer ctx.TeardownTestCtx() 180 181 ctx.MockVpp.MockReply(&vpp_gtpu.GtpuAddDelTunnelReply{ 182 Retval: 1, 183 }) 184 ctx.MockVpp.MockReply(&vpp_ifs.SwInterfaceTagAddDelReply{}) 185 186 _, err := ifHandler.AddGtpuTunnel("ifName", &ifs.GtpuLink{ 187 SrcAddr: "10.0.0.1", 188 DstAddr: "20.0.0.2", 189 EncapVrfId: 0, 190 Teid: 100, 191 }, 0xFFFFFFFF) 192 Expect(err).ToNot(BeNil()) 193 } 194 195 func TestDelGtpuTunnel(t *testing.T) { 196 ctx, ifHandler := ifTestSetup(t) 197 defer ctx.TeardownTestCtx() 198 199 ctx.MockVpp.MockReply(&vpp_gtpu.GtpuAddDelTunnelReply{ 200 SwIfIndex: 1, 201 }) 202 ctx.MockVpp.MockReply(&vpp_ifs.SwInterfaceTagAddDelReply{}) 203 204 err := ifHandler.DelGtpuTunnel("ifName", &ifs.GtpuLink{ 205 SrcAddr: "10.0.0.1", 206 DstAddr: "20.0.0.2", 207 EncapVrfId: 0, 208 Teid: 100, 209 }) 210 Expect(err).To(BeNil()) 211 } 212 213 func TestDelGtpuTunnelError(t *testing.T) { 214 ctx, ifHandler := ifTestSetup(t) 215 defer ctx.TeardownTestCtx() 216 217 ctx.MockVpp.MockReply(&vpp_gtpu.GtpuAddDelTunnel{}) 218 ctx.MockVpp.MockReply(&vpp_ifs.SwInterfaceTagAddDelReply{}) 219 220 err := ifHandler.DelGtpuTunnel("ifName", &ifs.GtpuLink{ 221 SrcAddr: "10.0.0.1", 222 DstAddr: "20.0.0.2", 223 EncapVrfId: 0, 224 Teid: 100, 225 }) 226 Expect(err).ToNot(BeNil()) 227 } 228 229 func TestDelGtpuTunnelRetval(t *testing.T) { 230 ctx, ifHandler := ifTestSetup(t) 231 defer ctx.TeardownTestCtx() 232 233 ctx.MockVpp.MockReply(&vpp_gtpu.GtpuAddDelTunnelReply{ 234 Retval: 1, 235 }) 236 ctx.MockVpp.MockReply(&vpp_ifs.SwInterfaceTagAddDelReply{}) 237 238 err := ifHandler.DelGtpuTunnel("ifName", &ifs.GtpuLink{ 239 SrcAddr: "10.0.0.1", 240 DstAddr: "20.0.0.1", 241 EncapVrfId: 0, 242 Teid: 100, 243 }) 244 Expect(err).ToNot(BeNil()) 245 } 246 247 func TestAddNilGtpuTunnel(t *testing.T) { 248 ctx, ifHandler := ifTestSetup(t) 249 defer ctx.TeardownTestCtx() 250 251 ctx.MockVpp.MockReply(&vpp_gtpu.GtpuAddDelTunnel{}) 252 ctx.MockVpp.MockReply(&vpp_ifs.SwInterfaceTagAddDelReply{}) 253 254 _, err := ifHandler.AddGtpuTunnel("ifName", nil, 0xFFFFFFFF) 255 Expect(err).ToNot(BeNil()) 256 } 257 258 func TestDelNilGtpuTunnel(t *testing.T) { 259 ctx, ifHandler := ifTestSetup(t) 260 defer ctx.TeardownTestCtx() 261 262 ctx.MockVpp.MockReply(&vpp_gtpu.GtpuAddDelTunnel{}) 263 ctx.MockVpp.MockReply(&vpp_ifs.SwInterfaceTagAddDelReply{}) 264 265 err := ifHandler.DelGtpuTunnel("ifName", nil) 266 Expect(err).ToNot(BeNil()) 267 }