gecko-dev/netwerk/test/unit/test_post.js

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

140 строки
3.5 KiB
JavaScript
Исходник Обычный вид История

//
// POST test
//
"use strict";
Bug 1514594: Part 3 - Change ChromeUtils.import API. *** Bug 1514594: Part 3a - Change ChromeUtils.import to return an exports object; not pollute global. r=mccr8 This changes the behavior of ChromeUtils.import() to return an exports object, rather than a module global, in all cases except when `null` is passed as a second argument, and changes the default behavior not to pollute the global scope with the module's exports. Thus, the following code written for the old model: ChromeUtils.import("resource://gre/modules/Services.jsm"); is approximately the same as the following, in the new model: var {Services} = ChromeUtils.import("resource://gre/modules/Services.jsm"); Since the two behaviors are mutually incompatible, this patch will land with a scripted rewrite to update all existing callers to use the new model rather than the old. *** Bug 1514594: Part 3b - Mass rewrite all JS code to use the new ChromeUtils.import API. rs=Gijs This was done using the followng script: https://bitbucket.org/kmaglione/m-c-rewrites/src/tip/processors/cu-import-exports.jsm *** Bug 1514594: Part 3c - Update ESLint plugin for ChromeUtils.import API changes. r=Standard8 Differential Revision: https://phabricator.services.mozilla.com/D16747 *** Bug 1514594: Part 3d - Remove/fix hundreds of duplicate imports from sync tests. r=Gijs Differential Revision: https://phabricator.services.mozilla.com/D16748 *** Bug 1514594: Part 3e - Remove no-op ChromeUtils.import() calls. r=Gijs Differential Revision: https://phabricator.services.mozilla.com/D16749 *** Bug 1514594: Part 3f.1 - Cleanup various test corner cases after mass rewrite. r=Gijs *** Bug 1514594: Part 3f.2 - Cleanup various non-test corner cases after mass rewrite. r=Gijs Differential Revision: https://phabricator.services.mozilla.com/D16750 --HG-- extra : rebase_source : 359574ee3064c90f33bf36c2ebe3159a24cc8895 extra : histedit_source : b93c8f42808b1599f9122d7842d2c0b3e656a594%2C64a3a4e3359dc889e2ab2b49461bab9e27fc10a7
2019-01-17 21:18:31 +03:00
const { HttpServer } = ChromeUtils.import("resource://testing-common/httpd.js");
XPCOMUtils.defineLazyGetter(this, "URL", function() {
return "http://localhost:" + httpserver.identity.primaryPort;
});
var httpserver = new HttpServer();
var testpath = "/simple";
var testfile = do_get_file("../unit/data/test_readline6.txt");
const BOUNDARY = "AaB03x";
var teststring1 =
"--" +
BOUNDARY +
"\r\n" +
'Content-Disposition: form-data; name="body"\r\n\r\n' +
"0123456789\r\n" +
"--" +
BOUNDARY +
"\r\n" +
'Content-Disposition: form-data; name="files"; filename="' +
testfile.leafName +
'"\r\n' +
"Content-Type: application/octet-stream\r\n" +
"Content-Length: " +
testfile.fileSize +
"\r\n\r\n";
var teststring2 = "--" + BOUNDARY + "--\r\n";
const BUFFERSIZE = 4096;
var correctOnProgress = false;
var listenerCallback = {
QueryInterface: ChromeUtils.generateQI(["nsIProgressEventSink"]),
getInterface(iid) {
if (iid.equals(Ci.nsIProgressEventSink)) {
return this;
}
throw Components.Exception("", Cr.NS_ERROR_NO_INTERFACE);
},
onProgress(request, progress, progressMax) {
// this works because the response is 0 bytes and does not trigger onprogress
if (progress === progressMax) {
correctOnProgress = true;
}
},
onStatus(request, status, statusArg) {},
};
function run_test() {
var sstream1 = Cc["@mozilla.org/io/string-input-stream;1"].createInstance(
Ci.nsIStringInputStream
);
sstream1.data = teststring1;
var fstream = Cc["@mozilla.org/network/file-input-stream;1"].createInstance(
Ci.nsIFileInputStream
);
fstream.init(testfile, -1, -1, 0);
var buffered = Cc[
"@mozilla.org/network/buffered-input-stream;1"
].createInstance(Ci.nsIBufferedInputStream);
buffered.init(fstream, BUFFERSIZE);
var sstream2 = Cc["@mozilla.org/io/string-input-stream;1"].createInstance(
Ci.nsIStringInputStream
);
sstream2.data = teststring2;
var multi = Cc["@mozilla.org/io/multiplex-input-stream;1"].createInstance(
Ci.nsIMultiplexInputStream
);
multi.appendStream(sstream1);
multi.appendStream(buffered);
multi.appendStream(sstream2);
var mime = Cc["@mozilla.org/network/mime-input-stream;1"].createInstance(
Ci.nsIMIMEInputStream
);
mime.addHeader("Content-Type", "multipart/form-data; boundary=" + BOUNDARY);
mime.setData(multi);
httpserver.registerPathHandler(testpath, serverHandler);
httpserver.start(-1);
var channel = setupChannel(testpath);
channel
.QueryInterface(Ci.nsIUploadChannel)
.setUploadStream(mime, "", mime.available());
channel.requestMethod = "POST";
channel.notificationCallbacks = listenerCallback;
channel.asyncOpen(new ChannelListener(checkRequest, channel));
do_test_pending();
}
function setupChannel(path) {
return NetUtil.newChannel({
uri: URL + path,
loadUsingSystemPrincipal: true,
}).QueryInterface(Ci.nsIHttpChannel);
}
function serverHandler(metadata, response) {
Assert.equal(metadata.method, "POST");
var data = read_stream(
metadata.bodyInputStream,
metadata.bodyInputStream.available()
);
var testfile_stream = Cc[
"@mozilla.org/network/file-input-stream;1"
].createInstance(Ci.nsIFileInputStream);
testfile_stream.init(testfile, -1, -1, 0);
Assert.equal(
teststring1 +
read_stream(testfile_stream, testfile_stream.available()) +
teststring2,
data
);
}
function checkRequest(request, data, context) {
Assert.ok(correctOnProgress);
httpserver.stop(do_test_finished);
}