dockerfile: regression test for ADD archives with implied parents

Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
(cherry picked from commit ec7e7bff5f)
This commit is contained in:
CrazyMax
2026-07-31 11:56:09 +02:00
parent 5f3d92cc9b
commit f3b57e4bae
2 changed files with 60 additions and 0 deletions

View File

@@ -323,6 +323,65 @@ ADD %s /newname.tar.gz
require.Equal(t, buf2.Bytes(), dt)
}
// https://github.com/moby/moby/issues/53257
func testDockerfileAddArchiveWithImpliedParentDir(t *testing.T, sb integration.Sandbox) {
f := getFrontend(t, sb)
f.RequiresBuildctl(t)
buf := bytes.NewBuffer(nil)
tw := tar.NewWriter(buf)
err := tw.WriteHeader(&tar.Header{
Name: "etc/dnf/",
Typeflag: tar.TypeDir,
Mode: 0755,
})
require.NoError(t, err)
expectedContent := []byte("content0")
err = tw.WriteHeader(&tar.Header{
Name: "etc/dnf/dnf.conf",
Typeflag: tar.TypeReg,
Size: int64(len(expectedContent)),
Mode: 0644,
})
require.NoError(t, err)
_, err = tw.Write(expectedContent)
require.NoError(t, err)
err = tw.Close()
require.NoError(t, err)
gzBuf := bytes.NewBuffer(nil)
gz := gzip.NewWriter(gzBuf)
_, err = gz.Write(buf.Bytes())
require.NoError(t, err)
err = gz.Close()
require.NoError(t, err)
baseImage := integration.UnixOrWindows("scratch", "nanoserver")
dockerfile := fmt.Appendf(nil, `
FROM %s
ADD t.tar.gz /
`, baseImage)
dir := integration.Tmpdir(
t,
fstest.CreateFile("Dockerfile", dockerfile, 0600),
fstest.CreateFile("t.tar.gz", gzBuf.Bytes(), 0600),
)
args, trace := f.DFCmdArgs(dir.Name, dir.Name)
defer os.RemoveAll(trace)
destDir := t.TempDir()
cmd := sb.Cmd(args + fmt.Sprintf(" --output type=local,dest=%s", destDir))
require.NoError(t, cmd.Run())
dt, err := os.ReadFile(filepath.Join(destDir, "etc/dnf/dnf.conf"))
require.NoError(t, err)
require.Equal(t, expectedContent, dt)
}
func testDockerfileAddChownArchive(t *testing.T, sb integration.Sandbox) {
integration.SkipOnPlatform(t, "windows", "ADD --chown tests Unix UID/GID ownership which is not applicable to Windows file permissions")
f := getFrontend(t, sb)

View File

@@ -36,6 +36,7 @@ var allTests = integration.TestFuncs(
// dockerfile_add_test.go
testDockerfileADDFromURL,
testDockerfileAddArchive,
testDockerfileAddArchiveWithImpliedParentDir,
testDockerfileAddChownArchive,
testDockerfileAddArchiveWildcard,
testDockerfileAddChownExpand,