summaryrefslogtreecommitdiffstats
path: root/dom/push/test/xpcshell/test_startup_error.js
blob: b01b8a917ba262d790d4f91f00bb344342fac92c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
'use strict';

const {PushService, PushServiceWebSocket} = serviceExports;

function run_test() {
  setPrefs();
  do_get_profile();
  run_next_test();
}

add_task(function* test_startup_error() {
  let db = PushServiceWebSocket.newPushDB();
  do_register_cleanup(() => {return db.drop().then(_ => db.close());});

  PushService.init({
    serverURI: 'wss://push.example.org/',
    db: makeStub(db, {
      getAllExpired(prev) {
        return Promise.reject('database corruption on startup');
      },
    }),
    makeWebSocket(uri) {
      return new MockWebSocket(uri, {
        onHello(request) {
          ok(false, 'Unexpected handshake');
        },
        onRegister(request) {
          ok(false, 'Unexpected register request');
        },
      });
    },
  });

  yield rejects(
    PushService.register({
      scope: `https://example.net/1`,
      originAttributes: ChromeUtils.originAttributesToSuffix(
        { appId: Ci.nsIScriptSecurityManager.NO_APP_ID, inIsolatedMozBrowser: false }),
    }),
    'Should not register if startup failed'
  );

  PushService.uninit();

  PushService.init({
    serverURI: 'wss://push.example.org/',
    db: makeStub(db, {
      getAllUnexpired(prev) {
        return Promise.reject('database corruption on connect');
      },
    }),
    makeWebSocket(uri) {
      return new MockWebSocket(uri, {
        onHello(request) {
          ok(false, 'Unexpected handshake');
        },
        onRegister(request) {
          ok(false, 'Unexpected register request');
        },
      });
    },
  });
  yield rejects(
    PushService.registration({
      scope: `https://example.net/1`,
      originAttributes: ChromeUtils.originAttributesToSuffix(
        { appId: Ci.nsIScriptSecurityManager.NO_APP_ID, inIsolatedMozBrowser: false }),
    }),
    'Should not return registration if connection failed'
  );
});