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