diff options
| -rw-r--r-- | lib/memfs/dirwatcher.go | 6 | ||||
| -rw-r--r-- | lib/memfs/dirwatcher_example_test.go | 5 | ||||
| -rw-r--r-- | lib/memfs/dirwatcher_test.go | 25 | ||||
| -rw-r--r-- | lib/memfs/memfs.go | 4 | ||||
| -rw-r--r-- | lib/memfs/memfs_test.go | 31 | ||||
| -rw-r--r-- | lib/memfs/watcher.go | 4 |
6 files changed, 27 insertions, 48 deletions
diff --git a/lib/memfs/dirwatcher.go b/lib/memfs/dirwatcher.go index be6524df..5243cedc 100644 --- a/lib/memfs/dirwatcher.go +++ b/lib/memfs/dirwatcher.go @@ -74,7 +74,7 @@ func (dw *DirWatcher) init() (err error) { } if dw.fs == nil { - fi, err = osStat(dw.Root) + fi, err = os.Stat(dw.Root) if err != nil { return fmt.Errorf("%s: %w", logp, err) } @@ -442,7 +442,7 @@ func (dw *DirWatcher) start() { for ever { select { case <-ticker.C: - fi, err = osStat(dw.Root) + fi, err = os.Stat(dw.Root) if err != nil { if !os.IsNotExist(err) { log.Printf("%s: %s", logp, err) @@ -499,7 +499,7 @@ func (dw *DirWatcher) processSubdirs() { ) for _, node = range dw.dirs { - newDirInfo, err = osStat(node.SysPath) + newDirInfo, err = os.Stat(node.SysPath) if err != nil { if os.IsNotExist(err) { dw.onDelete(node) diff --git a/lib/memfs/dirwatcher_example_test.go b/lib/memfs/dirwatcher_example_test.go index 1416a47d..9c5bd8d1 100644 --- a/lib/memfs/dirwatcher_example_test.go +++ b/lib/memfs/dirwatcher_example_test.go @@ -40,7 +40,7 @@ func ExampleDirWatcher() { `.*\.html$`, }, }, - Delay: 150 * time.Millisecond, + Delay: 100 * time.Millisecond, } err = dw.Start() @@ -48,6 +48,9 @@ func ExampleDirWatcher() { log.Fatal(err) } + // Add delay for modtime to changes. + time.Sleep(100 * time.Millisecond) + fmt.Println(`Deleting the root directory:`) err = os.Remove(rootDir) if err != nil { diff --git a/lib/memfs/dirwatcher_test.go b/lib/memfs/dirwatcher_test.go index de379f34..a6c693a6 100644 --- a/lib/memfs/dirwatcher_test.go +++ b/lib/memfs/dirwatcher_test.go @@ -51,7 +51,7 @@ func TestDirWatcher_renameDirectory(t *testing.T) { Options: Options{ Root: rootDir, }, - Delay: 200 * time.Millisecond, + Delay: 100 * time.Millisecond, } err = dw.Start() @@ -102,7 +102,7 @@ func TestDirWatcher_removeDirSymlink(t *testing.T) { } dw = DirWatcher{ Options: opts, - Delay: 200 * time.Millisecond, + Delay: 100 * time.Millisecond, } got NodeState @@ -113,8 +113,8 @@ func TestDirWatcher_removeDirSymlink(t *testing.T) { t.Fatal(err) } - // Wait for all watcher started. - time.Sleep(500 * time.Millisecond) + // Add delay for modtime to changes. + time.Sleep(100 * time.Millisecond) err = os.Mkdir(dirSub, 0700) if err != nil { @@ -124,6 +124,9 @@ func TestDirWatcher_removeDirSymlink(t *testing.T) { test.Assert(t, `Mkdir state`, FileStateCreated, got.State) test.Assert(t, `Mkdir path`, `/sub`, got.Node.Path) + // Add delay for modtime to changes. + time.Sleep(100 * time.Millisecond) + err = os.Symlink(fileOld, fileNew) if err != nil { t.Fatal(err) @@ -132,6 +135,9 @@ func TestDirWatcher_removeDirSymlink(t *testing.T) { test.Assert(t, `Symlink state`, FileStateCreated, got.State) test.Assert(t, `Symlink path`, `/sub/index.html`, got.Node.Path) + // Add delay for modtime to changes. + time.Sleep(100 * time.Millisecond) + err = os.RemoveAll(dirSub) if err != nil { t.Fatal(err) @@ -178,12 +184,12 @@ func TestDirWatcher_withSymlink(t *testing.T) { t.Fatal(err) } - // Wait for all watcher started. - time.Sleep(500 * time.Millisecond) + // Add delay for modtime to changes. + time.Sleep(100 * time.Millisecond) var gotns NodeState - // Write to symlink file source. + // Write to file source. data = []byte(`new content of symlink`) err = os.WriteFile(symlinkSource, data, 0600) if err != nil { @@ -194,6 +200,9 @@ func TestDirWatcher_withSymlink(t *testing.T) { test.Assert(t, `path`, `/symlinkDest`, gotns.Node.Path) test.Assert(t, `state`, FileStateUpdateContent, gotns.State) + // Add delay for modtime to changes. + time.Sleep(100 * time.Millisecond) + // Write to symlink file destination. data = []byte(`new content of symlink destination`) err = os.WriteFile(symlinkDest, data, 0600) @@ -204,4 +213,6 @@ func TestDirWatcher_withSymlink(t *testing.T) { gotns = <-dw.C test.Assert(t, `path`, `/symlinkDest`, gotns.Node.Path) test.Assert(t, `state`, FileStateUpdateContent, gotns.State) + + dw.Stop() } diff --git a/lib/memfs/memfs.go b/lib/memfs/memfs.go index 7bea720e..d282a4e4 100644 --- a/lib/memfs/memfs.go +++ b/lib/memfs/memfs.go @@ -28,10 +28,6 @@ const ( defContentType = "text/plain" // Default content type for empty file. ) -// osStat define the variable that can be replaced during testing Watcher and -// DirWatcher to mock os.Stat. -var osStat = os.Stat - // MemFS contains directory tree of file system in memory. type MemFS struct { http.FileSystem diff --git a/lib/memfs/memfs_test.go b/lib/memfs/memfs_test.go index 7e210d9e..15aebf9b 100644 --- a/lib/memfs/memfs_test.go +++ b/lib/memfs/memfs_test.go @@ -10,7 +10,6 @@ import ( "log" "os" "path/filepath" - "sync/atomic" "testing" "time" @@ -19,36 +18,9 @@ import ( ) var ( - _epoch atomic.Int64 _testWD string ) -// mockOsStat mock the os.Stat by returning FileInfo with mocked ModTime that -// always increased 1 second every call. -func mockOsStat(path string) (fi os.FileInfo, err error) { - var orgfi os.FileInfo - - orgfi, err = os.Stat(path) - if err != nil { - return nil, err - } - - var node = &Node{ - name: orgfi.Name(), - size: orgfi.Size(), - mode: orgfi.Mode(), - modTime: time.Unix(_epoch.Load(), 0), - } - if !orgfi.IsDir() { - node.Content, err = os.ReadFile(path) - if err != nil { - return nil, err - } - } - _epoch.Add(1) - return node, nil -} - func TestMain(m *testing.M) { var err error @@ -79,9 +51,6 @@ func TestMain(m *testing.M) { } } - _epoch.Store(1684424377) - osStat = mockOsStat - os.Exit(m.Run()) } diff --git a/lib/memfs/watcher.go b/lib/memfs/watcher.go index 9eebe63c..3facfa65 100644 --- a/lib/memfs/watcher.go +++ b/lib/memfs/watcher.go @@ -53,7 +53,7 @@ func NewWatcher(path string, d time.Duration) (w *Watcher, err error) { return nil, fmt.Errorf("%s: path is empty", logp) } - fi, err = osStat(path) + fi, err = os.Stat(path) if err != nil { return nil, fmt.Errorf("%s: %w", logp, err) } @@ -117,7 +117,7 @@ func (w *Watcher) start() { err error ) for range w.ticker.C { - newInfo, err = osStat(w.node.SysPath) + newInfo, err = os.Stat(w.node.SysPath) if err != nil { if !os.IsNotExist(err) { log.Printf("%s: %s: %s", logp, w.node.SysPath, err) |
