root_test: add TestOverlay ; syscallcompat: add QuirkNoUserXattr
This commit is contained in:
parent
b636f79f89
commit
ba75aa1ab0
@ -13,6 +13,8 @@ const (
|
|||||||
// On MacOS ExFAT, all empty files share inode number 1:
|
// On MacOS ExFAT, all empty files share inode number 1:
|
||||||
// https://github.com/rfjakob/gocryptfs/issues/585
|
// https://github.com/rfjakob/gocryptfs/issues/585
|
||||||
QuirkDuplicateIno1
|
QuirkDuplicateIno1
|
||||||
|
// QuirkNoUserXattr means that user.* xattrs are not supported
|
||||||
|
QuirkNoUserXattr
|
||||||
)
|
)
|
||||||
|
|
||||||
func logQuirk(s string) {
|
func logQuirk(s string) {
|
||||||
|
@ -27,5 +27,9 @@ func DetectQuirks(cipherdir string) (q uint64) {
|
|||||||
q |= QuirkBrokenFalloc
|
q |= QuirkBrokenFalloc
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if uint32(st.Type) == unix.TMPFS_MAGIC {
|
||||||
|
logQuirk("tmpfs detected, no extended attributes except acls will work.")
|
||||||
|
}
|
||||||
|
|
||||||
return q
|
return q
|
||||||
}
|
}
|
||||||
|
@ -362,3 +362,34 @@ func TestBtrfsQuirks(t *testing.T) {
|
|||||||
t.Errorf("wrong quirk: %v", quirk)
|
t.Errorf("wrong quirk: %v", quirk)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestOverlay(t *testing.T) {
|
||||||
|
if os.Getuid() != 0 {
|
||||||
|
t.Skip("must run as root")
|
||||||
|
}
|
||||||
|
cDir := test_helpers.InitFS(t)
|
||||||
|
if syscallcompat.DetectQuirks(cDir)|syscallcompat.QuirkNoUserXattr != 0 {
|
||||||
|
t.Logf("No user xattrs! overlay mount will likely fail.")
|
||||||
|
}
|
||||||
|
os.Chmod(cDir, 0755)
|
||||||
|
pDir := cDir + ".mnt"
|
||||||
|
test_helpers.MountOrFatal(t, cDir, pDir, "-allow_other", "-extpass=echo test")
|
||||||
|
defer test_helpers.UnmountPanic(pDir)
|
||||||
|
|
||||||
|
for _, d := range []string{"lower", "upper", "work", "merged"} {
|
||||||
|
err := os.Mkdir(pDir+"/"+d, 0700)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ovlMnt := pDir + "/merged"
|
||||||
|
cmd := exec.Command("mount", "-t", "overlay", "overlay",
|
||||||
|
"-o", "lowerdir="+pDir+"/lower,upperdir="+pDir+"/upper,workdir="+pDir+"/work",
|
||||||
|
ovlMnt)
|
||||||
|
out, err := cmd.CombinedOutput()
|
||||||
|
if err != nil {
|
||||||
|
t.Log(string(out))
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
defer syscall.Unmount(ovlMnt, 0)
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user