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