Skip to content

Commit c1e3d52

Browse files
committed
Add capability tests to chroot, mount and polyfill
Also use mock FS instead of memfs to test capabilities Signed-off-by: Javi Fontan <[email protected]>
1 parent 5bb98d7 commit c1e3d52

File tree

5 files changed

+87
-3
lines changed

5 files changed

+87
-3
lines changed

fs_test.go

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import (
44
"testing"
55

66
. "gopkg.in/src-d/go-billy.v4"
7-
"gopkg.in/src-d/go-billy.v4/memfs"
7+
"gopkg.in/src-d/go-billy.v4/test"
88

99
. "gopkg.in/check.v1"
1010
)
@@ -29,9 +29,12 @@ func (s *FSSuite) TestCapabilities(c *C) {
2929
}
3030

3131
// This filesystem supports all capabilities except for LockCapability
32-
mem := memfs.New()
32+
fs := new(test.NoLockCapFs)
3333

3434
for _, e := range cases {
35-
c.Assert(CapabilityCheck(mem, e.caps), Equals, e.expected)
35+
c.Assert(CapabilityCheck(fs, e.caps), Equals, e.expected)
3636
}
37+
38+
dummy := new(test.BasicMock)
39+
c.Assert(Capabilities(dummy), Equals, DefaultCapabilities)
3740
}

helper/chroot/chroot_test.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -351,3 +351,18 @@ func (s *ChrootSuite) TestReadlinkWithBasic(c *C) {
351351
_, err := fs.Readlink("")
352352
c.Assert(err, Equals, billy.ErrNotSupported)
353353
}
354+
355+
func (s *ChrootSuite) TestCapabilities(c *C) {
356+
testCapabilities(c, new(test.BasicMock))
357+
testCapabilities(c, new(test.OnlyReadCapFs))
358+
testCapabilities(c, new(test.NoLockCapFs))
359+
}
360+
361+
func testCapabilities(c *C, basic billy.Basic) {
362+
baseCapabilities := billy.Capabilities(basic)
363+
364+
fs := New(basic, "/foo")
365+
capabilities := billy.Capabilities(fs)
366+
367+
c.Assert(capabilities, Equals, baseCapabilities)
368+
}

helper/mount/mount_test.go

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -337,3 +337,34 @@ func (s *MountSuite) TestSourceNotSupported(c *C) {
337337
_, err = h.Readlink("foo")
338338
c.Assert(err, Equals, billy.ErrNotSupported)
339339
}
340+
341+
func (s *MountSuite) TestCapabilities(c *C) {
342+
testCapabilities(c, new(test.BasicMock), new(test.BasicMock))
343+
testCapabilities(c, new(test.BasicMock), new(test.OnlyReadCapFs))
344+
testCapabilities(c, new(test.BasicMock), new(test.NoLockCapFs))
345+
testCapabilities(c, new(test.OnlyReadCapFs), new(test.BasicMock))
346+
testCapabilities(c, new(test.OnlyReadCapFs), new(test.OnlyReadCapFs))
347+
testCapabilities(c, new(test.OnlyReadCapFs), new(test.NoLockCapFs))
348+
testCapabilities(c, new(test.NoLockCapFs), new(test.BasicMock))
349+
testCapabilities(c, new(test.NoLockCapFs), new(test.OnlyReadCapFs))
350+
testCapabilities(c, new(test.NoLockCapFs), new(test.NoLockCapFs))
351+
}
352+
353+
func testCapabilities(c *C, a, b billy.Basic) {
354+
aCapabilities := billy.Capabilities(a)
355+
bCapabilities := billy.Capabilities(b)
356+
357+
fs := New(a, "/foo", b)
358+
capabilities := billy.Capabilities(fs)
359+
360+
unionCapabilities := aCapabilities & bCapabilities
361+
362+
c.Assert(capabilities, Equals, unionCapabilities)
363+
364+
fs = New(b, "/foo", a)
365+
capabilities = billy.Capabilities(fs)
366+
367+
unionCapabilities = aCapabilities & bCapabilities
368+
369+
c.Assert(capabilities, Equals, unionCapabilities)
370+
}

helper/polyfill/polyfill_test.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,3 +61,18 @@ func (s *PolyfillSuite) TestChroot(c *C) {
6161
func (s *PolyfillSuite) TestRoot(c *C) {
6262
c.Assert(s.Helper.Root(), Equals, string(filepath.Separator))
6363
}
64+
65+
func (s *PolyfillSuite) TestCapabilities(c *C) {
66+
testCapabilities(c, new(test.BasicMock))
67+
testCapabilities(c, new(test.OnlyReadCapFs))
68+
testCapabilities(c, new(test.NoLockCapFs))
69+
}
70+
71+
func testCapabilities(c *C, basic billy.Basic) {
72+
baseCapabilities := billy.Capabilities(basic)
73+
74+
fs := New(basic)
75+
capabilities := billy.Capabilities(fs)
76+
77+
c.Assert(capabilities, Equals, baseCapabilities)
78+
}

test/mock.go

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,3 +134,23 @@ func (*FileMock) Unlock() error {
134134
func (*FileMock) Truncate(size int64) error {
135135
return nil
136136
}
137+
138+
type OnlyReadCapFs struct {
139+
BasicMock
140+
}
141+
142+
func (o *OnlyReadCapFs) Capabilities() billy.Capability {
143+
return billy.ReadCapability
144+
}
145+
146+
type NoLockCapFs struct {
147+
BasicMock
148+
}
149+
150+
func (o *NoLockCapFs) Capabilities() billy.Capability {
151+
return billy.WriteCapability |
152+
billy.ReadCapability |
153+
billy.ReadAndWriteCapability |
154+
billy.SeekCapability |
155+
billy.TruncateCapability
156+
}

0 commit comments

Comments
 (0)