fune/browser/modules/test/unit/test_PingCentre.js

158 lines
4.7 KiB
JavaScript

/* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/
*/
"use strict";
const { PingCentre, PingCentreConstants } = ChromeUtils.import(
"resource:///modules/PingCentre.jsm"
);
const { TelemetryEnvironment } = ChromeUtils.importESModule(
"resource://gre/modules/TelemetryEnvironment.sys.mjs"
);
const { AppConstants } = ChromeUtils.importESModule(
"resource://gre/modules/AppConstants.sys.mjs"
);
const { UpdateUtils } = ChromeUtils.importESModule(
"resource://gre/modules/UpdateUtils.sys.mjs"
);
const { sinon } = ChromeUtils.import("resource://testing-common/Sinon.jsm");
const FAKE_PING = { event: "fake_event", value: "fake_value", locale: "en-US" };
const FAKE_ENDPOINT = "https://www.test.com";
let pingCentre;
let sandbox;
function _setUp() {
Services.prefs.setBoolPref(PingCentreConstants.TELEMETRY_PREF, true);
Services.prefs.setBoolPref(PingCentreConstants.FHR_UPLOAD_ENABLED_PREF, true);
Services.prefs.setBoolPref(PingCentreConstants.LOGGING_PREF, true);
sandbox.restore();
}
add_setup(function setup() {
sandbox = sinon.createSandbox();
_setUp();
pingCentre = new PingCentre({ topic: "test_topic" });
registerCleanupFunction(() => {
sandbox.restore();
Services.prefs.clearUserPref(PingCentreConstants.TELEMETRY_PREF);
Services.prefs.clearUserPref(PingCentreConstants.FHR_UPLOAD_ENABLED_PREF);
Services.prefs.clearUserPref(PingCentreConstants.LOGGING_PREF);
});
// On Android, FOG is set up through head.js
if (AppConstants.platform != "android") {
do_get_profile();
Services.fog.initializeFOG();
}
});
add_task(function test_enabled() {
_setUp();
Assert.ok(pingCentre.enabled, "Telemetry should be on");
});
add_task(function test_disabled_by_pingCentre() {
_setUp();
Services.prefs.setBoolPref(PingCentreConstants.TELEMETRY_PREF, false);
Assert.ok(!pingCentre.enabled, "Telemetry should be off");
});
add_task(function test_disabled_by_FirefoxHealthReport() {
_setUp();
Services.prefs.setBoolPref(
PingCentreConstants.FHR_UPLOAD_ENABLED_PREF,
false
);
Assert.ok(!pingCentre.enabled, "Telemetry should be off");
});
add_task(function test_logging() {
_setUp();
Assert.ok(pingCentre.logging, "Logging should be on");
Services.prefs.setBoolPref(PingCentreConstants.LOGGING_PREF, false);
Assert.ok(!pingCentre.logging, "Logging should be off");
});
add_task(function test_createExperimentsPayload() {
_setUp();
const activeExperiments = {
exp1: { branch: "foo", enrollmentID: "SOME_RANDON_ID" },
exp2: { branch: "bar", type: "PrefStudy" },
exp3: {},
};
sandbox
.stub(TelemetryEnvironment, "getActiveExperiments")
.returns(activeExperiments);
const expected = {
exp1: { branch: "foo" },
exp2: { branch: "bar" },
};
const experiments = pingCentre._createExperimentsPayload();
Assert.deepEqual(
experiments,
expected,
"Should create experiments with all the required context"
);
});
add_task(function test_createExperimentsPayload_without_active_experiments() {
_setUp();
sandbox.stub(TelemetryEnvironment, "getActiveExperiments").returns({});
const experiments = pingCentre._createExperimentsPayload({});
Assert.deepEqual(experiments, {}, "Should send an empty object");
});
add_task(function test_createStructuredIngestionPing() {
_setUp();
sandbox
.stub(TelemetryEnvironment, "getActiveExperiments")
.returns({ exp1: { branch: "foo" } });
const ping = pingCentre._createStructuredIngestionPing(FAKE_PING);
const expected = {
experiments: { exp1: { branch: "foo" } },
locale: "en-US",
version: AppConstants.MOZ_APP_VERSION,
release_channel: UpdateUtils.getUpdateChannel(false),
...FAKE_PING,
};
Assert.deepEqual(ping, expected, "Should create a valid ping");
});
add_task(function test_sendStructuredIngestionPing_disabled() {
_setUp();
sandbox.stub(PingCentre, "_sendStandalonePing").resolves();
Services.prefs.setBoolPref(PingCentreConstants.TELEMETRY_PREF, false);
pingCentre.sendStructuredIngestionPing(FAKE_PING, FAKE_ENDPOINT);
Assert.ok(PingCentre._sendStandalonePing.notCalled, "Should not be sent");
});
add_task(function test_sendStructuredIngestionPing_success() {
_setUp();
sandbox.stub(PingCentre, "_sendStandalonePing").resolves();
pingCentre.sendStructuredIngestionPing(FAKE_PING, FAKE_ENDPOINT);
Assert.equal(PingCentre._sendStandalonePing.callCount, 1, "Should be sent");
});
add_task(async function test_sendStructuredIngestionPing_failure() {
_setUp();
sandbox.stub(PingCentre, "_sendStandalonePing").rejects();
Assert.equal(undefined, Glean.pingCentre.sendFailures.testGetValue());
await pingCentre.sendStructuredIngestionPing(FAKE_PING, FAKE_ENDPOINT);
Assert.equal(1, Glean.pingCentre.sendFailures.testGetValue());
});