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