|
1 /* Any copyright is dedicated to the Public Domain. |
|
2 http://creativecommons.org/publicdomain/zero/1.0/ */ |
|
3 |
|
4 Cu.import("resource://services-sync/engines.js"); |
|
5 Cu.import("resource://services-sync/record.js"); |
|
6 Cu.import("resource://services-sync/service.js"); |
|
7 Cu.import("resource://services-sync/util.js"); |
|
8 Cu.import("resource://testing-common/services/sync/rotaryengine.js"); |
|
9 Cu.import("resource://testing-common/services/sync/utils.js"); |
|
10 |
|
11 add_test(function test_processIncoming_abort() { |
|
12 _("An abort exception, raised in applyIncoming, will abort _processIncoming."); |
|
13 let engine = new RotaryEngine(Service); |
|
14 |
|
15 let collection = new ServerCollection(); |
|
16 let id = Utils.makeGUID(); |
|
17 let payload = encryptPayload({id: id, denomination: "Record No. " + id}); |
|
18 collection.insert(id, payload); |
|
19 |
|
20 let server = sync_httpd_setup({ |
|
21 "/1.1/foo/storage/rotary": collection.handler() |
|
22 }); |
|
23 |
|
24 new SyncTestingInfrastructure(server); |
|
25 generateNewKeys(Service.collectionKeys); |
|
26 |
|
27 _("Create some server data."); |
|
28 let meta_global = Service.recordManager.set(engine.metaURL, |
|
29 new WBORecord(engine.metaURL)); |
|
30 meta_global.payload.engines = {rotary: {version: engine.version, |
|
31 syncID: engine.syncID}}; |
|
32 _("Fake applyIncoming to abort."); |
|
33 engine._store.applyIncoming = function (record) { |
|
34 let ex = {code: Engine.prototype.eEngineAbortApplyIncoming, |
|
35 cause: "Nooo"}; |
|
36 _("Throwing: " + JSON.stringify(ex)); |
|
37 throw ex; |
|
38 }; |
|
39 |
|
40 _("Trying _processIncoming. It will throw after aborting."); |
|
41 let err; |
|
42 try { |
|
43 engine._syncStartup(); |
|
44 engine._processIncoming(); |
|
45 } catch (ex) { |
|
46 err = ex; |
|
47 } |
|
48 |
|
49 do_check_eq(err, "Nooo"); |
|
50 err = undefined; |
|
51 |
|
52 _("Trying engine.sync(). It will abort without error."); |
|
53 try { |
|
54 // This will quietly fail. |
|
55 engine.sync(); |
|
56 } catch (ex) { |
|
57 err = ex; |
|
58 } |
|
59 |
|
60 do_check_eq(err, undefined); |
|
61 |
|
62 server.stop(run_next_test); |
|
63 Svc.Prefs.resetBranch(""); |
|
64 Service.recordManager.clearCache(); |
|
65 }); |
|
66 |
|
67 function run_test() { |
|
68 run_next_test(); |
|
69 } |