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 });