mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
a1150245cc
Movified from686be57d0a
, and re-ran gofmt again to address for files not present in 20.10 and vice-versa. Signed-off-by: Sebastiaan van Stijn <github@gone.nl> (cherry picked from commit686be57d0a
) Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
95 lines
3.1 KiB
Go
95 lines
3.1 KiB
Go
//go:build !windows
|
|
// +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/v3/assert/cmp"
|
|
"gotest.tools/v3/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 != ""
|
|
}
|