diff options
Diffstat (limited to 'netwerk/test/httpserver/test/test_registerprefix.js')
-rw-r--r-- | netwerk/test/httpserver/test/test_registerprefix.js | 130 |
1 files changed, 130 insertions, 0 deletions
diff --git a/netwerk/test/httpserver/test/test_registerprefix.js b/netwerk/test/httpserver/test/test_registerprefix.js new file mode 100644 index 0000000000..5edb75225c --- /dev/null +++ b/netwerk/test/httpserver/test/test_registerprefix.js @@ -0,0 +1,130 @@ +/* -*- 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/. */ + +// tests the registerPrefixHandler API + +ChromeUtils.defineLazyGetter(this, "BASE", function () { + return "http://localhost:" + srv.identity.primaryPort; +}); + +function nocache(ch) { + ch.loadFlags |= Ci.nsIRequest.LOAD_BYPASS_CACHE; // important! +} + +function notFound(ch) { + Assert.equal(ch.responseStatus, 404); + Assert.ok(!ch.requestSucceeded); +} + +function makeCheckOverride(magic) { + return function checkOverride(ch) { + Assert.equal(ch.responseStatus, 200); + Assert.equal(ch.responseStatusText, "OK"); + Assert.ok(ch.requestSucceeded); + Assert.equal(ch.getResponseHeader("Override-Succeeded"), magic); + }; +} + +ChromeUtils.defineLazyGetter(this, "tests", function () { + return [ + new Test( + BASE + "/prefix/dummy", + prefixHandler, + null, + makeCheckOverride("prefix") + ), + new Test( + BASE + "/prefix/dummy", + pathHandler, + null, + makeCheckOverride("path") + ), + new Test( + BASE + "/prefix/subpath/dummy", + longerPrefixHandler, + null, + makeCheckOverride("subpath") + ), + new Test(BASE + "/prefix/dummy", removeHandlers, null, notFound), + new Test( + BASE + "/prefix/subpath/dummy", + newPrefixHandler, + null, + makeCheckOverride("subpath") + ), + ]; +}); + +/** ************************* + * registered prefix handler * + ***************************/ + +function prefixHandler(channel) { + nocache(channel); + srv.registerPrefixHandler("/prefix/", makeOverride("prefix")); +} + +/** ****************************** + * registered path handler on top * + ********************************/ + +function pathHandler(channel) { + nocache(channel); + srv.registerPathHandler("/prefix/dummy", makeOverride("path")); +} + +/** ******************************** + * registered longer prefix handler * + **********************************/ + +function longerPrefixHandler(channel) { + nocache(channel); + srv.registerPrefixHandler("/prefix/subpath/", makeOverride("subpath")); +} + +/** ********************** + * removed prefix handler * + ************************/ + +function removeHandlers(channel) { + nocache(channel); + srv.registerPrefixHandler("/prefix/", null); + srv.registerPathHandler("/prefix/dummy", null); +} + +/** *************************** + * re-register shorter handler * + *****************************/ + +function newPrefixHandler(channel) { + nocache(channel); + srv.registerPrefixHandler("/prefix/", makeOverride("prefix")); +} + +var srv; + +function run_test() { + // Ensure the profile exists. + do_get_profile(); + + srv = createServer(); + srv.start(-1); + + runHttpTests(tests, testComplete(srv)); +} + +// PATH HANDLERS + +// generate an override +function makeOverride(magic) { + return function override(metadata, response) { + response.setStatusLine("1.1", 200, "OK"); + response.setHeader("Override-Succeeded", magic, false); + + var body = "success!"; + response.bodyOutputStream.write(body, body.length); + }; +} |