netwerk/test/unit/test_post.js

Wed, 31 Dec 2014 13:27:57 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 13:27:57 +0100
branch
TOR_BUG_3246
changeset 6
8bccb770b82d
permissions
-rw-r--r--

Ignore runtime configuration files generated during quality assurance.

     1 //
     2 // POST test
     3 //
     5 Cu.import("resource://testing-common/httpd.js");
     7 XPCOMUtils.defineLazyGetter(this, "URL", function() {
     8   return "http://localhost:" + httpserver.identity.primaryPort;
     9 });
    11 var httpserver = new HttpServer();
    12 var testpath = "/simple";
    14 var testfile = do_get_file("../unit/data/test_readline6.txt");
    16 const BOUNDARY = "AaB03x";
    17 var teststring1 = "--" + BOUNDARY + "\r\n"
    18                 + "Content-Disposition: form-data; name=\"body\"\r\n\r\n"
    19                 + "0123456789\r\n"
    20                 + "--" + BOUNDARY + "\r\n"
    21                 + "Content-Disposition: form-data; name=\"files\"; filename=\"" + testfile.leafName + "\"\r\n"
    22                 + "Content-Type: application/octet-stream\r\n"
    23                 + "Content-Length: " + testfile.fileSize + "\r\n\r\n";
    24 var teststring2 = "--" + BOUNDARY + "--\r\n";
    26 const BUFFERSIZE = 4096;
    28 function run_test() {
    29   var sstream1 = Cc["@mozilla.org/io/string-input-stream;1"].
    30                    createInstance(Ci.nsIStringInputStream);
    31   sstream1.data = teststring1;
    33   var fstream = Cc["@mozilla.org/network/file-input-stream;1"].
    34                   createInstance(Ci.nsIFileInputStream);
    35   fstream.init(testfile, -1, -1, 0);
    37   var buffered = Cc["@mozilla.org/network/buffered-input-stream;1"].
    38                    createInstance(Ci.nsIBufferedInputStream);
    39   buffered.init(fstream, BUFFERSIZE);
    41   var sstream2 = Cc["@mozilla.org/io/string-input-stream;1"].
    42                    createInstance(Ci.nsIStringInputStream);
    43   sstream2.data = teststring2;
    45   var multi = Cc["@mozilla.org/io/multiplex-input-stream;1"].
    46                 createInstance(Ci.nsIMultiplexInputStream);
    47   multi.appendStream(sstream1);
    48   multi.appendStream(buffered);
    49   multi.appendStream(sstream2);
    51   var mime = Cc["@mozilla.org/network/mime-input-stream;1"].
    52                createInstance(Ci.nsIMIMEInputStream);
    53   mime.addHeader("Content-Type", "multipart/form-data; boundary="+BOUNDARY);
    54   mime.setData(multi);
    55   mime.addContentLength = true;
    57   httpserver.registerPathHandler(testpath, serverHandler);
    58   httpserver.start(-1);
    60   var channel = setupChannel(testpath);
    62   channel.QueryInterface(Ci.nsIUploadChannel)
    63          .setUploadStream(mime, "", mime.available());
    64   channel.requestMethod = "POST";
    66   channel.asyncOpen(new ChannelListener(checkRequest, channel), null);
    68   do_test_pending();
    69 }
    71 function setupChannel(path) {
    72   var ios = Cc["@mozilla.org/network/io-service;1"].getService(Ci.nsIIOService);
    73   return chan = ios.newChannel(URL + path, "", null)
    74                    .QueryInterface(Ci.nsIHttpChannel);
    75 }
    77 function serverHandler(metadata, response) {
    78   do_check_eq(metadata.method, "POST");
    80   var data = read_stream(metadata.bodyInputStream,
    81 			 metadata.bodyInputStream.available());
    83   var testfile_stream = Cc["@mozilla.org/network/file-input-stream;1"].
    84                    createInstance(Ci.nsIFileInputStream);
    85   testfile_stream.init(testfile, -1, -1, 0);
    87   do_check_eq(teststring1 +
    88 	      read_stream(testfile_stream, testfile_stream.available()) +
    89 	      teststring2,
    90 	      data);
    91 }
    93 function checkRequest(request, data, context) {
    94   httpserver.stop(do_test_finished);
    95 }

mercurial