diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/test_helpers/helpers.go | 2 | ||||
-rw-r--r-- | tests/zerodiriv/zerodiriv_test.go | 85 |
2 files changed, 86 insertions, 1 deletions
diff --git a/tests/test_helpers/helpers.go b/tests/test_helpers/helpers.go index 87dba0a..f78c59c 100644 --- a/tests/test_helpers/helpers.go +++ b/tests/test_helpers/helpers.go @@ -110,7 +110,7 @@ func ResetTmpDir(createDirIV bool) { // Open cipherdir (following symlinks) dirfd, err := syscall.Open(DefaultCipherDir, syscall.O_DIRECTORY|syscallcompat.O_PATH, 0) if err == nil { - err = nametransform.WriteDirIVAt(dirfd) + err = nametransform.WriteDirIVAt(dirfd, true) syscall.Close(dirfd) } if err != nil { diff --git a/tests/zerodiriv/zerodiriv_test.go b/tests/zerodiriv/zerodiriv_test.go new file mode 100644 index 0000000..3fbbf47 --- /dev/null +++ b/tests/zerodiriv/zerodiriv_test.go @@ -0,0 +1,85 @@ +package zerodiriv + +// integration tests that target zerodiriv specifically + +import ( + "bytes" + "path/filepath" + "io/ioutil" + "os" + "testing" + + "github.com/rfjakob/gocryptfs/tests/test_helpers" +) + +var cDir string +var pDir string + +var testPw = []byte("test") + +// Create and mount "-zerodiriv" fs +func TestMain(m *testing.M) { + cDir = test_helpers.InitFS(nil, "-zerodiriv") + pDir = cDir + ".mnt" + test_helpers.MountOrExit(cDir, pDir, "-zerodiriv", "-extpass", "echo test") + r := m.Run() + test_helpers.UnmountPanic(pDir) + os.Exit(r) +} + +// diriv should be all-zero on newly created dirs +func TestZeroDirIV(t *testing.T) { + // Create /dir1, move it and create it again + var dirPath = pDir+"/dir1" + var err = os.Mkdir(dirPath, 0777) + if err != nil { + t.Error(err) + } + err = os.Rename(dirPath, dirPath + ".bak") + if err != nil { + t.Error(err) + } + err = os.Mkdir(dirPath, 0777) + if err != nil { + t.Error(err) + } + + var matches []string + matches, err = filepath.Glob(cDir+"/*/gocryptfs.diriv") + if err != nil { + t.Error(err) + } + + // The contents of the both diriv files must be the same + var diriv0 []byte + diriv0, err = ioutil.ReadFile(matches[0]) + if err != nil { + t.Error(err) + } + var diriv1 []byte + diriv1, err = ioutil.ReadFile(matches[1]) + if err != nil { + t.Error(err) + } + if !bytes.Equal(diriv0, diriv1) { + t.Errorf("both dirivs should have the same value") + } + // And equal to zero + zerodiriv := make([]byte, len(diriv0)) + if !bytes.Equal(diriv0, zerodiriv) { + t.Errorf("both dirivs should be all-zero") + } +} + +// root diriv should be all-zero +func TestZeroRootDirIV(t *testing.T) { + // The contents of the diriv file must be zero + diriv, err := ioutil.ReadFile(cDir+"/gocryptfs.diriv") + if err != nil { + t.Error(err) + } + zerodiriv := make([]byte, len(diriv)) + if !bytes.Equal(diriv, zerodiriv) { + t.Errorf("root diriv should be all-zero") + } +} |