diff options
| author | Mitchell Riedstra <mitch@riedstra.dev> | 2023-01-20 00:35:09 -0500 |
|---|---|---|
| committer | Mitchell Riedstra <mitch@riedstra.dev> | 2023-01-20 00:35:09 -0500 |
| commit | f07efbb6fc7a63055a8424799ce03a5f37539873 (patch) | |
| tree | ff5983b2cae4cc9b8f2f346a47cb3eb23b2f79ae /tasks/main_test.go | |
| parent | cbfd82db8a20be32ffa82a1afa860729f3097de6 (diff) | |
| download | steam-export-dev-wip.tar.gz steam-export-dev-wip.tar.xz | |
wipdev-wip
Diffstat (limited to 'tasks/main_test.go')
| -rw-r--r-- | tasks/main_test.go | 138 |
1 files changed, 138 insertions, 0 deletions
diff --git a/tasks/main_test.go b/tasks/main_test.go new file mode 100644 index 0000000..5c69a81 --- /dev/null +++ b/tasks/main_test.go @@ -0,0 +1,138 @@ +package tasks + +import ( + "errors" + "log" + "os" + "testing" + "time" +) + +type tShortTask struct{} + +func (t *tShortTask) Run() error { + time.Sleep(time.Second * 1) + return nil +} + +type tLongTask struct{} + +func (t *tLongTask) Run() error { + time.Sleep(time.Second * 2) + return nil +} + +type tErrorTask struct{} + +func (t *tErrorTask) Run() error { + time.Sleep(time.Second * 2) + return eErrorTask +} + +var ( + eErrorTask = errors.New("tErrorTask testing error") + + testLogger = log.New(os.Stderr, "", log.LstdFlags|log.Lshortfile) +) + +func TestIntegration(t *testing.T) { + logger = testLogger + + tg := NewGroup() + + pairs := map[string]Task{ + "tShortTask": &tShortTask{}, + "tLongTask": &tLongTask{}, + "tErrorTask": &tErrorTask{}, + } + + done := []string{} + for name, task := range pairs { + err := tg.Add(name, task) + if err != nil { + t.Fatalf("while adding: %s", err) + } + testLogger.Println("Added: ", name) + + registered := tg.Registered() + testLogger.Println("Currently registered: ", registered) + for _, n := range done { + _, ok := registered[n] + if !ok { + t.Fatalf("%s is supposed to be registered", n) + } + } + } + + reg := tg.Registered() + testLogger.Println("Registered tasks: ", reg) + + err := tg.Add("tLongTask", &tLongTask{}) + if !errors.Is(err, EAlreadyRegistered) { + t.Errorf("tLongTask should already be registered got: %s", err) + } + + err = tg.Start("tLongTask") + if err != nil { + t.Errorf("starting tLongTask err should've been nil: %s", err) + } + testLogger.Println("tried starting tLongTask again") + + err = tg.Run("tShortTask") + if err != nil { + t.Errorf("running tShortTask err should've been nil: %s", err) + } + + finished := tg.Finished() + testLogger.Println("Finished tasks: ", finished) + _, ok := finished["tShortTask"] + if !ok { + t.Errorf("tShortTask should've been finished and isn't") + } + + _, ok = finished["tLongTask"] + if ok { + t.Errorf("tLongTask is finished and it shouldn't be") + } + + err = tg.Start("tLongTask") + if !errors.Is(err, EAlreadyStarted) { + t.Errorf("tLongTask should've already been started got: %s", err) + } + + err = tg.Run("tLongTask") + if !errors.Is(err, EAlreadyStarted) { + t.Errorf("tLongTask should've already been started got: %s", err) + } + + running := tg.Running() + testLogger.Println("Running tasks: ", running) + + err = tg.Run("tErrorTask") + if err == nil { + t.Error("tErrorTask should have produced an error") + } + + withErrors := tg.Error() + testLogger.Println("Errored tasks: ", withErrors) + _, ok = withErrors["tErrorTask"] + if !ok { + t.Error("tErrorTask should've been found within tg.Error()") + } + + err = tg.GetError("tErrorTask") + if !errors.Is(err, eErrorTask) { + t.Errorf("tErrorTask should've returned an error got: %s", err) + } + + finished = tg.Finished() + testLogger.Println("Finished tasks: ", finished) + + for name := range pairs { + _, ok := finished[name] + if !ok { + t.Errorf("'%s' should be finished and isn't", name) + } + } + +} |
