converge/pkg/support/throttling/throtller_test.go
Erik Brakkee db094d2a13 reverted changes to throttler for ignoring duplicate events. This caused
more problems since state is immutable but some state of agents and
client is not immutable so it ignored events that were not really
duplicates.
This reverts commit f6b0211336.
2024-09-08 11:16:49 +02:00

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)
}