Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

/* Any copyright is dedicated to the Public Domain.
*/
ChromeUtils.defineESModuleGetters(this, {
});
add_task(async function test_expiredScalar() {
const EXPIRED_SCALAR = "telemetry.test.expired";
const EXPIRED_KEYED_SCALAR = "telemetry.test.keyed_expired";
const UNEXPIRED_SCALAR = "telemetry.test.unexpired";
Telemetry.clearScalars();
// Try to set the expired scalar to some value. We will not be recording the value,
// but we shouldn't throw.
Glean.testOnly.expired.add(11715);
Glean.testOnly.keyedExpired.some_key.add(11715);
// The unexpired scalar has an expiration version, but far away in the future.
const expectedValue = 11716;
Glean.testOnly.unexpired.add(expectedValue);
// Get a snapshot of the scalars.
const scalars = TelemetryTestUtils.getProcessScalars("parent");
const keyedScalars = TelemetryTestUtils.getProcessScalars("parent");
Assert.ok(
!(EXPIRED_SCALAR in scalars),
"The expired scalar must not be persisted."
);
Assert.equal(
scalars[UNEXPIRED_SCALAR],
expectedValue,
"The unexpired scalar must be persisted with the correct value."
);
Assert.ok(
!(EXPIRED_KEYED_SCALAR in keyedScalars),
"The expired keyed scalar must not be persisted."
);
});
add_task(async function test_scalarRecording() {
const OPTIN_SCALAR = "telemetry.test.release_optin";
const OPTOUT_SCALAR = "telemetry.test.release_optout";
let checkValue = (scalarName, expectedValue) => {
const scalars = TelemetryTestUtils.getProcessScalars("parent");
Assert.equal(
scalars[scalarName],
expectedValue,
scalarName + " must contain the expected value."
);
};
let checkNotSerialized = scalarName => {
const scalars = TelemetryTestUtils.getProcessScalars("parent");
Assert.ok(!(scalarName in scalars), scalarName + " was not recorded.");
};
Telemetry.canRecordBase = false;
Telemetry.canRecordExtended = false;
Telemetry.clearScalars();
// Check that no scalar is recorded if both base and extended recording are off.
Glean.testOnly.releaseOptout.add(3);
Glean.testOnly.releaseOptin.add(3);
checkNotSerialized(OPTOUT_SCALAR);
checkNotSerialized(OPTIN_SCALAR);
// Check that opt-out scalars are recorded, while opt-in are not.
Telemetry.canRecordBase = true;
Glean.testOnly.releaseOptout.add(3);
Glean.testOnly.releaseOptin.add(3);
checkValue(OPTOUT_SCALAR, 3);
checkNotSerialized(OPTIN_SCALAR);
// Check that both opt-out and opt-in scalars are recorded.
Telemetry.canRecordExtended = true;
Glean.testOnly.releaseOptout.add(5);
Glean.testOnly.releaseOptin.add(6);
checkValue(OPTOUT_SCALAR, 8);
checkValue(OPTIN_SCALAR, 6);
});
add_task(async function test_keyedScalarRecording() {
const OPTIN_SCALAR = "telemetry.test.keyed_release_optin";
const OPTOUT_SCALAR = "telemetry.test.keyed_release_optout";
const testKey = "policy_key";
let checkValue = (scalarName, expectedValue) => {
const scalars = TelemetryTestUtils.getProcessScalars("parent", true);
Assert.equal(
scalars[scalarName][testKey],
expectedValue,
scalarName + " must contain the expected value."
);
};
let checkNotSerialized = scalarName => {
const scalars = TelemetryTestUtils.getProcessScalars("parent", true);
Assert.ok(!(scalarName in scalars), scalarName + " was not recorded.");
};
Telemetry.canRecordBase = false;
Telemetry.canRecordExtended = false;
Telemetry.clearScalars();
// Check that no scalar is recorded if both base and extended recording are off.
Glean.testOnly.keyedReleaseOptout[testKey].add(3);
Glean.testOnly.keyedReleaseOptin[testKey].add(3);
checkNotSerialized(OPTOUT_SCALAR);
checkNotSerialized(OPTIN_SCALAR);
// Check that opt-out scalars are recorded, while opt-in are not.
Telemetry.canRecordBase = true;
Glean.testOnly.keyedReleaseOptout[testKey].add(3);
Glean.testOnly.keyedReleaseOptin[testKey].add(3);
checkValue(OPTOUT_SCALAR, 3);
checkNotSerialized(OPTIN_SCALAR);
// Check that both opt-out and opt-in scalars are recorded.
Telemetry.canRecordExtended = true;
Glean.testOnly.keyedReleaseOptout[testKey].add(5);
Glean.testOnly.keyedReleaseOptin[testKey].add(6);
checkValue(OPTOUT_SCALAR, 8);
checkValue(OPTIN_SCALAR, 6);
});
add_task(
{
skip_if: () => gIsAndroid,
},
async function test_productSpecificScalar() {
const DEFAULT_PRODUCT_SCALAR = "telemetry.test.default_products";
const DESKTOP_ONLY_SCALAR = "telemetry.test.desktop_only";
const MULTIPRODUCT_SCALAR = "telemetry.test.multiproduct";
const MOBILE_ONLY_SCALAR = "telemetry.test.mobile_only";
const MOBILE_ONLY_KEYED_SCALAR = "telemetry.test.keyed_mobile_only";
Telemetry.clearScalars();
// Try to set the desktop scalars
let expectedValue = 11714;
Glean.testOnly.defaultProducts.add(expectedValue);
Glean.testOnly.desktopOnly.add(expectedValue);
Glean.testOnly.multiproduct.add(expectedValue);
// Try to set the mobile-only scalar to some value. We will not be recording the value,
// but we shouldn't throw.
let expectedKey = "some_key";
Glean.testOnly.mobileOnly.add(11715);
Glean.testOnly.keyedMobileOnly[expectedKey].add(11715);
// Get a snapshot of the scalars.
const scalars = TelemetryTestUtils.getProcessScalars("parent");
const keyedScalars = TelemetryTestUtils.getProcessScalars("parent");
Assert.equal(
scalars[DEFAULT_PRODUCT_SCALAR],
expectedValue,
"The default platfomrs scalar must contain the right value"
);
Assert.equal(
scalars[DESKTOP_ONLY_SCALAR],
expectedValue,
"The desktop-only scalar must contain the right value"
);
Assert.equal(
scalars[MULTIPRODUCT_SCALAR],
expectedValue,
"The multiproduct scalar must contain the right value"
);
Assert.ok(
!(MOBILE_ONLY_SCALAR in scalars),
"The mobile-only scalar must not be persisted."
);
Assert.ok(
!(MOBILE_ONLY_KEYED_SCALAR in keyedScalars),
"The mobile-only keyed scalar must not be persisted."
);
}
);