mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-11-07 03:38:51 +02:00
129 lines
4 KiB
JavaScript
129 lines
4 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
http://creativecommons.org/publicdomain/zero/1.0/
|
|
*/
|
|
|
|
const { ContentTaskUtils } = ChromeUtils.importESModule(
|
|
"resource://testing-common/ContentTaskUtils.sys.mjs"
|
|
);
|
|
|
|
const MESSAGE_CHILD_TEST_DONE = "ChildTest:Done";
|
|
|
|
const TEST_STATIC_EVENT_NAME = "telemetry.test";
|
|
const TEST_EVENT_NAME = "telemetry.test.child";
|
|
|
|
function run_child_test() {
|
|
Telemetry.recordEvent(TEST_EVENT_NAME, "child", "builtin");
|
|
Telemetry.recordEvent(TEST_STATIC_EVENT_NAME, "main_and_content", "object1");
|
|
Telemetry.recordEvent(TEST_EVENT_NAME, "child", "anotherone");
|
|
}
|
|
|
|
/**
|
|
* This function waits until content events are reported into the
|
|
* events snapshot.
|
|
*/
|
|
async function waitForContentEvents() {
|
|
await ContentTaskUtils.waitForCondition(() => {
|
|
const snapshot = Telemetry.snapshotEvents(
|
|
Ci.nsITelemetry.DATASET_PRERELEASE_CHANNELS,
|
|
false
|
|
);
|
|
return Object.keys(snapshot).includes("content");
|
|
});
|
|
}
|
|
|
|
add_task(async function test_setup() {
|
|
if (!runningInParent) {
|
|
TelemetryController.testSetupContent();
|
|
run_child_test();
|
|
do_send_remote_message(MESSAGE_CHILD_TEST_DONE);
|
|
return;
|
|
}
|
|
|
|
// Setup.
|
|
do_get_profile(true);
|
|
await loadAddonManager(APP_ID, APP_NAME, APP_VERSION, PLATFORM_VERSION);
|
|
finishAddonManagerStartup();
|
|
fakeIntlReady();
|
|
await TelemetryController.testSetup();
|
|
// Make sure we don't generate unexpected pings due to pref changes.
|
|
await setEmptyPrefWatchlist();
|
|
// Enable recording for the test event category.
|
|
|
|
// Register some dynamic builtin test events.
|
|
Telemetry.registerBuiltinEvents(TEST_EVENT_NAME, {
|
|
dynamic: {
|
|
methods: ["dynamic", "child"],
|
|
objects: ["builtin", "anotherone"],
|
|
},
|
|
dynamic_expired: {
|
|
methods: ["check"],
|
|
objects: ["expiry"],
|
|
expired: true,
|
|
},
|
|
});
|
|
Telemetry.setEventRecordingEnabled(TEST_STATIC_EVENT_NAME, true);
|
|
Telemetry.setEventRecordingEnabled(TEST_EVENT_NAME, true);
|
|
|
|
Telemetry.recordEvent(TEST_EVENT_NAME, "dynamic", "builtin");
|
|
Telemetry.recordEvent(TEST_STATIC_EVENT_NAME, "main_and_content", "object1");
|
|
Telemetry.recordEvent(TEST_EVENT_NAME, "dynamic", "anotherone");
|
|
Telemetry.recordEvent(TEST_EVENT_NAME, "check", "expiry");
|
|
|
|
// Run test in child, don't wait for it to finish: just wait for the
|
|
// MESSAGE_CHILD_TEST_DONE.
|
|
run_test_in_child("test_TelemetryChildEvents_buildFaster.js");
|
|
await do_await_remote_message(MESSAGE_CHILD_TEST_DONE);
|
|
|
|
// Once events are set by the content process, they don't immediately get
|
|
// sent to the parent process. Wait for the Telemetry IPC Timer to trigger
|
|
// and batch send the data back to the parent process.
|
|
await waitForContentEvents();
|
|
|
|
let snapshot = Telemetry.snapshotEvents(
|
|
Ci.nsITelemetry.DATASET_PRERELEASE_CHANNELS,
|
|
false
|
|
);
|
|
Assert.ok("parent" in snapshot, "Should have parent events in the snapshot.");
|
|
Assert.ok(
|
|
"content" in snapshot,
|
|
"Should have content events in the snapshot."
|
|
);
|
|
|
|
// All events should now be recorded in the right order
|
|
let expectedParent = [
|
|
[TEST_EVENT_NAME, "dynamic", "builtin"],
|
|
[TEST_STATIC_EVENT_NAME, "main_and_content", "object1"],
|
|
[TEST_EVENT_NAME, "dynamic", "anotherone"],
|
|
];
|
|
let expectedContent = [
|
|
[TEST_EVENT_NAME, "child", "builtin"],
|
|
[TEST_STATIC_EVENT_NAME, "main_and_content", "object1"],
|
|
[TEST_EVENT_NAME, "child", "anotherone"],
|
|
];
|
|
|
|
Assert.equal(
|
|
snapshot.parent.length,
|
|
expectedParent.length,
|
|
"Should have recorded the right amount of events in parent."
|
|
);
|
|
for (let i = 0; i < expectedParent.length; ++i) {
|
|
Assert.deepEqual(
|
|
snapshot.parent[i].slice(1),
|
|
expectedParent[i],
|
|
"Should have recorded the expected event data in parent."
|
|
);
|
|
}
|
|
|
|
Assert.equal(
|
|
snapshot.content.length,
|
|
expectedContent.length,
|
|
"Should have recorded the right amount of events in content."
|
|
);
|
|
for (let i = 0; i < expectedContent.length; ++i) {
|
|
Assert.deepEqual(
|
|
snapshot.content[i].slice(1),
|
|
expectedContent[i],
|
|
"Should have recorded the expected event data in content."
|
|
);
|
|
}
|
|
});
|