diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
commit | 26a029d407be480d791972afb5975cf62c9360a6 (patch) | |
tree | f435a8308119effd964b339f76abb83a57c29483 /devtools/client/aboutdebugging/test/browser/browser_aboutdebugging_telemetry_runtime_updates.js | |
parent | Initial commit. (diff) | |
download | firefox-26a029d407be480d791972afb5975cf62c9360a6.tar.xz firefox-26a029d407be480d791972afb5975cf62c9360a6.zip |
Adding upstream version 124.0.1.upstream/124.0.1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'devtools/client/aboutdebugging/test/browser/browser_aboutdebugging_telemetry_runtime_updates.js')
-rw-r--r-- | devtools/client/aboutdebugging/test/browser/browser_aboutdebugging_telemetry_runtime_updates.js | 154 |
1 files changed, 154 insertions, 0 deletions
diff --git a/devtools/client/aboutdebugging/test/browser/browser_aboutdebugging_telemetry_runtime_updates.js b/devtools/client/aboutdebugging/test/browser/browser_aboutdebugging_telemetry_runtime_updates.js new file mode 100644 index 0000000000..51934550a8 --- /dev/null +++ b/devtools/client/aboutdebugging/test/browser/browser_aboutdebugging_telemetry_runtime_updates.js @@ -0,0 +1,154 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ */ + +"use strict"; + +/* import-globals-from helper-telemetry.js */ +Services.scriptloader.loadSubScript( + CHROME_URL_ROOT + "helper-telemetry.js", + this +); + +const DEVICE_A = "Device A"; +const USB_RUNTIME_1 = { + id: "runtime-id-1", + deviceName: DEVICE_A, + name: "Runtime 1", + shortName: "R1", +}; + +const USB_RUNTIME_2 = { + id: "runtime-id-2", + deviceName: DEVICE_A, + name: "Runtime 2", + shortName: "R2", +}; + +const DEVICE_A_EXTRAS = { + connection_type: "usb", + device_name: DEVICE_A, +}; + +const RUNTIME_1_EXTRAS = { + connection_type: "usb", + device_name: USB_RUNTIME_1.deviceName, + runtime_name: USB_RUNTIME_1.shortName, +}; + +const RUNTIME_2_EXTRAS = { + connection_type: "usb", + device_name: USB_RUNTIME_2.deviceName, + runtime_name: USB_RUNTIME_2.shortName, +}; + +/** + * Check that telemetry events are recorded for USB runtimes when: + * - adding a device/runtime + * - removing a device/runtime + * - connecting to a runtime + */ +add_task(async function testUsbRuntimeUpdates() { + // enable USB devices mocks + const mocks = new Mocks(); + setupTelemetryTest(); + + const { tab, document } = await openAboutDebugging(); + + const sessionId = getOpenEventSessionId(); + ok(!isNaN(sessionId), "Open event has a valid session id"); + + await addUsbRuntime(USB_RUNTIME_1, mocks, document); + + let evts = checkTelemetryEvents( + [ + { method: "device_added", extras: DEVICE_A_EXTRAS }, + { method: "runtime_added", extras: RUNTIME_1_EXTRAS }, + ], + sessionId + ); + + // Now that a first telemetry event has been logged for RUNTIME_1, retrieve the id + // generated for telemetry, and check that we keep logging the same id for all events + // related to runtime 1. + const runtime1Id = evts.filter(e => e.method === "runtime_added")[0].extras + .runtime_id; + const runtime1Extras = Object.assign({}, RUNTIME_1_EXTRAS, { + runtime_id: runtime1Id, + }); + // Same as runtime1Extras, but the runtime name should be the complete one. + const runtime1ConnectedExtras = Object.assign({}, runtime1Extras, { + runtime_name: USB_RUNTIME_1.name, + }); + + await connectToRuntime(USB_RUNTIME_1.deviceName, document); + + checkTelemetryEvents( + [ + { method: "runtime_connected", extras: runtime1ConnectedExtras }, + { method: "connection_attempt", extras: { status: "start" } }, + { method: "connection_attempt", extras: { status: "success" } }, + ], + sessionId + ); + + info("Add a second runtime"); + await addUsbRuntime(USB_RUNTIME_2, mocks, document); + evts = checkTelemetryEvents( + [{ method: "runtime_added", extras: RUNTIME_2_EXTRAS }], + sessionId + ); + + // Similar to what we did for RUNTIME_1,w e want to check we reuse the same telemetry id + // for all the events related to RUNTIME_2. + const runtime2Id = evts.filter(e => e.method === "runtime_added")[0].extras + .runtime_id; + const runtime2Extras = Object.assign({}, RUNTIME_2_EXTRAS, { + runtime_id: runtime2Id, + }); + + info("Remove runtime 1"); + await removeUsbRuntime(USB_RUNTIME_1, mocks, document); + + checkTelemetryEvents( + [ + { method: "runtime_disconnected", extras: runtime1ConnectedExtras }, + { method: "runtime_removed", extras: runtime1Extras }, + ], + sessionId + ); + + info("Remove runtime 2"); + await removeUsbRuntime(USB_RUNTIME_2, mocks, document); + + checkTelemetryEvents( + [ + { method: "runtime_removed", extras: runtime2Extras }, + { method: "device_removed", extras: DEVICE_A_EXTRAS }, + ], + sessionId + ); + + await removeTab(tab); +}); + +async function addUsbRuntime(runtime, mocks, doc) { + mocks.createUSBRuntime(runtime.id, { + deviceName: runtime.deviceName, + name: runtime.name, + shortName: runtime.shortName, + }); + mocks.emitUSBUpdate(); + + info("Wait for the runtime to appear in the sidebar"); + await waitUntil(() => findSidebarItemByText(runtime.shortName, doc)); +} + +async function removeUsbRuntime(runtime, mocks, doc) { + mocks.removeRuntime(runtime.id); + mocks.emitUSBUpdate(); + await waitUntil( + () => + !findSidebarItemByText(runtime.name, doc) && + !findSidebarItemByText(runtime.shortName, doc) + ); +} |