Fri, 16 Jan 2015 18:13:44 +0100
Integrate suggestion from review to improve consistency with existing code.
1 // Some unittests (e.g., paste into JS shell)
2 var jslib = Cc["@mozilla.org/url-classifier/jslib;1"].
3 getService().wrappedJSObject;
4 var _Datenow = jslib.Date.now;
5 function setNow(time) {
6 jslib.Date.now = function() {
7 return time;
8 }
9 }
11 function run_test() {
12 // 3 errors, 1ms retry period, max 3 requests per ten milliseconds,
13 // 5ms backoff interval, 19ms max delay
14 var rb = new jslib.RequestBackoff(3, 1, 3, 10, 5, 19);
15 setNow(1);
16 rb.noteServerResponse(200);
17 do_check_true(rb.canMakeRequest());
18 setNow(2);
19 do_check_true(rb.canMakeRequest());
21 // First error should trigger a 1ms delay
22 rb.noteServerResponse(500);
23 do_check_false(rb.canMakeRequest());
24 do_check_eq(rb.nextRequestTime_, 3);
25 setNow(3);
26 do_check_true(rb.canMakeRequest());
28 // Second error should also trigger a 1ms delay
29 rb.noteServerResponse(500);
30 do_check_false(rb.canMakeRequest());
31 do_check_eq(rb.nextRequestTime_, 4);
32 setNow(4);
33 do_check_true(rb.canMakeRequest());
35 // Third error should trigger a 5ms backoff
36 rb.noteServerResponse(500);
37 do_check_false(rb.canMakeRequest());
38 do_check_eq(rb.nextRequestTime_, 9);
39 setNow(9);
40 do_check_true(rb.canMakeRequest());
42 // Trigger backoff again
43 rb.noteServerResponse(503);
44 do_check_false(rb.canMakeRequest());
45 do_check_eq(rb.nextRequestTime_, 19);
46 setNow(19);
47 do_check_true(rb.canMakeRequest());
49 // Trigger backoff a third time and hit max timeout
50 rb.noteServerResponse(302);
51 do_check_false(rb.canMakeRequest());
52 do_check_eq(rb.nextRequestTime_, 38);
53 setNow(38);
54 do_check_true(rb.canMakeRequest());
56 // One more backoff, should still be at the max timeout
57 rb.noteServerResponse(400);
58 do_check_false(rb.canMakeRequest());
59 do_check_eq(rb.nextRequestTime_, 57);
60 setNow(57);
61 do_check_true(rb.canMakeRequest());
63 // Request goes through
64 rb.noteServerResponse(200);
65 do_check_true(rb.canMakeRequest());
66 do_check_eq(rb.nextRequestTime_, 0);
67 setNow(58);
68 rb.noteServerResponse(500);
70 // Another error, should trigger a 1ms backoff
71 do_check_false(rb.canMakeRequest());
72 do_check_eq(rb.nextRequestTime_, 59);
74 setNow(59);
75 do_check_true(rb.canMakeRequest());
77 setNow(200);
78 rb.noteRequest();
79 setNow(201);
80 rb.noteRequest();
81 setNow(202);
82 do_check_true(rb.canMakeRequest());
83 rb.noteRequest();
84 do_check_false(rb.canMakeRequest());
85 setNow(211);
86 do_check_true(rb.canMakeRequest());
88 jslib.Date.now = _Datenow;
89 }