blob: 37524fbb913be4082146b9c6716f5433611294be (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
|
/* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/ */
const { TelemetryController } = ChromeUtils.importESModule(
"resource://gre/modules/TelemetryController.sys.mjs"
);
const { TelemetrySession } = ChromeUtils.importESModule(
"resource://gre/modules/TelemetrySession.sys.mjs"
);
// The @mozilla/xre/app-info;1 XPCOM object provided by the xpcshell test harness doesn't
// implement the nsIXULAppInfo interface, which is needed by Services and
// TelemetrySession.sys.mjs. updateAppInfo() creates and registers a minimal mock app-info.
const { updateAppInfo } = ChromeUtils.importESModule(
"resource://testing-common/AppInfo.sys.mjs"
);
updateAppInfo();
function getSimpleMeasurementsFromTelemetryController() {
return TelemetrySession.getPayload().simpleMeasurements;
}
add_task(async function test_setup() {
// Telemetry needs the AddonManager.
await loadAddonManager();
finishAddonManagerStartup();
fakeIntlReady();
// Make profile available for |TelemetryController.testShutdown()|.
do_get_profile();
// Make sure we don't generate unexpected pings due to pref changes.
await setEmptyPrefWatchlist();
await new Promise(resolve =>
Services.telemetry.asyncFetchTelemetryData(resolve)
);
});
add_task(async function actualTest() {
await TelemetryController.testSetup();
// Test the module logic
let { TelemetryTimestamps } = ChromeUtils.importESModule(
"resource://gre/modules/TelemetryTimestamps.sys.mjs"
);
let now = Date.now();
TelemetryTimestamps.add("foo");
Assert.ok(TelemetryTimestamps.get().foo != null); // foo was added
Assert.ok(TelemetryTimestamps.get().foo >= now); // foo has a reasonable value
// Add timestamp with value
// Use a value far in the future since TelemetryController substracts the time of
// process initialization.
const YEAR_4000_IN_MS = 64060588800000;
TelemetryTimestamps.add("bar", YEAR_4000_IN_MS);
Assert.equal(TelemetryTimestamps.get().bar, YEAR_4000_IN_MS); // bar has the right value
// Can't add the same timestamp twice
TelemetryTimestamps.add("bar", 2);
Assert.equal(TelemetryTimestamps.get().bar, YEAR_4000_IN_MS); // bar wasn't overwritten
let threw = false;
try {
TelemetryTimestamps.add("baz", "this isn't a number");
} catch (ex) {
threw = true;
}
Assert.ok(threw); // adding non-number threw
Assert.equal(null, TelemetryTimestamps.get().baz); // no baz was added
// Test that the data gets added to the telemetry ping properly
let simpleMeasurements = getSimpleMeasurementsFromTelemetryController();
Assert.ok(simpleMeasurements != null); // got simple measurements from ping data
Assert.ok(simpleMeasurements.foo > 1); // foo was included
Assert.ok(simpleMeasurements.bar > 1); // bar was included
Assert.equal(undefined, simpleMeasurements.baz); // baz wasn't included since it wasn't added
await TelemetryController.testShutdown();
});
|