/* -*- 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/. */
// exercises the server's state-preservation API
ChromeUtils.defineLazyGetter(
this ,
"URL" ,
function () {
return "http://localhost: " + srv.identity.primaryPort;
});
var srv;
function run_test() {
srv = createServer();
var sjsDir = do_get_file(
"data/sjs/" );
srv.registerDirectory(
"/" , sjsDir);
srv.registerContentType(
"sjs" ,
"sjs" );
srv.registerPathHandler(
"/path-handler" , pathHandler);
srv.start(-1);
function done() {
Assert .equal(srv.getSharedState(
"shared-value" ),
"done!" );
Assert .equal(
srv.getState(
"/path-handler" ,
"private-value" ),
"pathHandlerPrivate2"
);
Assert .equal(srv.getState(
"/state1.sjs" ,
"private-value" ),
"" );
Assert .equal(srv.getState(
"/state2.sjs" ,
"private-value" ),
"newPrivate5" );
do_test_pending();
srv.stop(
function () {
do_test_finished();
});
}
runHttpTests(tests, done);
}
/** **********
* HANDLERS *
************/
var firstTime =
true ;
function pathHandler(request, response) {
response.setHeader(
"Cache-Control" ,
"no-cache" ,
false );
response.setHeader(
"X-Old-Shared-Value" ,
srv.getSharedState(
"shared-value" ),
false
);
response.setHeader(
"X-Old-Private-Value" ,
srv.getState(
"/path-handler" ,
"private-value" ),
false
);
var privateValue, sharedValue;
if (firstTime) {
firstTime =
false ;
privateValue =
"pathHandlerPrivate" ;
sharedValue =
"pathHandlerShared" ;
}
else {
privateValue =
"pathHandlerPrivate2" ;
sharedValue =
"" ;
}
srv.setState(
"/path-handler" ,
"private-value" , privateValue);
srv.setSharedState(
"shared-value" , sharedValue);
response.setHeader(
"X-New-Private-Value" , privateValue,
false );
response.setHeader(
"X-New-Shared-Value" , sharedValue,
false );
}
/** *************
* BEGIN TESTS *
***************/
ChromeUtils.defineLazyGetter(
this ,
"tests" ,
function () {
return [
new Test(
// eslint-disable-next-line no-useless-concat
URL +
"/state1.sjs?" +
"newShared=newShared&newPrivate=newPrivate" ,
null ,
start_initial,
null
),
new Test(
// eslint-disable-next-line no-useless-concat
URL +
"/state1.sjs?" +
"newShared=newShared2&newPrivate=newPrivate2" ,
null ,
start_overwrite,
null
),
new Test(
// eslint-disable-next-line no-useless-concat
URL +
"/state1.sjs?" +
"newShared=&newPrivate=newPrivate3" ,
null ,
start_remove,
null
),
new Test(URL +
"/path-handler" ,
null , start_handler,
null ),
new Test(URL +
"/path-handler" ,
null , start_handler_again,
null ),
new Test(
// eslint-disable-next-line no-useless-concat
URL +
"/state2.sjs?" +
"newShared=newShared4&newPrivate=newPrivate4" ,
null ,
start_other_initial,
null
),
new Test(
// eslint-disable-next-line no-useless-concat
URL +
"/state2.sjs?" +
"newShared=" ,
null ,
start_other_remove_ignore,
null
),
new Test(
// eslint-disable-next-line no-useless-concat
URL +
"/state2.sjs?" +
"newShared=newShared5&newPrivate=newPrivate5" ,
null ,
start_other_set_new,
null
),
new Test(
// eslint-disable-next-line no-useless-concat
URL +
"/state1.sjs?" +
"newShared=done!&newPrivate=" ,
null ,
start_set_remove_original,
null
),
];
});
/* Hack around bug 474845 for now. */
function getHeaderFunction(ch) {
function getHeader(name) {
try {
return ch.getResponseHeader(name);
}
catch (e) {
if (e.result !== Cr.NS_ERROR_NOT_AVAILABLE) {
throw e;
}
}
return "" ;
}
return getHeader;
}
function expectValues(ch, oldShared, newShared, oldPrivate, newPrivate) {
var getHeader = getHeaderFunction(ch);
Assert .equal(ch.responseStatus, 200);
Assert .equal(getHeader(
"X-Old-Shared-Value" ), oldShared);
Assert .equal(getHeader(
"X-New-Shared-Value" ), newShared);
Assert .equal(getHeader(
"X-Old-Private-Value" ), oldPrivate);
Assert .equal(getHeader(
"X-New-Private-Value" ), newPrivate);
}
function start_initial(ch) {
dumpn(
"XXX start_initial" );
expectValues(ch,
"" ,
"newShared" ,
"" ,
"newPrivate" );
}
function start_overwrite(ch) {
expectValues(ch,
"newShared" ,
"newShared2" ,
"newPrivate" ,
"newPrivate2" );
}
function start_remove(ch) {
expectValues(ch,
"newShared2" ,
"" ,
"newPrivate2" ,
"newPrivate3" );
}
function start_handler(ch) {
expectValues(ch,
"" ,
"pathHandlerShared" ,
"" ,
"pathHandlerPrivate" );
}
function start_handler_again(ch) {
expectValues(
ch,
"pathHandlerShared" ,
"" ,
"pathHandlerPrivate" ,
"pathHandlerPrivate2"
);
}
function start_other_initial(ch) {
expectValues(ch,
"" ,
"newShared4" ,
"" ,
"newPrivate4" );
}
function start_other_remove_ignore(ch) {
expectValues(ch,
"newShared4" ,
"" ,
"newPrivate4" ,
"" );
}
function start_other_set_new(ch) {
expectValues(ch,
"" ,
"newShared5" ,
"newPrivate4" ,
"newPrivate5" );
}
function start_set_remove_original(ch) {
expectValues(ch,
"newShared5" ,
"done!" ,
"newPrivate3" ,
"" );
}
Messung V0.5 C=92 H=98 G=94
¤ Dauer der Verarbeitung: 0.12 Sekunden
(vorverarbeitet)
¤
*© Formatika GbR, Deutschland