dotcloud/docker

View on GitHub
integration/network/helpers.go

Summary

Maintainability
A
3 hrs
Test Coverage
//go:build !windows

package network

import (
    "context"
    "fmt"
    "testing"

    "github.com/docker/docker/api/types/network"
    "github.com/docker/docker/client"
    "github.com/docker/docker/testutil"
    "gotest.tools/v3/assert/cmp"
    "gotest.tools/v3/icmd"
)

// CreateMasterDummy creates a dummy network interface
func CreateMasterDummy(ctx context.Context, t *testing.T, master string) {
    // ip link add <dummy_name> type dummy
    testutil.RunCommand(ctx, "ip", "link", "add", master, "type", "dummy").Assert(t, icmd.Success)
    testutil.RunCommand(ctx, "ip", "link", "set", master, "up").Assert(t, icmd.Success)
}

// CreateVlanInterface creates a vlan network interface
func CreateVlanInterface(ctx context.Context, t *testing.T, master, slave, id string) {
    // ip link add link <master> name <master>.<VID> type vlan id <VID>
    testutil.RunCommand(ctx, "ip", "link", "add", "link", master, "name", slave, "type", "vlan", "id", id).Assert(t, icmd.Success)
    // ip link set <sub_interface_name> up
    testutil.RunCommand(ctx, "ip", "link", "set", slave, "up").Assert(t, icmd.Success)
}

// DeleteInterface deletes a network interface
func DeleteInterface(ctx context.Context, t *testing.T, ifName string) {
    testutil.RunCommand(ctx, "ip", "link", "delete", ifName).Assert(t, icmd.Success)
    testutil.RunCommand(ctx, "iptables", "-t", "nat", "--flush").Assert(t, icmd.Success)
    testutil.RunCommand(ctx, "iptables", "--flush").Assert(t, icmd.Success)
}

// LinkExists verifies that a link exists
func LinkExists(ctx context.Context, t *testing.T, master string) {
    // verify the specified link exists, ip link show <link_name>
    testutil.RunCommand(ctx, "ip", "link", "show", master).Assert(t, icmd.Success)
}

// LinkDoesntExist verifies that a link doesn't exist
func LinkDoesntExist(ctx context.Context, t *testing.T, master string) {
    // verify the specified link doesn't exist, ip link show <link_name>.
    testutil.RunCommand(ctx, "ip", "link", "show", master).Assert(t, icmd.Expected{
        ExitCode: 1,
        Err:      "does not exist",
    })
}

// IsNetworkAvailable provides a comparison to check if a docker network is available
func IsNetworkAvailable(ctx context.Context, c client.NetworkAPIClient, name string) cmp.Comparison {
    return func() cmp.Result {
        networks, err := c.NetworkList(ctx, network.ListOptions{})
        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(ctx context.Context, c client.NetworkAPIClient, name string) cmp.Comparison {
    return func() cmp.Result {
        networks, err := c.NetworkList(ctx, network.ListOptions{})
        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
    }
}