mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-08 19:04:45 +00:00
Bug 1589609 - Add unit test for obs-fold header parsing r=JuniorHsu
Differential Revision: https://phabricator.services.mozilla.com/D51536 --HG-- extra : moz-landing-system : lando
This commit is contained in:
parent
005d8ccd27
commit
d2b0661c9b
73
netwerk/test/unit/test_obs-fold.js
Normal file
73
netwerk/test/unit/test_obs-fold.js
Normal file
@ -0,0 +1,73 @@
|
||||
/* 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";
|
||||
|
||||
const { HttpServer } = ChromeUtils.import("resource://testing-common/httpd.js");
|
||||
|
||||
function makeChan(url) {
|
||||
return NetUtil.newChannel({
|
||||
uri: url,
|
||||
loadUsingSystemPrincipal: true,
|
||||
}).QueryInterface(Ci.nsIHttpChannel);
|
||||
}
|
||||
|
||||
let body = "abcd";
|
||||
function request_handler1(metadata, response) {
|
||||
response.seizePower();
|
||||
response.write("HTTP/1.1 200 OK\r\n");
|
||||
response.write("Content-Type: text/plain\r\n");
|
||||
response.write("X-header-first: FIRSTVALUE\r\n");
|
||||
response.write("X-header-second: 1; second\r\n");
|
||||
response.write(`Content-Length: ${body.length}\r\n`);
|
||||
response.write("\r\n");
|
||||
response.write(body);
|
||||
response.finish();
|
||||
}
|
||||
|
||||
// This handler is for obs-fold
|
||||
// The line that contains X-header-second starts with a space. As a consequence
|
||||
// it gets folded into the previous line.
|
||||
function request_handler2(metadata, response) {
|
||||
response.seizePower();
|
||||
response.write("HTTP/1.1 200 OK\r\n");
|
||||
response.write("Content-Type: text/plain\r\n");
|
||||
response.write("X-header-first: FIRSTVALUE\r\n");
|
||||
// Note the space at the begining of the line
|
||||
response.write(" X-header-second: 1; second\r\n");
|
||||
response.write(`Content-Length: ${body.length}\r\n`);
|
||||
response.write("\r\n");
|
||||
response.write(body);
|
||||
response.finish();
|
||||
}
|
||||
|
||||
add_task(async function test() {
|
||||
let http_server = new HttpServer();
|
||||
http_server.registerPathHandler("/test1", request_handler1);
|
||||
http_server.registerPathHandler("/test2", request_handler2);
|
||||
http_server.start(-1);
|
||||
const port = http_server.identity.primaryPort;
|
||||
|
||||
let chan1 = makeChan(`http://localhost:${port}/test1`);
|
||||
await new Promise(resolve => {
|
||||
chan1.asyncOpen(new ChannelListener(resolve));
|
||||
});
|
||||
equal(chan1.getResponseHeader("X-header-first"), "FIRSTVALUE");
|
||||
equal(chan1.getResponseHeader("X-header-second"), "1; second");
|
||||
|
||||
let chan2 = makeChan(`http://localhost:${port}/test2`);
|
||||
await new Promise(resolve => {
|
||||
chan2.asyncOpen(new ChannelListener(resolve));
|
||||
});
|
||||
equal(
|
||||
chan2.getResponseHeader("X-header-first"),
|
||||
"FIRSTVALUE X-header-second: 1; second"
|
||||
);
|
||||
Assert.throws(
|
||||
() => chan2.getResponseHeader("X-header-second"),
|
||||
/NS_ERROR_NOT_AVAILABLE/
|
||||
);
|
||||
|
||||
await new Promise(resolve => http_server.stop(resolve));
|
||||
});
|
@ -445,4 +445,4 @@ skip-if = os == "android"
|
||||
[test_node_execute.js]
|
||||
skip-if = os == "android" # node server doesn't run on android
|
||||
[test_loadgroup_cancel.js]
|
||||
|
||||
[test_obs-fold.js]
|
||||
|
Loading…
Reference in New Issue
Block a user