test_421.js (1546B)
1 "use strict"; 2 3 const { HttpServer } = ChromeUtils.importESModule( 4 "resource://testing-common/httpd.sys.mjs" 5 ); 6 7 ChromeUtils.defineLazyGetter(this, "URL", function () { 8 return "http://localhost:" + httpserver.identity.primaryPort; 9 }); 10 11 var httpserver = new HttpServer(); 12 var testpath = "/421"; 13 var httpbody = "0123456789"; 14 var channel; 15 16 function run_test() { 17 setup_test(); 18 do_test_pending(); 19 } 20 21 function setup_test() { 22 httpserver.registerPathHandler(testpath, serverHandler); 23 httpserver.start(-1); 24 25 channel = setupChannel(testpath); 26 27 channel.asyncOpen(new ChannelListener(checkRequestResponse, channel)); 28 } 29 30 function setupChannel(path) { 31 var chan = NetUtil.newChannel({ 32 uri: URL + path, 33 loadUsingSystemPrincipal: true, 34 }); 35 chan.QueryInterface(Ci.nsIHttpChannel); 36 chan.requestMethod = "GET"; 37 return chan; 38 } 39 40 var iters = 0; 41 42 function serverHandler(metadata, response) { 43 response.setHeader("Content-Type", "text/plain", false); 44 45 if (!iters) { 46 response.setStatusLine("1.1", 421, "Not Authoritative " + iters); 47 } else { 48 response.setStatusLine("1.1", 200, "OK"); 49 } 50 ++iters; 51 52 response.bodyOutputStream.write(httpbody, httpbody.length); 53 } 54 55 function checkRequestResponse(request, data) { 56 Assert.equal(channel.responseStatus, 200); 57 Assert.equal(channel.responseStatusText, "OK"); 58 Assert.ok(channel.requestSucceeded); 59 60 Assert.equal(channel.contentType, "text/plain"); 61 Assert.equal(channel.contentLength, httpbody.length); 62 Assert.equal(data, httpbody); 63 64 httpserver.stop(do_test_finished); 65 }