|
1 /* Any copyright is dedicated to the Public Domain. |
|
2 * http://creativecommons.org/publicdomain/zero/1.0/ */ |
|
3 |
|
4 "use strict"; |
|
5 |
|
6 const {utils: Cu} = Components; |
|
7 |
|
8 |
|
9 Cu.import("resource://gre/modules/Metrics.jsm"); |
|
10 Cu.import("resource://gre/modules/services/healthreport/providers.jsm"); |
|
11 Cu.import("resource://testing-common/AppData.jsm"); |
|
12 Cu.import("resource://testing-common/services/healthreport/utils.jsm"); |
|
13 Cu.import("resource://testing-common/CrashManagerTest.jsm"); |
|
14 |
|
15 |
|
16 function run_test() { |
|
17 run_next_test(); |
|
18 } |
|
19 |
|
20 add_task(function* init() { |
|
21 do_get_profile(); |
|
22 yield makeFakeAppDir(); |
|
23 }); |
|
24 |
|
25 add_task(function test_constructor() { |
|
26 let provider = new CrashesProvider(); |
|
27 }); |
|
28 |
|
29 add_task(function* test_init() { |
|
30 let storage = yield Metrics.Storage("init"); |
|
31 let provider = new CrashesProvider(); |
|
32 yield provider.init(storage); |
|
33 yield provider.shutdown(); |
|
34 |
|
35 yield storage.close(); |
|
36 }); |
|
37 |
|
38 add_task(function* test_collect() { |
|
39 let storage = yield Metrics.Storage("collect"); |
|
40 let provider = new CrashesProvider(); |
|
41 yield provider.init(storage); |
|
42 |
|
43 // Install custom manager so we don't interfere with other tests. |
|
44 let manager = yield getManager(); |
|
45 provider._manager = manager; |
|
46 |
|
47 let day1 = new Date(2014, 0, 1, 0, 0, 0); |
|
48 let day2 = new Date(2014, 0, 3, 0, 0, 0); |
|
49 |
|
50 // FUTURE Bug 982836 CrashManager will grow public APIs for adding crashes. |
|
51 // Switch to that here. |
|
52 let store = yield manager._getStore(); |
|
53 store.addMainProcessCrash("id1", day1); |
|
54 store.addMainProcessCrash("id2", day1); |
|
55 store.addMainProcessCrash("id3", day2); |
|
56 |
|
57 // Flush changes (this may not be needed but it doesn't hurt). |
|
58 yield store.save(); |
|
59 |
|
60 yield provider.collectDailyData(); |
|
61 |
|
62 let m = provider.getMeasurement("crashes", 2); |
|
63 let values = yield m.getValues(); |
|
64 do_check_eq(values.days.size, 2); |
|
65 do_check_true(values.days.hasDay(day1)); |
|
66 do_check_true(values.days.hasDay(day2)); |
|
67 |
|
68 let value = values.days.getDay(day1); |
|
69 do_check_true(value.has("mainCrash")); |
|
70 do_check_eq(value.get("mainCrash"), 2); |
|
71 |
|
72 value = values.days.getDay(day2); |
|
73 do_check_eq(value.get("mainCrash"), 1); |
|
74 |
|
75 // Check that adding a new crash increments counter on next collect. |
|
76 store = yield manager._getStore(); |
|
77 store.addMainProcessCrash("id4", day2); |
|
78 yield store.save(); |
|
79 |
|
80 yield provider.collectDailyData(); |
|
81 values = yield m.getValues(); |
|
82 value = values.days.getDay(day2); |
|
83 do_check_eq(value.get("mainCrash"), 2); |
|
84 |
|
85 yield provider.shutdown(); |
|
86 yield storage.close(); |
|
87 }); |
|
88 |