summaryrefslogtreecommitdiff
path: root/service/reload/watcher_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'service/reload/watcher_test.go')
-rw-r--r--service/reload/watcher_test.go400
1 files changed, 154 insertions, 246 deletions
diff --git a/service/reload/watcher_test.go b/service/reload/watcher_test.go
index 9683d2de..ac5d3740 100644
--- a/service/reload/watcher_test.go
+++ b/service/reload/watcher_test.go
@@ -6,10 +6,11 @@ import (
"io/ioutil"
"os"
"path/filepath"
- "runtime"
"strings"
"testing"
"time"
+
+ "github.com/stretchr/testify/assert"
)
var testServiceName = "test"
@@ -34,13 +35,13 @@ func Test_Correct_Watcher_Init(t *testing.T) {
}
wc := WatcherConfig{
- serviceName: testServiceName,
- recursive: false,
- directories: []string{tempDir},
- filterHooks: nil,
- files: make(map[string]os.FileInfo),
- ignored: nil,
- filePatterns: nil,
+ ServiceName: testServiceName,
+ Recursive: false,
+ Directories: []string{tempDir},
+ FilterHooks: nil,
+ Files: make(map[string]os.FileInfo),
+ Ignored: nil,
+ FilePatterns: nil,
}
w, err := NewWatcher([]WatcherConfig{wc})
@@ -59,84 +60,69 @@ func Test_Correct_Watcher_Init(t *testing.T) {
// change file and see, if event had come to handler
func Test_Get_FileEvent(t *testing.T) {
tempDir, err := ioutil.TempDir(".", "")
- c := make(chan struct{})
defer func(name string) {
err = freeResources(name)
- if err != nil {
- c <- struct{}{}
- t.Fatal(err)
- }
- c <- struct{}{}
+ assert.NoError(t, err)
}(tempDir)
-
- if err != nil {
- t.Fatal(err)
- }
+ assert.NoError(t, err)
err = ioutil.WriteFile(filepath.Join(tempDir, "file1.txt"),
[]byte{}, 0755)
- if err != nil {
- t.Fatal(err)
- }
-
+ assert.NoError(t, err)
err = ioutil.WriteFile(filepath.Join(tempDir, "file2.txt"),
[]byte{}, 0755)
- if err != nil {
- t.Fatal(err)
- }
+ assert.NoError(t, err)
err = ioutil.WriteFile(filepath.Join(tempDir, "file3.txt"),
[]byte{}, 0755)
- if err != nil {
- t.Fatal(err)
- }
+ assert.NoError(t, err)
wc := WatcherConfig{
- serviceName: testServiceName,
- recursive: false,
- directories: []string{tempDir},
- filterHooks: nil,
- files: make(map[string]os.FileInfo),
- ignored: nil,
- filePatterns: []string{"aaa", "txt"},
+ ServiceName: testServiceName,
+ Recursive: false,
+ Directories: []string{tempDir},
+ FilterHooks: nil,
+ Files: make(map[string]os.FileInfo),
+ Ignored: nil,
+ FilePatterns: []string{"aaa", "txt"},
}
w, err := NewWatcher([]WatcherConfig{wc})
- if err != nil {
- t.Fatal(err)
- }
+ assert.NoError(t, err)
// should be 3 files and directory
if len(w.GetAllFiles(testServiceName)) != 4 {
t.Fatal("incorrect directories len")
}
- go limitTime(time.Second * 10, t.Name(), c)
-
go func() {
+ stop := make(chan struct{}, 1)
go func() {
- time.Sleep(time.Second)
- err2 := ioutil.WriteFile(filepath.Join(tempDir, "file2.txt"),
+ time.Sleep(time.Second * 2)
+ err := ioutil.WriteFile(filepath.Join(tempDir, "file2.txt"),
[]byte{1, 1, 1}, 0755)
- if err2 != nil {
- panic(err2)
- }
- runtime.Goexit()
+ assert.NoError(t, err)
+ time.Sleep(time.Second)
+ stop <- struct{}{}
}()
go func() {
- for e := range w.Event {
- if e.path != "file2.txt" {
- panic("didn't handle event when write file2")
+ for {
+ select {
+ case e := <-w.Event:
+ if e.Path != "file2.txt" {
+ assert.Fail(t, "didn't handle event when write file2")
+ }
+ w.Stop()
+ case <-stop:
+ return
}
- w.Stop()
}
+
}()
}()
err = w.StartPolling(time.Second)
- if err != nil {
- t.Fatal(err)
- }
+ assert.NoError(t, err)
}
// scenario
@@ -145,41 +131,29 @@ func Test_Get_FileEvent(t *testing.T) {
// change file with txt extension, and see, if event had not come to handler because it was filtered
func Test_FileExtensionFilter(t *testing.T) {
tempDir, err := ioutil.TempDir(".", "")
- c := make(chan struct{})
+ assert.NoError(t, err)
+
defer func(name string) {
err = freeResources(name)
- if err != nil {
- c <- struct{}{}
- t.Fatal(err)
- }
- c <- struct{}{}
+ assert.NoError(t, err)
}(tempDir)
- if err != nil {
- t.Fatal(err)
- }
err = ioutil.WriteFile(filepath.Join(tempDir, "file1.aaa"),
[]byte{}, 0755)
- if err != nil {
- t.Fatal(err)
- }
+ assert.NoError(t, err)
err = ioutil.WriteFile(filepath.Join(tempDir, "file2.bbb"),
[]byte{}, 0755)
- if err != nil {
- t.Fatal(err)
- }
+ assert.NoError(t, err)
err = ioutil.WriteFile(filepath.Join(tempDir, "file3.txt"),
[]byte{}, 0755)
- if err != nil {
- t.Fatal(err)
- }
+ assert.NoError(t, err)
wc := WatcherConfig{
- serviceName: testServiceName,
- recursive: false,
- directories: []string{tempDir},
- filterHooks: func(filename string, patterns []string) error {
+ ServiceName: testServiceName,
+ Recursive: false,
+ Directories: []string{tempDir},
+ FilterHooks: func(filename string, patterns []string) error {
for i := 0; i < len(patterns); i++ {
if strings.Contains(filename, patterns[i]) {
return nil
@@ -187,15 +161,13 @@ func Test_FileExtensionFilter(t *testing.T) {
}
return ErrorSkip
},
- files: make(map[string]os.FileInfo),
- ignored: nil,
- filePatterns: []string{"aaa", "bbb"},
+ Files: make(map[string]os.FileInfo),
+ Ignored: nil,
+ FilePatterns: []string{"aaa", "bbb"},
}
w, err := NewWatcher([]WatcherConfig{wc})
- if err != nil {
- t.Fatal(err)
- }
+ assert.NoError(t, err)
dirLen := len(w.GetAllFiles(testServiceName))
// should be 2 files (one filtered) and directory
@@ -203,33 +175,32 @@ func Test_FileExtensionFilter(t *testing.T) {
t.Fatalf("incorrect directories len, len is: %d", dirLen)
}
- go limitTime(time.Second * 5, t.Name(), c)
-
go func() {
+ stop := make(chan struct{}, 1)
+
go func() {
- err2 := ioutil.WriteFile(filepath.Join(tempDir, "file3.txt"),
+ time.Sleep(time.Second)
+ err := ioutil.WriteFile(filepath.Join(tempDir, "file3.txt"),
[]byte{1, 1, 1}, 0755)
- if err2 != nil {
- panic(err2)
- }
-
- runtime.Goexit()
+ assert.NoError(t, err)
+ stop <- struct{}{}
}()
go func() {
- for e := range w.Event {
- fmt.Println(e.info.Name())
- panic("handled event from filtered file")
+ time.Sleep(time.Second)
+ select {
+ case <-w.Event:
+ assert.Fail(t, "handled event from filtered file")
+ case <-stop:
+ return
}
}()
+ time.Sleep(time.Second)
w.Stop()
- runtime.Goexit()
}()
err = w.StartPolling(time.Second)
- if err != nil {
- t.Fatal(err)
- }
+ assert.NoError(t, err)
}
// nested
@@ -241,44 +212,32 @@ func Test_Recursive_Support(t *testing.T) {
tempDir, err := ioutil.TempDir(".", "")
defer func() {
err = freeResources(tempDir)
- if err != nil {
- t.Fatal(err)
- }
+ assert.NoError(t, err)
}()
nestedDir, err := ioutil.TempDir(tempDir, "nested")
- if err != nil {
- t.Fatal(err)
- }
+ assert.NoError(t, err)
err = ioutil.WriteFile(filepath.Join(tempDir, "file1.aaa"),
[]byte{}, 0755)
- if err != nil {
- t.Fatal(err)
- }
+ assert.NoError(t, err)
err = ioutil.WriteFile(filepath.Join(tempDir, "file2.bbb"),
[]byte{}, 0755)
- if err != nil {
- t.Fatal(err)
- }
+ assert.NoError(t, err)
err = ioutil.WriteFile(filepath.Join(nestedDir, "file3.txt"),
[]byte{}, 0755)
- if err != nil {
- t.Fatal(err)
- }
+ assert.NoError(t, err)
err = ioutil.WriteFile(filepath.Join(nestedDir, "file4.aaa"),
[]byte{}, 0755)
- if err != nil {
- t.Fatal(err)
- }
+ assert.NoError(t, err)
wc := WatcherConfig{
- serviceName: testServiceName,
- recursive: true,
- directories: []string{tempDir},
- filterHooks: func(filename string, patterns []string) error {
+ ServiceName: testServiceName,
+ Recursive: true,
+ Directories: []string{tempDir},
+ FilterHooks: func(filename string, patterns []string) error {
for i := 0; i < len(patterns); i++ {
if strings.Contains(filename, patterns[i]) {
return nil
@@ -286,15 +245,13 @@ func Test_Recursive_Support(t *testing.T) {
}
return ErrorSkip
},
- files: make(map[string]os.FileInfo),
- ignored: nil,
- filePatterns: []string{"aaa", "bbb"},
+ Files: make(map[string]os.FileInfo),
+ Ignored: nil,
+ FilePatterns: []string{"aaa", "bbb"},
}
w, err := NewWatcher([]WatcherConfig{wc})
- if err != nil {
- t.Fatal(err)
- }
+ assert.NoError(t, err)
dirLen := len(w.GetAllFiles(testServiceName))
// should be 3 files (2 from root dir, and 1 from nested), filtered txt
@@ -303,28 +260,35 @@ func Test_Recursive_Support(t *testing.T) {
}
go func() {
+ stop := make(chan struct{}, 1)
// time sleep is used here because StartPolling is blocking operation
time.Sleep(time.Second * 5)
// change file in nested directory
err = ioutil.WriteFile(filepath.Join(nestedDir, "file4.aaa"),
[]byte{1, 1, 1}, 0755)
- if err != nil {
- panic(err)
- }
+ assert.NoError(t, err)
+
go func() {
- for e := range w.Event {
- if e.info.Name() != "file4.aaa" {
- panic("wrong handled event from watcher in nested dir")
+ time.Sleep(time.Second)
+ for {
+ select {
+ case e := <-w.Event:
+ if e.Info.Name() != "file4.aaa" {
+ assert.Fail(t, "wrong handled event from watcher in nested dir")
+ }
+ case <-stop:
+ w.Stop()
+ return
}
- w.Stop()
}
}()
+
+ time.Sleep(time.Second)
+ stop <- struct{}{}
}()
err = w.StartPolling(time.Second)
- if err != nil {
- t.Fatal(err)
- }
+ assert.NoError(t, err)
}
func Test_Wrong_Dir(t *testing.T) {
@@ -332,10 +296,10 @@ func Test_Wrong_Dir(t *testing.T) {
wrongDir := "askdjfhaksdlfksdf"
wc := WatcherConfig{
- serviceName: testServiceName,
- recursive: true,
- directories: []string{wrongDir},
- filterHooks: func(filename string, patterns []string) error {
+ ServiceName: testServiceName,
+ Recursive: true,
+ Directories: []string{wrongDir},
+ FilterHooks: func(filename string, patterns []string) error {
for i := 0; i < len(patterns); i++ {
if strings.Contains(filename, patterns[i]) {
return nil
@@ -343,68 +307,49 @@ func Test_Wrong_Dir(t *testing.T) {
}
return ErrorSkip
},
- files: make(map[string]os.FileInfo),
- ignored: nil,
- filePatterns: []string{"aaa", "bbb"},
+ Files: make(map[string]os.FileInfo),
+ Ignored: nil,
+ FilePatterns: []string{"aaa", "bbb"},
}
_, err := NewWatcher([]WatcherConfig{wc})
- if err == nil {
- t.Fatal(err)
- }
+ assert.Error(t, err)
}
func Test_Filter_Directory(t *testing.T) {
tempDir, err := ioutil.TempDir(".", "")
- c := make(chan struct{})
defer func(name string) {
err = freeResources(name)
- if err != nil {
- c <- struct{}{}
- t.Fatal(err)
- }
- c <- struct{}{}
+ assert.NoError(t, err)
}(tempDir)
- go limitTime(time.Second*10, t.Name(), c)
-
nestedDir, err := ioutil.TempDir(tempDir, "nested")
- if err != nil {
- t.Fatal(err)
- }
+ assert.NoError(t, err)
err = ioutil.WriteFile(filepath.Join(tempDir, "file1.aaa"),
[]byte{}, 0755)
- if err != nil {
- t.Fatal(err)
- }
+ assert.NoError(t, err)
err = ioutil.WriteFile(filepath.Join(tempDir, "file2.bbb"),
[]byte{}, 0755)
- if err != nil {
- t.Fatal(err)
- }
+ assert.NoError(t, err)
err = ioutil.WriteFile(filepath.Join(nestedDir, "file3.txt"),
[]byte{}, 0755)
- if err != nil {
- t.Fatal(err)
- }
+ assert.NoError(t, err)
err = ioutil.WriteFile(filepath.Join(nestedDir, "file4.aaa"),
[]byte{}, 0755)
- if err != nil {
- t.Fatal(err)
- }
+ assert.NoError(t, err)
ignored, err := ConvertIgnored([]string{nestedDir})
if err != nil {
t.Fatal(err)
}
wc := WatcherConfig{
- serviceName: testServiceName,
- recursive: true,
- directories: []string{tempDir},
- filterHooks: func(filename string, patterns []string) error {
+ ServiceName: testServiceName,
+ Recursive: true,
+ Directories: []string{tempDir},
+ FilterHooks: func(filename string, patterns []string) error {
for i := 0; i < len(patterns); i++ {
if strings.Contains(filename, patterns[i]) {
return nil
@@ -412,9 +357,9 @@ func Test_Filter_Directory(t *testing.T) {
}
return ErrorSkip
},
- files: make(map[string]os.FileInfo),
- ignored: ignored,
- filePatterns: []string{"aaa", "bbb", "txt"},
+ Files: make(map[string]os.FileInfo),
+ Ignored: ignored,
+ FilePatterns: []string{"aaa", "bbb", "txt"},
}
w, err := NewWatcher([]WatcherConfig{wc})
@@ -429,25 +374,28 @@ func Test_Filter_Directory(t *testing.T) {
}
go func() {
+ stop := make(chan struct{}, 1)
go func() {
- err2 := ioutil.WriteFile(filepath.Join(nestedDir, "file4.aaa"),
+ time.Sleep(time.Second)
+ err := ioutil.WriteFile(filepath.Join(nestedDir, "file4.aaa"),
[]byte{1, 1, 1}, 0755)
- if err2 != nil {
- panic(err2)
- }
+ assert.NoError(t, err)
}()
go func() {
- for e := range w.Event {
- fmt.Println("file: " + e.info.Name())
- panic("handled event from watcher in nested dir")
+ select {
+ case e := <-w.Event:
+ fmt.Println("file: " + e.Info.Name())
+ assert.Fail(t, "handled event from watcher in nested dir")
+ case <-stop:
+ w.Stop()
+ return
}
}()
// time sleep is used here because StartPolling is blocking operation
time.Sleep(time.Second * 5)
- w.Stop()
-
+ stop <- struct{}{}
}()
err = w.StartPolling(time.Second)
@@ -460,54 +408,38 @@ func Test_Filter_Directory(t *testing.T) {
// should fire an event
func Test_Copy_Directory(t *testing.T) {
tempDir, err := ioutil.TempDir(".", "")
- c := make(chan struct{})
+
defer func() {
err = freeResources(tempDir)
- if err != nil {
- c <- struct{}{}
- t.Fatal(err)
- }
- c <- struct{}{}
+ assert.NoError(t, err)
}()
nestedDir, err := ioutil.TempDir(tempDir, "nested")
- if err != nil {
- t.Fatal(err)
- }
+ assert.NoError(t, err)
err = ioutil.WriteFile(filepath.Join(tempDir, "file1.aaa"),
[]byte{}, 0755)
- if err != nil {
- t.Fatal(err)
- }
+ assert.NoError(t, err)
err = ioutil.WriteFile(filepath.Join(tempDir, "file2.bbb"),
[]byte{}, 0755)
- if err != nil {
- t.Fatal(err)
- }
+ assert.NoError(t, err)
err = ioutil.WriteFile(filepath.Join(nestedDir, "file3.txt"),
[]byte{}, 0755)
- if err != nil {
- t.Fatal(err)
- }
+ assert.NoError(t, err)
err = ioutil.WriteFile(filepath.Join(nestedDir, "file4.aaa"),
[]byte{}, 0755)
- if err != nil {
- t.Fatal(err)
- }
+ assert.NoError(t, err)
ignored, err := ConvertIgnored([]string{nestedDir})
- if err != nil {
- t.Fatal(err)
- }
+ assert.NoError(t, err)
wc := WatcherConfig{
- serviceName: testServiceName,
- recursive: true,
- directories: []string{tempDir},
- filterHooks: func(filename string, patterns []string) error {
+ ServiceName: testServiceName,
+ Recursive: true,
+ Directories: []string{tempDir},
+ FilterHooks: func(filename string, patterns []string) error {
for i := 0; i < len(patterns); i++ {
if strings.Contains(filename, patterns[i]) {
return nil
@@ -515,15 +447,13 @@ func Test_Copy_Directory(t *testing.T) {
}
return ErrorSkip
},
- files: make(map[string]os.FileInfo),
- ignored: ignored,
- filePatterns: []string{"aaa", "bbb", "txt"},
+ Files: make(map[string]os.FileInfo),
+ Ignored: ignored,
+ FilePatterns: []string{"aaa", "bbb", "txt"},
}
w, err := NewWatcher([]WatcherConfig{wc})
- if err != nil {
- t.Fatal(err)
- }
+ assert.NoError(t, err)
dirLen := len(w.GetAllFiles(testServiceName))
// should be 2 files (2 from root dir), filtered other
@@ -531,17 +461,11 @@ func Test_Copy_Directory(t *testing.T) {
t.Fatalf("incorrect directories len, len is: %d", dirLen)
}
- go limitTime(time.Second*10, t.Name(), c)
-
go func() {
go func() {
- err2 := copyDir(nestedDir, filepath.Join(tempDir, "copyTo"))
- if err2 != nil {
- panic(err2)
- }
-
- // exit from current goroutine
- runtime.Goexit()
+ time.Sleep(time.Second * 2)
+ err := copyDir(nestedDir, filepath.Join(tempDir, "copyTo"))
+ assert.NoError(t, err)
}()
go func() {
@@ -553,25 +477,7 @@ func Test_Copy_Directory(t *testing.T) {
}()
err = w.StartPolling(time.Second)
- if err != nil {
- t.Fatal(err)
- }
-}
-
-func limitTime(d time.Duration, name string, free chan struct{}) {
- go func() {
- ticket := time.NewTicker(d)
- for {
- select {
- case <-ticket.C:
- ticket.Stop()
- panic("timeout exceed, test: " + name)
- case <-free:
- ticket.Stop()
- return
- }
- }
- }()
+ assert.NoError(t, err)
}
func copyFile(src, dst string) (err error) {
@@ -579,7 +485,9 @@ func copyFile(src, dst string) (err error) {
if err != nil {
return
}
- defer in.Close()
+ defer func() {
+ _ = in.Close()
+ }()
out, err := os.Create(dst)
if err != nil {