github.com/rita33cool1/iot-system-gateway@v0.0.0-20200911033302-e65bde238cc5/docker-engine/integration/network/helpers.go (about) 1 package network 2 3 import ( 4 "context" 5 "fmt" 6 "testing" 7 8 "github.com/docker/docker/api/types" 9 "github.com/docker/docker/client" 10 "github.com/docker/docker/pkg/parsers/kernel" 11 "github.com/gotestyourself/gotestyourself/assert/cmp" 12 "github.com/gotestyourself/gotestyourself/icmd" 13 ) 14 15 // CreateMasterDummy creates a dummy network interface 16 func CreateMasterDummy(t *testing.T, master string) { 17 // ip link add <dummy_name> type dummy 18 icmd.RunCommand("ip", "link", "add", master, "type", "dummy").Assert(t, icmd.Success) 19 icmd.RunCommand("ip", "link", "set", master, "up").Assert(t, icmd.Success) 20 } 21 22 // CreateVlanInterface creates a vlan network interface 23 func CreateVlanInterface(t *testing.T, master, slave, id string) { 24 // ip link add link <master> name <master>.<VID> type vlan id <VID> 25 icmd.RunCommand("ip", "link", "add", "link", master, "name", slave, "type", "vlan", "id", id).Assert(t, icmd.Success) 26 // ip link set <sub_interface_name> up 27 icmd.RunCommand("ip", "link", "set", slave, "up").Assert(t, icmd.Success) 28 } 29 30 // DeleteInterface deletes a network interface 31 func DeleteInterface(t *testing.T, ifName string) { 32 icmd.RunCommand("ip", "link", "delete", ifName).Assert(t, icmd.Success) 33 icmd.RunCommand("iptables", "-t", "nat", "--flush").Assert(t, icmd.Success) 34 icmd.RunCommand("iptables", "--flush").Assert(t, icmd.Success) 35 } 36 37 // LinkExists verifies that a link exists 38 func LinkExists(t *testing.T, master string) { 39 // verify the specified link exists, ip link show <link_name> 40 icmd.RunCommand("ip", "link", "show", master).Assert(t, icmd.Success) 41 } 42 43 // IsNetworkAvailable provides a comparison to check if a docker network is available 44 func IsNetworkAvailable(c client.NetworkAPIClient, name string) cmp.Comparison { 45 return func() cmp.Result { 46 networks, err := c.NetworkList(context.Background(), types.NetworkListOptions{}) 47 if err != nil { 48 return cmp.ResultFromError(err) 49 } 50 for _, network := range networks { 51 if network.Name == name { 52 return cmp.ResultSuccess 53 } 54 } 55 return cmp.ResultFailure(fmt.Sprintf("could not find network %s", name)) 56 } 57 } 58 59 // IsNetworkNotAvailable provides a comparison to check if a docker network is not available 60 func IsNetworkNotAvailable(c client.NetworkAPIClient, name string) cmp.Comparison { 61 return func() cmp.Result { 62 networks, err := c.NetworkList(context.Background(), types.NetworkListOptions{}) 63 if err != nil { 64 return cmp.ResultFromError(err) 65 } 66 for _, network := range networks { 67 if network.Name == name { 68 return cmp.ResultFailure(fmt.Sprintf("network %s is still present", name)) 69 } 70 } 71 return cmp.ResultSuccess 72 } 73 } 74 75 // CheckKernelMajorVersionGreaterOrEqualThen returns whether the kernel version is greater or equal than the one provided 76 func CheckKernelMajorVersionGreaterOrEqualThen(kernelVersion int, majorVersion int) bool { 77 kv, err := kernel.GetKernelVersion() 78 if err != nil { 79 return false 80 } 81 if kv.Kernel < kernelVersion || (kv.Kernel == kernelVersion && kv.Major < majorVersion) { 82 return false 83 } 84 return true 85 }