tor-browser

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

test_engine_abort.js (2179B)


      1 /* Any copyright is dedicated to the Public Domain.
      2   http://creativecommons.org/publicdomain/zero/1.0/ */
      3 
      4 const { WBORecord } = ChromeUtils.importESModule(
      5  "resource://services-sync/record.sys.mjs"
      6 );
      7 const { Service } = ChromeUtils.importESModule(
      8  "resource://services-sync/service.sys.mjs"
      9 );
     10 const { RotaryEngine } = ChromeUtils.importESModule(
     11  "resource://testing-common/services/sync/rotaryengine.sys.mjs"
     12 );
     13 
     14 add_task(async function test_processIncoming_abort() {
     15  _(
     16    "An abort exception, raised in applyIncoming, will abort _processIncoming."
     17  );
     18  let engine = new RotaryEngine(Service);
     19 
     20  let collection = new ServerCollection();
     21  let id = Utils.makeGUID();
     22  let payload = encryptPayload({ id, denomination: "Record No. " + id });
     23  collection.insert(id, payload);
     24 
     25  let server = sync_httpd_setup({
     26    "/1.1/foo/storage/rotary": collection.handler(),
     27  });
     28 
     29  await SyncTestingInfrastructure(server);
     30  await generateNewKeys(Service.collectionKeys);
     31 
     32  _("Create some server data.");
     33  let syncID = await engine.resetLocalSyncID();
     34  let meta_global = Service.recordManager.set(
     35    engine.metaURL,
     36    new WBORecord(engine.metaURL)
     37  );
     38  meta_global.payload.engines = { rotary: { version: engine.version, syncID } };
     39  _("Fake applyIncoming to abort.");
     40  engine._store.applyIncoming = async function () {
     41    let ex = {
     42      code: SyncEngine.prototype.eEngineAbortApplyIncoming,
     43      cause: "Nooo",
     44    };
     45    _("Throwing: " + JSON.stringify(ex));
     46    throw ex;
     47  };
     48 
     49  _("Trying _processIncoming. It will throw after aborting.");
     50  let err;
     51  try {
     52    await engine._syncStartup();
     53    await engine._processIncoming();
     54  } catch (ex) {
     55    err = ex;
     56  }
     57 
     58  Assert.equal(err, "Nooo");
     59  err = undefined;
     60 
     61  _("Trying engine.sync(). It will abort without error.");
     62  try {
     63    // This will quietly fail.
     64    await engine.sync();
     65  } catch (ex) {
     66    err = ex;
     67  }
     68 
     69  Assert.equal(err, undefined);
     70 
     71  await promiseStopServer(server);
     72  for (const pref of Svc.PrefBranch.getChildList("")) {
     73    Svc.PrefBranch.clearUserPref(pref);
     74  }
     75  Service.recordManager.clearCache();
     76 
     77  await engine._tracker.clearChangedIDs();
     78  await engine.finalize();
     79 });