toolkit/modules/tests/xpcshell/test_Http.js

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/toolkit/modules/tests/xpcshell/test_Http.js	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,175 @@
     1.4 +/* Any copyright is dedicated to the Public Domain.
     1.5 +   http://creativecommons.org/publicdomain/zero/1.0/ */
     1.6 +
     1.7 +Components.utils.import("resource://gre/modules/Http.jsm");
     1.8 +Components.utils.import("resource://testing-common/httpd.js");
     1.9 +
    1.10 +const BinaryInputStream = Components.Constructor("@mozilla.org/binaryinputstream;1",
    1.11 +  "nsIBinaryInputStream", "setInputStream");
    1.12 +
    1.13 +var server;
    1.14 +
    1.15 +const kDefaultServerPort = 9000;
    1.16 +const kSuccessPath = "/success";
    1.17 +const kBaseUrl = "http://localhost:" + kDefaultServerPort;
    1.18 +const kSuccessUrl = kBaseUrl + kSuccessPath;
    1.19 +
    1.20 +const kPostPath = "/post";
    1.21 +const kPostUrl = kBaseUrl + kPostPath;
    1.22 +const kPostDataSent = [["foo", "bar"], ["complex", "!*()@"]];
    1.23 +const kPostDataReceived = "foo=bar&complex=%21%2A%28%29%40";
    1.24 +
    1.25 +const kPutPath = "/put";
    1.26 +const kPutUrl = kBaseUrl + kPutPath;
    1.27 +const kPutDataSent = [["P", "NP"]];
    1.28 +const kPutDataReceived = "P=NP";
    1.29 +
    1.30 +const kGetPath = "/get";
    1.31 +const kGetUrl = kBaseUrl + kGetPath;
    1.32 +
    1.33 +function successResult(aRequest, aResponse) {
    1.34 +  aResponse.setStatusLine(null, 200, "OK");
    1.35 +  aResponse.setHeader("Content-Type", "application/json");
    1.36 +  aResponse.write("Success!");
    1.37 +}
    1.38 +
    1.39 +function getDataChecker(aExpectedMethod, aExpectedData) {
    1.40 +  return function(aRequest, aResponse) {
    1.41 +    let body = new BinaryInputStream(aRequest.bodyInputStream);
    1.42 +    let bytes = [];
    1.43 +    let avail;
    1.44 +    while ((avail = body.available()) > 0)
    1.45 +      Array.prototype.push.apply(bytes, body.readByteArray(avail));
    1.46 +
    1.47 +    do_check_eq(aRequest.method, aExpectedMethod);
    1.48 +
    1.49 +    var data = String.fromCharCode.apply(null, bytes);
    1.50 +
    1.51 +    do_check_eq(data, aExpectedData);
    1.52 +
    1.53 +    aResponse.setStatusLine(null, 200, "OK");
    1.54 +    aResponse.setHeader("Content-Type", "application/json");
    1.55 +    aResponse.write("Success!");
    1.56 +  }
    1.57 +}
    1.58 +
    1.59 +add_test(function test_successCallback() {
    1.60 +  do_test_pending();
    1.61 +  let options = {
    1.62 +    onLoad: function(aResponse) {
    1.63 +      do_check_eq(aResponse, "Success!");
    1.64 +      do_test_finished();
    1.65 +      run_next_test();
    1.66 +    },
    1.67 +    onError: function(e) {
    1.68 +      do_check_true(false);
    1.69 +      do_test_finished();
    1.70 +      run_next_test();
    1.71 +    }
    1.72 +  }
    1.73 +  httpRequest(kSuccessUrl, options);
    1.74 +});
    1.75 +
    1.76 +add_test(function test_errorCallback() {
    1.77 +  do_test_pending();
    1.78 +  let options = {
    1.79 +    onSuccess: function(aResponse) {
    1.80 +      do_check_true(false);
    1.81 +      do_test_finished();
    1.82 +      run_next_test();
    1.83 +    },
    1.84 +    onError: function(e, aResponse) {
    1.85 +      do_check_eq(e, "404 - Not Found");
    1.86 +      do_test_finished();
    1.87 +      run_next_test();
    1.88 +    }
    1.89 +  }
    1.90 +  httpRequest(kBaseUrl + "/failure", options);
    1.91 +});
    1.92 +
    1.93 +add_test(function test_PostData() {
    1.94 +  do_test_pending();
    1.95 +  let options = {
    1.96 +    onLoad: function(aResponse) {
    1.97 +      do_check_eq(aResponse, "Success!");
    1.98 +      do_test_finished();
    1.99 +      run_next_test();
   1.100 +    },
   1.101 +    onError: function(e) {
   1.102 +      do_check_true(false);
   1.103 +      do_test_finished();
   1.104 +      run_next_test();
   1.105 +    },
   1.106 +    postData: kPostDataSent
   1.107 +  }
   1.108 +  httpRequest(kPostUrl, options);
   1.109 +});
   1.110 +
   1.111 +add_test(function test_PutData() {
   1.112 +  do_test_pending();
   1.113 +  let options = {
   1.114 +    method: "PUT",
   1.115 +    onLoad: function(aResponse) {
   1.116 +      do_check_eq(aResponse, "Success!");
   1.117 +      do_test_finished();
   1.118 +      run_next_test();
   1.119 +    },
   1.120 +    onError: function(e) {
   1.121 +      do_check_true(false);
   1.122 +      do_test_finished();
   1.123 +      run_next_test();
   1.124 +    },
   1.125 +    postData: kPutDataSent
   1.126 +  }
   1.127 +  httpRequest(kPutUrl, options);
   1.128 +});
   1.129 +
   1.130 +add_test(function test_GetData() {
   1.131 +  do_test_pending();
   1.132 +  let options = {
   1.133 +    onLoad: function(aResponse) {
   1.134 +      do_check_eq(aResponse, "Success!");
   1.135 +      do_test_finished();
   1.136 +      run_next_test();
   1.137 +    },
   1.138 +    onError: function(e) {
   1.139 +      do_check_true(false);
   1.140 +      do_test_finished();
   1.141 +      run_next_test();
   1.142 +    },
   1.143 +    postData: null
   1.144 +  }
   1.145 +  httpRequest(kGetUrl, options);
   1.146 +});
   1.147 +
   1.148 +add_test(function test_OptionalParameters() {
   1.149 +  let options = {
   1.150 +    onLoad: null,
   1.151 +    onError: null,
   1.152 +    logger: null
   1.153 +  };
   1.154 +  // Just make sure that nothing throws when doing this (i.e. httpRequest
   1.155 +  // doesn't try to access null options).
   1.156 +  httpRequest(kGetUrl, options);
   1.157 +  run_next_test();
   1.158 +});
   1.159 +
   1.160 +function run_test() {
   1.161 +  // Set up a mock HTTP server to serve a success page.
   1.162 +  server = new HttpServer();
   1.163 +  server.registerPathHandler(kSuccessPath, successResult);
   1.164 +  server.registerPathHandler(kPostPath,
   1.165 +                             getDataChecker("POST", kPostDataReceived));
   1.166 +  server.registerPathHandler(kPutPath,
   1.167 +                             getDataChecker("PUT", kPutDataReceived));
   1.168 +  server.registerPathHandler(kGetPath, getDataChecker("GET", ""));
   1.169 +  server.start(kDefaultServerPort);
   1.170 +
   1.171 +  run_next_test();
   1.172 +
   1.173 +  // Teardown.
   1.174 +  do_register_cleanup(function() {
   1.175 +    server.stop(function() { });
   1.176 +  });
   1.177 +}
   1.178 +

mercurial