netwerk/test/unit/test_post.js

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/netwerk/test/unit/test_post.js	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,95 @@
     1.4 +//
     1.5 +// POST test
     1.6 +//
     1.7 +
     1.8 +Cu.import("resource://testing-common/httpd.js");
     1.9 +
    1.10 +XPCOMUtils.defineLazyGetter(this, "URL", function() {
    1.11 +  return "http://localhost:" + httpserver.identity.primaryPort;
    1.12 +});
    1.13 +
    1.14 +var httpserver = new HttpServer();
    1.15 +var testpath = "/simple";
    1.16 +
    1.17 +var testfile = do_get_file("../unit/data/test_readline6.txt");
    1.18 +
    1.19 +const BOUNDARY = "AaB03x";
    1.20 +var teststring1 = "--" + BOUNDARY + "\r\n"
    1.21 +                + "Content-Disposition: form-data; name=\"body\"\r\n\r\n"
    1.22 +                + "0123456789\r\n"
    1.23 +                + "--" + BOUNDARY + "\r\n"
    1.24 +                + "Content-Disposition: form-data; name=\"files\"; filename=\"" + testfile.leafName + "\"\r\n"
    1.25 +                + "Content-Type: application/octet-stream\r\n"
    1.26 +                + "Content-Length: " + testfile.fileSize + "\r\n\r\n";
    1.27 +var teststring2 = "--" + BOUNDARY + "--\r\n";
    1.28 +
    1.29 +const BUFFERSIZE = 4096;
    1.30 +
    1.31 +function run_test() {
    1.32 +  var sstream1 = Cc["@mozilla.org/io/string-input-stream;1"].
    1.33 +                   createInstance(Ci.nsIStringInputStream);
    1.34 +  sstream1.data = teststring1;
    1.35 +
    1.36 +  var fstream = Cc["@mozilla.org/network/file-input-stream;1"].
    1.37 +                  createInstance(Ci.nsIFileInputStream);
    1.38 +  fstream.init(testfile, -1, -1, 0);
    1.39 +
    1.40 +  var buffered = Cc["@mozilla.org/network/buffered-input-stream;1"].
    1.41 +                   createInstance(Ci.nsIBufferedInputStream);
    1.42 +  buffered.init(fstream, BUFFERSIZE);
    1.43 +
    1.44 +  var sstream2 = Cc["@mozilla.org/io/string-input-stream;1"].
    1.45 +                   createInstance(Ci.nsIStringInputStream);
    1.46 +  sstream2.data = teststring2;
    1.47 +
    1.48 +  var multi = Cc["@mozilla.org/io/multiplex-input-stream;1"].
    1.49 +                createInstance(Ci.nsIMultiplexInputStream);
    1.50 +  multi.appendStream(sstream1);
    1.51 +  multi.appendStream(buffered);
    1.52 +  multi.appendStream(sstream2);
    1.53 +
    1.54 +  var mime = Cc["@mozilla.org/network/mime-input-stream;1"].
    1.55 +               createInstance(Ci.nsIMIMEInputStream);
    1.56 +  mime.addHeader("Content-Type", "multipart/form-data; boundary="+BOUNDARY);
    1.57 +  mime.setData(multi);
    1.58 +  mime.addContentLength = true;
    1.59 +
    1.60 +  httpserver.registerPathHandler(testpath, serverHandler);
    1.61 +  httpserver.start(-1);
    1.62 +
    1.63 +  var channel = setupChannel(testpath);
    1.64 +
    1.65 +  channel.QueryInterface(Ci.nsIUploadChannel)
    1.66 +         .setUploadStream(mime, "", mime.available());
    1.67 +  channel.requestMethod = "POST";
    1.68 +
    1.69 +  channel.asyncOpen(new ChannelListener(checkRequest, channel), null);
    1.70 +
    1.71 +  do_test_pending();
    1.72 +}
    1.73 +
    1.74 +function setupChannel(path) {
    1.75 +  var ios = Cc["@mozilla.org/network/io-service;1"].getService(Ci.nsIIOService);
    1.76 +  return chan = ios.newChannel(URL + path, "", null)
    1.77 +                   .QueryInterface(Ci.nsIHttpChannel);
    1.78 +}
    1.79 +
    1.80 +function serverHandler(metadata, response) {
    1.81 +  do_check_eq(metadata.method, "POST");
    1.82 +
    1.83 +  var data = read_stream(metadata.bodyInputStream,
    1.84 +			 metadata.bodyInputStream.available());
    1.85 +
    1.86 +  var testfile_stream = Cc["@mozilla.org/network/file-input-stream;1"].
    1.87 +                   createInstance(Ci.nsIFileInputStream);
    1.88 +  testfile_stream.init(testfile, -1, -1, 0);
    1.89 +
    1.90 +  do_check_eq(teststring1 +
    1.91 +	      read_stream(testfile_stream, testfile_stream.available()) +
    1.92 +	      teststring2,
    1.93 +	      data);
    1.94 +}
    1.95 +
    1.96 +function checkRequest(request, data, context) {
    1.97 +  httpserver.stop(do_test_finished);
    1.98 +}

mercurial