package container import ( "context" "testing" "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/container" "github.com/docker/docker/api/types/network" "github.com/docker/docker/api/types/strslice" "github.com/docker/docker/client" "github.com/docker/docker/integration/util/request" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) func runContainer(ctx context.Context, t *testing.T, client client.APIClient, cntCfg *container.Config, hstCfg *container.HostConfig, nwkCfg *network.NetworkingConfig, cntName string) string { cnt, err := client.ContainerCreate(ctx, cntCfg, hstCfg, nwkCfg, cntName) require.NoError(t, err) err = client.ContainerStart(ctx, cnt.ID, types.ContainerStartOptions{}) require.NoError(t, err) return cnt.ID } // This test simulates the scenario mentioned in #31392: // Having two linked container, renaming the target and bringing a replacement // and then deleting and recreating the source container linked to the new target. // This checks that "rename" updates source container correctly and doesn't set it to null. func TestRenameLinkedContainer(t *testing.T) { defer setupTest(t)() ctx := context.Background() client := request.NewAPIClient(t) cntConfig := &container.Config{ Image: "busybox", Tty: true, Cmd: strslice.StrSlice([]string{"top"}), } var ( aID, bID string cntJSON types.ContainerJSON err error ) aID = runContainer(ctx, t, client, cntConfig, &container.HostConfig{}, &network.NetworkingConfig{}, "a0", ) bID = runContainer(ctx, t, client, cntConfig, &container.HostConfig{ Links: []string{"a0"}, }, &network.NetworkingConfig{}, "b0", ) err = client.ContainerRename(ctx, aID, "a1") require.NoError(t, err) runContainer(ctx, t, client, cntConfig, &container.HostConfig{}, &network.NetworkingConfig{}, "a0", ) err = client.ContainerRemove(ctx, bID, types.ContainerRemoveOptions{Force: true}) require.NoError(t, err) bID = runContainer(ctx, t, client, cntConfig, &container.HostConfig{ Links: []string{"a0"}, }, &network.NetworkingConfig{}, "b0", ) cntJSON, err = client.ContainerInspect(ctx, bID) require.NoError(t, err) assert.Equal(t, []string{"/a0:/b0/a0"}, cntJSON.HostConfig.Links) }