tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

test_retry_ws.js (1762B)


      1 /* Any copyright is dedicated to the Public Domain.
      2   http://creativecommons.org/publicdomain/zero/1.0/ */
      3 
      4 "use strict";
      5 
      6 const userAgentID = "05f7b940-51b6-4b6f-8032-b83ebb577ded";
      7 
      8 function run_test() {
      9  do_get_profile();
     10  setPrefs({
     11    userAgentID,
     12    pingInterval: 2000,
     13    retryBaseInterval: 25,
     14  });
     15  run_next_test();
     16 }
     17 
     18 add_task(async function test_ws_retry() {
     19  let db = PushServiceWebSocket.newPushDB();
     20  registerCleanupFunction(() => {
     21    return db.drop().then(_ => db.close());
     22  });
     23 
     24  await db.put({
     25    channelID: "61770ba9-2d57-4134-b949-d40404630d5b",
     26    pushEndpoint: "https://example.org/push/1",
     27    scope: "https://example.net/push/1",
     28    version: 1,
     29    originAttributes: "",
     30    quota: Infinity,
     31  });
     32 
     33  // Use a mock timer to avoid waiting for the backoff interval.
     34  let reconnects = 0;
     35  PushServiceWebSocket._backoffTimer = {
     36    init(observer, delay) {
     37      reconnects++;
     38      ok(
     39        delay >= 5 && delay <= 2000,
     40        `Backoff delay ${delay} out of range for attempt ${reconnects}`
     41      );
     42      observer.observe(this, "timer-callback", null);
     43    },
     44 
     45    cancel() {},
     46  };
     47 
     48  let handshakeDone;
     49  let handshakePromise = new Promise(resolve => (handshakeDone = resolve));
     50  PushService.init({
     51    serverURI: "wss://push.example.org/",
     52    makeWebSocket(uri) {
     53      return new MockWebSocket(uri, {
     54        onHello() {
     55          if (reconnects == 10) {
     56            this.serverSendMsg(
     57              JSON.stringify({
     58                messageType: "hello",
     59                status: 200,
     60                uaid: userAgentID,
     61              })
     62            );
     63            handshakeDone();
     64            return;
     65          }
     66          this.serverInterrupt();
     67        },
     68      });
     69    },
     70  });
     71 
     72  await handshakePromise;
     73 });