go.ligato.io/vpp-agent/v3@v3.5.0/plugins/vpp/ifplugin/vppcalls/vpp2202/vxlan_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 "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2202/ip_types" 21 22 . "github.com/onsi/gomega" 23 24 vpp_ifs "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2202/interface" 25 vpp_vxlan "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2202/vxlan" 26 ifs "go.ligato.io/vpp-agent/v3/proto/ligato/vpp/interfaces" 27 ) 28 29 func TestAddVxlanTunnel(t *testing.T) { 30 ctx, ifHandler := ifTestSetup(t) 31 defer ctx.TeardownTestCtx() 32 33 ctx.MockVpp.MockReply(&vpp_vxlan.VxlanAddDelTunnelReply{ 34 SwIfIndex: 1, 35 }) 36 ctx.MockVpp.MockReply(&vpp_ifs.SwInterfaceTagAddDelReply{}) 37 38 swIfIdx, err := ifHandler.AddVxLanTunnel("ifName", 0, 2, &ifs.VxlanLink{ 39 SrcAddress: "10.0.0.1", 40 DstAddress: "20.0.0.1", 41 Vni: 1, 42 }) 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_vxlan.VxlanAddDelTunnel) 48 if ok { 49 Expect(vppMsg.SrcAddress.Un.GetIP4()).To(BeEquivalentTo(ip_types.IP4Address{10, 0, 0, 1})) 50 Expect(vppMsg.DstAddress.Un.GetIP4()).To(BeEquivalentTo(ip_types.IP4Address{20, 0, 0, 1})) 51 Expect(vppMsg.IsAdd).To(BeEquivalentTo(true)) 52 Expect(vppMsg.EncapVrfID).To(BeEquivalentTo(0)) 53 Expect(vppMsg.McastSwIfIndex).To(BeEquivalentTo(2)) 54 Expect(vppMsg.Vni).To(BeEquivalentTo(1)) 55 msgCheck = true 56 } 57 } 58 Expect(msgCheck).To(BeTrue()) 59 } 60 61 func TestAddVxlanTunnelWithVrf(t *testing.T) { 62 ctx, ifHandler := ifTestSetup(t) 63 defer ctx.TeardownTestCtx() 64 65 // VxLAN resolution 66 ctx.MockVpp.MockReply(&vpp_vxlan.VxlanAddDelTunnelReply{ 67 SwIfIndex: 1, 68 }) 69 ctx.MockVpp.MockReply(&vpp_ifs.SwInterfaceTagAddDelReply{}) 70 71 swIfIdx, err := ifHandler.AddVxLanTunnel("ifName", 1, 1, &ifs.VxlanLink{ 72 SrcAddress: "10.0.0.1", 73 DstAddress: "20.0.0.1", 74 Vni: 1, 75 }) 76 Expect(err).To(BeNil()) 77 Expect(swIfIdx).To(BeEquivalentTo(1)) 78 var msgCheck bool 79 for _, msg := range ctx.MockChannel.Msgs { 80 vppMsg, ok := msg.(*vpp_vxlan.VxlanAddDelTunnel) 81 if ok { 82 Expect(vppMsg.SrcAddress.Un.GetIP4()).To(BeEquivalentTo(ip_types.IP4Address{10, 0, 0, 1})) 83 Expect(vppMsg.DstAddress.Un.GetIP4()).To(BeEquivalentTo(ip_types.IP4Address{20, 0, 0, 1})) 84 Expect(vppMsg.IsAdd).To(BeEquivalentTo(true)) 85 Expect(vppMsg.EncapVrfID).To(BeEquivalentTo(1)) 86 Expect(vppMsg.McastSwIfIndex).To(BeEquivalentTo(1)) 87 Expect(vppMsg.Vni).To(BeEquivalentTo(1)) 88 msgCheck = true 89 } 90 } 91 Expect(msgCheck).To(BeTrue()) 92 } 93 94 func TestAddVxlanTunnelIPv6(t *testing.T) { 95 ctx, ifHandler := ifTestSetup(t) 96 defer ctx.TeardownTestCtx() 97 98 ctx.MockVpp.MockReply(&vpp_vxlan.VxlanAddDelTunnelReply{ 99 SwIfIndex: 1, 100 }) 101 ctx.MockVpp.MockReply(&vpp_ifs.SwInterfaceTagAddDelReply{}) 102 103 swIfIdx, err := ifHandler.AddVxLanTunnel("ifName", 0, 0, &ifs.VxlanLink{ 104 SrcAddress: "2001:db8:0:1:1:1:1:1", 105 DstAddress: "2002:db8:0:1:1:1:1:1", 106 Vni: 1, 107 }) 108 Expect(err).To(BeNil()) 109 Expect(swIfIdx).To(BeEquivalentTo(1)) 110 var msgCheck bool 111 for _, msg := range ctx.MockChannel.Msgs { 112 vppMsg, ok := msg.(*vpp_vxlan.VxlanAddDelTunnel) 113 if ok { 114 Expect(vppMsg.SrcAddress).To(BeEquivalentTo(ipToAddr("2001:db8:0:1:1:1:1:1"))) 115 Expect(vppMsg.DstAddress).To(BeEquivalentTo(ipToAddr("2002:db8:0:1:1:1:1:1"))) 116 msgCheck = true 117 } 118 } 119 Expect(msgCheck).To(BeTrue()) 120 } 121 122 func TestAddVxlanTunnelIPMismatch(t *testing.T) { 123 ctx, ifHandler := ifTestSetup(t) 124 defer ctx.TeardownTestCtx() 125 126 ctx.MockVpp.MockReply(&vpp_vxlan.VxlanAddDelTunnelReply{ 127 SwIfIndex: 1, 128 }) 129 ctx.MockVpp.MockReply(&vpp_ifs.SwInterfaceTagAddDelReply{}) 130 131 _, err := ifHandler.AddVxLanTunnel("ifName", 0, 0, &ifs.VxlanLink{ 132 SrcAddress: "10.0.0.1", 133 DstAddress: "2001:db8:0:1:1:1:1:1", 134 Vni: 1, 135 }) 136 Expect(err).ToNot(BeNil()) 137 } 138 139 func TestAddVxlanTunnelInvalidIP(t *testing.T) { 140 ctx, ifHandler := ifTestSetup(t) 141 defer ctx.TeardownTestCtx() 142 143 ctx.MockVpp.MockReply(&vpp_vxlan.VxlanAddDelTunnelReply{ 144 SwIfIndex: 1, 145 }) 146 ctx.MockVpp.MockReply(&vpp_ifs.SwInterfaceTagAddDelReply{}) 147 148 _, err := ifHandler.AddVxLanTunnel("ifName", 0, 0, &ifs.VxlanLink{ 149 SrcAddress: "invalid-ip", 150 DstAddress: "2001:db8:0:1:1:1:1:1", 151 Vni: 1, 152 }) 153 Expect(err).ToNot(BeNil()) 154 } 155 156 func TestAddVxlanTunnelError(t *testing.T) { 157 ctx, ifHandler := ifTestSetup(t) 158 defer ctx.TeardownTestCtx() 159 160 ctx.MockVpp.MockReply(&vpp_vxlan.VxlanAddDelTunnel{}) 161 ctx.MockVpp.MockReply(&vpp_ifs.SwInterfaceTagAddDelReply{}) 162 163 _, err := ifHandler.AddVxLanTunnel("ifName", 0, 0, &ifs.VxlanLink{ 164 SrcAddress: "10.0.0.1", 165 DstAddress: "20.0.0.2", 166 Vni: 1, 167 }) 168 Expect(err).ToNot(BeNil()) 169 } 170 171 func TestAddVxlanTunnelRetval(t *testing.T) { 172 ctx, ifHandler := ifTestSetup(t) 173 defer ctx.TeardownTestCtx() 174 175 ctx.MockVpp.MockReply(&vpp_vxlan.VxlanAddDelTunnelReply{ 176 Retval: 1, 177 }) 178 ctx.MockVpp.MockReply(&vpp_ifs.SwInterfaceTagAddDelReply{}) 179 180 _, err := ifHandler.AddVxLanTunnel("ifName", 0, 0, &ifs.VxlanLink{ 181 SrcAddress: "10.0.0.1", 182 DstAddress: "20.0.0.2", 183 Vni: 1, 184 }) 185 Expect(err).ToNot(BeNil()) 186 } 187 188 func TestDeleteVxlanTunnel(t *testing.T) { 189 ctx, ifHandler := ifTestSetup(t) 190 defer ctx.TeardownTestCtx() 191 192 ctx.MockVpp.MockReply(&vpp_vxlan.VxlanAddDelTunnelReply{ 193 SwIfIndex: 1, 194 }) 195 ctx.MockVpp.MockReply(&vpp_ifs.SwInterfaceTagAddDelReply{}) 196 197 err := ifHandler.DeleteVxLanTunnel("ifName", 1, 0, &ifs.VxlanLink{ 198 SrcAddress: "10.0.0.1", 199 DstAddress: "20.0.0.1", 200 Vni: 1, 201 }) 202 Expect(err).To(BeNil()) 203 } 204 205 func TestDeleteVxlanTunnelError(t *testing.T) { 206 ctx, ifHandler := ifTestSetup(t) 207 defer ctx.TeardownTestCtx() 208 209 ctx.MockVpp.MockReply(&vpp_vxlan.VxlanAddDelTunnel{}) 210 ctx.MockVpp.MockReply(&vpp_ifs.SwInterfaceTagAddDelReply{}) 211 212 err := ifHandler.DeleteVxLanTunnel("ifName", 1, 0, &ifs.VxlanLink{ 213 SrcAddress: "10.0.0.1", 214 DstAddress: "20.0.0.1", 215 Vni: 1, 216 }) 217 Expect(err).ToNot(BeNil()) 218 } 219 220 func TestDeleteVxlanTunnelRetval(t *testing.T) { 221 ctx, ifHandler := ifTestSetup(t) 222 defer ctx.TeardownTestCtx() 223 224 ctx.MockVpp.MockReply(&vpp_vxlan.VxlanAddDelTunnelReply{ 225 Retval: 1, 226 }) 227 ctx.MockVpp.MockReply(&vpp_ifs.SwInterfaceTagAddDelReply{}) 228 229 err := ifHandler.DeleteVxLanTunnel("ifName", 1, 0, &ifs.VxlanLink{ 230 SrcAddress: "10.0.0.1", 231 DstAddress: "20.0.0.1", 232 Vni: 1, 233 }) 234 Expect(err).ToNot(BeNil()) 235 }