summaryrefslogtreecommitdiffstats
path: root/netwerk/test/unit/test_websocket_fails_2.js
blob: 57c9b321ad90aa6f3b88619a5f95393b91255768 (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
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

"use strict";

/* import-globals-from head_cache.js */
/* import-globals-from head_cookies.js */
/* import-globals-from head_channels.js */
/* import-globals-from head_servers.js */
/* import-globals-from head_websocket.js */

let certdb = Cc["@mozilla.org/security/x509certdb;1"].getService(
  Ci.nsIX509CertDB
);

add_setup(() => {
  Services.prefs.setBoolPref("network.http.http2.websockets", true);
});

registerCleanupFunction(() => {
  Services.prefs.clearUserPref("network.http.http2.websockets");
});

// TLS handshake to the end server fails with proxy
async function test_tls_fail_on_ws_server_over_proxy() {
  // we are expecting a timeout, so lets shorten how long we must wait
  Services.prefs.setIntPref("network.websocket.timeout.open", 1);

  // no cert to ws server
  addCertFromFile(certdb, "proxy-ca.pem", "CTu,u,u");

  let proxy = new NodeHTTPSProxyServer();
  await proxy.start();

  let wss = new NodeWebSocketServer();
  await wss.start();

  registerCleanupFunction(async () => {
    await wss.stop();
    await proxy.stop();
    Services.prefs.clearUserPref("network.websocket.timeout.open");
  });

  Assert.notEqual(wss.port(), null);
  await wss.registerMessageHandler((data, ws) => {
    ws.send(data);
  });

  let chan = makeWebSocketChan();
  let url = `wss://localhost:${wss.port()}`;
  const msg = "test tls fail on ws server over proxy";
  let [status] = await openWebSocketChannelPromise(chan, url, msg);

  Assert.equal(status, Cr.NS_ERROR_NET_TIMEOUT_EXTERNAL);
}
add_task(test_tls_fail_on_ws_server_over_proxy);