converge/pkg/support/throttling/throtller_test.go

58 lines
1.3 KiB
Go

package throttling
import (
"time"
)
func (suite *ThrottlerTestSuite) Test_throttlerImmediateNotificationAfterInitialized() {
value := 0
throttler := NewThrottler[int](func(v *int) {
value = *v
}, 1.0)
t0 := time.Now()
v := 1
currentTime.now = t0
throttler.Notify(&v)
suite.Equal(v, value)
value = 0
// subsequent ping will not lead to a notification
currentTime.now = t0.Add(10 * time.Second)
throttler.Ping()
suite.Equal(0, value)
}
func (suite *ThrottlerTestSuite) Test_TwoNotificationsInSHortSucessionSecondOneIsDeliverdWithDelay() {
value := 0
delayMs := 1000
throttler := NewThrottler[int](func(v *int) {
value = *v
}, time.Duration(delayMs)*time.Millisecond)
t0 := time.Now()
v1 := 1
// v2 will not be delivered, the last value in the time interval will be
v2 := 2
v3 := 3
currentTime.now = t0
throttler.Notify(&v1)
suite.Equal(v1, value)
throttler.Notify(&v2)
throttler.Notify(&v3)
suite.Equal(v1, value)
currentTime.now = t0.Add(time.Duration(delayMs-1) * time.Millisecond)
throttler.Ping()
suite.Equal(v1, value)
currentTime.now = t0.Add(time.Duration(delayMs) * time.Millisecond)
throttler.Ping()
suite.Equal(v3, value)
// another ping won't deliver the same value again.
value = 0
currentTime.now = t0.Add(time.Duration(delayMs) * time.Millisecond)
throttler.Ping()
suite.Equal(0, value)
}