toolkit/components/url-classifier/tests/unit/test_backoff.js

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

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

mercurial