rclone/vendor/github.com/billziss-gh/cgofuse/fuse/host_test.go
2017-05-15 16:56:47 +01:00

110 lines
1.8 KiB
Go

/*
* 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)
}
}