diff -r 000000000000 -r 6474c204b198 browser/experiments/test/xpcshell/test_cache.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/browser/experiments/test/xpcshell/test_cache.js Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,259 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ */ + +"use strict"; + +Cu.import("resource://testing-common/httpd.js"); +XPCOMUtils.defineLazyModuleGetter(this, "Experiments", + "resource:///modules/experiments/Experiments.jsm"); + +const FILE_MANIFEST = "experiments.manifest"; +const MANIFEST_HANDLER = "manifests/handler"; + +const SEC_IN_ONE_DAY = 24 * 60 * 60; +const MS_IN_ONE_DAY = SEC_IN_ONE_DAY * 1000; + +let gProfileDir = null; +let gHttpServer = null; +let gHttpRoot = null; +let gDataRoot = null; +let gReporter = null; +let gPolicy = null; +let gManifestObject = null; +let gManifestHandlerURI = null; +let gTimerScheduleOffset = -1; + +function run_test() { + run_next_test(); +} + +add_task(function* test_setup() { + loadAddonManager(); + gProfileDir = do_get_profile(); + yield removeCacheFile(); + + gHttpServer = new HttpServer(); + gHttpServer.start(-1); + let port = gHttpServer.identity.primaryPort; + gHttpRoot = "http://localhost:" + port + "/"; + gDataRoot = gHttpRoot + "data/"; + gManifestHandlerURI = gHttpRoot + MANIFEST_HANDLER; + gHttpServer.registerDirectory("/data/", do_get_cwd()); + gHttpServer.registerPathHandler("/" + MANIFEST_HANDLER, (request, response) => { + response.setStatusLine(null, 200, "OK"); + response.write(JSON.stringify(gManifestObject)); + response.processAsync(); + response.finish(); + }); + do_register_cleanup(() => gHttpServer.stop(() => {})); + + disableCertificateChecks(); + + Services.prefs.setBoolPref(PREF_EXPERIMENTS_ENABLED, true); + Services.prefs.setIntPref(PREF_LOGGING_LEVEL, 0); + Services.prefs.setBoolPref(PREF_LOGGING_DUMP, true); + Services.prefs.setCharPref(PREF_MANIFEST_URI, gManifestHandlerURI); + Services.prefs.setIntPref(PREF_FETCHINTERVAL, 0); + + gReporter = yield getReporter("json_payload_simple"); + yield gReporter.collectMeasurements(); + let payload = yield gReporter.getJSONPayload(true); + do_register_cleanup(() => gReporter._shutdown()); + + gPolicy = new Experiments.Policy(); + patchPolicy(gPolicy, { + updatechannel: () => "nightly", + healthReportPayload: () => {}, + oneshotTimer: (callback, timeout, thisObj, name) => gTimerScheduleOffset = timeout, + }); +}); + +function checkExperimentListsEqual(list, list2) { + Assert.equal(list.length, list2.length, "Lists should have the same length.") + + for (let i=0; i