tor-browser

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

test_412.js (1971B)


      1 /* Any copyright is dedicated to the Public Domain.
      2 * http://creativecommons.org/publicdomain/zero/1.0/ */
      3 
      4 const { Service } = ChromeUtils.importESModule(
      5  "resource://services-sync/service.sys.mjs"
      6 );
      7 const { RotaryEngine } = ChromeUtils.importESModule(
      8  "resource://testing-common/services/sync/rotaryengine.sys.mjs"
      9 );
     10 
     11 add_task(async function test_412_not_treated_as_failure() {
     12  await Service.engineManager.register(RotaryEngine);
     13  let engine = Service.engineManager.get("rotary");
     14 
     15  let server = await serverForFoo(engine);
     16 
     17  await SyncTestingInfrastructure(server);
     18  await generateNewKeys(Service.collectionKeys);
     19 
     20  // add an item to the server to the first sync advances lastModified.
     21  let collection = server.getCollection("foo", "rotary");
     22  let payload = encryptPayload({
     23    id: "existing",
     24    something: "existing record",
     25  });
     26  collection.insert("existing", payload);
     27 
     28  let promiseObserved = promiseOneObserver("weave:engine:sync:finish");
     29  try {
     30    // Do sync.
     31    _("initial sync to initialize the world");
     32    await Service.sync();
     33 
     34    // create a new record that should be uploaded and arrange for our lastSync
     35    // timestamp to be wrong so we get a 412.
     36    engine._store.items = { new: "new record" };
     37    await engine._tracker.addChangedID("new", 0);
     38 
     39    let saw412 = false;
     40    let _uploadOutgoing = engine._uploadOutgoing;
     41    engine._uploadOutgoing = async () => {
     42      let lastSync = await engine.getLastSync();
     43      await engine.setLastSync(lastSync - 2);
     44      try {
     45        await _uploadOutgoing.call(engine);
     46      } catch (ex) {
     47        saw412 = ex.status == 412;
     48        throw ex;
     49      }
     50    };
     51    _("Second sync - expecting a 412");
     52    await Service.sync();
     53    await promiseObserved;
     54    ok(saw412, "did see a 412 error");
     55    // But service status should be OK as the 412 shouldn't be treated as an error.
     56    equal(Service.status.service, STATUS_OK);
     57  } finally {
     58    await promiseStopServer(server);
     59  }
     60 });