libgocryptfs/tests/sharedstorage/sharedstorage_test.go
Jakob Unterwurzacher d7d79aa81c Add tests/sharedstorage
Towards better test coverage of shared backing storage
mounts.

https://github.com/rfjakob/gocryptfs/issues/525
2021-03-21 11:10:18 +01:00

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