diff options
Diffstat (limited to 'netwerk/test/httpserver/test/test_setstatusline.js')
-rw-r--r-- | netwerk/test/httpserver/test/test_setstatusline.js | 142 |
1 files changed, 142 insertions, 0 deletions
diff --git a/netwerk/test/httpserver/test/test_setstatusline.js b/netwerk/test/httpserver/test/test_setstatusline.js new file mode 100644 index 0000000000..f27e2b97bb --- /dev/null +++ b/netwerk/test/httpserver/test/test_setstatusline.js @@ -0,0 +1,142 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* vim:set ts=2 sw=2 sts=2 et: */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +// exercise nsIHttpResponse.setStatusLine, ensure its atomicity, and ensure the +// specified behavior occurs if it's not called + +XPCOMUtils.defineLazyGetter(this, "URL", function () { + return "http://localhost:" + srv.identity.primaryPort; +}); + +var srv; + +function run_test() { + srv = createServer(); + + srv.registerPathHandler("/no/setstatusline", noSetstatusline); + srv.registerPathHandler("/http1_0", http1_0); + srv.registerPathHandler("/http1_1", http1_1); + srv.registerPathHandler("/invalidVersion", invalidVersion); + srv.registerPathHandler("/invalidStatus", invalidStatus); + srv.registerPathHandler("/invalidDescription", invalidDescription); + srv.registerPathHandler("/crazyCode", crazyCode); + srv.registerPathHandler("/nullVersion", nullVersion); + + srv.start(-1); + + runHttpTests(tests, testComplete(srv)); +} + +/** *********** + * UTILITIES * + *************/ + +function checkStatusLine( + channel, + httpMaxVer, + httpMinVer, + httpCode, + statusText +) { + Assert.equal(channel.responseStatus, httpCode); + Assert.equal(channel.responseStatusText, statusText); + + var respMaj = {}, + respMin = {}; + channel.getResponseVersion(respMaj, respMin); + Assert.equal(respMaj.value, httpMaxVer); + Assert.equal(respMin.value, httpMinVer); +} + +/** ******* + * TESTS * + *********/ + +XPCOMUtils.defineLazyGetter(this, "tests", function () { + return [ + new Test(URL + "/no/setstatusline", null, startNoSetStatusLine, stop), + new Test(URL + "/http1_0", null, startHttp1_0, stop), + new Test(URL + "/http1_1", null, startHttp1_1, stop), + new Test(URL + "/invalidVersion", null, startPassedTrue, stop), + new Test(URL + "/invalidStatus", null, startPassedTrue, stop), + new Test(URL + "/invalidDescription", null, startPassedTrue, stop), + new Test(URL + "/crazyCode", null, startCrazy, stop), + new Test(URL + "/nullVersion", null, startNullVersion, stop), + ]; +}); + +// /no/setstatusline +function noSetstatusline(metadata, response) {} +function startNoSetStatusLine(ch) { + checkStatusLine(ch, 1, 1, 200, "OK"); +} +function stop(ch, status, data) { + Assert.ok(Components.isSuccessCode(status)); +} + +// /http1_0 +function http1_0(metadata, response) { + response.setStatusLine("1.0", 200, "OK"); +} +function startHttp1_0(ch) { + checkStatusLine(ch, 1, 0, 200, "OK"); +} + +// /http1_1 +function http1_1(metadata, response) { + response.setStatusLine("1.1", 200, "OK"); +} +function startHttp1_1(ch) { + checkStatusLine(ch, 1, 1, 200, "OK"); +} + +// /invalidVersion +function invalidVersion(metadata, response) { + try { + response.setStatusLine(" 1.0", 200, "FAILED"); + } catch (e) { + response.setHeader("Passed", "true", false); + } +} +function startPassedTrue(ch) { + checkStatusLine(ch, 1, 1, 200, "OK"); + Assert.equal(ch.getResponseHeader("Passed"), "true"); +} + +// /invalidStatus +function invalidStatus(metadata, response) { + try { + response.setStatusLine("1.0", 1000, "FAILED"); + } catch (e) { + response.setHeader("Passed", "true", false); + } +} + +// /invalidDescription +function invalidDescription(metadata, response) { + try { + response.setStatusLine("1.0", 200, "FAILED\x01"); + } catch (e) { + response.setHeader("Passed", "true", false); + } +} + +// /crazyCode +function crazyCode(metadata, response) { + response.setStatusLine("1.1", 617, "Crazy"); +} +function startCrazy(ch) { + checkStatusLine(ch, 1, 1, 617, "Crazy"); +} + +// /nullVersion +function nullVersion(metadata, response) { + response.setStatusLine(null, 255, "NULL"); +} +function startNullVersion(ch) { + // currently, this server implementation defaults to 1.1 + checkStatusLine(ch, 1, 1, 255, "NULL"); +} |