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. Copyright The containerd Authors.
@ -28,6 +28,7 @@ import (
"io" "io"
"os" "os"
"path/filepath" "path/filepath"
"runtime"
"testing" "testing"
"time" "time"
@ -359,13 +360,14 @@ func TestBreakouts(t *testing.T) {
} }
} }
breakouts := []struct { type breakoutTest struct {
name string name string
w tartest.WriterToTar w tartest.WriterToTar
apply fstest.Applier apply fstest.Applier
validator func(string) error validator func(string) error
err error err error
}{ }
breakouts := []breakoutTest{
{ {
name: "SymlinkAbsolute", name: "SymlinkAbsolute",
w: tartest.TarAll( w: tartest.TarAll(
@ -497,42 +499,7 @@ func TestBreakouts(t *testing.T) {
), ),
validator: sameFile("localpasswd", "/etc/passwd"), 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", name: "SymlinkParentDirectory",
w: tartest.TarAll( w: tartest.TarAll(
@ -745,8 +712,48 @@ func TestBreakouts(t *testing.T) {
// resolution ends up just removing etc // resolution ends up just removing etc
validator: fileNotExists("etc/passwd"), 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", name: "HardlinkSymlinkChmod",
w: func() tartest.WriterToTar { w: func() tartest.WriterToTar {
p := filepath.Join(td, "perm400") p := filepath.Join(td, "perm400")
@ -775,6 +782,7 @@ func TestBreakouts(t *testing.T) {
return nil return nil
}, },
}, },
}...)
} }
for _, bo := range breakouts { for _, bo := range breakouts {