207c4d537c
Diffing a container yielded some extra changes that come from the files/directories that we mount inside the container (/etc/resolv.conf for example). To avoid that we create an intermediate snapshot that has these files, with this we can now diff the container fs with its parent and only get the differences that were made inside the container. Signed-off-by: Djordje Lukic <djordje.lukic@docker.com>
56 lines
1.9 KiB
Go
56 lines
1.9 KiB
Go
package container // import "github.com/docker/docker/integration/container"
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
|
|
containertypes "github.com/docker/docker/api/types/container"
|
|
"github.com/docker/docker/integration/internal/container"
|
|
"gotest.tools/v3/assert"
|
|
"gotest.tools/v3/poll"
|
|
"gotest.tools/v3/skip"
|
|
)
|
|
|
|
func TestDiff(t *testing.T) {
|
|
skip.If(t, testEnv.DaemonInfo.OSType == "windows", "cannot diff a running container on Windows")
|
|
ctx := setupTest(t)
|
|
apiClient := testEnv.APIClient()
|
|
|
|
cID := container.Run(ctx, t, apiClient, container.WithCmd("sh", "-c", `mkdir /foo; echo xyzzy > /foo/bar`))
|
|
|
|
expected := []containertypes.FilesystemChange{
|
|
{Kind: containertypes.ChangeAdd, Path: "/foo"},
|
|
{Kind: containertypes.ChangeAdd, Path: "/foo/bar"},
|
|
}
|
|
|
|
items, err := apiClient.ContainerDiff(ctx, cID)
|
|
assert.NilError(t, err)
|
|
assert.DeepEqual(t, expected, items)
|
|
}
|
|
|
|
func TestDiffStoppedContainer(t *testing.T) {
|
|
// There's no way in Windows to differentiate between an Add or a Modify,
|
|
// and all files are under a "Files/" prefix.
|
|
skip.If(t, testEnv.DaemonInfo.OSType == "windows", "FIXME")
|
|
ctx := setupTest(t)
|
|
apiClient := testEnv.APIClient()
|
|
|
|
cID := container.Run(ctx, t, apiClient, container.WithCmd("sh", "-c", `mkdir /foo; echo xyzzy > /foo/bar`))
|
|
|
|
poll.WaitOn(t, container.IsInState(ctx, apiClient, cID, "exited"), poll.WithDelay(100*time.Millisecond), poll.WithTimeout(60*time.Second))
|
|
|
|
expected := []containertypes.FilesystemChange{
|
|
{Kind: containertypes.ChangeAdd, Path: "/foo"},
|
|
{Kind: containertypes.ChangeAdd, Path: "/foo/bar"},
|
|
}
|
|
if testEnv.DaemonInfo.OSType == "windows" {
|
|
expected = []containertypes.FilesystemChange{
|
|
{Kind: containertypes.ChangeModify, Path: "Files/foo"},
|
|
{Kind: containertypes.ChangeModify, Path: "Files/foo/bar"},
|
|
}
|
|
}
|
|
|
|
items, err := apiClient.ContainerDiff(ctx, cID)
|
|
assert.NilError(t, err)
|
|
assert.DeepEqual(t, expected, items)
|
|
}
|