Update tar tests to run on Darwin

Signed-off-by: Derek McGowan <derek@mcg.dev>
This commit is contained in:
Derek McGowan 2023-04-25 16:10:10 -07:00
parent 7d7aac7dae
commit 4891bba83f
No known key found for this signature in database
GPG Key ID: F58C5D0A4405ACDB

View File

@ -1,4 +1,4 @@
//go:build !windows && !darwin
//go:build !windows
/*
Copyright The containerd Authors.
@ -28,6 +28,7 @@ import (
"io"
"os"
"path/filepath"
"runtime"
"testing"
"time"
@ -359,13 +360,14 @@ func TestBreakouts(t *testing.T) {
}
}
breakouts := []struct {
type breakoutTest struct {
name string
w tartest.WriterToTar
apply fstest.Applier
validator func(string) error
err error
}{
}
breakouts := []breakoutTest{
{
name: "SymlinkAbsolute",
w: tartest.TarAll(
@ -497,42 +499,7 @@ func TestBreakouts(t *testing.T) {
),
validator: sameFile("localpasswd", "/etc/passwd"),
},
{
name: "HardlinkSymlinkBeforeCreateTarget",
w: tartest.TarAll(
tc.Dir("etc", 0770),
tc.Symlink("/etc/passwd", "localpasswd"),
tc.Link("localpasswd", "localpasswd-dup"),
tc.File("/etc/passwd", []byte("after"), 0644),
),
validator: sameFile("localpasswd-dup", "/etc/passwd"),
},
{
name: "HardlinkSymlinkRelative",
w: tartest.TarAll(
tc.Dir("etc", 0770),
tc.File("/etc/passwd", []byte("inside"), 0644),
tc.Symlink("../../../../../etc/passwd", "passwdlink"),
tc.Link("/passwdlink", "localpasswd"),
),
validator: all(
sameSymlinkFile("/localpasswd", "/passwdlink"),
sameFile("/localpasswd", "/etc/passwd"),
),
},
{
name: "HardlinkSymlinkAbsolute",
w: tartest.TarAll(
tc.Dir("etc", 0770),
tc.File("/etc/passwd", []byte("inside"), 0644),
tc.Symlink("/etc/passwd", "passwdlink"),
tc.Link("/passwdlink", "localpasswd"),
),
validator: all(
sameSymlinkFile("/localpasswd", "/passwdlink"),
sameFile("/localpasswd", "/etc/passwd"),
),
},
{
name: "SymlinkParentDirectory",
w: tartest.TarAll(
@ -745,8 +712,48 @@ func TestBreakouts(t *testing.T) {
// resolution ends up just removing etc
validator: fileNotExists("etc/passwd"),
},
{
}
// The follow tests perform operations not permitted on Darwin
if runtime.GOOS != "darwin" {
breakouts = append(breakouts, []breakoutTest{
{
name: "HardlinkSymlinkBeforeCreateTarget",
w: tartest.TarAll(
tc.Dir("etc", 0770),
tc.Symlink("/etc/passwd", "localpasswd"),
tc.Link("localpasswd", "localpasswd-dup"),
tc.File("/etc/passwd", []byte("after"), 0644),
),
validator: sameFile("localpasswd-dup", "/etc/passwd"),
},
{
name: "HardlinkSymlinkRelative",
w: tartest.TarAll(
tc.Dir("etc", 0770),
tc.File("/etc/passwd", []byte("inside"), 0644),
tc.Symlink("../../../../../etc/passwd", "passwdlink"),
tc.Link("/passwdlink", "localpasswd"),
),
validator: all(
sameSymlinkFile("/localpasswd", "/passwdlink"),
sameFile("/localpasswd", "/etc/passwd"),
),
},
{
name: "HardlinkSymlinkAbsolute",
w: tartest.TarAll(
tc.Dir("etc", 0770),
tc.File("/etc/passwd", []byte("inside"), 0644),
tc.Symlink("/etc/passwd", "passwdlink"),
tc.Link("/passwdlink", "localpasswd"),
),
validator: all(
sameSymlinkFile("/localpasswd", "/passwdlink"),
sameFile("/localpasswd", "/etc/passwd"),
),
},
{
name: "HardlinkSymlinkChmod",
w: func() tartest.WriterToTar {
p := filepath.Join(td, "perm400")
@ -775,6 +782,7 @@ func TestBreakouts(t *testing.T) {
return nil
},
},
}...)
}
for _, bo := range breakouts {