зеркало из https://github.com/mozilla/gecko-dev.git
126 строки
3.5 KiB
JavaScript
126 строки
3.5 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
'use strict';
|
|
|
|
const {PushDB, PushService, PushServiceWebSocket} = serviceExports;
|
|
|
|
var userAgentID = '5ab1d1df-7a3d-4024-a469-b9e1bb399fad';
|
|
|
|
function run_test() {
|
|
do_get_profile();
|
|
setPrefs({userAgentID});
|
|
run_next_test();
|
|
}
|
|
|
|
add_task(function* test_notification_ack() {
|
|
let db = PushServiceWebSocket.newPushDB();
|
|
do_register_cleanup(() => {return db.drop().then(_ => db.close());});
|
|
let records = [{
|
|
channelID: '21668e05-6da8-42c9-b8ab-9cc3f4d5630c',
|
|
pushEndpoint: 'https://example.com/update/1',
|
|
scope: 'https://example.org/1',
|
|
originAttributes: '',
|
|
version: 1,
|
|
quota: Infinity,
|
|
systemRecord: true,
|
|
}, {
|
|
channelID: '9a5ff87f-47c9-4215-b2b8-0bdd38b4b305',
|
|
pushEndpoint: 'https://example.com/update/2',
|
|
scope: 'https://example.org/2',
|
|
originAttributes: '',
|
|
version: 2,
|
|
quota: Infinity,
|
|
systemRecord: true,
|
|
}, {
|
|
channelID: '5477bfda-22db-45d4-9614-fee369630260',
|
|
pushEndpoint: 'https://example.com/update/3',
|
|
scope: 'https://example.org/3',
|
|
originAttributes: '',
|
|
version: 3,
|
|
quota: Infinity,
|
|
systemRecord: true,
|
|
}];
|
|
for (let record of records) {
|
|
yield db.put(record);
|
|
}
|
|
|
|
let notifyCount = 0;
|
|
let notifyPromise = promiseObserverNotification(PushServiceComponent.pushTopic, () =>
|
|
++notifyCount == 3);
|
|
|
|
let acks = 0;
|
|
let ackDone;
|
|
let ackPromise = new Promise(resolve => ackDone = resolve);
|
|
PushService.init({
|
|
serverURI: "wss://push.example.org/",
|
|
db,
|
|
makeWebSocket(uri) {
|
|
return new MockWebSocket(uri, {
|
|
onHello(request) {
|
|
equal(request.uaid, userAgentID,
|
|
'Should send matching device IDs in handshake');
|
|
this.serverSendMsg(JSON.stringify({
|
|
messageType: 'hello',
|
|
uaid: userAgentID,
|
|
status: 200
|
|
}));
|
|
this.serverSendMsg(JSON.stringify({
|
|
messageType: 'notification',
|
|
updates: [{
|
|
channelID: '21668e05-6da8-42c9-b8ab-9cc3f4d5630c',
|
|
version: 2
|
|
}]
|
|
}));
|
|
},
|
|
onACK(request) {
|
|
equal(request.messageType, 'ack', 'Should send acknowledgements');
|
|
let updates = request.updates;
|
|
switch (++acks) {
|
|
case 1:
|
|
deepEqual([{
|
|
channelID: '21668e05-6da8-42c9-b8ab-9cc3f4d5630c',
|
|
version: 2,
|
|
code: 100,
|
|
}], updates, 'Wrong updates for acknowledgement 1');
|
|
this.serverSendMsg(JSON.stringify({
|
|
messageType: 'notification',
|
|
updates: [{
|
|
channelID: '9a5ff87f-47c9-4215-b2b8-0bdd38b4b305',
|
|
version: 4
|
|
}, {
|
|
channelID: '5477bfda-22db-45d4-9614-fee369630260',
|
|
version: 6
|
|
}]
|
|
}));
|
|
break;
|
|
|
|
case 2:
|
|
deepEqual([{
|
|
channelID: '9a5ff87f-47c9-4215-b2b8-0bdd38b4b305',
|
|
version: 4,
|
|
code: 100,
|
|
}], updates, 'Wrong updates for acknowledgement 2');
|
|
break;
|
|
|
|
case 3:
|
|
deepEqual([{
|
|
channelID: '5477bfda-22db-45d4-9614-fee369630260',
|
|
version: 6,
|
|
code: 100,
|
|
}], updates, 'Wrong updates for acknowledgement 3');
|
|
ackDone();
|
|
break;
|
|
|
|
default:
|
|
ok(false, 'Unexpected acknowledgement ' + acks);
|
|
}
|
|
}
|
|
});
|
|
}
|
|
});
|
|
|
|
yield notifyPromise;
|
|
yield ackPromise;
|
|
});
|