aboutsummaryrefslogtreecommitdiff
path: root/tasks/main_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'tasks/main_test.go')
-rw-r--r--tasks/main_test.go138
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)
+ }
+ }
+
+}