Add tests/sharedstorage
Towards better test coverage of shared backing storage mounts. https://github.com/rfjakob/gocryptfs/issues/525
This commit is contained in:
parent
6da2a69018
commit
d7d79aa81c
61
tests/sharedstorage/sharedstorage_test.go
Normal file
61
tests/sharedstorage/sharedstorage_test.go
Normal file
@ -0,0 +1,61 @@
|
||||
// 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)
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user