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: const {utils: Cu} = Components; michael@0: michael@0: michael@0: Cu.import("resource://gre/modules/Metrics.jsm"); michael@0: Cu.import("resource://gre/modules/services/healthreport/providers.jsm"); michael@0: Cu.import("resource://testing-common/AppData.jsm"); michael@0: Cu.import("resource://testing-common/services/healthreport/utils.jsm"); michael@0: Cu.import("resource://testing-common/CrashManagerTest.jsm"); michael@0: michael@0: michael@0: function run_test() { michael@0: run_next_test(); michael@0: } michael@0: michael@0: add_task(function* init() { michael@0: do_get_profile(); michael@0: yield makeFakeAppDir(); michael@0: }); michael@0: michael@0: add_task(function test_constructor() { michael@0: let provider = new CrashesProvider(); michael@0: }); michael@0: michael@0: add_task(function* test_init() { michael@0: let storage = yield Metrics.Storage("init"); michael@0: let provider = new CrashesProvider(); michael@0: yield provider.init(storage); michael@0: yield provider.shutdown(); michael@0: michael@0: yield storage.close(); michael@0: }); michael@0: michael@0: add_task(function* test_collect() { michael@0: let storage = yield Metrics.Storage("collect"); michael@0: let provider = new CrashesProvider(); michael@0: yield provider.init(storage); michael@0: michael@0: // Install custom manager so we don't interfere with other tests. michael@0: let manager = yield getManager(); michael@0: provider._manager = manager; michael@0: michael@0: let day1 = new Date(2014, 0, 1, 0, 0, 0); michael@0: let day2 = new Date(2014, 0, 3, 0, 0, 0); michael@0: michael@0: // FUTURE Bug 982836 CrashManager will grow public APIs for adding crashes. michael@0: // Switch to that here. michael@0: let store = yield manager._getStore(); michael@0: store.addMainProcessCrash("id1", day1); michael@0: store.addMainProcessCrash("id2", day1); michael@0: store.addMainProcessCrash("id3", day2); michael@0: michael@0: // Flush changes (this may not be needed but it doesn't hurt). michael@0: yield store.save(); michael@0: michael@0: yield provider.collectDailyData(); michael@0: michael@0: let m = provider.getMeasurement("crashes", 2); michael@0: let values = yield m.getValues(); michael@0: do_check_eq(values.days.size, 2); michael@0: do_check_true(values.days.hasDay(day1)); michael@0: do_check_true(values.days.hasDay(day2)); michael@0: michael@0: let value = values.days.getDay(day1); michael@0: do_check_true(value.has("mainCrash")); michael@0: do_check_eq(value.get("mainCrash"), 2); michael@0: michael@0: value = values.days.getDay(day2); michael@0: do_check_eq(value.get("mainCrash"), 1); michael@0: michael@0: // Check that adding a new crash increments counter on next collect. michael@0: store = yield manager._getStore(); michael@0: store.addMainProcessCrash("id4", day2); michael@0: yield store.save(); michael@0: michael@0: yield provider.collectDailyData(); michael@0: values = yield m.getValues(); michael@0: value = values.days.getDay(day2); michael@0: do_check_eq(value.get("mainCrash"), 2); michael@0: michael@0: yield provider.shutdown(); michael@0: yield storage.close(); michael@0: }); michael@0: