feat: v0.4.0 simplify
This commit is contained in:
@@ -3,6 +3,8 @@ package watchdog_test
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"net/http"
|
||||
"net/http/httptest"
|
||||
"reflect"
|
||||
"testing"
|
||||
"time"
|
||||
@@ -12,20 +14,19 @@ import (
|
||||
|
||||
type mockChecker struct {
|
||||
name string
|
||||
status watchdog.Status
|
||||
err error
|
||||
called bool
|
||||
}
|
||||
|
||||
func (m *mockChecker) Func(ctx context.Context) (watchdog.Status, error) {
|
||||
func (m *mockChecker) Func(ctx context.Context) error {
|
||||
m.called = true
|
||||
|
||||
time.Sleep(time.Millisecond * 10)
|
||||
if err := ctx.Err(); err != nil {
|
||||
return watchdog.StatusUnknown, err
|
||||
return err
|
||||
}
|
||||
|
||||
return m.status, m.err
|
||||
return m.err
|
||||
}
|
||||
|
||||
func (m *mockChecker) HasBeenCalled() bool {
|
||||
@@ -40,8 +41,8 @@ func (m *mockChecker) Check() watchdog.Check {
|
||||
}
|
||||
}
|
||||
|
||||
func newMockChecker(name string, s watchdog.Status, err error) *mockChecker {
|
||||
return &mockChecker{name: name, status: s, err: err}
|
||||
func newMockChecker(name string, err error) *mockChecker {
|
||||
return &mockChecker{name: name, err: err}
|
||||
}
|
||||
|
||||
func TestCreateWith_new(t *testing.T) {
|
||||
@@ -59,8 +60,8 @@ func TestNew(t *testing.T) {
|
||||
t.Errorf("expected len = 0")
|
||||
}
|
||||
|
||||
m1 := newMockChecker("mock", watchdog.StatusOK, nil)
|
||||
m2 := newMockChecker("mock2", watchdog.StatusOK, nil)
|
||||
m1 := newMockChecker("mock", nil)
|
||||
m2 := newMockChecker("mock2", nil)
|
||||
|
||||
w = watchdog.New()
|
||||
w.AddChecks(m1.Check(), m2.Check())
|
||||
@@ -96,8 +97,8 @@ func TestRunImmediately(t *testing.T) {
|
||||
t.Errorf("expected zero len slice for empty instance, got %d", len(out))
|
||||
}
|
||||
|
||||
m1 := newMockChecker("mock", watchdog.StatusOK, nil)
|
||||
m2 := newMockChecker("mock2", watchdog.StatusOK, nil)
|
||||
m1 := newMockChecker("mock", nil)
|
||||
m2 := newMockChecker("mock2", nil)
|
||||
|
||||
w = watchdog.New(m1.Check(), m2.Check())
|
||||
out, _ = w.RunImmediately(t.Context(), 0)
|
||||
@@ -119,8 +120,8 @@ func TestStartStop(t *testing.T) {
|
||||
t.Error("Start doen't error on empty checks slice")
|
||||
}
|
||||
|
||||
m1 := newMockChecker("mock", watchdog.StatusOK, nil)
|
||||
m2 := newMockChecker("mock2", watchdog.StatusOK, nil)
|
||||
m1 := newMockChecker("mock", nil)
|
||||
m2 := newMockChecker("mock2", nil)
|
||||
|
||||
w.AddChecks(m1.Check(), m2.Check())
|
||||
|
||||
@@ -167,7 +168,7 @@ func TestStartStop(t *testing.T) {
|
||||
func TestSetTimeout(t *testing.T) {
|
||||
w := new(watchdog.Watchdog)
|
||||
w.SetTimeout(time.Millisecond)
|
||||
m1 := newMockChecker("mock", watchdog.StatusOK, nil)
|
||||
m1 := newMockChecker("mock", nil)
|
||||
w.AddChecks(m1.Check())
|
||||
|
||||
out, _ := w.Start(0)
|
||||
@@ -175,8 +176,67 @@ func TestSetTimeout(t *testing.T) {
|
||||
w.Stop()
|
||||
res := <-out
|
||||
|
||||
if !(res.Status == watchdog.StatusUnknown) || !errors.Is(res.Error, context.DeadlineExceeded) {
|
||||
t.Logf("got status: %s, err: %v", res.Status, res.Error)
|
||||
if !errors.Is(res.Error, context.DeadlineExceeded) {
|
||||
t.Logf("got err: %v", res.Error)
|
||||
t.Fatal("incorrect status for timed out op")
|
||||
}
|
||||
}
|
||||
|
||||
func TestDuplicates(t *testing.T) {
|
||||
gethandler := func() http.HandlerFunc {
|
||||
count := 0
|
||||
return func(w http.ResponseWriter, r *http.Request) {
|
||||
count++
|
||||
if count >= 10 {
|
||||
// we, re up again
|
||||
w.Write([]byte("OK"))
|
||||
return
|
||||
}
|
||||
|
||||
http.Error(w, "down", http.StatusInternalServerError)
|
||||
}
|
||||
}
|
||||
|
||||
srv := httptest.NewServer(gethandler())
|
||||
|
||||
addr := srv.URL
|
||||
|
||||
fn, err := watchdog.GetHTTP(addr, time.Second)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
w := new(watchdog.Watchdog)
|
||||
|
||||
check := watchdog.Check{
|
||||
Name: "test",
|
||||
Interval: time.Millisecond * 10,
|
||||
Check: fn,
|
||||
}
|
||||
|
||||
w.AddChecks(check)
|
||||
w.SetTimeout(time.Millisecond * 10)
|
||||
|
||||
out, err := w.Start(1000)
|
||||
if err != nil {
|
||||
t.Error("Start returns error", err)
|
||||
}
|
||||
|
||||
go func() {
|
||||
time.Sleep(time.Second)
|
||||
w.Stop()
|
||||
}()
|
||||
|
||||
count := 0
|
||||
|
||||
for range out {
|
||||
count++
|
||||
}
|
||||
|
||||
if count != 2 {
|
||||
// must only return one event on initial failure and
|
||||
// one event whet endpoint becomes available
|
||||
t.Error("incorrect result count received from chan")
|
||||
t.Log("received count is", count)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user