github.com/benz9527/xboot@v0.0.0-20240504061247-c23f15593274/timer/x_timing_wheels_v1_others_test.go (about) 1 //go:build !windows && !linux 2 // +build !windows,!linux 3 4 package timer 5 6 import ( 7 "context" 8 "errors" 9 "testing" 10 "time" 11 12 "github.com/stretchr/testify/assert" 13 14 "github.com/benz9527/xboot/lib/hrtime" 15 "github.com/benz9527/xboot/observability" 16 ) 17 18 func TestXTimingWheels_ScheduleFunc_goNativeClock_1MsInfinite(t *testing.T) { 19 hrtime.ClockInit() 20 observability.InitAppStats(context.Background(), "goNative1msInfinite") 21 ctx, cancel := context.WithTimeoutCause(context.Background(), 5*time.Second, errors.New("timeout")) 22 defer cancel() 23 tw := NewXTimingWheels( 24 ctx, 25 withTimingWheelsDebugStatsInit(5), 26 WithTimingWheelsStats(), 27 WithTimingWheelTimeSource(GoNativeClock), 28 ) 29 30 delays := []time.Duration{ 31 time.Millisecond, 32 } 33 schedFn := func() Scheduler { 34 return NewInfiniteScheduler(delays...) 35 } 36 assert.NotNil(t, schedFn()) 37 loop := 20 38 tasks := make([]Task, loop) 39 for i := range loop { 40 var err error 41 tasks[i], err = tw.ScheduleFunc(schedFn, func(ctx context.Context, md JobMetadata) {}) 42 assert.NoError(t, err) 43 time.Sleep(2 * time.Millisecond) 44 } 45 46 <-ctx.Done() 47 time.Sleep(100 * time.Millisecond) 48 } 49 50 func TestXTimingWheels_ScheduleFunc_goNativeClock_2MsInfinite(t *testing.T) { 51 hrtime.ClockInit() 52 observability.InitAppStats(context.Background(), "goNative2msInfinite") 53 ctx, cancel := context.WithTimeoutCause(context.Background(), 5*time.Second, errors.New("timeout")) 54 defer cancel() 55 tw := NewXTimingWheels( 56 ctx, 57 WithTimingWheelsTickMs(2*time.Millisecond), 58 WithTimingWheelsSlotSize(20), 59 WithTimingWheelTimeSource(GoNativeClock), 60 withTimingWheelsDebugStatsInit(5), 61 WithTimingWheelsStats(), 62 ) 63 64 delays := []time.Duration{ 65 2 * time.Millisecond, 66 } 67 schedFn := func() Scheduler { 68 return NewInfiniteScheduler(delays...) 69 } 70 assert.NotNil(t, schedFn()) 71 loop := 20 72 tasks := make([]Task, loop) 73 for i := range loop { 74 var err error 75 tasks[i], err = tw.ScheduleFunc(schedFn, func(ctx context.Context, md JobMetadata) {}) 76 assert.NoError(t, err) 77 time.Sleep(2 * time.Millisecond) 78 } 79 80 <-ctx.Done() 81 time.Sleep(100 * time.Millisecond) 82 }