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: Cu.import("resource://gre/modules/Services.jsm"); michael@0: Cu.import("resource://gre/modules/osfile.jsm"); michael@0: Cu.import("resource:///modules/experiments/Experiments.jsm"); michael@0: michael@0: let gProfileDir = null; michael@0: let gHttpServer = null; michael@0: let gHttpRoot = null; michael@0: let gPolicy = new Experiments.Policy(); michael@0: michael@0: function run_test() { michael@0: loadAddonManager(); michael@0: gProfileDir = do_get_profile(); 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: gHttpServer.registerDirectory("/", do_get_cwd()); 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: michael@0: patchPolicy(gPolicy, { michael@0: updatechannel: () => "nightly", michael@0: }); michael@0: michael@0: run_next_test(); michael@0: } michael@0: michael@0: add_task(function* test_fetchAndCache() { michael@0: Services.prefs.setCharPref(PREF_MANIFEST_URI, gHttpRoot + "experiments_1.manifest"); michael@0: let ex = new Experiments.Experiments(gPolicy); michael@0: michael@0: Assert.equal(ex._experiments, null, "There should be no cached experiments yet."); michael@0: yield ex.updateManifest(); michael@0: Assert.notEqual(ex._experiments.size, 0, "There should be cached experiments now."); michael@0: michael@0: yield ex.uninit(); michael@0: }); michael@0: michael@0: add_task(function* test_checkCache() { michael@0: let ex = new Experiments.Experiments(gPolicy); michael@0: yield ex.notify(); michael@0: Assert.notEqual(ex._experiments.size, 0, "There should be cached experiments now."); michael@0: michael@0: yield ex.uninit(); michael@0: }); michael@0: michael@0: add_task(function* test_fetchInvalid() { michael@0: yield removeCacheFile(); michael@0: michael@0: Services.prefs.setCharPref(PREF_MANIFEST_URI, gHttpRoot + "experiments_1.manifest"); michael@0: let ex = new Experiments.Experiments(gPolicy); michael@0: yield ex.updateManifest(); michael@0: Assert.notEqual(ex._experiments.size, 0, "There should be experiments"); michael@0: michael@0: Services.prefs.setCharPref(PREF_MANIFEST_URI, gHttpRoot + "invalid.manifest"); michael@0: yield ex.updateManifest() michael@0: Assert.notEqual(ex._experiments.size, 0, "There should still be experiments: fetch failure shouldn't remove them."); michael@0: michael@0: yield ex.uninit(); michael@0: }); michael@0: