62 lines
1.5 KiB
Go
62 lines
1.5 KiB
Go
|
// test gocryptfs cipherdir mounted multiple times at the same time
|
||
|
package sharedstorage
|
||
|
|
||
|
import (
|
||
|
"testing"
|
||
|
|
||
|
"golang.org/x/sys/unix"
|
||
|
|
||
|
"github.com/rfjakob/gocryptfs/tests/test_helpers"
|
||
|
)
|
||
|
|
||
|
var flagSharestorage bool
|
||
|
|
||
|
func TestMain(m *testing.M) {
|
||
|
flagSharestorage = false
|
||
|
m.Run()
|
||
|
flagSharestorage = true
|
||
|
m.Run()
|
||
|
}
|
||
|
|
||
|
// mountSharedstorage mounts `cipherdir` on `mnt` with or without the
|
||
|
// `-sharedstorage` flag, depending on the global var `flagSharestorage`.
|
||
|
func mountSharedstorage(t *testing.T, cipherdir string, mnt string) {
|
||
|
args := []string{"-extpass=echo test"}
|
||
|
if flagSharestorage {
|
||
|
args = append(args, "-sharedstorage")
|
||
|
}
|
||
|
test_helpers.MountOrFatal(t, cipherdir, mnt, args...)
|
||
|
}
|
||
|
|
||
|
func TestUnlink(t *testing.T) {
|
||
|
cipherdir := test_helpers.InitFS(t)
|
||
|
mnt1 := cipherdir + ".mnt1"
|
||
|
mnt2 := cipherdir + ".mnt2"
|
||
|
mountSharedstorage(t, cipherdir, mnt1)
|
||
|
defer test_helpers.UnmountPanic(mnt1)
|
||
|
mountSharedstorage(t, cipherdir, mnt2)
|
||
|
defer test_helpers.UnmountPanic(mnt2)
|
||
|
|
||
|
// Create dir via mnt1
|
||
|
if err := unix.Mkdir(mnt1+"/foo", 0700); err != nil {
|
||
|
t.Fatal(err)
|
||
|
}
|
||
|
// Replace dir with file via mnt2
|
||
|
if err := unix.Rmdir(mnt2 + "/foo"); err != nil {
|
||
|
t.Fatal(err)
|
||
|
}
|
||
|
if fd, err := unix.Creat(mnt2+"/foo", 0600); err != nil {
|
||
|
t.Fatal(err)
|
||
|
} else {
|
||
|
unix.Close(fd)
|
||
|
}
|
||
|
// Try to unlink via mnt1
|
||
|
if err := unix.Unlink(mnt1 + "/foo"); err != nil {
|
||
|
if flagSharestorage {
|
||
|
t.Fatal(err)
|
||
|
} else {
|
||
|
t.Logf("Unlink failed as expected: errno %d / %v", err, err)
|
||
|
}
|
||
|
}
|
||
|
}
|