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 +}