From e98e550021b510b5c3891bb2fd680fc05e291617 Mon Sep 17 00:00:00 2001 From: Nick Craig-Wood Date: Sat, 18 Nov 2017 15:50:38 +0000 Subject: [PATCH] mounttest: wait for all background Close/Release after writing a file The filesystem does a certain amount of things asynchronously waiting for the file to be released after writing it means everything should be in a consistent state. --- cmd/mountlib/mounttest/file.go | 2 ++ cmd/mountlib/mounttest/fs.go | 6 ++++++ cmd/mountlib/mounttest/write.go | 10 +++++++--- cmd/mountlib/mounttest/write_unix.go | 1 + 4 files changed, 16 insertions(+), 3 deletions(-) diff --git a/cmd/mountlib/mounttest/file.go b/cmd/mountlib/mounttest/file.go index e36503e35..b0d03e8a3 100644 --- a/cmd/mountlib/mounttest/file.go +++ b/cmd/mountlib/mounttest/file.go @@ -52,6 +52,8 @@ func TestFileModTimeWithOpenWriters(t *testing.T) { err = f.Close() require.NoError(t, err) + run.waitForWriters() + info, err := os.Stat(filepath) require.NoError(t, err) diff --git a/cmd/mountlib/mounttest/fs.go b/cmd/mountlib/mounttest/fs.go index a6c3af98f..dd79410d4 100644 --- a/cmd/mountlib/mounttest/fs.go +++ b/cmd/mountlib/mounttest/fs.go @@ -304,10 +304,16 @@ func (r *Run) checkDir(t *testing.T, dirString string) { assert.Equal(t, dm, localDm, "expected vs fuse mount") } +// wait for any files being written to be released by fuse +func (r *Run) waitForWriters() { + run.vfs.WaitForWriters(10 * time.Second) +} + func (r *Run) createFile(t *testing.T, filepath string, contents string) { filepath = r.path(filepath) err := ioutil.WriteFile(filepath, []byte(contents), 0600) require.NoError(t, err) + r.waitForWriters() } func (r *Run) readFile(t *testing.T, filepath string) string { diff --git a/cmd/mountlib/mounttest/write.go b/cmd/mountlib/mounttest/write.go index e2ce7868d..c2ab5d65a 100644 --- a/cmd/mountlib/mounttest/write.go +++ b/cmd/mountlib/mounttest/write.go @@ -2,7 +2,6 @@ package mounttest import ( "testing" - "time" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -18,8 +17,7 @@ func TestWriteFileNoWrite(t *testing.T) { err = fd.Close() assert.NoError(t, err) - // FIXME - wait for the Release on the file - time.Sleep(10 * time.Millisecond) + run.waitForWriters() run.checkDir(t, "testnowrite 0") @@ -38,6 +36,8 @@ func FIXMETestWriteOpenFileInDirListing(t *testing.T) { err = fd.Close() assert.NoError(t, err) + run.waitForWriters() + run.rm(t, "testnowrite") } @@ -68,6 +68,8 @@ func TestWriteFileOverwrite(t *testing.T) { // // NB the code for this is in file.go rather than write.go func TestWriteFileFsync(t *testing.T) { + run.skipIfNoFUSE(t) + filepath := run.path("to be synced") fd, err := osCreate(filepath) require.NoError(t, err) @@ -77,4 +79,6 @@ func TestWriteFileFsync(t *testing.T) { require.NoError(t, err) err = fd.Close() require.NoError(t, err) + run.waitForWriters() + run.rm(t, "to be synced") } diff --git a/cmd/mountlib/mounttest/write_unix.go b/cmd/mountlib/mounttest/write_unix.go index 01f17d41b..0d8256764 100644 --- a/cmd/mountlib/mounttest/write_unix.go +++ b/cmd/mountlib/mounttest/write_unix.go @@ -45,5 +45,6 @@ func TestWriteFileDoubleClose(t *testing.T) { err = syscall.Close(fd2) assert.NoError(t, err) + run.waitForWriters() run.rm(t, "testdoubleclose") }