64 lines
2 KiB
JavaScript
64 lines
2 KiB
JavaScript
/* 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 */
|
|
|
|
// We don't normally allow localhost channels to be proxied, but this
|
|
// is easier than updating all the certs and/or domains.
|
|
Services.prefs.setBoolPref("network.proxy.allow_hijacking_localhost", true);
|
|
registerCleanupFunction(() => {
|
|
Services.prefs.clearUserPref("network.proxy.allow_hijacking_localhost");
|
|
});
|
|
|
|
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);
|