go.ligato.io/vpp-agent/v3@v3.5.0/plugins/vpp/ifplugin/vppcalls/vpp2101/gtpu_vppcalls_test.go (about)

     1  //  Copyright (c) 2019 EMnify
     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 vpp2101_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/vpp2101/gtpu"
    23  	vpp_ifs "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2101/interface"
    24  	"go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2101/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  }