44 "errors"
55 "fmt"
66 "testing"
7+ "time"
78
89 "github.com/stretchr/testify/assert"
910)
@@ -70,9 +71,9 @@ func (r *testHealthReporter) HealthReport() map[string]error {
7071 return map [string ]error {r .name : r .healthy }
7172}
7273
73- // TestHealthChecker_Register_ImmediateUpdate verifies that Register() immediately
74- // populates the health state when the HealthChecker is already running, so
75- // callers don't wait up to 15 s for the next polling tick .
74+ // TestHealthChecker_Register_ImmediateUpdate verifies that Register() triggers an
75+ // immediate poll when the HealthChecker is already running, so the newly
76+ // registered service is visible well within a polling interval (15 s) .
7677func TestHealthChecker_Register_ImmediateUpdate (t * testing.T ) {
7778 hc := HealthCheckerConfig {Ver : "test" , Sha : "abc1234" }.New ()
7879 if err := hc .Start (); err != nil {
@@ -85,18 +86,23 @@ func TestHealthChecker_Register_ImmediateUpdate(t *testing.T) {
8586 t .Fatalf ("Register: %v" , err )
8687 }
8788
88- // No sleep needed — Register() must have synchronously populated the state.
89- ready , readyErrs := hc .IsReady ()
90- assert .True (t , ready , "expected ready after Register, got errors: %v" , readyErrs )
91- assert .Nil (t , readyErrs ["svc" ], "expected svc ready, got: %v" , readyErrs ["svc" ])
89+ // The refresh is async (goroutine scheduling); a short poll is sufficient
90+ // and far faster than the 15-second polling interval.
91+ assert .Eventually (t , func () bool {
92+ _ , errs := hc .IsReady ()
93+ _ , ok := errs ["svc" ]
94+ return ok && errs ["svc" ] == nil
95+ }, time .Second , time .Millisecond , "service should become ready quickly after Register" )
9296
93- healthy , healthyErrs := hc .IsHealthy ()
94- assert .True (t , healthy , "expected healthy after Register, got errors: %v" , healthyErrs )
95- assert .Nil (t , healthyErrs ["svc" ], "expected svc healthy, got: %v" , healthyErrs ["svc" ])
97+ assert .Eventually (t , func () bool {
98+ _ , errs := hc .IsHealthy ()
99+ _ , ok := errs ["svc" ]
100+ return ok && errs ["svc" ] == nil
101+ }, time .Second , time .Millisecond , "service should become healthy quickly after Register" )
96102}
97103
98104// TestHealthChecker_Register_ImmediateUpdate_Unhealthy verifies that an unhealthy
99- // service registered on a running HealthChecker is immediately visible .
105+ // service registered on a running HealthChecker is reflected quickly .
100106func TestHealthChecker_Register_ImmediateUpdate_Unhealthy (t * testing.T ) {
101107 hc := HealthCheckerConfig {Ver : "test" , Sha : "abc1234" }.New ()
102108 if err := hc .Start (); err != nil {
@@ -110,11 +116,15 @@ func TestHealthChecker_Register_ImmediateUpdate_Unhealthy(t *testing.T) {
110116 t .Fatalf ("Register: %v" , err )
111117 }
112118
113- ready , readyErrs := hc .IsReady ()
114- assert .False (t , ready , "expected not ready" )
119+ assert .Eventually (t , func () bool {
120+ _ , errs := hc .IsReady ()
121+ _ , ok := errs ["svc2" ]
122+ return ok
123+ }, time .Second , time .Millisecond , "service should appear in ready map quickly after Register" )
124+
125+ _ , readyErrs := hc .IsReady ()
115126 assert .Equal (t , notReady , readyErrs ["svc2" ])
116127
117- healthy , healthyErrs := hc .IsHealthy ()
118- assert .False (t , healthy , "expected not healthy" )
128+ _ , healthyErrs := hc .IsHealthy ()
119129 assert .Equal (t , notReady , healthyErrs ["svc2" ])
120130}
0 commit comments