forked from github/multus-cni
1424 lines
36 KiB
Go
1424 lines
36 KiB
Go
// Copyright (c) 2019 Multus Authors
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
//
|
|
|
|
package netutils
|
|
|
|
import (
|
|
"encoding/json"
|
|
"net"
|
|
"testing"
|
|
|
|
"github.com/containernetworking/cni/pkg/skel"
|
|
"github.com/containernetworking/cni/pkg/types/020"
|
|
cni040 "github.com/containernetworking/cni/pkg/types/040"
|
|
cni100 "github.com/containernetworking/cni/pkg/types/100"
|
|
"github.com/containernetworking/plugins/pkg/ns"
|
|
"github.com/containernetworking/plugins/pkg/testutils"
|
|
|
|
"github.com/vishvananda/netlink"
|
|
|
|
. "github.com/onsi/ginkgo"
|
|
. "github.com/onsi/gomega"
|
|
)
|
|
|
|
func TestNetutils(t *testing.T) {
|
|
RegisterFailHandler(Fail)
|
|
RunSpecs(t, "netutils")
|
|
}
|
|
|
|
// helper function
|
|
func testAddRoute(link netlink.Link, ip net.IP, mask net.IPMask, gw net.IP) error {
|
|
dst := &net.IPNet{
|
|
IP: ip,
|
|
Mask: mask,
|
|
}
|
|
route := netlink.Route{LinkIndex: link.Attrs().Index, Dst: dst, Gw: gw}
|
|
return netlink.RouteAdd(&route)
|
|
}
|
|
|
|
func testAddAddr(link netlink.Link, ip net.IP, mask net.IPMask) error {
|
|
return netlink.AddrAdd(link, &netlink.Addr{IPNet: &net.IPNet{IP: ip, Mask: mask}})
|
|
}
|
|
|
|
func testGetResultFromCache(data []byte) []byte {
|
|
var cachedInfo map[string]interface{}
|
|
ExpectWithOffset(1, json.Unmarshal(data, &cachedInfo)).NotTo(HaveOccurred())
|
|
|
|
// try to get result
|
|
_, ok := cachedInfo["result"]
|
|
ExpectWithOffset(1, ok).To(BeTrue())
|
|
|
|
resultJSON, ok := cachedInfo["result"].(map[string]interface{})
|
|
ExpectWithOffset(1, ok).To(BeTrue())
|
|
|
|
resultByte, err := json.Marshal(resultJSON)
|
|
ExpectWithOffset(1, err).NotTo(HaveOccurred())
|
|
|
|
return resultByte
|
|
}
|
|
|
|
func test020ResultHasIPv4DefaultRoute(data []byte) bool {
|
|
resultRaw, err := types020.NewResult(data)
|
|
ExpectWithOffset(1, err).NotTo(HaveOccurred())
|
|
|
|
result, err := types020.GetResult(resultRaw)
|
|
ExpectWithOffset(1, err).NotTo(HaveOccurred())
|
|
|
|
for _, r := range result.IP4.Routes {
|
|
if r.Dst.String() == "0.0.0.0/0" {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
|
|
func test020ResultHasIPv6DefaultRoute(data []byte) bool {
|
|
resultRaw, err := types020.NewResult(data)
|
|
ExpectWithOffset(1, err).NotTo(HaveOccurred())
|
|
|
|
result, err := types020.GetResult(resultRaw)
|
|
ExpectWithOffset(1, err).NotTo(HaveOccurred())
|
|
|
|
for _, r := range result.IP6.Routes {
|
|
if r.Dst.String() == "::/0" {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
|
|
func test040ResultHasIPv4DefaultRoute(data []byte) bool {
|
|
resultRaw, err := cni040.NewResult(data)
|
|
ExpectWithOffset(1, err).NotTo(HaveOccurred())
|
|
|
|
result, err := cni040.GetResult(resultRaw)
|
|
ExpectWithOffset(1, err).NotTo(HaveOccurred())
|
|
|
|
for _, r := range result.Routes {
|
|
if r.Dst.String() == "0.0.0.0/0" {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
|
|
func test040ResultHasIPv6DefaultRoute(data []byte) bool {
|
|
resultRaw, err := cni040.NewResult(data)
|
|
ExpectWithOffset(1, err).NotTo(HaveOccurred())
|
|
|
|
result, err := cni040.GetResult(resultRaw)
|
|
ExpectWithOffset(1, err).NotTo(HaveOccurred())
|
|
|
|
for _, r := range result.Routes {
|
|
if r.Dst.String() == "::/0" {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
|
|
func test100ResultHasIPv4DefaultRoute(data []byte) bool {
|
|
resultRaw, err := cni100.NewResult(data)
|
|
ExpectWithOffset(1, err).NotTo(HaveOccurred())
|
|
|
|
result, err := cni100.GetResult(resultRaw)
|
|
ExpectWithOffset(1, err).NotTo(HaveOccurred())
|
|
|
|
for _, r := range result.Routes {
|
|
if r.Dst.String() == "0.0.0.0/0" {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
|
|
func test100ResultHasIPv6DefaultRoute(data []byte) bool {
|
|
resultRaw, err := cni100.NewResult(data)
|
|
ExpectWithOffset(1, err).NotTo(HaveOccurred())
|
|
|
|
result, err := cni100.GetResult(resultRaw)
|
|
ExpectWithOffset(1, err).NotTo(HaveOccurred())
|
|
|
|
for _, r := range result.Routes {
|
|
if r.Dst.String() == "::/0" {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
|
|
var _ = Describe("netutil netlink function testing", func() {
|
|
const IFNAME string = "dummy0"
|
|
var IFMAC net.HardwareAddr = net.HardwareAddr([]byte{0x02, 0x66, 0x7d, 0xe3, 0x14, 0x1c})
|
|
var originalNS ns.NetNS
|
|
var targetNS ns.NetNS
|
|
|
|
BeforeEach(func() {
|
|
// Create a new NetNS so we don't modify the host
|
|
var err error
|
|
originalNS, err = testutils.NewNS()
|
|
Expect(err).NotTo(HaveOccurred())
|
|
|
|
targetNS, err = testutils.NewNS()
|
|
Expect(err).NotTo(HaveOccurred())
|
|
|
|
Expect(targetNS.Do(func(ns.NetNS) error {
|
|
defer GinkgoRecover()
|
|
|
|
Expect(netlink.LinkAdd(&netlink.Dummy{
|
|
LinkAttrs: netlink.LinkAttrs{
|
|
Name: IFNAME,
|
|
HardwareAddr: IFMAC,
|
|
Index: 10,
|
|
},
|
|
})).Should(Succeed())
|
|
|
|
_, err = netlink.LinkByName(IFNAME)
|
|
Expect(err).NotTo(HaveOccurred())
|
|
|
|
return nil
|
|
})).Should(Succeed())
|
|
})
|
|
|
|
AfterEach(func() {
|
|
Expect(originalNS.Close()).To(Succeed())
|
|
})
|
|
|
|
Context("test DeleteDefaultGW", func() {
|
|
It("verify default gateway is removed", func() {
|
|
Expect(targetNS.Do(func(ns.NetNS) error {
|
|
defer GinkgoRecover()
|
|
link, err := netlink.LinkByName(IFNAME)
|
|
Expect(err).NotTo(HaveOccurred())
|
|
Expect(netlink.LinkSetUp(link)).NotTo(HaveOccurred())
|
|
|
|
// addr 10.0.0.2/24
|
|
Expect(testAddAddr(link, net.IPv4(10, 0, 0, 2), net.CIDRMask(24, 32))).Should(Succeed())
|
|
|
|
// add default gateway into IFNAME
|
|
Expect(testAddRoute(link,
|
|
net.IPv4(0, 0, 0, 0), net.CIDRMask(0, 0),
|
|
net.IPv4(10, 0, 0, 1))).Should(Succeed())
|
|
|
|
//"dst": "10.0.0.0/16"
|
|
Expect(testAddRoute(link,
|
|
net.IPv4(10, 0, 0, 0), net.CIDRMask(16, 32),
|
|
net.IPv4(10, 0, 0, 1))).Should(Succeed())
|
|
|
|
return nil
|
|
})).Should(Succeed())
|
|
|
|
args := &skel.CmdArgs{
|
|
ContainerID: "dummy",
|
|
Netns: targetNS.Path(),
|
|
IfName: IFNAME,
|
|
}
|
|
|
|
Expect(originalNS.Do(func(ns.NetNS) error {
|
|
defer GinkgoRecover()
|
|
|
|
Expect(DeleteDefaultGW(args.Netns, IFNAME)).Should(Succeed())
|
|
return nil
|
|
})).Should(Succeed())
|
|
})
|
|
})
|
|
|
|
Context("test SetDefaultGW", func() {
|
|
It("verify default gateway is removed", func() {
|
|
Expect(targetNS.Do(func(ns.NetNS) error {
|
|
defer GinkgoRecover()
|
|
link, err := netlink.LinkByName(IFNAME)
|
|
Expect(err).NotTo(HaveOccurred())
|
|
Expect(netlink.LinkSetUp(link)).Should(Succeed())
|
|
|
|
// addr 10.0.0.2/24
|
|
Expect(testAddAddr(link, net.IPv4(10, 0, 0, 2), net.CIDRMask(24, 32))).Should(Succeed())
|
|
|
|
//"dst": "10.0.0.0/16"
|
|
Expect(testAddRoute(link,
|
|
net.IPv4(10, 0, 0, 0), net.CIDRMask(16, 32),
|
|
net.IPv4(10, 0, 0, 1))).Should(Succeed())
|
|
|
|
return nil
|
|
})).Should(Succeed())
|
|
|
|
args := &skel.CmdArgs{
|
|
ContainerID: "dummy",
|
|
Netns: targetNS.Path(),
|
|
IfName: IFNAME,
|
|
}
|
|
|
|
Expect(originalNS.Do(func(ns.NetNS) error {
|
|
defer GinkgoRecover()
|
|
|
|
Expect(SetDefaultGW(args.Netns, IFNAME, []net.IP{net.ParseIP("10.0.0.1")})).Should(Succeed())
|
|
return nil
|
|
})).Should(Succeed())
|
|
})
|
|
})
|
|
|
|
})
|
|
|
|
var _ = Describe("netutil cnicache function testing", func() {
|
|
Context("test DeleteDefaultGWCache", func() {
|
|
It("verify ipv4 default gateway is removed from CNI 0.1.0/0.2.0 results", func() {
|
|
origResult := []byte(`{
|
|
"kind": "cniCacheV1",
|
|
"result": {
|
|
"dns": {},
|
|
"ip4": {
|
|
"ip": "10.1.1.103/24",
|
|
"routes": [
|
|
{
|
|
"dst": "20.0.0.0/24",
|
|
"gw": "10.1.1.1"
|
|
},
|
|
{
|
|
"dst": "0.0.0.0/0",
|
|
"gw": "10.1.1.1"
|
|
},
|
|
{
|
|
"dst": "30.0.0.0/24",
|
|
"gw": "10.1.1.1"
|
|
}
|
|
]
|
|
},
|
|
"ip6": {
|
|
"ip": "10::1:1:103/64",
|
|
"routes": [
|
|
{
|
|
"dst": "20::0:0:0/56",
|
|
"gw": "10::1:1:1"
|
|
},
|
|
{
|
|
"dst": "::0/0",
|
|
"gw": "10::1:1:1"
|
|
},
|
|
{
|
|
"dst": "30::0:0:0/64",
|
|
"gw": "10::1:1:1"
|
|
}
|
|
]
|
|
}
|
|
}
|
|
}`)
|
|
newResult, err := deleteDefaultGWCacheBytes(origResult, true, false)
|
|
Expect(err).NotTo(HaveOccurred())
|
|
|
|
Expect(test020ResultHasIPv4DefaultRoute(testGetResultFromCache(newResult))).To(BeFalse())
|
|
Expect(test020ResultHasIPv6DefaultRoute(testGetResultFromCache(newResult))).To(BeTrue())
|
|
|
|
// Simplified CNI Cache with 010/020 Result
|
|
type CNICacheResult020 struct {
|
|
Kind string `json:"kind"`
|
|
Result struct {
|
|
IP4 struct {
|
|
IP string `json:"ip"`
|
|
Routes []struct {
|
|
Dst string `json:"dst"`
|
|
Gw string `json:"gw"`
|
|
} `json:"routes"`
|
|
} `json:"ip4"`
|
|
IP6 struct {
|
|
IP string `json:"ip"`
|
|
Routes []struct {
|
|
Dst string `json:"dst"`
|
|
Gw string `json:"gw"`
|
|
} `json:"routes"`
|
|
} `json:"ip6"`
|
|
} `json:"result"`
|
|
}
|
|
result := CNICacheResult020{}
|
|
Expect(json.Unmarshal(newResult, &result)).NotTo(HaveOccurred())
|
|
Expect(len(result.Result.IP4.Routes)).To(Equal(2))
|
|
Expect(len(result.Result.IP6.Routes)).To(Equal(3))
|
|
})
|
|
|
|
It("verify ipv6 default gateway is removed from CNI 0.1.0/0.2.0 results", func() {
|
|
origResult := []byte(`{
|
|
"kind": "cniCacheV1",
|
|
"result": {
|
|
"dns": {},
|
|
"ip4": {
|
|
"ip": "10.1.1.103/24",
|
|
"routes": [
|
|
{
|
|
"dst": "20.0.0.0/24",
|
|
"gw": "10.1.1.1"
|
|
},
|
|
{
|
|
"dst": "0.0.0.0/0",
|
|
"gw": "10.1.1.1"
|
|
},
|
|
{
|
|
"dst": "30.0.0.0/24",
|
|
"gw": "10.1.1.1"
|
|
}
|
|
]
|
|
},
|
|
"ip6": {
|
|
"ip": "10::1:1:103/64",
|
|
"routes": [
|
|
{
|
|
"dst": "20::0:0:0/56",
|
|
"gw": "10::1:1:1"
|
|
},
|
|
{
|
|
"dst": "::0/0",
|
|
"gw": "10::1:1:1"
|
|
},
|
|
{
|
|
"dst": "30::0:0:0/64",
|
|
"gw": "10::1:1:1"
|
|
}
|
|
]
|
|
}
|
|
}
|
|
}`)
|
|
newResult, err := deleteDefaultGWCacheBytes(origResult, false, true)
|
|
Expect(err).NotTo(HaveOccurred())
|
|
|
|
Expect(test020ResultHasIPv4DefaultRoute(testGetResultFromCache(newResult))).To(BeTrue())
|
|
Expect(test020ResultHasIPv6DefaultRoute(testGetResultFromCache(newResult))).To(BeFalse())
|
|
|
|
// Simplified CNI Cache with 010/020 Result
|
|
type CNICacheResult020 struct {
|
|
Kind string `json:"kind"`
|
|
Result struct {
|
|
IP4 struct {
|
|
IP string `json:"ip"`
|
|
Routes []struct {
|
|
Dst string `json:"dst"`
|
|
Gw string `json:"gw"`
|
|
} `json:"routes"`
|
|
} `json:"ip4"`
|
|
IP6 struct {
|
|
IP string `json:"ip"`
|
|
Routes []struct {
|
|
Dst string `json:"dst"`
|
|
Gw string `json:"gw"`
|
|
} `json:"routes"`
|
|
} `json:"ip6"`
|
|
} `json:"result"`
|
|
}
|
|
result := CNICacheResult020{}
|
|
Expect(json.Unmarshal(newResult, &result)).NotTo(HaveOccurred())
|
|
Expect(len(result.Result.IP4.Routes)).To(Equal(3))
|
|
Expect(len(result.Result.IP6.Routes)).To(Equal(2))
|
|
})
|
|
|
|
It("verify ipv4 default gateway is removed from CNI 0.3.0/0.3.1/0.4.0 results", func() {
|
|
origResult := []byte(`{
|
|
"kind": "cniCacheV1",
|
|
"result": {
|
|
"cniVersion": "0.3.1",
|
|
"dns": {},
|
|
"interfaces": [
|
|
{
|
|
"mac": "0a:c2:e6:3d:45:17",
|
|
"name": "net1",
|
|
"sandbox": "/var/run/netns/bb74fcb9-989a-4589-b2df-ddd0384a8ee5"
|
|
}
|
|
],
|
|
"ips": [
|
|
{
|
|
"address": "10.1.1.103/24",
|
|
"interface": 0,
|
|
"version": "4"
|
|
},
|
|
{
|
|
"address": "10::1:1:103/64",
|
|
"interface": 0,
|
|
"version": "6"
|
|
}
|
|
],
|
|
"routes": [
|
|
{
|
|
"dst": "20.0.0.0/24",
|
|
"gw": "10.1.1.1"
|
|
},
|
|
{
|
|
"dst": "0.0.0.0/0",
|
|
"gw": "10.1.1.1"
|
|
},
|
|
{
|
|
"dst": "30.0.0.0/24",
|
|
"gw": "10.1.1.1"
|
|
},
|
|
{
|
|
"dst": "20::0:0:0/56",
|
|
"gw": "10::1:1:1"
|
|
},
|
|
{
|
|
"dst": "::0/0",
|
|
"gw": "10::1:1:1"
|
|
},
|
|
{
|
|
"dst": "30::0:0:0/64",
|
|
"gw": "10::1:1:1"
|
|
}
|
|
]
|
|
}
|
|
}`)
|
|
newResult, err := deleteDefaultGWCacheBytes(origResult, true, false)
|
|
Expect(err).NotTo(HaveOccurred())
|
|
|
|
Expect(test040ResultHasIPv4DefaultRoute(testGetResultFromCache(newResult))).To(BeFalse())
|
|
Expect(test040ResultHasIPv6DefaultRoute(testGetResultFromCache(newResult))).To(BeTrue())
|
|
|
|
// Simplified CNI Cache with 0.3.0/0.3.1/0.4.0 Result
|
|
type CNICacheResult030_040 struct {
|
|
Kind string `json:"kind"`
|
|
Result struct {
|
|
Routes []struct {
|
|
Dst string `json:"dst"`
|
|
Gw string `json:"gw"`
|
|
} `json:"routes"`
|
|
} `json:"result"`
|
|
}
|
|
result := CNICacheResult030_040{}
|
|
Expect(json.Unmarshal(newResult, &result)).NotTo(HaveOccurred())
|
|
Expect(len(result.Result.Routes)).To(Equal(5))
|
|
})
|
|
|
|
It("verify ipv6 default gateway is removed from CNI 0.3.0/0.3.1/0.4.0 results", func() {
|
|
origResult := []byte(`{
|
|
"kind": "cniCacheV1",
|
|
"result": {
|
|
"cniVersion": "0.3.1",
|
|
"dns": {},
|
|
"interfaces": [
|
|
{
|
|
"mac": "0a:c2:e6:3d:45:17",
|
|
"name": "net1",
|
|
"sandbox": "/var/run/netns/bb74fcb9-989a-4589-b2df-ddd0384a8ee5"
|
|
}
|
|
],
|
|
"ips": [
|
|
{
|
|
"address": "10.1.1.103/24",
|
|
"interface": 0,
|
|
"version": "4"
|
|
},
|
|
{
|
|
"address": "10::1:1:103/64",
|
|
"interface": 0,
|
|
"version": "6"
|
|
}
|
|
],
|
|
"routes": [
|
|
{
|
|
"dst": "20.0.0.0/24",
|
|
"gw": "10.1.1.1"
|
|
},
|
|
{
|
|
"dst": "0.0.0.0/0",
|
|
"gw": "10.1.1.1"
|
|
},
|
|
{
|
|
"dst": "30.0.0.0/24",
|
|
"gw": "10.1.1.1"
|
|
},
|
|
{
|
|
"dst": "20::0:0:0/56",
|
|
"gw": "10::1:1:1"
|
|
},
|
|
{
|
|
"dst": "::0/0",
|
|
"gw": "10::1:1:1"
|
|
},
|
|
{
|
|
"dst": "30::0:0:0/64",
|
|
"gw": "10::1:1:1"
|
|
}
|
|
]
|
|
}
|
|
}`)
|
|
newResult, err := deleteDefaultGWCacheBytes(origResult, false, true)
|
|
Expect(err).NotTo(HaveOccurred())
|
|
|
|
Expect(test040ResultHasIPv4DefaultRoute(testGetResultFromCache(newResult))).To(BeTrue())
|
|
Expect(test040ResultHasIPv6DefaultRoute(testGetResultFromCache(newResult))).To(BeFalse())
|
|
|
|
// Simplified CNI Cache with 0.3.0/0.3.1/0.4.0 Result
|
|
type CNICacheResult030_040 struct {
|
|
Kind string `json:"kind"`
|
|
Result struct {
|
|
Routes []struct {
|
|
Dst string `json:"dst"`
|
|
Gw string `json:"gw"`
|
|
} `json:"routes"`
|
|
} `json:"result"`
|
|
}
|
|
result := CNICacheResult030_040{}
|
|
Expect(json.Unmarshal(newResult, &result)).NotTo(HaveOccurred())
|
|
Expect(len(result.Result.Routes)).To(Equal(5))
|
|
})
|
|
|
|
It("verify ipv4 default gateway is removed from CNI 1.0.0 results", func() {
|
|
origResult := []byte(`{
|
|
"kind": "cniCacheV1",
|
|
"result": {
|
|
"cniVersion": "1.0.0",
|
|
"dns": {},
|
|
"interfaces": [
|
|
{
|
|
"mac": "0a:c2:e6:3d:45:17",
|
|
"name": "net1",
|
|
"sandbox": "/var/run/netns/bb74fcb9-989a-4589-b2df-ddd0384a8ee5"
|
|
}
|
|
],
|
|
"ips": [
|
|
{
|
|
"address": "10.1.1.103/24",
|
|
"interface": 0
|
|
},
|
|
{
|
|
"address": "10::1:1:103/64",
|
|
"interface": 0
|
|
}
|
|
],
|
|
"routes": [
|
|
{
|
|
"dst": "20.0.0.0/24",
|
|
"gw": "10.1.1.1"
|
|
},
|
|
{
|
|
"dst": "0.0.0.0/0",
|
|
"gw": "10.1.1.1"
|
|
},
|
|
{
|
|
"dst": "30.0.0.0/24",
|
|
"gw": "10.1.1.1"
|
|
},
|
|
{
|
|
"dst": "20::0:0:0/56",
|
|
"gw": "10::1:1:1"
|
|
},
|
|
{
|
|
"dst": "::0/0",
|
|
"gw": "10::1:1:1"
|
|
},
|
|
{
|
|
"dst": "30::0:0:0/64",
|
|
"gw": "10::1:1:1"
|
|
}
|
|
]
|
|
}
|
|
}`)
|
|
newResult, err := deleteDefaultGWCacheBytes(origResult, true, false)
|
|
Expect(err).NotTo(HaveOccurred())
|
|
|
|
Expect(test100ResultHasIPv4DefaultRoute(testGetResultFromCache(newResult))).To(BeFalse())
|
|
Expect(test100ResultHasIPv6DefaultRoute(testGetResultFromCache(newResult))).To(BeTrue())
|
|
|
|
// Simplified CNI Cache with 1.0.0 Result
|
|
type CNICacheResult100 struct {
|
|
Kind string `json:"kind"`
|
|
Result struct {
|
|
Routes []struct {
|
|
Dst string `json:"dst"`
|
|
Gw string `json:"gw"`
|
|
} `json:"routes"`
|
|
} `json:"result"`
|
|
}
|
|
result := CNICacheResult100{}
|
|
Expect(json.Unmarshal(newResult, &result)).NotTo(HaveOccurred())
|
|
Expect(len(result.Result.Routes)).To(Equal(5))
|
|
})
|
|
|
|
It("verify ipv6 default gateway is removed from CNI 1.0.0 results", func() {
|
|
origResult := []byte(`{
|
|
"kind": "cniCacheV1",
|
|
"result": {
|
|
"cniVersion": "1.0.0",
|
|
"dns": {},
|
|
"interfaces": [
|
|
{
|
|
"mac": "0a:c2:e6:3d:45:17",
|
|
"name": "net1",
|
|
"sandbox": "/var/run/netns/bb74fcb9-989a-4589-b2df-ddd0384a8ee5"
|
|
}
|
|
],
|
|
"ips": [
|
|
{
|
|
"address": "10.1.1.103/24",
|
|
"interface": 0
|
|
},
|
|
{
|
|
"address": "10::1:1:103/64",
|
|
"interface": 0
|
|
}
|
|
],
|
|
"routes": [
|
|
{
|
|
"dst": "20.0.0.0/24",
|
|
"gw": "10.1.1.1"
|
|
},
|
|
{
|
|
"dst": "0.0.0.0/0",
|
|
"gw": "10.1.1.1"
|
|
},
|
|
{
|
|
"dst": "30.0.0.0/24",
|
|
"gw": "10.1.1.1"
|
|
},
|
|
{
|
|
"dst": "20::0:0:0/56",
|
|
"gw": "10::1:1:1"
|
|
},
|
|
{
|
|
"dst": "::0/0",
|
|
"gw": "10::1:1:1"
|
|
},
|
|
{
|
|
"dst": "30::0:0:0/64",
|
|
"gw": "10::1:1:1"
|
|
}
|
|
]
|
|
}
|
|
}`)
|
|
newResult, err := deleteDefaultGWCacheBytes(origResult, false, true)
|
|
Expect(err).NotTo(HaveOccurred())
|
|
|
|
Expect(test100ResultHasIPv4DefaultRoute(testGetResultFromCache(newResult))).To(BeTrue())
|
|
Expect(test100ResultHasIPv6DefaultRoute(testGetResultFromCache(newResult))).To(BeFalse())
|
|
|
|
// Simplified CNI Cache with 1.0.0 Result
|
|
type CNICacheResult100 struct {
|
|
Kind string `json:"kind"`
|
|
Result struct {
|
|
Routes []struct {
|
|
Dst string `json:"dst"`
|
|
Gw string `json:"gw"`
|
|
} `json:"routes"`
|
|
} `json:"result"`
|
|
}
|
|
result := CNICacheResult100{}
|
|
Expect(json.Unmarshal(newResult, &result)).NotTo(HaveOccurred())
|
|
Expect(len(result.Result.Routes)).To(Equal(5))
|
|
})
|
|
|
|
It("verify ipv4 default gateway is added to CNI 0.1.0/0.2.0 results without routes", func() {
|
|
origResult := []byte(`{
|
|
"kind": "cniCacheV1",
|
|
"result": {
|
|
"dns": {},
|
|
"ip4": {
|
|
"ip": "10.1.1.103/24"
|
|
},
|
|
"ip6": {
|
|
"ip": "10::1:1:103/64",
|
|
"routes": [
|
|
{
|
|
"dst": "20::0:0:0/56",
|
|
"gw": "10::1:1:1"
|
|
},
|
|
{
|
|
"dst": "::0/0",
|
|
"gw": "10::1:1:1"
|
|
},
|
|
{
|
|
"dst": "30::0:0:0/64",
|
|
"gw": "10::1:1:1"
|
|
}
|
|
]
|
|
}
|
|
}
|
|
}`)
|
|
newResult, err := addDefaultGWCacheBytes(origResult, []net.IP{net.ParseIP("10.1.1.1")})
|
|
Expect(err).NotTo(HaveOccurred())
|
|
|
|
Expect(test020ResultHasIPv4DefaultRoute(testGetResultFromCache(newResult))).To(BeTrue())
|
|
Expect(test020ResultHasIPv6DefaultRoute(testGetResultFromCache(newResult))).To(BeTrue())
|
|
|
|
// Simplified CNI Cache with 010/020 Result
|
|
type CNICacheResult020 struct {
|
|
Kind string `json:"kind"`
|
|
Result struct {
|
|
IP4 struct {
|
|
IP string `json:"ip"`
|
|
Routes []struct {
|
|
Dst string `json:"dst"`
|
|
Gw string `json:"gw"`
|
|
} `json:"routes"`
|
|
} `json:"ip4"`
|
|
IP6 struct {
|
|
IP string `json:"ip"`
|
|
Routes []struct {
|
|
Dst string `json:"dst"`
|
|
Gw string `json:"gw"`
|
|
} `json:"routes"`
|
|
} `json:"ip6"`
|
|
} `json:"result"`
|
|
}
|
|
result := CNICacheResult020{}
|
|
Expect(json.Unmarshal(newResult, &result)).NotTo(HaveOccurred())
|
|
Expect(len(result.Result.IP4.Routes)).To(Equal(1))
|
|
})
|
|
|
|
It("verify ipv4 default gateway is added to CNI 0.1.0/0.2.0 results", func() {
|
|
origResult := []byte(`{
|
|
"kind": "cniCacheV1",
|
|
"result": {
|
|
"dns": {},
|
|
"ip4": {
|
|
"ip": "10.1.1.103/24",
|
|
"routes": [
|
|
{
|
|
"dst": "20.0.0.0/24",
|
|
"gw": "10.1.1.1"
|
|
},
|
|
{
|
|
"dst": "30.0.0.0/24",
|
|
"gw": "10.1.1.1"
|
|
}
|
|
]
|
|
},
|
|
"ip6": {
|
|
"ip": "10::1:1:103/64",
|
|
"routes": [
|
|
{
|
|
"dst": "20::0:0:0/56",
|
|
"gw": "10::1:1:1"
|
|
},
|
|
{
|
|
"dst": "::0/0",
|
|
"gw": "10::1:1:1"
|
|
},
|
|
{
|
|
"dst": "30::0:0:0/64",
|
|
"gw": "10::1:1:1"
|
|
}
|
|
]
|
|
}
|
|
}
|
|
}`)
|
|
newResult, err := addDefaultGWCacheBytes(origResult, []net.IP{net.ParseIP("10.1.1.1")})
|
|
Expect(err).NotTo(HaveOccurred())
|
|
|
|
Expect(test020ResultHasIPv4DefaultRoute(testGetResultFromCache(newResult))).To(BeTrue())
|
|
Expect(test020ResultHasIPv6DefaultRoute(testGetResultFromCache(newResult))).To(BeTrue())
|
|
|
|
// Simplified CNI Cache with 010/020 Result
|
|
type CNICacheResult020 struct {
|
|
Kind string `json:"kind"`
|
|
Result struct {
|
|
IP4 struct {
|
|
IP string `json:"ip"`
|
|
Routes []struct {
|
|
Dst string `json:"dst"`
|
|
Gw string `json:"gw"`
|
|
} `json:"routes"`
|
|
} `json:"ip4"`
|
|
IP6 struct {
|
|
IP string `json:"ip"`
|
|
Routes []struct {
|
|
Dst string `json:"dst"`
|
|
Gw string `json:"gw"`
|
|
} `json:"routes"`
|
|
} `json:"ip6"`
|
|
} `json:"result"`
|
|
}
|
|
result := CNICacheResult020{}
|
|
Expect(json.Unmarshal(newResult, &result)).NotTo(HaveOccurred())
|
|
Expect(len(result.Result.IP4.Routes)).To(Equal(3))
|
|
})
|
|
|
|
It("verify ipv6 default gateway is added to CNI 0.1.0/0.2.0 results without routes", func() {
|
|
origResult := []byte(`{
|
|
"kind": "cniCacheV1",
|
|
"result": {
|
|
"dns": {},
|
|
"ip4": {
|
|
"ip": "10.1.1.103/24",
|
|
"routes": [
|
|
{
|
|
"dst": "20.0.0.0/24",
|
|
"gw": "10.1.1.1"
|
|
},
|
|
{
|
|
"dst": "0.0.0.0/0",
|
|
"gw": "10.1.1.1"
|
|
},
|
|
{
|
|
"dst": "30.0.0.0/24",
|
|
"gw": "10.1.1.1"
|
|
}
|
|
]
|
|
},
|
|
"ip6": {
|
|
"ip": "10::1:1:103/64"
|
|
}
|
|
}
|
|
}`)
|
|
newResult, err := addDefaultGWCacheBytes(origResult, []net.IP{net.ParseIP("10::1:1:1")})
|
|
Expect(err).NotTo(HaveOccurred())
|
|
|
|
Expect(test020ResultHasIPv4DefaultRoute(testGetResultFromCache(newResult))).To(BeTrue())
|
|
Expect(test020ResultHasIPv6DefaultRoute(testGetResultFromCache(newResult))).To(BeTrue())
|
|
|
|
// Simplified CNI Cache with 010/020 Result
|
|
type CNICacheResult020 struct {
|
|
Kind string `json:"kind"`
|
|
Result struct {
|
|
IP4 struct {
|
|
IP string `json:"ip"`
|
|
Routes []struct {
|
|
Dst string `json:"dst"`
|
|
Gw string `json:"gw"`
|
|
} `json:"routes"`
|
|
} `json:"ip4"`
|
|
IP6 struct {
|
|
IP string `json:"ip"`
|
|
Routes []struct {
|
|
Dst string `json:"dst"`
|
|
Gw string `json:"gw"`
|
|
} `json:"routes"`
|
|
} `json:"ip6"`
|
|
} `json:"result"`
|
|
}
|
|
result := CNICacheResult020{}
|
|
Expect(json.Unmarshal(newResult, &result)).NotTo(HaveOccurred())
|
|
Expect(len(result.Result.IP6.Routes)).To(Equal(1))
|
|
})
|
|
|
|
It("verify ipv6 default gateway is added to CNI 0.1.0/0.2.0 results", func() {
|
|
origResult := []byte(`{
|
|
"kind": "cniCacheV1",
|
|
"result": {
|
|
"dns": {},
|
|
"ip4": {
|
|
"ip": "10.1.1.103/24",
|
|
"routes": [
|
|
{
|
|
"dst": "20.0.0.0/24",
|
|
"gw": "10.1.1.1"
|
|
},
|
|
{
|
|
"dst": "0.0.0.0/0",
|
|
"gw": "10.1.1.1"
|
|
},
|
|
{
|
|
"dst": "30.0.0.0/24",
|
|
"gw": "10.1.1.1"
|
|
}
|
|
]
|
|
},
|
|
"ip6": {
|
|
"ip": "10::1:1:103/64",
|
|
"routes": [
|
|
{
|
|
"dst": "20::0:0:0/56",
|
|
"gw": "10::1:1:1"
|
|
},
|
|
{
|
|
"dst": "30::0:0:0/64",
|
|
"gw": "10::1:1:1"
|
|
}
|
|
]
|
|
}
|
|
}
|
|
}`)
|
|
newResult, err := addDefaultGWCacheBytes(origResult, []net.IP{net.ParseIP("10::1:1:1")})
|
|
Expect(err).NotTo(HaveOccurred())
|
|
|
|
Expect(test020ResultHasIPv4DefaultRoute(testGetResultFromCache(newResult))).To(BeTrue())
|
|
Expect(test020ResultHasIPv6DefaultRoute(testGetResultFromCache(newResult))).To(BeTrue())
|
|
|
|
// Simplified CNI Cache with 010/020 Result
|
|
type CNICacheResult020 struct {
|
|
Kind string `json:"kind"`
|
|
Result struct {
|
|
IP4 struct {
|
|
IP string `json:"ip"`
|
|
Routes []struct {
|
|
Dst string `json:"dst"`
|
|
Gw string `json:"gw"`
|
|
} `json:"routes"`
|
|
} `json:"ip4"`
|
|
IP6 struct {
|
|
IP string `json:"ip"`
|
|
Routes []struct {
|
|
Dst string `json:"dst"`
|
|
Gw string `json:"gw"`
|
|
} `json:"routes"`
|
|
} `json:"ip6"`
|
|
} `json:"result"`
|
|
}
|
|
result := CNICacheResult020{}
|
|
Expect(json.Unmarshal(newResult, &result)).NotTo(HaveOccurred())
|
|
Expect(len(result.Result.IP6.Routes)).To(Equal(3))
|
|
})
|
|
|
|
It("verify ipv4 default gateway is added to CNI 0.3.0/0.3.1/0.4.0 results without routes", func() {
|
|
origResult := []byte(`{
|
|
"kind": "cniCacheV1",
|
|
"result": {
|
|
"cniVersion": "0.3.1",
|
|
"dns": {},
|
|
"interfaces": [
|
|
{
|
|
"mac": "0a:c2:e6:3d:45:17",
|
|
"name": "net1",
|
|
"sandbox": "/var/run/netns/bb74fcb9-989a-4589-b2df-ddd0384a8ee5"
|
|
}
|
|
],
|
|
"ips": [
|
|
{
|
|
"address": "10.1.1.103/24",
|
|
"interface": 0,
|
|
"version": "4"
|
|
},
|
|
{
|
|
"address": "10::1:1:103/64",
|
|
"interface": 0,
|
|
"version": "6"
|
|
}
|
|
]
|
|
}
|
|
}`)
|
|
newResult, err := addDefaultGWCacheBytes(origResult, []net.IP{net.ParseIP("10.1.1.1")})
|
|
Expect(err).NotTo(HaveOccurred())
|
|
|
|
Expect(test040ResultHasIPv4DefaultRoute(testGetResultFromCache(newResult))).To(BeTrue())
|
|
Expect(test040ResultHasIPv6DefaultRoute(testGetResultFromCache(newResult))).To(BeFalse())
|
|
|
|
// Simplified CNI Cache with 0.3.0/0.3.1/0.4.0 Result
|
|
type CNICacheResult030_040 struct {
|
|
Kind string `json:"kind"`
|
|
Result struct {
|
|
Routes []struct {
|
|
Dst string `json:"dst"`
|
|
Gw string `json:"gw"`
|
|
} `json:"routes"`
|
|
} `json:"result"`
|
|
}
|
|
result := CNICacheResult030_040{}
|
|
Expect(json.Unmarshal(newResult, &result)).NotTo(HaveOccurred())
|
|
Expect(len(result.Result.Routes)).To(Equal(1))
|
|
})
|
|
|
|
It("verify ipv4 default gateway is added to CNI 0.3.0/0.3.1/0.4.0 results", func() {
|
|
origResult := []byte(`{
|
|
"kind": "cniCacheV1",
|
|
"result": {
|
|
"cniVersion": "0.3.1",
|
|
"dns": {},
|
|
"interfaces": [
|
|
{
|
|
"mac": "0a:c2:e6:3d:45:17",
|
|
"name": "net1",
|
|
"sandbox": "/var/run/netns/bb74fcb9-989a-4589-b2df-ddd0384a8ee5"
|
|
}
|
|
],
|
|
"ips": [
|
|
{
|
|
"address": "10.1.1.103/24",
|
|
"interface": 0,
|
|
"version": "4"
|
|
},
|
|
{
|
|
"address": "10::1:1:103/64",
|
|
"interface": 0,
|
|
"version": "6"
|
|
}
|
|
],
|
|
"routes": [
|
|
{
|
|
"dst": "20.0.0.0/24",
|
|
"gw": "10.1.1.1"
|
|
},
|
|
{
|
|
"dst": "30.0.0.0/24",
|
|
"gw": "10.1.1.1"
|
|
},
|
|
{
|
|
"dst": "20::0:0:0/56",
|
|
"gw": "10::1:1:1"
|
|
},
|
|
{
|
|
"dst": "30::0:0:0/64",
|
|
"gw": "10::1:1:1"
|
|
}
|
|
]
|
|
}
|
|
}`)
|
|
newResult, err := addDefaultGWCacheBytes(origResult, []net.IP{net.ParseIP("10.1.1.1")})
|
|
Expect(err).NotTo(HaveOccurred())
|
|
|
|
Expect(test040ResultHasIPv4DefaultRoute(testGetResultFromCache(newResult))).To(BeTrue())
|
|
Expect(test040ResultHasIPv6DefaultRoute(testGetResultFromCache(newResult))).To(BeFalse())
|
|
|
|
// Simplified CNI Cache with 0.3.0/0.3.1/0.4.0 Result
|
|
type CNICacheResult030_040 struct {
|
|
Kind string `json:"kind"`
|
|
Result struct {
|
|
Routes []struct {
|
|
Dst string `json:"dst"`
|
|
Gw string `json:"gw"`
|
|
} `json:"routes"`
|
|
} `json:"result"`
|
|
}
|
|
result := CNICacheResult030_040{}
|
|
Expect(json.Unmarshal(newResult, &result)).NotTo(HaveOccurred())
|
|
Expect(len(result.Result.Routes)).To(Equal(5))
|
|
})
|
|
|
|
It("verify ipv6 default gateway is added to CNI 0.3.0/0.3.1/0.4.0 results without routes", func() {
|
|
origResult := []byte(`{
|
|
"kind": "cniCacheV1",
|
|
"result": {
|
|
"cniVersion": "0.3.1",
|
|
"dns": {},
|
|
"interfaces": [
|
|
{
|
|
"mac": "0a:c2:e6:3d:45:17",
|
|
"name": "net1",
|
|
"sandbox": "/var/run/netns/bb74fcb9-989a-4589-b2df-ddd0384a8ee5"
|
|
}
|
|
],
|
|
"ips": [
|
|
{
|
|
"address": "10.1.1.103/24",
|
|
"interface": 0,
|
|
"version": "4"
|
|
},
|
|
{
|
|
"address": "10::1:1:103/64",
|
|
"interface": 0,
|
|
"version": "6"
|
|
}
|
|
]
|
|
}
|
|
}`)
|
|
newResult, err := addDefaultGWCacheBytes(origResult, []net.IP{net.ParseIP("10::1:1:1")})
|
|
Expect(err).NotTo(HaveOccurred())
|
|
|
|
Expect(test040ResultHasIPv4DefaultRoute(testGetResultFromCache(newResult))).To(BeFalse())
|
|
Expect(test040ResultHasIPv6DefaultRoute(testGetResultFromCache(newResult))).To(BeTrue())
|
|
|
|
// Simplified CNI Cache with 0.3.0/0.3.1/0.4.0 Result
|
|
type CNICacheResult030_040 struct {
|
|
Kind string `json:"kind"`
|
|
Result struct {
|
|
Routes []struct {
|
|
Dst string `json:"dst"`
|
|
Gw string `json:"gw"`
|
|
} `json:"routes"`
|
|
} `json:"result"`
|
|
}
|
|
result := CNICacheResult030_040{}
|
|
Expect(json.Unmarshal(newResult, &result)).NotTo(HaveOccurred())
|
|
Expect(len(result.Result.Routes)).To(Equal(1))
|
|
})
|
|
|
|
It("verify ipv6 default gateway is added to CNI 0.3.0/0.3.1/0.4.0 results", func() {
|
|
origResult := []byte(`{
|
|
"kind": "cniCacheV1",
|
|
"result": {
|
|
"cniVersion": "0.3.1",
|
|
"dns": {},
|
|
"interfaces": [
|
|
{
|
|
"mac": "0a:c2:e6:3d:45:17",
|
|
"name": "net1",
|
|
"sandbox": "/var/run/netns/bb74fcb9-989a-4589-b2df-ddd0384a8ee5"
|
|
}
|
|
],
|
|
"ips": [
|
|
{
|
|
"address": "10.1.1.103/24",
|
|
"interface": 0,
|
|
"version": "4"
|
|
},
|
|
{
|
|
"address": "10::1:1:103/64",
|
|
"interface": 0,
|
|
"version": "6"
|
|
}
|
|
],
|
|
"routes": [
|
|
{
|
|
"dst": "20.0.0.0/24",
|
|
"gw": "10.1.1.1"
|
|
},
|
|
{
|
|
"dst": "30.0.0.0/24",
|
|
"gw": "10.1.1.1"
|
|
},
|
|
{
|
|
"dst": "0.0.0.0/0",
|
|
"gw": "10.1.1.1"
|
|
},
|
|
{
|
|
"dst": "20::0:0:0/56",
|
|
"gw": "10::1:1:1"
|
|
},
|
|
{
|
|
"dst": "30::0:0:0/64",
|
|
"gw": "10::1:1:1"
|
|
}
|
|
]
|
|
}
|
|
}`)
|
|
newResult, err := addDefaultGWCacheBytes(origResult, []net.IP{net.ParseIP("10::1:1:1")})
|
|
Expect(err).NotTo(HaveOccurred())
|
|
|
|
Expect(test040ResultHasIPv4DefaultRoute(testGetResultFromCache(newResult))).To(BeTrue())
|
|
Expect(test040ResultHasIPv6DefaultRoute(testGetResultFromCache(newResult))).To(BeTrue())
|
|
|
|
// Simplified CNI Cache with 0.3.0/0.3.1/0.4.0 Result
|
|
type CNICacheResult030_040 struct {
|
|
Kind string `json:"kind"`
|
|
Result struct {
|
|
Routes []struct {
|
|
Dst string `json:"dst"`
|
|
Gw string `json:"gw"`
|
|
} `json:"routes"`
|
|
} `json:"result"`
|
|
}
|
|
result := CNICacheResult030_040{}
|
|
Expect(json.Unmarshal(newResult, &result)).NotTo(HaveOccurred())
|
|
Expect(len(result.Result.Routes)).To(Equal(6))
|
|
})
|
|
|
|
It("verify ipv4 default gateway is added to CNI 1.0.0 results without routes", func() {
|
|
origResult := []byte(`{
|
|
"kind": "cniCacheV1",
|
|
"result": {
|
|
"cniVersion": "1.0.0",
|
|
"dns": {},
|
|
"interfaces": [
|
|
{
|
|
"mac": "0a:c2:e6:3d:45:17",
|
|
"name": "net1",
|
|
"sandbox": "/var/run/netns/bb74fcb9-989a-4589-b2df-ddd0384a8ee5"
|
|
}
|
|
],
|
|
"ips": [
|
|
{
|
|
"address": "10.1.1.103/24",
|
|
"interface": 0
|
|
},
|
|
{
|
|
"address": "10::1:1:103/64",
|
|
"interface": 0
|
|
}
|
|
]
|
|
}
|
|
}`)
|
|
newResult, err := addDefaultGWCacheBytes(origResult, []net.IP{net.ParseIP("10.1.1.1")})
|
|
Expect(err).NotTo(HaveOccurred())
|
|
|
|
Expect(test100ResultHasIPv4DefaultRoute(testGetResultFromCache(newResult))).To(BeTrue())
|
|
Expect(test100ResultHasIPv6DefaultRoute(testGetResultFromCache(newResult))).To(BeFalse())
|
|
|
|
// Simplified CNI Cache with 1.0.0 Result
|
|
type CNICacheResult100 struct {
|
|
Kind string `json:"kind"`
|
|
Result struct {
|
|
Routes []struct {
|
|
Dst string `json:"dst"`
|
|
Gw string `json:"gw"`
|
|
} `json:"routes"`
|
|
} `json:"result"`
|
|
}
|
|
result := CNICacheResult100{}
|
|
Expect(json.Unmarshal(newResult, &result)).NotTo(HaveOccurred())
|
|
Expect(len(result.Result.Routes)).To(Equal(1))
|
|
})
|
|
|
|
It("verify ipv4 default gateway is added to CNI 1.0.0 results", func() {
|
|
origResult := []byte(`{
|
|
"kind": "cniCacheV1",
|
|
"result": {
|
|
"cniVersion": "1.0.0",
|
|
"dns": {},
|
|
"interfaces": [
|
|
{
|
|
"mac": "0a:c2:e6:3d:45:17",
|
|
"name": "net1",
|
|
"sandbox": "/var/run/netns/bb74fcb9-989a-4589-b2df-ddd0384a8ee5"
|
|
}
|
|
],
|
|
"ips": [
|
|
{
|
|
"address": "10.1.1.103/24",
|
|
"interface": 0
|
|
},
|
|
{
|
|
"address": "10::1:1:103/64",
|
|
"interface": 0
|
|
}
|
|
],
|
|
"routes": [
|
|
{
|
|
"dst": "20.0.0.0/24",
|
|
"gw": "10.1.1.1"
|
|
},
|
|
{
|
|
"dst": "30.0.0.0/24",
|
|
"gw": "10.1.1.1"
|
|
},
|
|
{
|
|
"dst": "20::0:0:0/56",
|
|
"gw": "10::1:1:1"
|
|
},
|
|
{
|
|
"dst": "30::0:0:0/64",
|
|
"gw": "10::1:1:1"
|
|
}
|
|
]
|
|
}
|
|
}`)
|
|
newResult, err := addDefaultGWCacheBytes(origResult, []net.IP{net.ParseIP("10.1.1.1")})
|
|
Expect(err).NotTo(HaveOccurred())
|
|
|
|
Expect(test100ResultHasIPv4DefaultRoute(testGetResultFromCache(newResult))).To(BeTrue())
|
|
Expect(test100ResultHasIPv6DefaultRoute(testGetResultFromCache(newResult))).To(BeFalse())
|
|
|
|
// Simplified CNI Cache with 1.0.0 Result
|
|
type CNICacheResult100 struct {
|
|
Kind string `json:"kind"`
|
|
Result struct {
|
|
Routes []struct {
|
|
Dst string `json:"dst"`
|
|
Gw string `json:"gw"`
|
|
} `json:"routes"`
|
|
} `json:"result"`
|
|
}
|
|
result := CNICacheResult100{}
|
|
Expect(json.Unmarshal(newResult, &result)).NotTo(HaveOccurred())
|
|
Expect(len(result.Result.Routes)).To(Equal(5))
|
|
})
|
|
|
|
It("verify ipv6 default gateway is added to CNI 1.0.0 results without routes", func() {
|
|
origResult := []byte(`{
|
|
"kind": "cniCacheV1",
|
|
"result": {
|
|
"cniVersion": "1.0.0",
|
|
"dns": {},
|
|
"interfaces": [
|
|
{
|
|
"mac": "0a:c2:e6:3d:45:17",
|
|
"name": "net1",
|
|
"sandbox": "/var/run/netns/bb74fcb9-989a-4589-b2df-ddd0384a8ee5"
|
|
}
|
|
],
|
|
"ips": [
|
|
{
|
|
"address": "10.1.1.103/24",
|
|
"interface": 0
|
|
},
|
|
{
|
|
"address": "10::1:1:103/64",
|
|
"interface": 0
|
|
}
|
|
]
|
|
}
|
|
}`)
|
|
newResult, err := addDefaultGWCacheBytes(origResult, []net.IP{net.ParseIP("10::1:1:1")})
|
|
Expect(err).NotTo(HaveOccurred())
|
|
|
|
Expect(test100ResultHasIPv4DefaultRoute(testGetResultFromCache(newResult))).To(BeFalse())
|
|
Expect(test100ResultHasIPv6DefaultRoute(testGetResultFromCache(newResult))).To(BeTrue())
|
|
|
|
// Simplified CNI Cache with 1.0.0 Result
|
|
type CNICacheResult100 struct {
|
|
Kind string `json:"kind"`
|
|
Result struct {
|
|
Routes []struct {
|
|
Dst string `json:"dst"`
|
|
Gw string `json:"gw"`
|
|
} `json:"routes"`
|
|
} `json:"result"`
|
|
}
|
|
result := CNICacheResult100{}
|
|
Expect(json.Unmarshal(newResult, &result)).NotTo(HaveOccurred())
|
|
Expect(len(result.Result.Routes)).To(Equal(1))
|
|
})
|
|
|
|
It("verify ipv6 default gateway is added to CNI 1.0.0 results", func() {
|
|
origResult := []byte(`{
|
|
"kind": "cniCacheV1",
|
|
"result": {
|
|
"cniVersion": "1.0.0",
|
|
"dns": {},
|
|
"interfaces": [
|
|
{
|
|
"mac": "0a:c2:e6:3d:45:17",
|
|
"name": "net1",
|
|
"sandbox": "/var/run/netns/bb74fcb9-989a-4589-b2df-ddd0384a8ee5"
|
|
}
|
|
],
|
|
"ips": [
|
|
{
|
|
"address": "10.1.1.103/24",
|
|
"interface": 0
|
|
},
|
|
{
|
|
"address": "10::1:1:103/64",
|
|
"interface": 0
|
|
}
|
|
],
|
|
"routes": [
|
|
{
|
|
"dst": "20.0.0.0/24",
|
|
"gw": "10.1.1.1"
|
|
},
|
|
{
|
|
"dst": "30.0.0.0/24",
|
|
"gw": "10.1.1.1"
|
|
},
|
|
{
|
|
"dst": "0.0.0.0/0",
|
|
"gw": "10.1.1.1"
|
|
},
|
|
{
|
|
"dst": "20::0:0:0/56",
|
|
"gw": "10::1:1:1"
|
|
},
|
|
{
|
|
"dst": "30::0:0:0/64",
|
|
"gw": "10::1:1:1"
|
|
}
|
|
]
|
|
}
|
|
}`)
|
|
newResult, err := addDefaultGWCacheBytes(origResult, []net.IP{net.ParseIP("10::1:1:1")})
|
|
Expect(err).NotTo(HaveOccurred())
|
|
|
|
Expect(test100ResultHasIPv4DefaultRoute(testGetResultFromCache(newResult))).To(BeTrue())
|
|
Expect(test100ResultHasIPv6DefaultRoute(testGetResultFromCache(newResult))).To(BeTrue())
|
|
|
|
// Simplified CNI Cache with 1.0.0 Result
|
|
type CNICacheResult100 struct {
|
|
Kind string `json:"kind"`
|
|
Result struct {
|
|
Routes []struct {
|
|
Dst string `json:"dst"`
|
|
Gw string `json:"gw"`
|
|
} `json:"routes"`
|
|
} `json:"result"`
|
|
}
|
|
result := CNICacheResult100{}
|
|
Expect(json.Unmarshal(newResult, &result)).NotTo(HaveOccurred())
|
|
Expect(len(result.Result.Routes)).To(Equal(6))
|
|
})
|
|
|
|
})
|
|
})
|