4
4
"net/http"
5
5
"net/http/httptest"
6
6
"os"
7
+ "sync"
7
8
"testing"
8
9
"time"
9
10
@@ -27,10 +28,7 @@ func TestNewPool(t *testing.T) {
27
28
assert .Equal (t , defaultAddr , addr )
28
29
29
30
// check monitor started
30
- assert .NotEqual (t , statusAvailable , pool .status [defaultAddr ]) // unavailable by default
31
-
32
- time .Sleep (2 * time .Second + 100 * time .Millisecond )
33
- assert .Equal (t , statusAvailable , pool .status [defaultAddr ])
31
+ assert .Equal (t , statusAvailable , pool .status [defaultAddr ]) // available by default
34
32
35
33
mockHttpServer .Close ()
36
34
time .Sleep (2 * time .Second + 100 * time .Millisecond )
@@ -176,12 +174,6 @@ func TestAddressPool_checkConnectivity(t *testing.T) {
176
174
// init, all address is available
177
175
defaultAddr := "127.0.0.1:30000"
178
176
p := NewPool ([]string {defaultAddr , server1Addr , server2Addr })
179
- assert .NotEqual (t , statusAvailable , p .status [defaultAddr ])
180
- assert .NotEqual (t , statusAvailable , p .status [server1Addr ])
181
- assert .NotEqual (t , statusAvailable , p .status [server2Addr ])
182
-
183
- // check connectivity, default address status should be unavailable, as it is fake
184
- p .checkConnectivity ()
185
177
assert .Equal (t , statusUnavailable , p .status [defaultAddr ])
186
178
assert .Equal (t , statusAvailable , p .status [server1Addr ])
187
179
assert .Equal (t , statusAvailable , p .status [server2Addr ])
@@ -194,3 +186,145 @@ func TestAddressPool_checkConnectivity(t *testing.T) {
194
186
assert .Equal (t , statusUnavailable , p .status [server1Addr ])
195
187
assert .Equal (t , statusUnavailable , p .status [server2Addr ])
196
188
}
189
+
190
+ func TestPool_CheckReadiness (t * testing.T ) {
191
+ type fields struct {
192
+ mutex sync.RWMutex
193
+ statusHistory []map [string ]string
194
+ }
195
+ tests := []struct {
196
+ name string
197
+ fields fields
198
+ want int
199
+ }{
200
+ {
201
+ name : "success" ,
202
+ fields : fields {
203
+ statusHistory : []map [string ]string {
204
+ {
205
+ "1.1.1.1:30110" : statusAvailable ,
206
+ },
207
+ {
208
+ "1.1.1.1:30110" : statusAvailable ,
209
+ },
210
+ {
211
+ "1.1.1.1:30110" : statusAvailable ,
212
+ },
213
+ },
214
+ },
215
+ want : ReadinessSuccess ,
216
+ },
217
+ {
218
+ name : "success" ,
219
+ fields : fields {
220
+ statusHistory : []map [string ]string {
221
+ {
222
+ "1.1.1.1:30110" : statusUnavailable ,
223
+ },
224
+ {
225
+ "1.1.1.1:30110" : statusAvailable ,
226
+ },
227
+ {
228
+ "1.1.1.1:30110" : statusAvailable ,
229
+ },
230
+ },
231
+ },
232
+ want : ReadinessSuccess ,
233
+ },
234
+ {
235
+ name : "success" ,
236
+ fields : fields {
237
+ statusHistory : []map [string ]string {
238
+ {
239
+ "1.1.1.1:30110" : statusUnavailable ,
240
+ },
241
+ {
242
+ "1.1.1.1:30110" : statusAvailable ,
243
+ },
244
+ {
245
+ "1.1.1.1:30110" : statusUnavailable ,
246
+ "1.1.1.2:30110" : statusAvailable ,
247
+ },
248
+ },
249
+ },
250
+ want : ReadinessSuccess ,
251
+ },
252
+ {
253
+ name : "indeterminate" ,
254
+ fields : fields {
255
+ statusHistory : []map [string ]string {
256
+ {
257
+ "1.1.1.1:30110" : statusAvailable ,
258
+ },
259
+ {
260
+ "1.1.1.1:30110" : statusAvailable ,
261
+ },
262
+ {
263
+ "1.1.1.1:30110" : statusUnavailable ,
264
+ },
265
+ },
266
+ },
267
+ want : ReadinessIndeterminate ,
268
+ },
269
+ {
270
+ name : "indeterminate" ,
271
+ fields : fields {
272
+ statusHistory : []map [string ]string {
273
+ {
274
+ "1.1.1.1:30110" : statusAvailable ,
275
+ },
276
+ {
277
+ "1.1.1.1:30110" : statusUnavailable ,
278
+ },
279
+ {
280
+ "1.1.1.1:30110" : statusUnavailable ,
281
+ },
282
+ },
283
+ },
284
+ want : ReadinessIndeterminate ,
285
+ },
286
+ {
287
+ name : "indeterminate" ,
288
+ fields : fields {
289
+ statusHistory : []map [string ]string {
290
+ {
291
+ "1.1.1.1:30110" : statusUnavailable ,
292
+ },
293
+ {
294
+ "1.1.1.1:30110" : statusAvailable ,
295
+ },
296
+ {
297
+ "1.1.1.1:30110" : statusUnavailable ,
298
+ },
299
+ },
300
+ },
301
+ want : ReadinessIndeterminate ,
302
+ },
303
+ {
304
+ name : "failed" ,
305
+ fields : fields {
306
+ statusHistory : []map [string ]string {
307
+ {
308
+ "1.1.1.1:30110" : statusUnavailable ,
309
+ },
310
+ {
311
+ "1.1.1.1:30110" : statusUnavailable ,
312
+ },
313
+ {
314
+ "1.1.1.1:30110" : statusUnavailable ,
315
+ },
316
+ },
317
+ },
318
+ want : ReadinessFailed ,
319
+ },
320
+ }
321
+ for _ , tt := range tests {
322
+ t .Run (tt .name , func (t * testing.T ) {
323
+ p := & Pool {
324
+ mutex : tt .fields .mutex ,
325
+ statusHistory : tt .fields .statusHistory ,
326
+ }
327
+ assert .Equalf (t , tt .want , p .CheckReadiness (), "CheckReadiness()" )
328
+ })
329
+ }
330
+ }
0 commit comments