Wed, 31 Dec 2014 13:27:57 +0100
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 }