| package network |
| |
| import ( |
| "context" |
| "testing" |
| |
| "github.com/docker/docker/api/types" |
| "github.com/docker/docker/integration/util/request" |
| "github.com/stretchr/testify/assert" |
| "github.com/stretchr/testify/require" |
| ) |
| |
| func containsNetwork(nws []types.NetworkResource, nw types.NetworkCreateResponse) bool { |
| for _, n := range nws { |
| if n.ID == nw.ID { |
| return true |
| } |
| } |
| return false |
| } |
| |
| // createAmbiguousNetworks creates three networks, of which the second network |
| // uses a prefix of the first network's ID as name. The third network uses the |
| // first network's ID as name. |
| // |
| // After successful creation, properties of all three networks is returned |
| func createAmbiguousNetworks(t *testing.T) (types.NetworkCreateResponse, types.NetworkCreateResponse, types.NetworkCreateResponse) { |
| client := request.NewAPIClient(t) |
| ctx := context.Background() |
| |
| testNet, err := client.NetworkCreate(ctx, "testNet", types.NetworkCreate{}) |
| require.NoError(t, err) |
| idPrefixNet, err := client.NetworkCreate(ctx, testNet.ID[:12], types.NetworkCreate{}) |
| require.NoError(t, err) |
| fullIDNet, err := client.NetworkCreate(ctx, testNet.ID, types.NetworkCreate{}) |
| require.NoError(t, err) |
| |
| nws, err := client.NetworkList(ctx, types.NetworkListOptions{}) |
| require.NoError(t, err) |
| |
| assert.Equal(t, true, containsNetwork(nws, testNet), "failed to create network testNet") |
| assert.Equal(t, true, containsNetwork(nws, idPrefixNet), "failed to create network idPrefixNet") |
| assert.Equal(t, true, containsNetwork(nws, fullIDNet), "failed to create network fullIDNet") |
| return testNet, idPrefixNet, fullIDNet |
| } |
| |
| // TestDockerNetworkDeletePreferID tests that if a network with a name |
| // equal to another network's ID exists, the Network with the given |
| // ID is removed, and not the network with the given name. |
| func TestDockerNetworkDeletePreferID(t *testing.T) { |
| defer setupTest(t)() |
| client := request.NewAPIClient(t) |
| ctx := context.Background() |
| testNet, idPrefixNet, fullIDNet := createAmbiguousNetworks(t) |
| |
| // Delete the network using a prefix of the first network's ID as name. |
| // This should the network name with the id-prefix, not the original network. |
| err := client.NetworkRemove(ctx, testNet.ID[:12]) |
| require.NoError(t, err) |
| |
| // Delete the network using networkID. This should remove the original |
| // network, not the network with the name equal to the networkID |
| err = client.NetworkRemove(ctx, testNet.ID) |
| require.NoError(t, err) |
| |
| // networks "testNet" and "idPrefixNet" should be removed, but "fullIDNet" should still exist |
| nws, err := client.NetworkList(ctx, types.NetworkListOptions{}) |
| require.NoError(t, err) |
| assert.Equal(t, false, containsNetwork(nws, testNet), "Network testNet not removed") |
| assert.Equal(t, false, containsNetwork(nws, idPrefixNet), "Network idPrefixNet not removed") |
| assert.Equal(t, true, containsNetwork(nws, fullIDNet), "Network fullIDNet not found") |
| } |