feat: v0.4.0 simplify

This commit is contained in:
2025-09-23 23:14:13 +03:00
parent 214fda877e
commit fc3678f758
6 changed files with 198 additions and 174 deletions

View File

@@ -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)
}
}