summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorValery Piashchynski <[email protected]>2020-12-20 15:35:03 +0300
committerValery Piashchynski <[email protected]>2020-12-20 15:35:03 +0300
commit9d2bb93b3341471a084482f7bd41cac543f95cb2 (patch)
treed80b40801f66176c4e015e1cf2fac216bf3e77c8
parentad39466afb39fac49977cfb97f20f682f54bf35e (diff)
Reload tests stabilization
-rw-r--r--plugins/reload/tests/reload_plugin_test.go227
1 files changed, 121 insertions, 106 deletions
diff --git a/plugins/reload/tests/reload_plugin_test.go b/plugins/reload/tests/reload_plugin_test.go
index d2fad28d..4d60c146 100644
--- a/plugins/reload/tests/reload_plugin_test.go
+++ b/plugins/reload/tests/reload_plugin_test.go
@@ -14,11 +14,12 @@ import (
"testing"
"time"
+ "github.com/golang/mock/gomock"
"github.com/spiral/endure"
"github.com/spiral/errors"
+ "github.com/spiral/roadrunner/v2/mocks"
"github.com/spiral/roadrunner/v2/plugins/config"
httpPlugin "github.com/spiral/roadrunner/v2/plugins/http"
- "github.com/spiral/roadrunner/v2/plugins/logger"
"github.com/spiral/roadrunner/v2/plugins/reload"
"github.com/spiral/roadrunner/v2/plugins/resetter"
"github.com/spiral/roadrunner/v2/plugins/server"
@@ -27,7 +28,8 @@ import (
const testDir string = "unit_tests"
const testCopyToDir string = "unit_tests_copied"
-const hugeNumberOfFiles uint = 5000
+const dir1 string = "dir1"
+const hugeNumberOfFiles uint = 500
func TestReloadInit(t *testing.T) {
cont, err := endure.NewContainer(nil, endure.SetLogLevel(endure.ErrorLevel))
@@ -43,13 +45,20 @@ func TestReloadInit(t *testing.T) {
err = os.Mkdir(testDir, 0755)
assert.NoError(t, err)
- defer func() {
- assert.NoError(t, freeResources(testDir))
- }()
+ controller := gomock.NewController(t)
+ mockLogger := mocks.NewMockLogger(controller)
+
+ mockLogger.EXPECT().Debug("http handler response received", "elapsed", gomock.Any(), "remote address", "127.0.0.1").Times(1)
+ mockLogger.EXPECT().Debug("file was created", "path", gomock.Any(), "name", "file.txt", "size", gomock.Any()).Times(2)
+ mockLogger.EXPECT().Debug("file was added to watcher", "path", gomock.Any(), "name", "file.txt", "size", gomock.Any()).Times(2)
+ mockLogger.EXPECT().Info("HTTP plugin got restart request. Restarting...").Times(1)
+ mockLogger.EXPECT().Info("HTTP workers Pool successfully restarted").Times(1)
+ mockLogger.EXPECT().Info("HTTP listeners successfully re-added").Times(1)
+ mockLogger.EXPECT().Info("HTTP plugin successfully restarted").Times(1)
err = cont.RegisterAll(
cfg,
- &logger.ZapLogger{},
+ mockLogger,
&server.Plugin{},
&httpPlugin.Plugin{},
&reload.Plugin{},
@@ -58,9 +67,7 @@ func TestReloadInit(t *testing.T) {
assert.NoError(t, err)
err = cont.Init()
- if err != nil {
- t.Fatal(err)
- }
+ assert.NoError(t, err)
ch, err := cont.Serve()
assert.NoError(t, err)
@@ -104,6 +111,7 @@ func TestReloadInit(t *testing.T) {
reloadHTTPLiveAfterReset(t, "22388")
wg.Wait()
+ assert.NoError(t, freeResources(testDir))
}
func reloadTestInit(t *testing.T) {
@@ -124,19 +132,26 @@ func TestReloadHugeNumberOfFiles(t *testing.T) {
// try to remove, skip error
assert.NoError(t, freeResources(testDir))
assert.NoError(t, freeResources(testCopyToDir))
- err = os.Mkdir(testDir, 0755)
- assert.NoError(t, err)
- err = os.Mkdir(testCopyToDir, 0755)
- assert.NoError(t, err)
- defer func() {
- assert.NoError(t, freeResources(testDir))
- assert.NoError(t, freeResources(testCopyToDir))
- }()
+ assert.NoError(t, os.Mkdir(testDir, 0755))
+ assert.NoError(t, os.Mkdir(testCopyToDir, 0755))
+
+ controller := gomock.NewController(t)
+ mockLogger := mocks.NewMockLogger(controller)
+
+ mockLogger.EXPECT().Debug("file added to the list of removed files", "path", gomock.Any(), "name", gomock.Any(), "size", gomock.Any()).AnyTimes()
+ mockLogger.EXPECT().Debug("http handler response received", "elapsed", gomock.Any(), "remote address", "127.0.0.1").Times(1)
+ mockLogger.EXPECT().Debug("file was created", "path", gomock.Any(), "name", gomock.Any(), "size", gomock.Any()).MinTimes(1)
+ mockLogger.EXPECT().Debug("file was updated", "path", gomock.Any(), "name", gomock.Any(), "size", gomock.Any()).MinTimes(1)
+ mockLogger.EXPECT().Debug("file was added to watcher", "path", gomock.Any(), "name", gomock.Any(), "size", gomock.Any()).MinTimes(1)
+ mockLogger.EXPECT().Info("HTTP plugin got restart request. Restarting...").MinTimes(1)
+ mockLogger.EXPECT().Info("HTTP workers Pool successfully restarted").MinTimes(1)
+ mockLogger.EXPECT().Info("HTTP listeners successfully re-added").MinTimes(1)
+ mockLogger.EXPECT().Info("HTTP plugin successfully restarted").MinTimes(1)
err = cont.RegisterAll(
cfg,
- &logger.ZapLogger{},
+ mockLogger,
&server.Plugin{},
&httpPlugin.Plugin{},
&reload.Plugin{},
@@ -145,9 +160,7 @@ func TestReloadHugeNumberOfFiles(t *testing.T) {
assert.NoError(t, err)
err = cont.Init()
- if err != nil {
- t.Fatal(err)
- }
+ assert.NoError(t, err)
ch, err := cont.Serve()
assert.NoError(t, err)
@@ -158,7 +171,7 @@ func TestReloadHugeNumberOfFiles(t *testing.T) {
wg := &sync.WaitGroup{}
wg.Add(1)
- tt := time.NewTimer(time.Second * 100)
+ tt := time.NewTimer(time.Second * 60)
go func() {
defer wg.Done()
@@ -188,22 +201,21 @@ func TestReloadHugeNumberOfFiles(t *testing.T) {
}()
t.Run("ReloadTestHugeNumberOfFiles", reloadHugeNumberOfFiles)
- ttt := time.Now()
t.Run("ReloadRandomlyChangeFile", randomlyChangeFile)
- if time.Since(ttt).Seconds() > 80 {
- t.Fatal("spend too much time on reloading")
- }
- reloadHTTPLiveAfterReset(t, "22388")
+ reloadHTTPLiveAfterReset(t, "22388")
wg.Wait()
+
+ assert.NoError(t, freeResources(testDir))
+ assert.NoError(t, freeResources(testCopyToDir))
}
func randomlyChangeFile(t *testing.T) {
- // we know, that directory contains 5000 files (0-4999)
+ // we know, that directory contains 500 files (0-499)
// let's try to randomly change it
- for i := 0; i < 100; i++ {
+ for i := 0; i < 10; i++ {
// rand sleep
- rSleep := rand.Int63n(1000) // nolint:gosec
+ rSleep := rand.Int63n(500) // nolint:gosec
time.Sleep(time.Millisecond * time.Duration(rSleep))
rNum := rand.Int63n(int64(hugeNumberOfFiles)) // nolint:gosec
err := ioutil.WriteFile(filepath.Join(testDir, "file_"+strconv.Itoa(int(rNum))+".txt"), []byte("Hello, Gophers!"), 0755) // nolint:gosec
@@ -229,16 +241,23 @@ func TestReloadFilterFileExt(t *testing.T) {
// try to remove, skip error
assert.NoError(t, freeResources(testDir))
- err = os.Mkdir(testDir, 0755)
- assert.NoError(t, err)
+ assert.NoError(t, os.Mkdir(testDir, 0755))
- defer func() {
- assert.NoError(t, freeResources(testDir))
- }()
+ controller := gomock.NewController(t)
+ mockLogger := mocks.NewMockLogger(controller)
+
+ mockLogger.EXPECT().Debug("http handler response received", "elapsed", gomock.Any(), "remote address", "127.0.0.1").Times(1)
+ mockLogger.EXPECT().Debug("file was created", "path", gomock.Any(), "name", gomock.Any(), "size", gomock.Any()).MinTimes(100)
+ mockLogger.EXPECT().Debug("file was added to watcher", "path", gomock.Any(), "name", gomock.Any(), "size", gomock.Any()).MinTimes(1)
+ mockLogger.EXPECT().Debug("file added to the list of removed files", "path", gomock.Any(), "name", gomock.Any(), "size", gomock.Any()).AnyTimes()
+ mockLogger.EXPECT().Info("HTTP plugin got restart request. Restarting...").Times(1)
+ mockLogger.EXPECT().Info("HTTP workers Pool successfully restarted").Times(1)
+ mockLogger.EXPECT().Info("HTTP listeners successfully re-added").Times(1)
+ mockLogger.EXPECT().Info("HTTP plugin successfully restarted").Times(1)
err = cont.RegisterAll(
cfg,
- &logger.ZapLogger{},
+ mockLogger,
&server.Plugin{},
&httpPlugin.Plugin{},
&reload.Plugin{},
@@ -247,9 +266,7 @@ func TestReloadFilterFileExt(t *testing.T) {
assert.NoError(t, err)
err = cont.Init()
- if err != nil {
- t.Fatal(err)
- }
+ assert.NoError(t, err)
ch, err := cont.Serve()
assert.NoError(t, err)
@@ -260,7 +277,7 @@ func TestReloadFilterFileExt(t *testing.T) {
wg := &sync.WaitGroup{}
wg.Add(1)
- tt := time.NewTimer(time.Second * 40)
+ tt := time.NewTimer(time.Second * 60)
go func() {
defer wg.Done()
@@ -290,15 +307,12 @@ func TestReloadFilterFileExt(t *testing.T) {
}()
t.Run("ReloadMakeFiles", reloadMakeFiles)
- ttt := time.Now()
t.Run("ReloadFilteredExt", reloadFilteredExt)
- if time.Since(ttt).Seconds() > 20 {
- t.Fatal("spend too much time on reloading")
- }
-
reloadHTTPLiveAfterReset(t, "27388")
wg.Wait()
+
+ assert.NoError(t, freeResources(testDir))
}
func reloadMakeFiles(t *testing.T) {
@@ -336,7 +350,7 @@ func reloadFilteredExt(t *testing.T) {
}
// Should be events only about creating files with txt ext
-func TestReloadCopy3k(t *testing.T) {
+func TestReloadCopy500(t *testing.T) {
cont, err := endure.NewContainer(nil, endure.SetLogLevel(endure.ErrorLevel))
assert.NoError(t, err)
@@ -348,23 +362,29 @@ func TestReloadCopy3k(t *testing.T) {
// try to remove, skip error
assert.NoError(t, freeResources(testDir))
assert.NoError(t, freeResources(testCopyToDir))
- assert.NoError(t, freeResources("dir1"))
- err = os.Mkdir(testDir, 0755)
- assert.NoError(t, err)
- err = os.Mkdir(testCopyToDir, 0755)
- assert.NoError(t, err)
- err = os.Mkdir("dir1", 0755)
- assert.NoError(t, err)
-
- defer func() {
- assert.NoError(t, freeResources(testDir))
- assert.NoError(t, freeResources(testCopyToDir))
- assert.NoError(t, freeResources("dir1"))
- }()
+ assert.NoError(t, freeResources(dir1))
+
+ assert.NoError(t, os.Mkdir(testDir, 0755))
+ assert.NoError(t, os.Mkdir(testCopyToDir, 0755))
+ assert.NoError(t, os.Mkdir(dir1, 0755))
+
+ controller := gomock.NewController(t)
+ mockLogger := mocks.NewMockLogger(controller)
+ //
+ mockLogger.EXPECT().Debug("http handler response received", "elapsed", gomock.Any(), "remote address", "127.0.0.1").Times(1)
+ mockLogger.EXPECT().Debug("file was created", "path", gomock.Any(), "name", gomock.Any(), "size", gomock.Any()).MinTimes(50)
+ mockLogger.EXPECT().Debug("file was added to watcher", "path", gomock.Any(), "name", gomock.Any(), "size", gomock.Any()).MinTimes(50)
+ mockLogger.EXPECT().Debug("file added to the list of removed files", "path", gomock.Any(), "name", gomock.Any(), "size", gomock.Any()).MinTimes(50)
+ mockLogger.EXPECT().Debug("file was removed from watcher", "path", gomock.Any(), "name", gomock.Any(), "size", gomock.Any()).MinTimes(50)
+ mockLogger.EXPECT().Debug("file was updated", "path", gomock.Any(), "name", gomock.Any(), "size", gomock.Any()).MinTimes(50)
+ mockLogger.EXPECT().Info("HTTP plugin got restart request. Restarting...").MinTimes(1)
+ mockLogger.EXPECT().Info("HTTP workers Pool successfully restarted").MinTimes(1)
+ mockLogger.EXPECT().Info("HTTP listeners successfully re-added").MinTimes(1)
+ mockLogger.EXPECT().Info("HTTP plugin successfully restarted").MinTimes(1)
err = cont.RegisterAll(
cfg,
- &logger.ZapLogger{},
+ mockLogger,
&server.Plugin{},
&httpPlugin.Plugin{},
&reload.Plugin{},
@@ -373,9 +393,7 @@ func TestReloadCopy3k(t *testing.T) {
assert.NoError(t, err)
err = cont.Init()
- if err != nil {
- t.Fatal(err)
- }
+ assert.NoError(t, err)
ch, err := cont.Serve()
assert.NoError(t, err)
@@ -386,7 +404,7 @@ func TestReloadCopy3k(t *testing.T) {
wg := &sync.WaitGroup{}
wg.Add(1)
- tt := time.NewTimer(time.Second * 220)
+ tt := time.NewTimer(time.Second * 120)
go func() {
defer wg.Done()
@@ -398,6 +416,7 @@ func TestReloadCopy3k(t *testing.T) {
if err != nil {
assert.FailNow(t, "error", err.Error())
}
+ return
case <-sig:
err = cont.Stop()
if err != nil {
@@ -426,13 +445,8 @@ func TestReloadCopy3k(t *testing.T) {
// 3
// Recursive
- t.Run("ReloadMake3kFiles", reloadMake3kFiles)
- ttt := time.Now()
+ t.Run("ReloadMake300Files", reloadMake300Files)
t.Run("ReloadCopyFiles", reloadCopyFiles)
- if time.Since(ttt).Seconds() > 120 {
- t.Fatal("spend too much time on copy")
- }
-
t.Run("ReloadRecursiveDirsSupport", copyFilesRecursive)
t.Run("RandomChangesInRecursiveDirs", randomChangesInRecursiveDirs)
t.Run("RemoveFilesSupport", removeFilesSupport)
@@ -440,17 +454,21 @@ func TestReloadCopy3k(t *testing.T) {
reloadHTTPLiveAfterReset(t, "37388")
+ assert.NoError(t, freeResources(testDir))
+ assert.NoError(t, freeResources(testCopyToDir))
+ assert.NoError(t, freeResources(dir1))
+
wg.Wait()
}
func reloadMoveSupport(t *testing.T) {
t.Run("MoveSupportCopy", copyFilesRecursive)
// move some files
- for i := 0; i < 50; i++ {
+ for i := 0; i < 10; i++ {
// rand sleep
- rSleep := rand.Int63n(1000) // nolint:gosec
+ rSleep := rand.Int63n(500) // nolint:gosec
time.Sleep(time.Millisecond * time.Duration(rSleep))
- rNum := rand.Int63n(int64(200)) // nolint:gosec
+ rNum := rand.Int63n(int64(100)) // nolint:gosec
rDir := rand.Int63n(9) // nolint:gosec
rExt := rand.Int63n(3) // nolint:gosec
@@ -482,11 +500,11 @@ func reloadMoveSupport(t *testing.T) {
func removeFilesSupport(t *testing.T) {
// remove some files
- for i := 0; i < 50; i++ {
+ for i := 0; i < 10; i++ {
// rand sleep
- rSleep := rand.Int63n(1000) // nolint:gosec
+ rSleep := rand.Int63n(500) // nolint:gosec
time.Sleep(time.Millisecond * time.Duration(rSleep))
- rNum := rand.Int63n(int64(200)) // nolint:gosec
+ rNum := rand.Int63n(int64(100)) // nolint:gosec
rDir := rand.Int63n(10) // nolint:gosec
rExt := rand.Int63n(3) // nolint:gosec
@@ -509,8 +527,8 @@ func removeFilesSupport(t *testing.T) {
"dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9",
"dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9/dir10",
}
- err := os.Remove(filepath.Join(dirs[rDir], "file_"+strconv.Itoa(int(rNum))+ext[rExt]))
- assert.NoError(t, err)
+ // here can be a situation, when file already deleted
+ _ = os.Remove(filepath.Join(dirs[rDir], "file_"+strconv.Itoa(int(rNum))+ext[rExt]))
}
}
@@ -540,11 +558,11 @@ func randomChangesInRecursiveDirs(t *testing.T) {
"foo_", // should be created
"bar_", // should be created
}
- for i := 0; i < 50; i++ {
+ for i := 0; i < 10; i++ {
// rand sleep
- rSleep := rand.Int63n(1000) // nolint:gosec
+ rSleep := rand.Int63n(500) // nolint:gosec
time.Sleep(time.Millisecond * time.Duration(rSleep))
- rNum := rand.Int63n(int64(200)) // nolint:gosec
+ rNum := rand.Int63n(int64(100)) // nolint:gosec
rDir := rand.Int63n(10) // nolint:gosec
rExt := rand.Int63n(3) // nolint:gosec
rName := rand.Int63n(3) // nolint:gosec
@@ -583,19 +601,18 @@ func reloadCopyFiles(t *testing.T) {
assert.NoError(t, freeResources(testDir))
assert.NoError(t, freeResources(testCopyToDir))
- err = os.Mkdir(testDir, 0755)
- assert.NoError(t, err)
- err = os.Mkdir(testCopyToDir, 0755)
- assert.NoError(t, err)
+
+ assert.NoError(t, os.Mkdir(testDir, 0755))
+ assert.NoError(t, os.Mkdir(testCopyToDir, 0755))
// recreate files
- for i := uint(0); i < 200; i++ {
+ for i := uint(0); i < 100; i++ {
assert.NoError(t, makeFile("file_"+strconv.Itoa(int(i))+".txt"))
}
- for i := uint(0); i < 200; i++ {
+ for i := uint(0); i < 100; i++ {
assert.NoError(t, makeFile("file_"+strconv.Itoa(int(i))+".abc"))
}
- for i := uint(0); i < 200; i++ {
+ for i := uint(0); i < 100; i++ {
assert.NoError(t, makeFile("file_"+strconv.Itoa(int(i))+".def"))
}
@@ -603,7 +620,7 @@ func reloadCopyFiles(t *testing.T) {
assert.NoError(t, err)
}
-func reloadMake3kFiles(t *testing.T) {
+func reloadMake300Files(t *testing.T) {
for i := uint(0); i < 100; i++ {
assert.NoError(t, makeFile("file_"+strconv.Itoa(int(i))+".txt"))
}
@@ -627,25 +644,21 @@ func TestReloadNoRecursion(t *testing.T) {
// try to remove, skip error
assert.NoError(t, freeResources(testDir))
assert.NoError(t, freeResources(testCopyToDir))
- assert.NoError(t, freeResources("dir1"))
- err = os.Mkdir(testDir, 0755)
- assert.NoError(t, err)
+ assert.NoError(t, freeResources(dir1))
- err = os.Mkdir("dir1", 0755)
- assert.NoError(t, err)
+ assert.NoError(t, os.Mkdir(testDir, 0755))
+ assert.NoError(t, os.Mkdir(dir1, 0755))
+ assert.NoError(t, os.Mkdir(testCopyToDir, 0755))
- err = os.Mkdir(testCopyToDir, 0755)
- assert.NoError(t, err)
+ controller := gomock.NewController(t)
+ mockLogger := mocks.NewMockLogger(controller)
- defer func() {
- assert.NoError(t, freeResources(testDir))
- assert.NoError(t, freeResources(testCopyToDir))
- assert.NoError(t, freeResources("dir1"))
- }()
+ // http server should not be restarted. all event from wrong file extensions should be skipped
+ mockLogger.EXPECT().Debug("http handler response received", "elapsed", gomock.Any(), "remote address", "127.0.0.1").Times(1)
err = cont.RegisterAll(
cfg,
- &logger.ZapLogger{},
+ mockLogger,
&server.Plugin{},
&httpPlugin.Plugin{},
&reload.Plugin{},
@@ -654,9 +667,7 @@ func TestReloadNoRecursion(t *testing.T) {
assert.NoError(t, err)
err = cont.Init()
- if err != nil {
- t.Fatal(err)
- }
+ assert.NoError(t, err)
ch, err := cont.Serve()
assert.NoError(t, err)
@@ -695,12 +706,16 @@ func TestReloadNoRecursion(t *testing.T) {
}
}
}()
+
t.Run("ReloadMakeFiles", reloadMakeFiles) // make files in the testDir
t.Run("ReloadCopyFilesRecursive", reloadCopyFiles)
reloadHTTPLiveAfterReset(t, "22766")
-
wg.Wait()
+
+ assert.NoError(t, freeResources(testDir))
+ assert.NoError(t, freeResources(testCopyToDir))
+ assert.NoError(t, freeResources(dir1))
}
// ========================================================================