@@ -11,6 +11,7 @@ import (
11
11
12
12
"github.com/stretchr/testify/assert"
13
13
"github.com/stretchr/testify/require"
14
+ "github.com/vulcand/oxy/internal/holsterv4/clock"
14
15
"github.com/vulcand/oxy/memmetrics"
15
16
"github.com/vulcand/oxy/testutils"
16
17
)
@@ -39,9 +40,10 @@ func TestFullCycle(t *testing.T) {
39
40
_ , _ = w .Write ([]byte ("hello" ))
40
41
})
41
42
42
- clock := testutils .GetClock ()
43
+ done := testutils .FreezeTime ()
44
+ defer done ()
43
45
44
- cb , err := New (handler , triggerNetRatio , Clock ( clock ) )
46
+ cb , err := New (handler , triggerNetRatio )
45
47
require .NoError (t , err )
46
48
47
49
srv := httptest .NewServer (cb )
@@ -52,27 +54,27 @@ func TestFullCycle(t *testing.T) {
52
54
assert .Equal (t , http .StatusOK , re .StatusCode )
53
55
54
56
cb .metrics = statsNetErrors (0.6 )
55
- clock .CurrentTime = clock . CurrentTime . Add (defaultCheckPeriod + time .Millisecond )
57
+ clock .Advance (defaultCheckPeriod + clock .Millisecond )
56
58
_ , _ , err = testutils .Get (srv .URL )
57
59
require .NoError (t , err )
58
60
assert .Equal (t , cbState (stateTripped ), cb .state )
59
61
60
62
// 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 )
62
64
re , _ , err = testutils .Get (srv .URL )
63
65
require .NoError (t , err )
64
66
assert .Equal (t , http .StatusServiceUnavailable , re .StatusCode )
65
67
assert .Equal (t , cbState (stateTripped ), cb .state )
66
68
67
69
// 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 )
69
71
re , _ , err = testutils .Get (srv .URL )
70
72
require .NoError (t , err )
71
73
assert .Equal (t , http .StatusServiceUnavailable , re .StatusCode )
72
74
assert .Equal (t , cbState (stateRecovering ), cb .state )
73
75
74
76
// 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 )
76
78
allowed := 0
77
79
for i := 0 ; i < 100 ; i ++ {
78
80
re , _ , err = testutils .Get (srv .URL )
@@ -83,7 +85,7 @@ func TestFullCycle(t *testing.T) {
83
85
assert .NotEqual (t , 0 , allowed )
84
86
85
87
// 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 )
87
89
re , _ , err = testutils .Get (srv .URL )
88
90
assert .Equal (t , cbState (stateStandby ), cb .state )
89
91
require .NoError (t , err )
@@ -101,7 +103,7 @@ func TestRedirectWithPath(t *testing.T) {
101
103
})
102
104
require .NoError (t , err )
103
105
104
- cb , err := New (handler , triggerNetRatio , Clock ( testutils . GetClock ()), Fallback (fallbackRedirectPath ))
106
+ cb , err := New (handler , triggerNetRatio , Fallback (fallbackRedirectPath ))
105
107
require .NoError (t , err )
106
108
107
109
srv := httptest .NewServer (cb )
@@ -131,7 +133,7 @@ func TestRedirect(t *testing.T) {
131
133
fallbackRedirect , err := NewRedirectFallback (Redirect {URL : "http://localhost:5000" })
132
134
require .NoError (t , err )
133
135
134
- cb , err := New (handler , triggerNetRatio , Clock ( testutils . GetClock ()), Fallback (fallbackRedirect ))
136
+ cb , err := New (handler , triggerNetRatio , Fallback (fallbackRedirect ))
135
137
require .NoError (t , err )
136
138
137
139
srv := httptest .NewServer (cb )
@@ -158,9 +160,10 @@ func TestTriggerDuringRecovery(t *testing.T) {
158
160
_ , _ = w .Write ([]byte ("hello" ))
159
161
})
160
162
161
- clock := testutils .GetClock ()
163
+ done := testutils .FreezeTime ()
164
+ defer done ()
162
165
163
- cb , err := New (handler , triggerNetRatio , Clock ( clock ), CheckPeriod (time .Microsecond ))
166
+ cb , err := New (handler , triggerNetRatio , CheckPeriod (clock .Microsecond ))
164
167
require .NoError (t , err )
165
168
166
169
srv := httptest .NewServer (cb )
@@ -172,14 +175,14 @@ func TestTriggerDuringRecovery(t *testing.T) {
172
175
assert .Equal (t , cbState (stateTripped ), cb .state )
173
176
174
177
// 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 )
176
179
re , _ , err := testutils .Get (srv .URL )
177
180
require .NoError (t , err )
178
181
assert .Equal (t , http .StatusServiceUnavailable , re .StatusCode )
179
182
assert .Equal (t , cbState (stateRecovering ), cb .state )
180
183
181
184
// 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 )
183
186
cb .metrics = statsNetErrors (0.6 )
184
187
allowed := 0
185
188
for i := 0 ; i < 100 ; i ++ {
@@ -234,9 +237,10 @@ func TestSideEffects(t *testing.T) {
234
237
_ , _ = w .Write ([]byte ("hello" ))
235
238
})
236
239
237
- clock := testutils .GetClock ()
240
+ done := testutils .FreezeTime ()
241
+ defer done ()
238
242
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 ))
240
244
require .NoError (t , err )
241
245
242
246
srv := httptest .NewServer (cb )
@@ -254,19 +258,19 @@ func TestSideEffects(t *testing.T) {
254
258
assert .Equal (t , "/post.json" , req .URL .Path )
255
259
assert .Equal (t , `{"Key": ["val1", "val2"]}` , string (srv1Body ))
256
260
assert .Equal (t , "application/json" , req .Header .Get ("Content-Type" ))
257
- case <- time .After (time .Second ):
261
+ case <- clock .After (clock .Second ):
258
262
t .Error ("timeout waiting for side effect to kick off" )
259
263
}
260
264
261
265
// Transition to recovering state
262
- clock .CurrentTime = clock . CurrentTime . Add (10 * time .Second + time .Millisecond )
266
+ clock .Advance (10 * clock .Second + clock .Millisecond )
263
267
cb .metrics = statsOK ()
264
268
_ , _ , err = testutils .Get (srv .URL )
265
269
require .NoError (t , err )
266
270
assert .Equal (t , cbState (stateRecovering ), cb .state )
267
271
268
272
// Going back to standby
269
- clock .CurrentTime = clock . CurrentTime . Add (10 * time .Second + time .Millisecond )
273
+ clock .Advance (10 * clock .Second + clock .Millisecond )
270
274
_ , _ , err = testutils .Get (srv .URL )
271
275
require .NoError (t , err )
272
276
assert .Equal (t , cbState (stateStandby ), cb .state )
@@ -276,7 +280,7 @@ func TestSideEffects(t *testing.T) {
276
280
assert .Equal (t , http .MethodPost , req .Method )
277
281
assert .Equal (t , "/post" , req .URL .Path )
278
282
assert .Equal (t , url.Values {"key" : []string {"val1" , "val2" }}, req .Form )
279
- case <- time .After (time .Second ):
283
+ case <- clock .After (clock .Second ):
280
284
t .Error ("timeout waiting for side effect to kick off" )
281
285
}
282
286
}
0 commit comments