test_unregister_error.js (1932B)
1 /* Any copyright is dedicated to the Public Domain. 2 http://creativecommons.org/publicdomain/zero/1.0/ */ 3 4 "use strict"; 5 6 const channelID = "00c7fa13-7b71-447d-bd27-a91abc09d1b2"; 7 8 function run_test() { 9 do_get_profile(); 10 setPrefs(); 11 run_next_test(); 12 } 13 14 add_task(async function test_unregister_error() { 15 let db = PushServiceWebSocket.newPushDB(); 16 registerCleanupFunction(() => { 17 return db.drop().then(_ => db.close()); 18 }); 19 await db.put({ 20 channelID, 21 pushEndpoint: "https://example.org/update/failure", 22 scope: "https://example.net/page/failure", 23 originAttributes: "", 24 version: 1, 25 quota: Infinity, 26 }); 27 28 let unregisterDone; 29 let unregisterPromise = new Promise(resolve => (unregisterDone = resolve)); 30 PushService.init({ 31 serverURI: "wss://push.example.org/", 32 db, 33 makeWebSocket(uri) { 34 return new MockWebSocket(uri, { 35 onHello() { 36 this.serverSendMsg( 37 JSON.stringify({ 38 messageType: "hello", 39 status: 200, 40 uaid: "083e6c17-1063-4677-8638-ab705aebebc2", 41 }) 42 ); 43 }, 44 onUnregister(request) { 45 // The server is notified out-of-band. Since channels may be pruned, 46 // any failures are swallowed. 47 equal(request.channelID, channelID, "Unregister: wrong channel ID"); 48 this.serverSendMsg( 49 JSON.stringify({ 50 messageType: "unregister", 51 status: 500, 52 error: "omg, everything is exploding", 53 channelID, 54 }) 55 ); 56 unregisterDone(); 57 }, 58 }); 59 }, 60 }); 61 62 await PushService.unregister({ 63 scope: "https://example.net/page/failure", 64 originAttributes: "", 65 }); 66 67 let result = await db.getByKeyID(channelID); 68 ok(!result, "Deleted push record exists"); 69 70 // Make sure we send a request to the server. 71 await unregisterPromise; 72 });