Skip to content

Commit

Permalink
Add tests/sharedstorage
Browse files Browse the repository at this point in the history
Towards better test coverage of shared backing storage
mounts.

#525
  • Loading branch information
rfjakob committed Mar 21, 2021
1 parent 6da2a69 commit d7d79aa
Showing 1 changed file with 61 additions and 0 deletions.
61 changes: 61 additions & 0 deletions tests/sharedstorage/sharedstorage_test.go
Original file line number Diff line number Diff line change
@@ -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)
}
}
}

0 comments on commit d7d79aa

Please sign in to comment.