@@ -11,6 +11,7 @@ import (
1111
1212 "github.com/stretchr/testify/assert"
1313 "github.com/stretchr/testify/require"
14+ "github.com/vulcand/oxy/internal/holsterv4/clock"
1415 "github.com/vulcand/oxy/memmetrics"
1516 "github.com/vulcand/oxy/testutils"
1617)
@@ -39,9 +40,10 @@ func TestFullCycle(t *testing.T) {
3940 _ , _ = w .Write ([]byte ("hello" ))
4041 })
4142
42- clock := testutils .GetClock ()
43+ done := testutils .FreezeTime ()
44+ defer done ()
4345
44- cb , err := New (handler , triggerNetRatio , Clock ( clock ) )
46+ cb , err := New (handler , triggerNetRatio )
4547 require .NoError (t , err )
4648
4749 srv := httptest .NewServer (cb )
@@ -52,27 +54,27 @@ func TestFullCycle(t *testing.T) {
5254 assert .Equal (t , http .StatusOK , re .StatusCode )
5355
5456 cb .metrics = statsNetErrors (0.6 )
55- clock .CurrentTime = clock . CurrentTime . Add (defaultCheckPeriod + time .Millisecond )
57+ clock .Advance (defaultCheckPeriod + clock .Millisecond )
5658 _ , _ , err = testutils .Get (srv .URL )
5759 require .NoError (t , err )
5860 assert .Equal (t , cbState (stateTripped ), cb .state )
5961
6062 // Some time has passed, but we are still in trapped state.
61- clock .CurrentTime = clock . CurrentTime . Add (9 * time .Second )
63+ clock .Advance (9 * clock .Second )
6264 re , _ , err = testutils .Get (srv .URL )
6365 require .NoError (t , err )
6466 assert .Equal (t , http .StatusServiceUnavailable , re .StatusCode )
6567 assert .Equal (t , cbState (stateTripped ), cb .state )
6668
6769 // We should be in recovering state by now
68- clock .CurrentTime = clock .CurrentTime . Add ( time . Second * 1 + time .Millisecond )
70+ clock .Advance ( clock .Second * 1 + clock .Millisecond )
6971 re , _ , err = testutils .Get (srv .URL )
7072 require .NoError (t , err )
7173 assert .Equal (t , http .StatusServiceUnavailable , re .StatusCode )
7274 assert .Equal (t , cbState (stateRecovering ), cb .state )
7375
7476 // 5 seconds after we should be allowing some requests to pass
75- clock .CurrentTime = clock . CurrentTime . Add (5 * time .Second )
77+ clock .Advance (5 * clock .Second )
7678 allowed := 0
7779 for i := 0 ; i < 100 ; i ++ {
7880 re , _ , err = testutils .Get (srv .URL )
@@ -83,7 +85,7 @@ func TestFullCycle(t *testing.T) {
8385 assert .NotEqual (t , 0 , allowed )
8486
8587 // After some time, all is good and we should be in stand by mode again
86- clock .CurrentTime = clock . CurrentTime . Add (5 * time .Second + time .Millisecond )
88+ clock .Advance (5 * clock .Second + clock .Millisecond )
8789 re , _ , err = testutils .Get (srv .URL )
8890 assert .Equal (t , cbState (stateStandby ), cb .state )
8991 require .NoError (t , err )
@@ -101,7 +103,7 @@ func TestRedirectWithPath(t *testing.T) {
101103 })
102104 require .NoError (t , err )
103105
104- cb , err := New (handler , triggerNetRatio , Clock ( testutils . GetClock ()), Fallback (fallbackRedirectPath ))
106+ cb , err := New (handler , triggerNetRatio , Fallback (fallbackRedirectPath ))
105107 require .NoError (t , err )
106108
107109 srv := httptest .NewServer (cb )
@@ -131,7 +133,7 @@ func TestRedirect(t *testing.T) {
131133 fallbackRedirect , err := NewRedirectFallback (Redirect {URL : "http://localhost:5000" })
132134 require .NoError (t , err )
133135
134- cb , err := New (handler , triggerNetRatio , Clock ( testutils . GetClock ()), Fallback (fallbackRedirect ))
136+ cb , err := New (handler , triggerNetRatio , Fallback (fallbackRedirect ))
135137 require .NoError (t , err )
136138
137139 srv := httptest .NewServer (cb )
@@ -158,9 +160,10 @@ func TestTriggerDuringRecovery(t *testing.T) {
158160 _ , _ = w .Write ([]byte ("hello" ))
159161 })
160162
161- clock := testutils .GetClock ()
163+ done := testutils .FreezeTime ()
164+ defer done ()
162165
163- cb , err := New (handler , triggerNetRatio , Clock ( clock ), CheckPeriod (time .Microsecond ))
166+ cb , err := New (handler , triggerNetRatio , CheckPeriod (clock .Microsecond ))
164167 require .NoError (t , err )
165168
166169 srv := httptest .NewServer (cb )
@@ -172,14 +175,14 @@ func TestTriggerDuringRecovery(t *testing.T) {
172175 assert .Equal (t , cbState (stateTripped ), cb .state )
173176
174177 // We should be in recovering state by now
175- clock .CurrentTime = clock . CurrentTime . Add (10 * time .Second + time .Millisecond )
178+ clock .Advance (10 * clock .Second + clock .Millisecond )
176179 re , _ , err := testutils .Get (srv .URL )
177180 require .NoError (t , err )
178181 assert .Equal (t , http .StatusServiceUnavailable , re .StatusCode )
179182 assert .Equal (t , cbState (stateRecovering ), cb .state )
180183
181184 // We have matched error condition during recovery state and are going back to tripped state
182- clock .CurrentTime = clock . CurrentTime . Add (5 * time .Second )
185+ clock .Advance (5 * clock .Second )
183186 cb .metrics = statsNetErrors (0.6 )
184187 allowed := 0
185188 for i := 0 ; i < 100 ; i ++ {
@@ -234,9 +237,10 @@ func TestSideEffects(t *testing.T) {
234237 _ , _ = w .Write ([]byte ("hello" ))
235238 })
236239
237- clock := testutils .GetClock ()
240+ done := testutils .FreezeTime ()
241+ defer done ()
238242
239- cb , err := New (handler , triggerNetRatio , Clock ( clock ), CheckPeriod (time .Microsecond ), OnTripped (onTripped ), OnStandby (onStandby ))
243+ cb , err := New (handler , triggerNetRatio , CheckPeriod (clock .Microsecond ), OnTripped (onTripped ), OnStandby (onStandby ))
240244 require .NoError (t , err )
241245
242246 srv := httptest .NewServer (cb )
@@ -254,19 +258,19 @@ func TestSideEffects(t *testing.T) {
254258 assert .Equal (t , "/post.json" , req .URL .Path )
255259 assert .Equal (t , `{"Key": ["val1", "val2"]}` , string (srv1Body ))
256260 assert .Equal (t , "application/json" , req .Header .Get ("Content-Type" ))
257- case <- time .After (time .Second ):
261+ case <- clock .After (clock .Second ):
258262 t .Error ("timeout waiting for side effect to kick off" )
259263 }
260264
261265 // Transition to recovering state
262- clock .CurrentTime = clock . CurrentTime . Add (10 * time .Second + time .Millisecond )
266+ clock .Advance (10 * clock .Second + clock .Millisecond )
263267 cb .metrics = statsOK ()
264268 _ , _ , err = testutils .Get (srv .URL )
265269 require .NoError (t , err )
266270 assert .Equal (t , cbState (stateRecovering ), cb .state )
267271
268272 // Going back to standby
269- clock .CurrentTime = clock . CurrentTime . Add (10 * time .Second + time .Millisecond )
273+ clock .Advance (10 * clock .Second + clock .Millisecond )
270274 _ , _ , err = testutils .Get (srv .URL )
271275 require .NoError (t , err )
272276 assert .Equal (t , cbState (stateStandby ), cb .state )
@@ -276,7 +280,7 @@ func TestSideEffects(t *testing.T) {
276280 assert .Equal (t , http .MethodPost , req .Method )
277281 assert .Equal (t , "/post" , req .URL .Path )
278282 assert .Equal (t , url.Values {"key" : []string {"val1" , "val2" }}, req .Form )
279- case <- time .After (time .Second ):
283+ case <- clock .After (clock .Second ):
280284 t .Error ("timeout waiting for side effect to kick off" )
281285 }
282286}
0 commit comments