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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
|
Cu.import("resource://gre/modules/TelemetryController.jsm", this);
Cu.import("resource://gre/modules/TelemetrySession.jsm", this);
Cu.import("resource://gre/modules/PromiseUtils.jsm", this);
Cu.import("resource://testing-common/ContentTaskUtils.jsm", this);
const MESSAGE_TELEMETRY_PAYLOAD = "Telemetry:Payload";
const MESSAGE_TELEMETRY_GET_CHILD_PAYLOAD = "Telemetry:GetChildPayload";
const MESSAGE_CHILD_TEST_DONE = "ChildTest:Done";
const PLATFORM_VERSION = "1.9.2";
const APP_VERSION = "1";
const APP_ID = "xpcshell@tests.mozilla.org";
const APP_NAME = "XPCShell";
function run_child_test() {
// Setup histograms with some fixed values.
let flagHist = Telemetry.getHistogramById("TELEMETRY_TEST_FLAG");
flagHist.add(1);
let countHist = Telemetry.getHistogramById("TELEMETRY_TEST_COUNT");
Telemetry.setHistogramRecordingEnabled("TELEMETRY_TEST_COUNT", false);
countHist.add();
Telemetry.setHistogramRecordingEnabled("TELEMETRY_TEST_COUNT", true);
countHist.add();
countHist.add();
let categHist = Telemetry.getHistogramById("TELEMETRY_TEST_CATEGORICAL");
categHist.add("Label2");
categHist.add("Label3");
let flagKeyed = Telemetry.getKeyedHistogramById("TELEMETRY_TEST_KEYED_FLAG");
flagKeyed.add("a", 1);
flagKeyed.add("b", 1);
let countKeyed = Telemetry.getKeyedHistogramById("TELEMETRY_TEST_KEYED_COUNT");
Telemetry.setHistogramRecordingEnabled("TELEMETRY_TEST_KEYED_COUNT", false);
countKeyed.add("a");
countKeyed.add("b");
Telemetry.setHistogramRecordingEnabled("TELEMETRY_TEST_KEYED_COUNT", true);
countKeyed.add("a");
countKeyed.add("b");
countKeyed.add("b");
}
function check_histogram_values(payload) {
const hs = payload.histograms;
Assert.ok("TELEMETRY_TEST_COUNT" in hs, "Should have count test histogram.");
Assert.ok("TELEMETRY_TEST_FLAG" in hs, "Should have flag test histogram.");
Assert.ok("TELEMETRY_TEST_CATEGORICAL" in hs, "Should have categorical test histogram.");
Assert.equal(hs["TELEMETRY_TEST_COUNT"].sum, 2,
"Count test histogram should have the right value.");
Assert.equal(hs["TELEMETRY_TEST_FLAG"].sum, 1,
"Flag test histogram should have the right value.");
Assert.equal(hs["TELEMETRY_TEST_CATEGORICAL"].sum, 3,
"Categorical test histogram should have the right sum.");
const kh = payload.keyedHistograms;
Assert.ok("TELEMETRY_TEST_KEYED_COUNT" in kh, "Should have keyed count test histogram.");
Assert.ok("TELEMETRY_TEST_KEYED_FLAG" in kh, "Should have keyed flag test histogram.");
Assert.equal(kh["TELEMETRY_TEST_KEYED_COUNT"]["a"].sum, 1,
"Keyed count test histogram should have the right value.");
Assert.equal(kh["TELEMETRY_TEST_KEYED_COUNT"]["b"].sum, 2,
"Keyed count test histogram should have the right value.");
Assert.equal(kh["TELEMETRY_TEST_KEYED_FLAG"]["a"].sum, 1,
"Keyed flag test histogram should have the right value.");
Assert.equal(kh["TELEMETRY_TEST_KEYED_FLAG"]["b"].sum, 1,
"Keyed flag test histogram should have the right value.");
}
add_task(function*() {
if (!runningInParent) {
TelemetryController.testSetupContent();
run_child_test();
dump("... done with child test\n");
do_send_remote_message(MESSAGE_CHILD_TEST_DONE);
return;
}
// Setup.
do_get_profile(true);
loadAddonManager(APP_ID, APP_NAME, APP_VERSION, PLATFORM_VERSION);
Services.prefs.setBoolPref(PREF_TELEMETRY_ENABLED, true);
yield TelemetryController.testSetup();
if (runningInParent) {
// Make sure we don't generate unexpected pings due to pref changes.
yield setEmptyPrefWatchlist();
}
// Run test in child, don't wait for it to finish.
run_test_in_child("test_ChildHistograms.js");
yield do_await_remote_message(MESSAGE_CHILD_TEST_DONE);
yield ContentTaskUtils.waitForCondition(() => {
let payload = TelemetrySession.getPayload("test-ping");
return payload &&
"processes" in payload &&
"content" in payload.processes &&
"histograms" in payload.processes.content &&
"TELEMETRY_TEST_COUNT" in payload.processes.content.histograms;
});
const payload = TelemetrySession.getPayload("test-ping");
Assert.ok("processes" in payload, "Should have processes section");
Assert.ok("content" in payload.processes, "Should have child process section");
Assert.ok("histograms" in payload.processes.content, "Child process section should have histograms.");
Assert.ok("keyedHistograms" in payload.processes.content, "Child process section should have keyed histograms.");
check_histogram_values(payload.processes.content);
do_test_finished();
});
|