diff options
author | Fabricio Voznika <fvoznika@google.com> | 2018-08-24 10:16:38 -0700 |
---|---|---|
committer | Shentubot <shentubot@google.com> | 2018-08-24 10:17:42 -0700 |
commit | a81a4402a265aec6715172cd3502ee7eebbf64aa (patch) | |
tree | ca68f0086761e850760931820f3dd34d9affd764 /runsc/fsgofer/fsgofer_test.go | |
parent | 64403265a04aa0c8be3ebb652a09f6e2d7a84ca7 (diff) |
Add option to panic gofer if writes are attempted over RO mounts
This is used when '--overlay=true' to guarantee writes are not sent to gofer.
PiperOrigin-RevId: 210116288
Change-Id: I7616008c4c0e8d3668e07a205207f46e2144bf30
Diffstat (limited to 'runsc/fsgofer/fsgofer_test.go')
-rw-r--r-- | runsc/fsgofer/fsgofer_test.go | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/runsc/fsgofer/fsgofer_test.go b/runsc/fsgofer/fsgofer_test.go index 8d038eaf6..fcece4e83 100644 --- a/runsc/fsgofer/fsgofer_test.go +++ b/runsc/fsgofer/fsgofer_test.go @@ -34,6 +34,15 @@ func init() { allConfs = append(allConfs, roConfs...) } +func assertPanic(t *testing.T, f func()) { + defer func() { + if r := recover(); r == nil { + t.Errorf("function did not panic") + } + }() + f() +} + var ( allTypes = []fileType{regular, directory, symlink} @@ -434,6 +443,22 @@ func TestROMountChecks(t *testing.T) { }) } +func TestROMountPanics(t *testing.T) { + conf := Config{ROMount: true, PanicOnWrite: true} + runCustom(t, allTypes, []Config{conf}, func(t *testing.T, s state) { + assertPanic(t, func() { s.file.Create("..", p9.ReadWrite, 0777, p9.UID(os.Getuid()), p9.GID(os.Getgid())) }) + assertPanic(t, func() { s.file.Mkdir("..", 0777, p9.UID(os.Getuid()), p9.GID(os.Getgid())) }) + assertPanic(t, func() { s.file.Rename(s.file, "..") }) + assertPanic(t, func() { s.file.Symlink("some_place", "..", p9.UID(os.Getuid()), p9.GID(os.Getgid())) }) + assertPanic(t, func() { s.file.UnlinkAt("..", 0) }) + assertPanic(t, func() { s.file.Link(s.file, "..") }) + + valid := p9.SetAttrMask{Size: true} + attr := p9.SetAttr{Size: 0} + assertPanic(t, func() { s.file.SetAttr(valid, attr) }) + }) +} + func TestInvalidName(t *testing.T) { runCustom(t, []fileType{regular}, rwConfs, func(t *testing.T, s state) { if _, _, _, _, err := s.file.Create("..", p9.ReadWrite, 0777, p9.UID(os.Getuid()), p9.GID(os.Getgid())); err != syscall.EINVAL { |