mirror of
https://github.com/netbirdio/netbird.git
synced 2026-09-30 10:39:08 +02:00
57 lines
1.4 KiB
Go
57 lines
1.4 KiB
Go
package grpc
|
|
|
|
import (
|
|
"sync/atomic"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestRefreshInterval(t *testing.T) {
|
|
defaultInterval := defaultDuration / 4 * 3
|
|
|
|
require.Equal(t, 9*time.Hour, refreshInterval(12*time.Hour))
|
|
require.Equal(t, defaultInterval, refreshInterval(0))
|
|
require.Equal(t, defaultInterval, refreshInterval(-time.Second))
|
|
require.Equal(t, defaultInterval, refreshInterval(3*time.Nanosecond))
|
|
require.Positive(t, refreshInterval(4*time.Nanosecond))
|
|
}
|
|
|
|
func TestWorkerSkipsCancelledJob(t *testing.T) {
|
|
var ran atomic.Int32
|
|
scheduler := newRefreshScheduler(func(*refreshJob) {
|
|
ran.Add(1)
|
|
})
|
|
|
|
cancelledJob := &refreshJob{interval: time.Hour}
|
|
cancelledJob.cancelled.Store(true)
|
|
liveJob := &refreshJob{interval: time.Hour}
|
|
|
|
scheduler.work <- cancelledJob
|
|
scheduler.work <- liveJob
|
|
|
|
require.Eventually(t, func() bool {
|
|
return ran.Load() == 1
|
|
}, 2*time.Second, 10*time.Millisecond, "live job should run exactly once, cancelled job never")
|
|
}
|
|
|
|
func TestCancelBeforeFirePreventsRun(t *testing.T) {
|
|
var ran atomic.Int32
|
|
scheduler := newRefreshScheduler(func(*refreshJob) {
|
|
ran.Add(1)
|
|
})
|
|
|
|
job := &refreshJob{interval: 50 * time.Millisecond}
|
|
scheduler.schedule(job)
|
|
scheduler.cancel(job)
|
|
|
|
time.Sleep(150 * time.Millisecond)
|
|
require.Zero(t, ran.Load(), "cancelled job must never fire")
|
|
|
|
scheduler.mu.Lock()
|
|
heapLen := len(scheduler.jobs)
|
|
scheduler.mu.Unlock()
|
|
require.Zero(t, heapLen)
|
|
}
|