12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- // +build !windows
- package network
- import (
- "context"
- "fmt"
- "os"
- "testing"
- "github.com/docker/docker/api/types"
- "github.com/docker/docker/client"
- "github.com/docker/docker/pkg/parsers/kernel"
- "gotest.tools/assert/cmp"
- "gotest.tools/icmd"
- )
- // CreateMasterDummy creates a dummy network interface
- func CreateMasterDummy(t *testing.T, master string) {
- // ip link add <dummy_name> type dummy
- icmd.RunCommand("ip", "link", "add", master, "type", "dummy").Assert(t, icmd.Success)
- icmd.RunCommand("ip", "link", "set", master, "up").Assert(t, icmd.Success)
- }
- // CreateVlanInterface creates a vlan network interface
- func CreateVlanInterface(t *testing.T, master, slave, id string) {
- // ip link add link <master> name <master>.<VID> type vlan id <VID>
- icmd.RunCommand("ip", "link", "add", "link", master, "name", slave, "type", "vlan", "id", id).Assert(t, icmd.Success)
- // ip link set <sub_interface_name> up
- icmd.RunCommand("ip", "link", "set", slave, "up").Assert(t, icmd.Success)
- }
- // DeleteInterface deletes a network interface
- func DeleteInterface(t *testing.T, ifName string) {
- icmd.RunCommand("ip", "link", "delete", ifName).Assert(t, icmd.Success)
- icmd.RunCommand("iptables", "-t", "nat", "--flush").Assert(t, icmd.Success)
- icmd.RunCommand("iptables", "--flush").Assert(t, icmd.Success)
- }
- // LinkExists verifies that a link exists
- func LinkExists(t *testing.T, master string) {
- // verify the specified link exists, ip link show <link_name>
- icmd.RunCommand("ip", "link", "show", master).Assert(t, icmd.Success)
- }
- // IsNetworkAvailable provides a comparison to check if a docker network is available
- func IsNetworkAvailable(c client.NetworkAPIClient, name string) cmp.Comparison {
- return func() cmp.Result {
- networks, err := c.NetworkList(context.Background(), types.NetworkListOptions{})
- if err != nil {
- return cmp.ResultFromError(err)
- }
- for _, network := range networks {
- if network.Name == name {
- return cmp.ResultSuccess
- }
- }
- return cmp.ResultFailure(fmt.Sprintf("could not find network %s", name))
- }
- }
- // IsNetworkNotAvailable provides a comparison to check if a docker network is not available
- func IsNetworkNotAvailable(c client.NetworkAPIClient, name string) cmp.Comparison {
- return func() cmp.Result {
- networks, err := c.NetworkList(context.Background(), types.NetworkListOptions{})
- if err != nil {
- return cmp.ResultFromError(err)
- }
- for _, network := range networks {
- if network.Name == name {
- return cmp.ResultFailure(fmt.Sprintf("network %s is still present", name))
- }
- }
- return cmp.ResultSuccess
- }
- }
- // CheckKernelMajorVersionGreaterOrEqualThen returns whether the kernel version is greater or equal than the one provided
- func CheckKernelMajorVersionGreaterOrEqualThen(kernelVersion int, majorVersion int) bool {
- kv, err := kernel.GetKernelVersion()
- if err != nil {
- return false
- }
- if kv.Kernel < kernelVersion || (kv.Kernel == kernelVersion && kv.Major < majorVersion) {
- return false
- }
- return true
- }
- // IsUserNamespace returns whether the user namespace remapping is enabled
- func IsUserNamespace() bool {
- root := os.Getenv("DOCKER_REMAP_ROOT")
- return root != ""
- }
|