summaryrefslogtreecommitdiffstats
path: root/toolkit/components/telemetry/tests/unit/test_TelemetryChildEvents_buildFaster.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/components/telemetry/tests/unit/test_TelemetryChildEvents_buildFaster.js')
-rw-r--r--toolkit/components/telemetry/tests/unit/test_TelemetryChildEvents_buildFaster.js129
1 files changed, 129 insertions, 0 deletions
diff --git a/toolkit/components/telemetry/tests/unit/test_TelemetryChildEvents_buildFaster.js b/toolkit/components/telemetry/tests/unit/test_TelemetryChildEvents_buildFaster.js
new file mode 100644
index 0000000000..00a45c8b12
--- /dev/null
+++ b/toolkit/components/telemetry/tests/unit/test_TelemetryChildEvents_buildFaster.js
@@ -0,0 +1,129 @@
+/* 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."
+ );
+ }
+});