Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

"use strict";
function make_channel(url) {
return NetUtil.newChannel({
uri: url,
loadUsingSystemPrincipal: true,
}).QueryInterface(Ci.nsIHttpChannel);
}
async function get_response(channel, flags = 0) {
return new Promise(resolve => {
channel.asyncOpen(
new ChannelListener(
(request, buffer) => {
request.QueryInterface(Ci.nsIHttpChannel);
resolve({ status: request.responseStatus, data: buffer });
},
null,
flags
)
);
});
}
// Hit /exception-test which intentionally throws inside handleRequestImpl.
// The try/catch wrapper in handleRequest should catch it and return 500.
// Then hit another endpoint to verify the server is still alive.
add_task(async function test_exception_does_not_kill_server() {
do_get_profile();
const port = Services.env.get("MOZHTTP2_PORT");
let certdb = Cc["@mozilla.org/security/x509certdb;1"].getService(
Ci.nsIX509CertDB
);
addCertFromFile(certdb, "http2-ca.pem", "CTu,u,u");
const origin = `https://localhost:${port}`;
let resp = await get_response(
make_channel(`${origin}/exception-test`),
CL_ALLOW_UNKNOWN_CL
);
Assert.equal(resp.status, 500, "exception-test should return 500");
resp = await get_response(
make_channel(`${origin}/header`),
CL_ALLOW_UNKNOWN_CL
);
Assert.equal(
resp.status,
200,
"server should still be alive after exception"
);
});