test_getHost.js (1775B)
1 // Test getLocalHost/getLocalPort and getRemoteHost/getRemotePort. 2 3 "use strict"; 4 5 const { HttpServer } = ChromeUtils.importESModule( 6 "resource://testing-common/httpd.sys.mjs" 7 ); 8 9 var httpserver = new HttpServer(); 10 httpserver.start(-1); 11 const PORT = httpserver.identity.primaryPort; 12 13 var gotOnStartRequest = false; 14 15 function CheckGetHostListener() {} 16 17 CheckGetHostListener.prototype = { 18 onStartRequest(request) { 19 dump("*** listener onStartRequest\n"); 20 21 gotOnStartRequest = true; 22 23 request.QueryInterface(Ci.nsIHttpChannelInternal); 24 try { 25 Assert.equal(request.localAddress, "127.0.0.1"); 26 Assert.equal(request.localPort > 0, true); 27 Assert.notEqual(request.localPort, PORT); 28 Assert.equal(request.remoteAddress, "127.0.0.1"); 29 Assert.equal(request.remotePort, PORT); 30 } catch (e) { 31 Assert.ok(0, "Get local/remote host/port throws an error!"); 32 } 33 }, 34 35 onStopRequest() { 36 dump("*** listener onStopRequest\n"); 37 38 Assert.equal(gotOnStartRequest, true); 39 httpserver.stop(do_test_finished); 40 }, 41 42 QueryInterface: ChromeUtils.generateQI(["nsIRequestObserver"]), 43 }; 44 45 function make_channel(url) { 46 return NetUtil.newChannel({ 47 uri: url, 48 loadUsingSystemPrincipal: true, 49 }).QueryInterface(Ci.nsIHttpChannel); 50 } 51 52 function test_handler(metadata, response) { 53 response.setHeader("Content-Type", "text/html", false); 54 response.setStatusLine(metadata.httpVersion, 200, "OK"); 55 var responseBody = "blah blah"; 56 response.bodyOutputStream.write(responseBody, responseBody.length); 57 } 58 59 function run_test() { 60 httpserver.registerPathHandler("/testdir", test_handler); 61 62 var channel = make_channel("http://localhost:" + PORT + "/testdir"); 63 channel.asyncOpen(new CheckGetHostListener()); 64 do_test_pending(); 65 }