mirror of https://github.com/perkeep/perkeep.git
142 lines
3.2 KiB
Go
142 lines
3.2 KiB
Go
package fuse_test
|
|
|
|
import (
|
|
"runtime"
|
|
"testing"
|
|
|
|
"camlistore.org/third_party/bazil.org/fuse"
|
|
"camlistore.org/third_party/bazil.org/fuse/fs/fstestutil"
|
|
)
|
|
|
|
func init() {
|
|
fstestutil.DebugByDefault()
|
|
}
|
|
|
|
func TestMountOptionFSName(t *testing.T) {
|
|
t.Parallel()
|
|
const name = "FuseTestMarker"
|
|
mnt, err := fstestutil.MountedT(t, fstestutil.SimpleFS{fstestutil.Dir{}},
|
|
fuse.FSName(name),
|
|
)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
defer mnt.Close()
|
|
|
|
info, err := fstestutil.GetMountInfo(mnt.Dir)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if g, e := info.FSName, name; g != e {
|
|
t.Errorf("wrong FSName: %q != %q", g, e)
|
|
}
|
|
}
|
|
|
|
func testMountOptionFSNameEvil(t *testing.T, evil string) {
|
|
t.Parallel()
|
|
var name = "FuseTest" + evil + "Marker"
|
|
mnt, err := fstestutil.MountedT(t, fstestutil.SimpleFS{fstestutil.Dir{}},
|
|
fuse.FSName(name),
|
|
)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
defer mnt.Close()
|
|
|
|
info, err := fstestutil.GetMountInfo(mnt.Dir)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if g, e := info.FSName, name; g != e {
|
|
t.Errorf("wrong FSName: %q != %q", g, e)
|
|
}
|
|
}
|
|
|
|
func TestMountOptionFSNameEvilComma(t *testing.T) {
|
|
if runtime.GOOS == "darwin" {
|
|
// see TestMountOptionCommaError for a test that enforces we
|
|
// at least give a nice error, instead of corrupting the mount
|
|
// options
|
|
t.Skip("TODO: OS X gets this wrong, commas in mount options cannot be escaped at all")
|
|
}
|
|
testMountOptionFSNameEvil(t, ",")
|
|
}
|
|
|
|
func TestMountOptionFSNameEvilSpace(t *testing.T) {
|
|
testMountOptionFSNameEvil(t, " ")
|
|
}
|
|
|
|
func TestMountOptionFSNameEvilTab(t *testing.T) {
|
|
testMountOptionFSNameEvil(t, "\t")
|
|
}
|
|
|
|
func TestMountOptionFSNameEvilNewline(t *testing.T) {
|
|
testMountOptionFSNameEvil(t, "\n")
|
|
}
|
|
|
|
func TestMountOptionFSNameEvilBackslash(t *testing.T) {
|
|
testMountOptionFSNameEvil(t, `\`)
|
|
}
|
|
|
|
func TestMountOptionFSNameEvilBackslashDouble(t *testing.T) {
|
|
// catch double-unescaping, if it were to happen
|
|
testMountOptionFSNameEvil(t, `\\`)
|
|
}
|
|
|
|
func TestMountOptionSubtype(t *testing.T) {
|
|
if runtime.GOOS == "darwin" {
|
|
t.Skip("OS X does not support Subtype")
|
|
}
|
|
t.Parallel()
|
|
const name = "FuseTestMarker"
|
|
mnt, err := fstestutil.MountedT(t, fstestutil.SimpleFS{fstestutil.Dir{}},
|
|
fuse.Subtype(name),
|
|
)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
defer mnt.Close()
|
|
|
|
info, err := fstestutil.GetMountInfo(mnt.Dir)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if g, e := info.Type, "fuse."+name; g != e {
|
|
t.Errorf("wrong Subtype: %q != %q", g, e)
|
|
}
|
|
}
|
|
|
|
// TODO test LocalVolume
|
|
|
|
// TODO test AllowOther; hard because needs system-level authorization
|
|
|
|
func TestMountOptionAllowOtherThenAllowRoot(t *testing.T) {
|
|
t.Parallel()
|
|
mnt, err := fstestutil.MountedT(t, fstestutil.SimpleFS{fstestutil.Dir{}},
|
|
fuse.AllowOther(),
|
|
fuse.AllowRoot(),
|
|
)
|
|
if err == nil {
|
|
mnt.Close()
|
|
}
|
|
if g, e := err, fuse.ErrCannotCombineAllowOtherAndAllowRoot; g != e {
|
|
t.Fatalf("wrong error: %v != %v", g, e)
|
|
}
|
|
}
|
|
|
|
// TODO test AllowRoot; hard because needs system-level authorization
|
|
|
|
func TestMountOptionAllowRootThenAllowOther(t *testing.T) {
|
|
t.Parallel()
|
|
mnt, err := fstestutil.MountedT(t, fstestutil.SimpleFS{fstestutil.Dir{}},
|
|
fuse.AllowRoot(),
|
|
fuse.AllowOther(),
|
|
)
|
|
if err == nil {
|
|
mnt.Close()
|
|
}
|
|
if g, e := err, fuse.ErrCannotCombineAllowOtherAndAllowRoot; g != e {
|
|
t.Fatalf("wrong error: %v != %v", g, e)
|
|
}
|
|
}
|