mirror of
https://github.com/Rain-kl/OpenFlare.git
synced 2026-09-28 05:46:36 +08:00
aa4faddade
Result: {"status":"keep","total_issues":8,"golint_canonicalheader":0,"golint_errname":0,"golint_errorlint":1,"golint_exhaustive":0,"golint_forcetypeassert":0,"golint_gosec":0,"golint_intrange":0,"golint_modernize":3,"golint_nilnil":3,"golint_perfsprint":0,"golint_prealloc":0,"golint_recvcheck":1,"golint_usestdlibvars":0,"golint_wastedassign":0,"golint_total":8,"golint_test_testifylint":0,"golint_test_thelper":0,"golint_test_usetesting":0,"golint_test_total":0,"golint_vetx_total":0,"eslint_problems":0,"eslint_errors":0,"eslint_warnings":0,"tsc_errors":0,"vitest_failed":0,"vitest_total":116,"measure_s":81}
45 lines
862 B
Go
45 lines
862 B
Go
// Copyright 2026 Arctel.net
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package heartbeat
|
|
|
|
import (
|
|
"context"
|
|
"sync/atomic"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func TestRunLoopImmediateAndTicker(t *testing.T) {
|
|
ctx, cancel := context.WithCancel(context.Background())
|
|
defer cancel()
|
|
|
|
var calls atomic.Int32
|
|
interval := 20 * time.Millisecond
|
|
|
|
done := make(chan struct{})
|
|
go func() {
|
|
RunLoop(ctx, interval, func(context.Context) {
|
|
calls.Add(1)
|
|
})
|
|
close(done)
|
|
}()
|
|
|
|
time.Sleep(5 * time.Millisecond)
|
|
if got := calls.Load(); got != 1 {
|
|
t.Fatalf("expected 1 immediate call, got %d", got)
|
|
}
|
|
|
|
time.Sleep(35 * time.Millisecond)
|
|
if got := calls.Load(); got < 2 {
|
|
t.Fatalf("expected at least 2 calls after ticker, got %d", got)
|
|
}
|
|
|
|
cancel()
|
|
select {
|
|
case <-done:
|
|
case <-time.After(time.Second):
|
|
t.Fatal("RunLoop did not exit after context cancellation")
|
|
}
|
|
}
|