aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/memfs/dirwatcher.go6
-rw-r--r--lib/memfs/dirwatcher_example_test.go5
-rw-r--r--lib/memfs/dirwatcher_test.go25
-rw-r--r--lib/memfs/memfs.go4
-rw-r--r--lib/memfs/memfs_test.go31
-rw-r--r--lib/memfs/watcher.go4
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)