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

Fri, 16 Jan 2015 18:13:44 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Fri, 16 Jan 2015 18:13:44 +0100
branch
TOR_BUG_9701
changeset 14
925c144e1f1f
permissions
-rw-r--r--

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 }

mercurial