diff options
Diffstat (limited to 'service/reload/watcher_test.go')
-rw-r--r-- | service/reload/watcher_test.go | 400 |
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 { |