1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/toolkit/components/url-classifier/tests/unit/test_backoff.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,89 @@ 1.4 +// Some unittests (e.g., paste into JS shell) 1.5 +var jslib = Cc["@mozilla.org/url-classifier/jslib;1"]. 1.6 + getService().wrappedJSObject; 1.7 +var _Datenow = jslib.Date.now; 1.8 +function setNow(time) { 1.9 + jslib.Date.now = function() { 1.10 + return time; 1.11 + } 1.12 +} 1.13 + 1.14 +function run_test() { 1.15 + // 3 errors, 1ms retry period, max 3 requests per ten milliseconds, 1.16 + // 5ms backoff interval, 19ms max delay 1.17 + var rb = new jslib.RequestBackoff(3, 1, 3, 10, 5, 19); 1.18 + setNow(1); 1.19 + rb.noteServerResponse(200); 1.20 + do_check_true(rb.canMakeRequest()); 1.21 + setNow(2); 1.22 + do_check_true(rb.canMakeRequest()); 1.23 + 1.24 + // First error should trigger a 1ms delay 1.25 + rb.noteServerResponse(500); 1.26 + do_check_false(rb.canMakeRequest()); 1.27 + do_check_eq(rb.nextRequestTime_, 3); 1.28 + setNow(3); 1.29 + do_check_true(rb.canMakeRequest()); 1.30 + 1.31 + // Second error should also trigger a 1ms delay 1.32 + rb.noteServerResponse(500); 1.33 + do_check_false(rb.canMakeRequest()); 1.34 + do_check_eq(rb.nextRequestTime_, 4); 1.35 + setNow(4); 1.36 + do_check_true(rb.canMakeRequest()); 1.37 + 1.38 + // Third error should trigger a 5ms backoff 1.39 + rb.noteServerResponse(500); 1.40 + do_check_false(rb.canMakeRequest()); 1.41 + do_check_eq(rb.nextRequestTime_, 9); 1.42 + setNow(9); 1.43 + do_check_true(rb.canMakeRequest()); 1.44 + 1.45 + // Trigger backoff again 1.46 + rb.noteServerResponse(503); 1.47 + do_check_false(rb.canMakeRequest()); 1.48 + do_check_eq(rb.nextRequestTime_, 19); 1.49 + setNow(19); 1.50 + do_check_true(rb.canMakeRequest()); 1.51 + 1.52 + // Trigger backoff a third time and hit max timeout 1.53 + rb.noteServerResponse(302); 1.54 + do_check_false(rb.canMakeRequest()); 1.55 + do_check_eq(rb.nextRequestTime_, 38); 1.56 + setNow(38); 1.57 + do_check_true(rb.canMakeRequest()); 1.58 + 1.59 + // One more backoff, should still be at the max timeout 1.60 + rb.noteServerResponse(400); 1.61 + do_check_false(rb.canMakeRequest()); 1.62 + do_check_eq(rb.nextRequestTime_, 57); 1.63 + setNow(57); 1.64 + do_check_true(rb.canMakeRequest()); 1.65 + 1.66 + // Request goes through 1.67 + rb.noteServerResponse(200); 1.68 + do_check_true(rb.canMakeRequest()); 1.69 + do_check_eq(rb.nextRequestTime_, 0); 1.70 + setNow(58); 1.71 + rb.noteServerResponse(500); 1.72 + 1.73 + // Another error, should trigger a 1ms backoff 1.74 + do_check_false(rb.canMakeRequest()); 1.75 + do_check_eq(rb.nextRequestTime_, 59); 1.76 + 1.77 + setNow(59); 1.78 + do_check_true(rb.canMakeRequest()); 1.79 + 1.80 + setNow(200); 1.81 + rb.noteRequest(); 1.82 + setNow(201); 1.83 + rb.noteRequest(); 1.84 + setNow(202); 1.85 + do_check_true(rb.canMakeRequest()); 1.86 + rb.noteRequest(); 1.87 + do_check_false(rb.canMakeRequest()); 1.88 + setNow(211); 1.89 + do_check_true(rb.canMakeRequest()); 1.90 + 1.91 + jslib.Date.now = _Datenow; 1.92 +}