| package slowmessage |
| |
| import ( |
| "errors" |
| "testing" |
| "time" |
| ) |
| |
| func TestDo(t *testing.T) { |
| var sfErr error |
| cbCalled := false |
| sfCalled := false |
| sfSleep := 0 * time.Second |
| |
| reset := func() { |
| cbCalled = false |
| sfCalled = false |
| sfErr = nil |
| } |
| sf := func() error { |
| sfCalled = true |
| time.Sleep(sfSleep) |
| return sfErr |
| } |
| cb := func() { cbCalled = true } |
| |
| // SF is not slow |
| reset() |
| if err := Do(10*time.Millisecond, sf, cb); err != nil { |
| t.Fatalf("err: %s", err) |
| } |
| |
| if !sfCalled { |
| t.Fatal("should call") |
| } |
| if cbCalled { |
| t.Fatal("should not call") |
| } |
| |
| // SF is not slow (with error) |
| reset() |
| sfErr = errors.New("error") |
| if err := Do(10*time.Millisecond, sf, cb); err == nil { |
| t.Fatalf("err: %s", err) |
| } |
| |
| if !sfCalled { |
| t.Fatal("should call") |
| } |
| if cbCalled { |
| t.Fatal("should not call") |
| } |
| |
| // SF is slow |
| reset() |
| sfSleep = 50 * time.Millisecond |
| if err := Do(10*time.Millisecond, sf, cb); err != nil { |
| t.Fatalf("err: %s", err) |
| } |
| |
| if !sfCalled { |
| t.Fatal("should call") |
| } |
| if !cbCalled { |
| t.Fatal("should call") |
| } |
| |
| // SF is slow (with error) |
| reset() |
| sfErr = errors.New("error") |
| sfSleep = 50 * time.Millisecond |
| if err := Do(10*time.Millisecond, sf, cb); err == nil { |
| t.Fatalf("err: %s", err) |
| } |
| |
| if !sfCalled { |
| t.Fatal("should call") |
| } |
| if !cbCalled { |
| t.Fatal("should call") |
| } |
| } |