Skip to content

Commit 7e069ee

Browse files
dmcgowank8s-infra-cherrypick-robot
authored andcommitted
Update tar tests to run on Darwin
Signed-off-by: Derek McGowan <[email protected]>
1 parent 9c65471 commit 7e069ee

1 file changed

Lines changed: 75 additions & 67 deletions

File tree

archive/tar_test.go

Lines changed: 75 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
//go:build !windows && !darwin
1+
//go:build !windows
22

33
/*
44
Copyright The containerd Authors.
@@ -28,6 +28,7 @@ import (
2828
"io"
2929
"os"
3030
"path/filepath"
31+
"runtime"
3132
"testing"
3233
"time"
3334

@@ -359,13 +360,14 @@ func TestBreakouts(t *testing.T) {
359360
}
360361
}
361362

362-
breakouts := []struct {
363+
type breakoutTest struct {
363364
name string
364365
w tartest.WriterToTar
365366
apply fstest.Applier
366367
validator func(string) error
367368
err error
368-
}{
369+
}
370+
breakouts := []breakoutTest{
369371
{
370372
name: "SymlinkAbsolute",
371373
w: tartest.TarAll(
@@ -497,42 +499,7 @@ func TestBreakouts(t *testing.T) {
497499
),
498500
validator: sameFile("localpasswd", "/etc/passwd"),
499501
},
500-
{
501-
name: "HardlinkSymlinkBeforeCreateTarget",
502-
w: tartest.TarAll(
503-
tc.Dir("etc", 0770),
504-
tc.Symlink("/etc/passwd", "localpasswd"),
505-
tc.Link("localpasswd", "localpasswd-dup"),
506-
tc.File("/etc/passwd", []byte("after"), 0644),
507-
),
508-
validator: sameFile("localpasswd-dup", "/etc/passwd"),
509-
},
510-
{
511-
name: "HardlinkSymlinkRelative",
512-
w: tartest.TarAll(
513-
tc.Dir("etc", 0770),
514-
tc.File("/etc/passwd", []byte("inside"), 0644),
515-
tc.Symlink("../../../../../etc/passwd", "passwdlink"),
516-
tc.Link("/passwdlink", "localpasswd"),
517-
),
518-
validator: all(
519-
sameSymlinkFile("/localpasswd", "/passwdlink"),
520-
sameFile("/localpasswd", "/etc/passwd"),
521-
),
522-
},
523-
{
524-
name: "HardlinkSymlinkAbsolute",
525-
w: tartest.TarAll(
526-
tc.Dir("etc", 0770),
527-
tc.File("/etc/passwd", []byte("inside"), 0644),
528-
tc.Symlink("/etc/passwd", "passwdlink"),
529-
tc.Link("/passwdlink", "localpasswd"),
530-
),
531-
validator: all(
532-
sameSymlinkFile("/localpasswd", "/passwdlink"),
533-
sameFile("/localpasswd", "/etc/passwd"),
534-
),
535-
},
502+
536503
{
537504
name: "SymlinkParentDirectory",
538505
w: tartest.TarAll(
@@ -745,36 +712,77 @@ func TestBreakouts(t *testing.T) {
745712
// resolution ends up just removing etc
746713
validator: fileNotExists("etc/passwd"),
747714
},
748-
{
749-
750-
name: "HardlinkSymlinkChmod",
751-
w: func() tartest.WriterToTar {
752-
p := filepath.Join(td, "perm400")
753-
if err := os.WriteFile(p, []byte("..."), 0400); err != nil {
754-
t.Fatal(err)
755-
}
756-
ep := filepath.Join(td, "also-exists-outside-root")
757-
if err := os.WriteFile(ep, []byte("..."), 0640); err != nil {
758-
t.Fatal(err)
759-
}
715+
}
760716

761-
return tartest.TarAll(
762-
tc.Symlink(p, ep),
763-
tc.Link(ep, "sketchylink"),
764-
)
765-
}(),
766-
validator: func(string) error {
767-
p := filepath.Join(td, "perm400")
768-
fi, err := os.Lstat(p)
769-
if err != nil {
770-
return err
771-
}
772-
if perm := fi.Mode() & os.ModePerm; perm != 0400 {
773-
return fmt.Errorf("%s perm changed from 0400 to %04o", p, perm)
774-
}
775-
return nil
717+
// The follow tests perform operations not permitted on Darwin
718+
if runtime.GOOS != "darwin" {
719+
breakouts = append(breakouts, []breakoutTest{
720+
{
721+
name: "HardlinkSymlinkBeforeCreateTarget",
722+
w: tartest.TarAll(
723+
tc.Dir("etc", 0770),
724+
tc.Symlink("/etc/passwd", "localpasswd"),
725+
tc.Link("localpasswd", "localpasswd-dup"),
726+
tc.File("/etc/passwd", []byte("after"), 0644),
727+
),
728+
validator: sameFile("localpasswd-dup", "/etc/passwd"),
776729
},
777-
},
730+
{
731+
name: "HardlinkSymlinkRelative",
732+
w: tartest.TarAll(
733+
tc.Dir("etc", 0770),
734+
tc.File("/etc/passwd", []byte("inside"), 0644),
735+
tc.Symlink("../../../../../etc/passwd", "passwdlink"),
736+
tc.Link("/passwdlink", "localpasswd"),
737+
),
738+
validator: all(
739+
sameSymlinkFile("/localpasswd", "/passwdlink"),
740+
sameFile("/localpasswd", "/etc/passwd"),
741+
),
742+
},
743+
{
744+
name: "HardlinkSymlinkAbsolute",
745+
w: tartest.TarAll(
746+
tc.Dir("etc", 0770),
747+
tc.File("/etc/passwd", []byte("inside"), 0644),
748+
tc.Symlink("/etc/passwd", "passwdlink"),
749+
tc.Link("/passwdlink", "localpasswd"),
750+
),
751+
validator: all(
752+
sameSymlinkFile("/localpasswd", "/passwdlink"),
753+
sameFile("/localpasswd", "/etc/passwd"),
754+
),
755+
},
756+
{
757+
name: "HardlinkSymlinkChmod",
758+
w: func() tartest.WriterToTar {
759+
p := filepath.Join(td, "perm400")
760+
if err := os.WriteFile(p, []byte("..."), 0400); err != nil {
761+
t.Fatal(err)
762+
}
763+
ep := filepath.Join(td, "also-exists-outside-root")
764+
if err := os.WriteFile(ep, []byte("..."), 0640); err != nil {
765+
t.Fatal(err)
766+
}
767+
768+
return tartest.TarAll(
769+
tc.Symlink(p, ep),
770+
tc.Link(ep, "sketchylink"),
771+
)
772+
}(),
773+
validator: func(string) error {
774+
p := filepath.Join(td, "perm400")
775+
fi, err := os.Lstat(p)
776+
if err != nil {
777+
return err
778+
}
779+
if perm := fi.Mode() & os.ModePerm; perm != 0400 {
780+
return fmt.Errorf("%s perm changed from 0400 to %04o", p, perm)
781+
}
782+
return nil
783+
},
784+
},
785+
}...)
778786
}
779787

780788
for _, bo := range breakouts {

0 commit comments

Comments
 (0)