go.ligato.io/vpp-agent/v3@v3.5.0/tests/integration/vpp/080_gre_test.go (about) 1 package vpp 2 3 import ( 4 "fmt" 5 "testing" 6 7 "go.ligato.io/cn-infra/v2/logging/logrus" 8 9 ifplugin_vppcalls "go.ligato.io/vpp-agent/v3/plugins/vpp/ifplugin/vppcalls" 10 interfaces "go.ligato.io/vpp-agent/v3/proto/ligato/vpp/interfaces" 11 12 _ "go.ligato.io/vpp-agent/v3/plugins/vpp/ifplugin" 13 ) 14 15 func TestGre(t *testing.T) { 16 ctx := setupVPP(t) 17 defer ctx.teardownVPP() 18 19 h := ifplugin_vppcalls.CompatibleInterfaceVppHandler(ctx.vppClient, logrus.NewLogger("test")) 20 21 tests := []struct { 22 name string 23 greLink *interfaces.GreLink 24 isFail bool 25 }{ 26 { 27 name: "create UNKNOWN GRE tunnel with IPv4", 28 greLink: &interfaces.GreLink{ 29 TunnelType: interfaces.GreLink_UNKNOWN, 30 SrcAddr: "2000::8:13", 31 DstAddr: "2019::8:13", 32 }, 33 isFail: true, 34 }, 35 { 36 name: "create L3 GRE tunnel with IPv4", 37 greLink: &interfaces.GreLink{ 38 TunnelType: interfaces.GreLink_L3, 39 SrcAddr: "2000::8:23", 40 DstAddr: "2019::8:23", 41 }, 42 isFail: false, 43 }, 44 { 45 name: "create TEB GRE tunnel with IPv4", 46 greLink: &interfaces.GreLink{ 47 TunnelType: interfaces.GreLink_TEB, 48 SrcAddr: "2000::8:33", 49 DstAddr: "2019::8:33", 50 }, 51 isFail: false, 52 }, 53 { 54 name: "create ERSPAN GRE tunnel with IPv4", 55 greLink: &interfaces.GreLink{ 56 TunnelType: interfaces.GreLink_ERSPAN, 57 SrcAddr: "2000::8:43", 58 DstAddr: "2019::8:43", 59 }, 60 isFail: false, 61 }, 62 63 { 64 name: "create ERSPAN GRE tunnel with out of range session id", 65 greLink: &interfaces.GreLink{ 66 TunnelType: interfaces.GreLink_ERSPAN, 67 SrcAddr: "10.10.10.10", 68 DstAddr: "20.20.20.20", 69 SessionId: 1024, 70 }, 71 isFail: true, 72 }, 73 { 74 name: "create GRE tunnel with bad source address", 75 greLink: &interfaces.GreLink{ 76 TunnelType: interfaces.GreLink_ERSPAN, 77 SrcAddr: "badip", 78 DstAddr: "20.20.20.20", 79 }, 80 isFail: true, 81 }, 82 { 83 name: "create GRE tunnel with destination address not set", 84 greLink: &interfaces.GreLink{ 85 TunnelType: interfaces.GreLink_ERSPAN, 86 SrcAddr: "10.10.10.10", 87 }, 88 isFail: true, 89 }, 90 91 { 92 name: "create GRE tunnel with equal source and destination addresses", 93 greLink: &interfaces.GreLink{ 94 TunnelType: interfaces.GreLink_ERSPAN, 95 SrcAddr: "10.10.10.10", 96 DstAddr: "10.10.10.10", 97 }, 98 isFail: true, 99 }, 100 { 101 name: "create GRE tunnel with addresses in IPv4 and IPv6", 102 greLink: &interfaces.GreLink{ 103 TunnelType: interfaces.GreLink_ERSPAN, 104 SrcAddr: "10.10.10.10", 105 DstAddr: "2019::8:23", 106 }, 107 isFail: true, 108 }, 109 } 110 for i, test := range tests { 111 t.Run(test.name, func(t *testing.T) { 112 ifName := fmt.Sprintf("test%d", i) 113 ifIdx, err := h.AddGreTunnel(ifName, test.greLink) 114 115 if err != nil { 116 if test.isFail { 117 return 118 } 119 t.Fatalf("create GRE tunnel failed: %v\n", err) 120 } else { 121 if test.isFail { 122 t.Fatal("create GRE tunnel must fail, but it's not") 123 } 124 } 125 126 ifaces, err := h.DumpInterfaces(ctx.Ctx) 127 if err != nil { 128 t.Fatalf("dumping interfaces failed: %v", err) 129 } 130 iface, ok := ifaces[ifIdx] 131 if !ok { 132 t.Fatalf("GRE interface not found in dump") 133 } 134 135 gre := iface.Interface.GetGre() 136 137 if test.greLink.TunnelType != gre.TunnelType { 138 t.Fatalf("expected tunnel type <%s>, got: <%s>", test.greLink.TunnelType, gre.TunnelType) 139 } 140 if test.greLink.SrcAddr != gre.SrcAddr { 141 t.Fatalf("expected source address <%s>, got: <%s>", test.greLink.SrcAddr, gre.SrcAddr) 142 } 143 if test.greLink.DstAddr != gre.DstAddr { 144 t.Fatalf("expected destination address <%s>, got: <%s>", test.greLink.DstAddr, gre.DstAddr) 145 } 146 if test.greLink.OuterFibId != gre.OuterFibId { 147 t.Fatalf("expected outer FIB id <%d>, got: <%d>", test.greLink.OuterFibId, gre.OuterFibId) 148 } 149 if test.greLink.SessionId != gre.SessionId { 150 t.Fatalf("expected session id <%d>, got: <%d>", test.greLink.SessionId, gre.SessionId) 151 } 152 153 ifIdx, err = h.DelGreTunnel(ifName, test.greLink) 154 if err != nil { 155 t.Fatalf("delete GRE tunnel failed: %v\n", err) 156 } 157 158 ifaces, err = h.DumpInterfaces(ctx.Ctx) 159 if err != nil { 160 t.Fatalf("dumping interfaces failed: %v", err) 161 } 162 _, ok = ifaces[ifIdx] 163 if ok { 164 t.Fatalf("GRE interface was found in dump") 165 } 166 }) 167 } 168 }