From c57e5b22ea57c2cfdf2cbcc8b367eea139ec24ed Mon Sep 17 00:00:00 2001 From: Tonis Tiigi Date: Sun, 10 Mar 2019 14:51:07 -0700 Subject: [PATCH] dockerfile: add regression test for wildcard cache Signed-off-by: Tonis Tiigi --- frontend/dockerfile/dockerfile_test.go | 86 ++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) diff --git a/frontend/dockerfile/dockerfile_test.go b/frontend/dockerfile/dockerfile_test.go index 87ec48fa2..d97445751 100644 --- a/frontend/dockerfile/dockerfile_test.go +++ b/frontend/dockerfile/dockerfile_test.go @@ -86,6 +86,7 @@ var allTests = []integration.Test{ testWorkdirCreatesDir, testDockerfileAddArchiveWildcard, testCopyChownExistingDir, + testCopyWildcardCache, } var opts []integration.TestOpt @@ -317,6 +318,91 @@ RUN e="300:400"; p="/file" ; a=` + "`" + `stat -c "%u:%g require.NoError(t, err) } +func testCopyWildcardCache(t *testing.T, sb integration.Sandbox) { + f := getFrontend(t, sb) + + dockerfile := []byte(` +FROM busybox AS base +COPY foo* files/ +RUN cat /dev/urandom | head -c 100 | sha256sum > unique +COPY bar files/ +FROM scratch +COPY --from=base unique / +`) + + dir, err := tmpdir( + fstest.CreateFile("Dockerfile", dockerfile, 0600), + fstest.CreateFile("foo1", []byte("foo1-data"), 0600), + fstest.CreateFile("foo2", []byte("foo2-data"), 0600), + fstest.CreateFile("bar", []byte("bar-data"), 0600), + ) + require.NoError(t, err) + defer os.RemoveAll(dir) + + c, err := client.New(context.TODO(), sb.Address()) + require.NoError(t, err) + defer c.Close() + + destDir, err := ioutil.TempDir("", "buildkit") + require.NoError(t, err) + defer os.RemoveAll(destDir) + + _, err = f.Solve(context.TODO(), c, client.SolveOpt{ + Exporter: client.ExporterLocal, + ExporterOutputDir: destDir, + LocalDirs: map[string]string{ + builder.DefaultLocalNameDockerfile: dir, + builder.DefaultLocalNameContext: dir, + }, + }, nil) + require.NoError(t, err) + + dt, err := ioutil.ReadFile(filepath.Join(destDir, "unique")) + require.NoError(t, err) + + err = ioutil.WriteFile(filepath.Join(dir, "bar"), []byte("bar-data-mod"), 0600) + require.NoError(t, err) + + destDir, err = ioutil.TempDir("", "buildkit") + require.NoError(t, err) + defer os.RemoveAll(destDir) + + _, err = f.Solve(context.TODO(), c, client.SolveOpt{ + Exporter: client.ExporterLocal, + ExporterOutputDir: destDir, + LocalDirs: map[string]string{ + builder.DefaultLocalNameDockerfile: dir, + builder.DefaultLocalNameContext: dir, + }, + }, nil) + require.NoError(t, err) + + dt2, err := ioutil.ReadFile(filepath.Join(destDir, "unique")) + require.NoError(t, err) + require.Equal(t, string(dt), string(dt2)) + + err = ioutil.WriteFile(filepath.Join(dir, "foo2"), []byte("foo2-data-mod"), 0600) + require.NoError(t, err) + + destDir, err = ioutil.TempDir("", "buildkit") + require.NoError(t, err) + defer os.RemoveAll(destDir) + + _, err = f.Solve(context.TODO(), c, client.SolveOpt{ + Exporter: client.ExporterLocal, + ExporterOutputDir: destDir, + LocalDirs: map[string]string{ + builder.DefaultLocalNameDockerfile: dir, + builder.DefaultLocalNameContext: dir, + }, + }, nil) + require.NoError(t, err) + + dt2, err = ioutil.ReadFile(filepath.Join(destDir, "unique")) + require.NoError(t, err) + require.NotEqual(t, string(dt), string(dt2)) +} + func testEmptyWildcard(t *testing.T, sb integration.Sandbox) { f := getFrontend(t, sb)