forked from mirrors/gecko-dev
158 lines
4.7 KiB
JavaScript
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());
|
|
});
|