diff options
author | Nikolay Oskin <naoskin@tsum.ru> | 2022-08-06 13:30:40 +0300 |
---|---|---|
committer | Nikolay Oskin <naoskin@tsum.ru> | 2022-08-06 13:30:40 +0300 |
commit | 4a305861d99d7e2d76615c06ef49dda5d849bf40 (patch) | |
tree | 63cfe20440f7d7c3aa3cf6ee5367c4e2c756af56 | |
parent | 14fcf184ae40729e270821115e2ba39c475badb9 (diff) |
return ErrRunLimit when restartLimit exceeded
-rwxr-xr-x | rutina.go | 2 | ||||
-rwxr-xr-x | rutina_test.go | 44 |
2 files changed, 33 insertions, 13 deletions
@@ -219,7 +219,7 @@ func (p *process) run(pctx context.Context, errCh chan error, logger logger) err if errCh != nil { errCh <- ErrRunLimit } - return nil + return ErrRunLimit } } logger("restarting process #%d", p.id) diff --git a/rutina_test.go b/rutina_test.go index 3cbdf40..71fd30d 100755 --- a/rutina_test.go +++ b/rutina_test.go @@ -8,7 +8,7 @@ import ( ) func TestSuccess(t *testing.T) { - r := New(nil) + r := New() counter := 0 f := func(name string, ttl time.Duration) error { counter++ @@ -19,13 +19,13 @@ func TestSuccess(t *testing.T) { } r.Go(func(ctx context.Context) error { return f("one", 1*time.Second) - }, nil) + }) r.Go(func(ctx context.Context) error { return f("two", 2*time.Second) - }, nil) + }) r.Go(func(ctx context.Context) error { return f("three", 3*time.Second) - }, nil) + }) if err := r.Wait(); err != nil { t.Error("Unexpected error", err) } @@ -37,7 +37,7 @@ func TestSuccess(t *testing.T) { } func TestError(t *testing.T) { - r := New(nil) + r := New() f := func(name string, ttl time.Duration) error { <-time.After(ttl) t.Log(name) @@ -45,13 +45,13 @@ func TestError(t *testing.T) { } r.Go(func(ctx context.Context) error { return f("one", 1*time.Second) - }, nil) + }) r.Go(func(ctx context.Context) error { return f("two", 2*time.Second) - }, nil) + }) r.Go(func(ctx context.Context) error { return f("three", 3*time.Second) - }, nil) + }) if err := r.Wait(); err != nil { if err.Error() != "error from one" { t.Error("Must be error from first routine") @@ -61,13 +61,33 @@ func TestError(t *testing.T) { t.Log("All routines done") } +func TestErrorWithRestart(t *testing.T) { + maxCount := 2 + + r := New() + r.Go(func(ctx context.Context) error { + return nil + }) + r.Go(func(ctx context.Context) error { + return errors.New("error") + }, RunOptions{ + OnError: Restart, + MaxCount: &maxCount, + }) + + err := r.Wait() + if err != ErrRunLimit { + t.Error("Must be an error ErrRunLimit from r.Wait since all restarts was executed") + } +} + func TestContext(t *testing.T) { - r := New(nil) + r := New() cc := false r.Go(func(ctx context.Context) error { <-time.After(1 * time.Second) return nil - }, RunOpt.SetOnDone(Shutdown)) + }, RunOptions{OnDone: Shutdown}) r.Go(func(ctx context.Context) error { select { case <-ctx.Done(): @@ -76,12 +96,12 @@ func TestContext(t *testing.T) { case <-time.After(3 * time.Second): return errors.New("Timeout") } - }, nil) + }) if err := r.Wait(); err != nil { t.Error("Unexpected error", err) } if cc { - t.Log("Second routine succesfuly complete by context done") + t.Log("Second routine successfully complete by context done") } else { t.Error("Routine not completed by context") } |