mirror of
https://github.com/netbirdio/netbird.git
synced 2024-11-22 16:13:31 +01:00
5bc601111d
* Add health check attempt threshold for receiver * Add health check attempt threshold for sender
98 lines
2.2 KiB
Go
98 lines
2.2 KiB
Go
package healthcheck
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"os"
|
|
"testing"
|
|
"time"
|
|
|
|
log "github.com/sirupsen/logrus"
|
|
)
|
|
|
|
func TestNewReceiver(t *testing.T) {
|
|
heartbeatTimeout = 5 * time.Second
|
|
r := NewReceiver(log.WithContext(context.Background()))
|
|
|
|
select {
|
|
case <-r.OnTimeout:
|
|
t.Error("unexpected timeout")
|
|
case <-time.After(1 * time.Second):
|
|
|
|
}
|
|
}
|
|
|
|
func TestNewReceiverNotReceive(t *testing.T) {
|
|
heartbeatTimeout = 1 * time.Second
|
|
r := NewReceiver(log.WithContext(context.Background()))
|
|
|
|
select {
|
|
case <-r.OnTimeout:
|
|
case <-time.After(2 * time.Second):
|
|
t.Error("timeout not received")
|
|
}
|
|
}
|
|
|
|
func TestNewReceiverAck(t *testing.T) {
|
|
heartbeatTimeout = 2 * time.Second
|
|
r := NewReceiver(log.WithContext(context.Background()))
|
|
|
|
r.Heartbeat()
|
|
|
|
select {
|
|
case <-r.OnTimeout:
|
|
t.Error("unexpected timeout")
|
|
case <-time.After(3 * time.Second):
|
|
}
|
|
}
|
|
|
|
func TestReceiverHealthCheckAttemptThreshold(t *testing.T) {
|
|
testsCases := []struct {
|
|
name string
|
|
threshold int
|
|
resetCounterOnce bool
|
|
}{
|
|
{"Default attempt threshold", defaultAttemptThreshold, false},
|
|
{"Custom attempt threshold", 3, false},
|
|
{"Should reset threshold once", 2, true},
|
|
}
|
|
|
|
for _, tc := range testsCases {
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
originalInterval := healthCheckInterval
|
|
originalTimeout := heartbeatTimeout
|
|
healthCheckInterval = 1 * time.Second
|
|
heartbeatTimeout = healthCheckInterval + 500*time.Millisecond
|
|
defer func() {
|
|
healthCheckInterval = originalInterval
|
|
heartbeatTimeout = originalTimeout
|
|
}()
|
|
//nolint:tenv
|
|
os.Setenv(defaultAttemptThresholdEnv, fmt.Sprintf("%d", tc.threshold))
|
|
defer os.Unsetenv(defaultAttemptThresholdEnv)
|
|
|
|
receiver := NewReceiver(log.WithField("test_name", tc.name))
|
|
|
|
testTimeout := heartbeatTimeout*time.Duration(tc.threshold) + healthCheckInterval
|
|
|
|
if tc.resetCounterOnce {
|
|
receiver.Heartbeat()
|
|
t.Logf("reset counter once")
|
|
}
|
|
|
|
select {
|
|
case <-receiver.OnTimeout:
|
|
if tc.resetCounterOnce {
|
|
t.Fatalf("should not have timed out before %s", testTimeout)
|
|
}
|
|
case <-time.After(testTimeout):
|
|
if tc.resetCounterOnce {
|
|
return
|
|
}
|
|
t.Fatalf("should have timed out before %s", testTimeout)
|
|
}
|
|
|
|
})
|
|
}
|
|
}
|