summaryrefslogtreecommitdiffstats
path: root/toolkit/mozapps/extensions/test/xpcshell/test_amo_stats_telemetry.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/mozapps/extensions/test/xpcshell/test_amo_stats_telemetry.js')
-rw-r--r--toolkit/mozapps/extensions/test/xpcshell/test_amo_stats_telemetry.js102
1 files changed, 102 insertions, 0 deletions
diff --git a/toolkit/mozapps/extensions/test/xpcshell/test_amo_stats_telemetry.js b/toolkit/mozapps/extensions/test/xpcshell/test_amo_stats_telemetry.js
new file mode 100644
index 0000000000..8176c5881a
--- /dev/null
+++ b/toolkit/mozapps/extensions/test/xpcshell/test_amo_stats_telemetry.js
@@ -0,0 +1,102 @@
+/* Any copyright is dedicated to the Public Domain.
+http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+const { TelemetryController } = ChromeUtils.importESModule(
+ "resource://gre/modules/TelemetryController.sys.mjs"
+);
+
+AddonTestUtils.init(this);
+AddonTestUtils.overrideCertDB();
+AddonTestUtils.createAppInfo(
+ "xpcshell@tests.mozilla.org",
+ "XPCShell",
+ "1",
+ "42"
+);
+
+add_task(async function setup() {
+ // We need to set this pref to `true` in order to collect add-ons Telemetry
+ // data (which is considered extended data and disabled in CI).
+ const overridePreReleasePref = "toolkit.telemetry.testing.overridePreRelease";
+ let oldOverrideValue = Services.prefs.getBoolPref(
+ overridePreReleasePref,
+ false
+ );
+ Services.prefs.setBoolPref(overridePreReleasePref, true);
+ registerCleanupFunction(() => {
+ Services.prefs.setBoolPref(overridePreReleasePref, oldOverrideValue);
+ });
+
+ await TelemetryController.testSetup();
+ await AddonTestUtils.promiseStartupManager();
+});
+
+add_task(async function test_ping_payload_and_environment() {
+ const extensions = [
+ {
+ id: "addons-telemetry@test-extension-1",
+ name: "some extension 1",
+ version: "1.2.3",
+ },
+ {
+ id: "addons-telemetry@test-extension-2",
+ name: "some extension 2",
+ version: "0.1",
+ },
+ ];
+
+ // Install some extensions.
+ const installedExtensions = [];
+ for (const { id, name, version } of extensions) {
+ const extension = ExtensionTestUtils.loadExtension({
+ manifest: {
+ name,
+ version,
+ browser_specific_settings: { gecko: { id } },
+ },
+ useAddonManager: "permanent",
+ });
+ installedExtensions.push(extension);
+
+ await extension.startup();
+ }
+
+ const { payload, environment } = TelemetryController.getCurrentPingData();
+
+ // Important: `payload.info.addons` is being used for AMO usage stats.
+ Assert.ok("addons" in payload.info, "payload.info.addons is defined");
+ Assert.equal(
+ payload.info.addons,
+ extensions
+ .map(({ id, version }) => `${encodeURIComponent(id)}:${version}`)
+ .join(",")
+ );
+ Assert.ok(
+ "XPI" in payload.addonDetails,
+ "payload.addonDetails.XPI is defined"
+ );
+ for (const { id, name } of extensions) {
+ Assert.ok(id in payload.addonDetails.XPI);
+ Assert.equal(payload.addonDetails.XPI[id].name, name);
+ }
+
+ const { addons } = environment;
+ Assert.ok(
+ "activeAddons" in addons,
+ "environment.addons.activeAddons is defined"
+ );
+ Assert.ok("theme" in addons, "environment.addons.theme is defined");
+ for (const { id } of extensions) {
+ Assert.ok(id in environment.addons.activeAddons);
+ }
+
+ for (const extension of installedExtensions) {
+ await extension.unload();
+ }
+});
+
+add_task(async function cleanup() {
+ await TelemetryController.testShutdown();
+});