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  }