go.ligato.io/vpp-agent/v3@v3.5.0/plugins/vpp/ifplugin/vppcalls/vpp2210/ipip_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 vpp2210_test 16 17 import ( 18 "testing" 19 20 . "github.com/onsi/gomega" 21 22 vpp_ifs "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2210/interface" 23 "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2210/ip_types" 24 vpp_ipip "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2210/ipip" 25 ifs "go.ligato.io/vpp-agent/v3/proto/ligato/vpp/interfaces" 26 ) 27 28 func TestAddIpipTunnel(t *testing.T) { 29 ctx, ifHandler := ifTestSetup(t) 30 defer ctx.TeardownTestCtx() 31 32 ctx.MockVpp.MockReply(&vpp_ipip.IpipAddTunnelReply{ 33 SwIfIndex: 1, 34 }) 35 ctx.MockVpp.MockReply(&vpp_ifs.SwInterfaceTagAddDelReply{}) 36 37 swIfIdx, err := ifHandler.AddIpipTunnel("ipiptun1", 0, &ifs.IPIPLink{ 38 SrcAddr: "10.0.0.1", 39 DstAddr: "20.0.0.1", 40 }) 41 Expect(err).To(BeNil()) 42 Expect(swIfIdx).To(BeEquivalentTo(1)) 43 var msgCheck bool 44 for _, msg := range ctx.MockChannel.Msgs { 45 vppMsg, ok := msg.(*vpp_ipip.IpipAddTunnel) 46 if ok { 47 Expect(vppMsg.Tunnel.Src).To(Equal(ip_types.Address{ 48 Af: ip_types.ADDRESS_IP4, 49 Un: ip_types.AddressUnionIP4(ip_types.IP4Address{10, 0, 0, 1}), 50 })) 51 Expect(vppMsg.Tunnel.Dst).To(Equal(ip_types.Address{ 52 Af: ip_types.ADDRESS_IP4, 53 Un: ip_types.AddressUnionIP4(ip_types.IP4Address{20, 0, 0, 1}), 54 })) 55 Expect(vppMsg.Tunnel.TableID).To(BeEquivalentTo(0)) 56 msgCheck = true 57 } 58 } 59 Expect(msgCheck).To(BeTrue()) 60 } 61 62 func TestAddIpipTunnelWithVrf(t *testing.T) { 63 ctx, ifHandler := ifTestSetup(t) 64 defer ctx.TeardownTestCtx() 65 66 ctx.MockVpp.MockReply(&vpp_ipip.IpipAddTunnelReply{ 67 SwIfIndex: 1, 68 }) 69 ctx.MockVpp.MockReply(&vpp_ifs.SwInterfaceTagAddDelReply{}) 70 71 swIfIdx, err := ifHandler.AddIpipTunnel("ipiptun1", 1, &ifs.IPIPLink{ 72 SrcAddr: "10.0.0.1", 73 DstAddr: "20.0.0.1", 74 }) 75 Expect(err).To(BeNil()) 76 Expect(swIfIdx).To(BeEquivalentTo(1)) 77 var msgCheck bool 78 for _, msg := range ctx.MockChannel.Msgs { 79 vppMsg, ok := msg.(*vpp_ipip.IpipAddTunnel) 80 if ok { 81 Expect(vppMsg.Tunnel.Src).To(Equal(ip_types.Address{ 82 Af: ip_types.ADDRESS_IP4, 83 Un: ip_types.AddressUnionIP4(ip_types.IP4Address{10, 0, 0, 1}), 84 })) 85 Expect(vppMsg.Tunnel.Dst).To(Equal(ip_types.Address{ 86 Af: ip_types.ADDRESS_IP4, 87 Un: ip_types.AddressUnionIP4(ip_types.IP4Address{20, 0, 0, 1}), 88 })) 89 Expect(vppMsg.Tunnel.TableID).To(BeEquivalentTo(1)) 90 msgCheck = true 91 } 92 } 93 Expect(msgCheck).To(BeTrue()) 94 } 95 96 func TestAddIpipTunnelIPv6(t *testing.T) { 97 ctx, ifHandler := ifTestSetup(t) 98 defer ctx.TeardownTestCtx() 99 100 ctx.MockVpp.MockReply(&vpp_ipip.IpipAddTunnelReply{ 101 SwIfIndex: 1, 102 }) 103 ctx.MockVpp.MockReply(&vpp_ifs.SwInterfaceTagAddDelReply{}) 104 105 swIfIdx, err := ifHandler.AddIpipTunnel("ipiptun1", 0, &ifs.IPIPLink{ 106 SrcAddr: "2001:db8:0:1:1:1:1:1", 107 DstAddr: "2002:db8:0:1:1:1:1:1", 108 }) 109 Expect(err).To(BeNil()) 110 Expect(swIfIdx).To(BeEquivalentTo(1)) 111 var msgCheck bool 112 for _, msg := range ctx.MockChannel.Msgs { 113 vppMsg, ok := msg.(*vpp_ipip.IpipAddTunnel) 114 if ok { 115 Expect(vppMsg.Tunnel.Src).To(Equal(ip_types.Address{ 116 Af: ip_types.ADDRESS_IP6, 117 Un: ip_types.AddressUnionIP6(ip_types.IP6Address{ 118 0x20, 0x01, 0x0d, 0xb8, 0, 0, 0, 0x01, 0, 0x01, 0, 0x01, 0, 0x01, 0, 0x01, 119 }), 120 })) 121 Expect(vppMsg.Tunnel.Dst).To(Equal(ip_types.Address{ 122 Af: ip_types.ADDRESS_IP6, 123 Un: ip_types.AddressUnionIP6(ip_types.IP6Address{ 124 0x20, 0x02, 0x0d, 0xb8, 0, 0, 0, 0x01, 0, 0x01, 0, 0x01, 0, 0x01, 0, 0x01, 125 }), 126 })) 127 Expect(vppMsg.Tunnel.TableID).To(BeEquivalentTo(0)) 128 msgCheck = true 129 } 130 } 131 Expect(msgCheck).To(BeTrue()) 132 } 133 134 func TestAddIpipTunnelIPMismatch(t *testing.T) { 135 ctx, ifHandler := ifTestSetup(t) 136 defer ctx.TeardownTestCtx() 137 138 ctx.MockVpp.MockReply(&vpp_ipip.IpipAddTunnelReply{ 139 SwIfIndex: 1, 140 }) 141 ctx.MockVpp.MockReply(&vpp_ifs.SwInterfaceTagAddDelReply{}) 142 143 _, err := ifHandler.AddIpipTunnel("ipiptun1", 0, &ifs.IPIPLink{ 144 SrcAddr: "10.0.0.1", 145 DstAddr: "2001:db8:0:1:1:1:1:1", 146 }) 147 Expect(err).ToNot(BeNil()) 148 } 149 150 func TestAddIpipTunnelInvalidIP(t *testing.T) { 151 ctx, ifHandler := ifTestSetup(t) 152 defer ctx.TeardownTestCtx() 153 154 ctx.MockVpp.MockReply(&vpp_ipip.IpipAddTunnelReply{ 155 SwIfIndex: 1, 156 }) 157 ctx.MockVpp.MockReply(&vpp_ifs.SwInterfaceTagAddDelReply{}) 158 159 _, err := ifHandler.AddIpipTunnel("ipiptun1", 0, &ifs.IPIPLink{ 160 SrcAddr: "invalid-ip", 161 DstAddr: "2001:db8:0:1:1:1:1:1", 162 }) 163 Expect(err).ToNot(BeNil()) 164 } 165 166 func TestAddIpipTunnelNoIPs(t *testing.T) { 167 ctx, ifHandler := ifTestSetup(t) 168 defer ctx.TeardownTestCtx() 169 170 ctx.MockVpp.MockReply(&vpp_ipip.IpipAddTunnelReply{ 171 SwIfIndex: 1, 172 }) 173 ctx.MockVpp.MockReply(&vpp_ifs.SwInterfaceTagAddDelReply{}) 174 175 _, err := ifHandler.AddIpipTunnel("ipiptun1", 0, &ifs.IPIPLink{}) 176 Expect(err).ToNot(BeNil()) 177 } 178 179 func TestAddIpipTunnelRetval(t *testing.T) { 180 ctx, ifHandler := ifTestSetup(t) 181 defer ctx.TeardownTestCtx() 182 183 ctx.MockVpp.MockReply(&vpp_ipip.IpipAddTunnelReply{ 184 Retval: 1, 185 }) 186 ctx.MockVpp.MockReply(&vpp_ifs.SwInterfaceTagAddDelReply{}) 187 188 _, err := ifHandler.AddIpipTunnel("ipiptun1", 0, &ifs.IPIPLink{ 189 SrcAddr: "10.0.0.1", 190 DstAddr: "20.0.0.2", 191 }) 192 Expect(err).ToNot(BeNil()) 193 } 194 195 func TestDeleteIpipTunnel(t *testing.T) { 196 ctx, ifHandler := ifTestSetup(t) 197 defer ctx.TeardownTestCtx() 198 199 ctx.MockVpp.MockReply(&vpp_ipip.IpipDelTunnelReply{}) 200 ctx.MockVpp.MockReply(&vpp_ifs.SwInterfaceTagAddDelReply{}) 201 202 err := ifHandler.DelIpipTunnel("ipiptun1", 1) 203 Expect(err).To(BeNil()) 204 } 205 206 func TestDeleteIpipTunnelRetval(t *testing.T) { 207 ctx, ifHandler := ifTestSetup(t) 208 defer ctx.TeardownTestCtx() 209 210 ctx.MockVpp.MockReply(&vpp_ipip.IpipDelTunnelReply{ 211 Retval: 1, 212 }) 213 ctx.MockVpp.MockReply(&vpp_ifs.SwInterfaceTagAddDelReply{}) 214 215 err := ifHandler.DelIpipTunnel("ipiptun1", 1) 216 Expect(err).ToNot(BeNil()) 217 }