cmount: Vendor github.com/billziss-gh/cgofuse
This commit is contained in:
+109
@@ -0,0 +1,109 @@
|
||||
/*
|
||||
* host_test.go
|
||||
*
|
||||
* Copyright 2017 Bill Zissimopoulos
|
||||
*/
|
||||
/*
|
||||
* This file is part of Cgofuse.
|
||||
*
|
||||
* It is licensed under the MIT license. The full license text can be found
|
||||
* in the License.txt file at the root of this project.
|
||||
*/
|
||||
|
||||
package fuse
|
||||
|
||||
import (
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"runtime"
|
||||
"testing"
|
||||
"time"
|
||||
)
|
||||
|
||||
type testfs struct {
|
||||
FileSystemBase
|
||||
init, dstr int
|
||||
}
|
||||
|
||||
func (self *testfs) Init() {
|
||||
self.init++
|
||||
}
|
||||
|
||||
func (self *testfs) Destroy() {
|
||||
self.dstr++
|
||||
}
|
||||
|
||||
func (self *testfs) Getattr(path string, stat *Stat_t, fh uint64) (errc int) {
|
||||
switch path {
|
||||
case "/":
|
||||
stat.Mode = S_IFDIR | 0555
|
||||
return 0
|
||||
default:
|
||||
return -ENOENT
|
||||
}
|
||||
}
|
||||
|
||||
func (self *testfs) Readdir(path string,
|
||||
fill func(name string, stat *Stat_t, ofst int64) bool,
|
||||
ofst int64,
|
||||
fh uint64) (errc int) {
|
||||
fill(".", nil, 0)
|
||||
fill("..", nil, 0)
|
||||
return 0
|
||||
}
|
||||
|
||||
func testHost(t *testing.T, unmount bool) {
|
||||
path, err := ioutil.TempDir("", "test")
|
||||
if nil != err {
|
||||
panic(err)
|
||||
}
|
||||
defer os.Remove(path)
|
||||
mntp := filepath.Join(path, "m")
|
||||
if "windows" != runtime.GOOS {
|
||||
err = os.Mkdir(mntp, os.FileMode(0755))
|
||||
if nil != err {
|
||||
panic(err)
|
||||
}
|
||||
defer os.Remove(mntp)
|
||||
}
|
||||
done := make(chan bool)
|
||||
tmch := time.After(3 * time.Second)
|
||||
tstf := &testfs{}
|
||||
host := NewFileSystemHost(tstf)
|
||||
mres := false
|
||||
ures := false
|
||||
go func() {
|
||||
mres = host.Mount(mntp, nil)
|
||||
done <- true
|
||||
}()
|
||||
<-tmch
|
||||
if unmount {
|
||||
ures = host.Unmount()
|
||||
} else {
|
||||
ures = sendInterrupt()
|
||||
}
|
||||
<-done
|
||||
if !mres {
|
||||
t.Error("Mount failed")
|
||||
}
|
||||
if !ures {
|
||||
t.Error("Unmount failed")
|
||||
}
|
||||
if 1 != tstf.init {
|
||||
t.Errorf("Init() called %v times; expected 1", tstf.init)
|
||||
}
|
||||
if 1 != tstf.dstr {
|
||||
t.Errorf("Destroy() called %v times; expected 1", tstf.dstr)
|
||||
}
|
||||
}
|
||||
|
||||
func TestUnmount(t *testing.T) {
|
||||
testHost(t, true)
|
||||
}
|
||||
|
||||
func TestSignal(t *testing.T) {
|
||||
if "windows" != runtime.GOOS {
|
||||
testHost(t, false)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user