forked from mirrors/gecko-dev
		
	 918ed6c474
			
		
	
	
		918ed6c474
		
	
	
	
	
		
			
			This was done using the following script:
37e3803c7a/processors/chromeutils-import.jsm
MozReview-Commit-ID: 1Nc3XDu0wGl
--HG--
extra : source : 12fc4dee861c812fd2bd032c63ef17af61800c70
extra : intermediate-source : 34c999fa006bffe8705cf50c54708aa21a962e62
extra : histedit_source : b2be2c5e5d226e6c347312456a6ae339c1e634b0
		
	
			
		
			
				
	
	
		
			119 lines
		
	
	
	
		
			3.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			119 lines
		
	
	
	
		
			3.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| //
 | |
| // POST test
 | |
| //
 | |
| 
 | |
| ChromeUtils.import("resource://testing-common/httpd.js");
 | |
| ChromeUtils.import("resource://gre/modules/NetUtil.jsm");
 | |
| 
 | |
| 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: function (iid) {
 | |
|     if (iid.equals(Ci.nsISupports) ||
 | |
| 	iid.equals(Ci.nsIProgressEventSink))
 | |
|       return this;
 | |
|     throw Cr.NS_ERROR_NO_INTERFACE;
 | |
|   },
 | |
| 
 | |
|   getInterface: function (iid) {
 | |
|     if (iid.equals(Ci.nsIProgressEventSink))
 | |
|       return this;
 | |
|     throw Cr.NS_ERROR_NO_INTERFACE;
 | |
|   },
 | |
| 
 | |
|   onProgress: function (request, context, progress, progressMax) {
 | |
|     // this works because the response is 0 bytes and does not trigger onprogress
 | |
|     if (progress === progressMax) {
 | |
|       correctOnProgress = true;
 | |
|     }
 | |
|   },
 | |
| 
 | |
|     onStatus: function (request, context, 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.asyncOpen2(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);
 | |
| }
 |