now using a testsuite for the throttler tests.
This commit is contained in:
parent
a62a513105
commit
91ea4632a3
@ -1,12 +1,10 @@
|
||||
package throttling
|
||||
|
||||
import (
|
||||
"github.com/stretchr/testify/assert"
|
||||
"testing"
|
||||
"time"
|
||||
)
|
||||
|
||||
func Test_AsyncDeliverOneValue(t *testing.T) {
|
||||
func (suite *ThrottlerTestSuite) Test_AsyncDeliverOneValue() {
|
||||
value := 0
|
||||
pollInterval := 10 * time.Millisecond
|
||||
|
||||
@ -20,15 +18,15 @@ func Test_AsyncDeliverOneValue(t *testing.T) {
|
||||
currentTime.now = t0
|
||||
throttler.Notify(&v)
|
||||
time.Sleep(2 * pollInterval)
|
||||
assert.Equal(t, v, value)
|
||||
suite.Equal(v, value)
|
||||
|
||||
// subsequent ping will not lead to a notification
|
||||
value = 0
|
||||
time.Sleep(2 * pollInterval)
|
||||
assert.Equal(t, 0, value)
|
||||
suite.Equal(0, value)
|
||||
}
|
||||
|
||||
func Test_AsyncTwoNotificationsInSHortSucessionSecondOneIsDeliverdWithDelay(t *testing.T) {
|
||||
func (suite *ThrottlerTestSuite) Test_AsyncTwoNotificationsInSHortSucessionSecondOneIsDeliverdWithDelay() {
|
||||
value := 0
|
||||
delayMs := 1000
|
||||
|
||||
@ -47,24 +45,24 @@ func Test_AsyncTwoNotificationsInSHortSucessionSecondOneIsDeliverdWithDelay(t *t
|
||||
currentTime.now = t0
|
||||
throttler.Notify(&v1)
|
||||
time.Sleep(2 * pollInterval)
|
||||
assert.Equal(t, v1, value)
|
||||
suite.Equal(v1, value)
|
||||
|
||||
throttler.Notify(&v2)
|
||||
throttler.Notify(&v3)
|
||||
time.Sleep(2 * pollInterval)
|
||||
assert.Equal(t, v1, value)
|
||||
suite.Equal(v1, value)
|
||||
|
||||
currentTime.now = t0.Add(time.Duration(delayMs-1) * time.Millisecond)
|
||||
time.Sleep(2 * pollInterval)
|
||||
assert.Equal(t, v1, value)
|
||||
suite.Equal(v1, value)
|
||||
|
||||
currentTime.now = t0.Add(time.Duration(delayMs) * time.Millisecond)
|
||||
time.Sleep(2 * pollInterval)
|
||||
assert.Equal(t, v3, value)
|
||||
suite.Equal(v3, value)
|
||||
|
||||
// another ping won't deliver the same value again.
|
||||
value = 0
|
||||
currentTime.now = t0.Add(time.Duration(delayMs) * time.Millisecond)
|
||||
time.Sleep(2 * pollInterval)
|
||||
assert.Equal(t, 0, value)
|
||||
suite.Equal(0, value)
|
||||
}
|
||||
|
@ -1,8 +1,6 @@
|
||||
package throttling
|
||||
|
||||
import (
|
||||
"os"
|
||||
"testing"
|
||||
"time"
|
||||
)
|
||||
|
||||
@ -19,11 +17,3 @@ func (t *testClock) time() time.Time {
|
||||
//
|
||||
// Simply: currentTime.now = ....
|
||||
var currentTime = &testClock{}
|
||||
|
||||
func TestMain(m *testing.M) {
|
||||
oldclock := clock
|
||||
clock = currentTime
|
||||
exitCode := m.Run()
|
||||
clock = oldclock
|
||||
os.Exit(exitCode)
|
||||
}
|
||||
|
25
pkg/support/throttling/suite_test.go
Normal file
25
pkg/support/throttling/suite_test.go
Normal file
@ -0,0 +1,25 @@
|
||||
package throttling
|
||||
|
||||
import (
|
||||
"github.com/stretchr/testify/suite"
|
||||
"testing"
|
||||
)
|
||||
|
||||
type ThrottlerTestSuite struct {
|
||||
suite.Suite
|
||||
|
||||
oldclock _clock
|
||||
}
|
||||
|
||||
func (suite *ThrottlerTestSuite) SetupTest() {
|
||||
suite.oldclock = clock
|
||||
clock = currentTime
|
||||
}
|
||||
|
||||
func (suite *ThrottlerTestSuite) TearDownTest() {
|
||||
clock = suite.oldclock
|
||||
}
|
||||
|
||||
func TestThrottlerTestSuite(t *testing.T) {
|
||||
suite.Run(t, &ThrottlerTestSuite{})
|
||||
}
|
@ -1,12 +1,10 @@
|
||||
package throttling
|
||||
|
||||
import (
|
||||
"github.com/stretchr/testify/assert"
|
||||
"testing"
|
||||
"time"
|
||||
)
|
||||
|
||||
func Test_throttlerImmediateNotificationAfterInitialized(t *testing.T) {
|
||||
func (suite *ThrottlerTestSuite) Test_throttlerImmediateNotificationAfterInitialized() {
|
||||
value := 0
|
||||
throttler := NewThrottler[int](func(v *int) {
|
||||
value = *v
|
||||
@ -16,15 +14,15 @@ func Test_throttlerImmediateNotificationAfterInitialized(t *testing.T) {
|
||||
v := 1
|
||||
currentTime.now = t0
|
||||
throttler.Notify(&v)
|
||||
assert.Equal(t, v, value)
|
||||
suite.Equal(v, value)
|
||||
value = 0
|
||||
// subsequent ping will not lead to a notification
|
||||
currentTime.now = t0.Add(10 * time.Second)
|
||||
throttler.Ping()
|
||||
assert.Equal(t, 0, value)
|
||||
suite.Equal(0, value)
|
||||
}
|
||||
|
||||
func Test_TwoNotificationsInSHortSucessionSecondOneIsDeliverdWithDelay(t *testing.T) {
|
||||
func (suite *ThrottlerTestSuite) Test_TwoNotificationsInSHortSucessionSecondOneIsDeliverdWithDelay() {
|
||||
value := 0
|
||||
delayMs := 1000
|
||||
throttler := NewThrottler[int](func(v *int) {
|
||||
@ -38,22 +36,22 @@ func Test_TwoNotificationsInSHortSucessionSecondOneIsDeliverdWithDelay(t *testin
|
||||
v3 := 3
|
||||
currentTime.now = t0
|
||||
throttler.Notify(&v1)
|
||||
assert.Equal(t, v1, value)
|
||||
suite.Equal(v1, value)
|
||||
throttler.Notify(&v2)
|
||||
throttler.Notify(&v3)
|
||||
assert.Equal(t, v1, value)
|
||||
suite.Equal(v1, value)
|
||||
|
||||
currentTime.now = t0.Add(time.Duration(delayMs-1) * time.Millisecond)
|
||||
throttler.Ping()
|
||||
assert.Equal(t, v1, value)
|
||||
suite.Equal(v1, value)
|
||||
|
||||
currentTime.now = t0.Add(time.Duration(delayMs) * time.Millisecond)
|
||||
throttler.Ping()
|
||||
assert.Equal(t, v3, value)
|
||||
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()
|
||||
assert.Equal(t, 0, value)
|
||||
suite.Equal(0, value)
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user