mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-11-09 04:39:03 +02:00
153 lines
3.8 KiB
JavaScript
153 lines
3.8 KiB
JavaScript
"use strict";
|
|
|
|
const { RemoteSettings } = ChromeUtils.import(
|
|
"resource://services-settings/remote-settings.js"
|
|
);
|
|
const { RemoteSettingsExperimentLoader } = ChromeUtils.import(
|
|
"resource://nimbus/lib/RemoteSettingsExperimentLoader.jsm"
|
|
);
|
|
const { ExperimentAPI, ExperimentFeature } = ChromeUtils.import(
|
|
"resource://nimbus/ExperimentAPI.jsm"
|
|
);
|
|
const { ExperimentManager } = ChromeUtils.import(
|
|
"resource://nimbus/lib/ExperimentManager.jsm"
|
|
);
|
|
const { ExperimentFakes } = ChromeUtils.import(
|
|
"resource://testing-common/NimbusTestUtils.jsm"
|
|
);
|
|
const { TelemetryTestUtils } = ChromeUtils.import(
|
|
"resource://testing-common/TelemetryTestUtils.jsm"
|
|
);
|
|
|
|
const TELEMETRY_CATEGORY = "normandy";
|
|
const TELEMETRY_OBJECT = "nimbus_experiment";
|
|
// Included with active experiment information
|
|
const EXPERIMENT_TYPE = "nimbus";
|
|
const EVENT_FILTER = { category: TELEMETRY_CATEGORY };
|
|
|
|
let rsClient;
|
|
|
|
add_task(async function setup() {
|
|
await SpecialPowers.pushPrefEnv({
|
|
set: [
|
|
["messaging-system.log", "all"],
|
|
["app.shield.optoutstudies.enabled", true],
|
|
],
|
|
});
|
|
rsClient = RemoteSettings("nimbus-desktop-experiments");
|
|
|
|
registerCleanupFunction(async () => {
|
|
await SpecialPowers.popPrefEnv();
|
|
await rsClient.db.clear();
|
|
});
|
|
});
|
|
|
|
// TODO Use utilities being added
|
|
async function addExperiment() {
|
|
const recipe = ExperimentFakes.recipe("foo" + Math.random(), {
|
|
bucketConfig: {
|
|
start: 0,
|
|
count: 10000,
|
|
total: 10000,
|
|
namespace: "mochitest",
|
|
randomizationUnit: "normandy_id",
|
|
},
|
|
});
|
|
await rsClient.db.importChanges({}, 42, [recipe], {
|
|
clear: true,
|
|
});
|
|
|
|
let waitForExperimentEnrollment = ExperimentFakes.waitForExperimentUpdate(
|
|
ExperimentAPI,
|
|
{ slug: recipe.slug }
|
|
);
|
|
|
|
RemoteSettingsExperimentLoader.updateRecipes("mochitest");
|
|
|
|
await waitForExperimentEnrollment;
|
|
|
|
const cleanup = async () => {
|
|
let waitForExperimentUnenrollment = ExperimentFakes.waitForExperimentUpdate(
|
|
ExperimentAPI,
|
|
{ slug: recipe.slug }
|
|
);
|
|
ExperimentManager.unenroll(recipe.slug, "mochitest-cleanup");
|
|
|
|
await waitForExperimentUnenrollment;
|
|
};
|
|
return { recipe, cleanup };
|
|
}
|
|
|
|
add_task(async function test_experiment_enroll_unenroll_Telemetry() {
|
|
Services.telemetry.clearEvents();
|
|
const { recipe, cleanup } = await addExperiment();
|
|
let experiment = ExperimentAPI.getExperiment({
|
|
slug: recipe.slug,
|
|
});
|
|
|
|
Assert.ok(experiment.branch, "Should be enrolled in the experiment");
|
|
TelemetryTestUtils.assertEvents(
|
|
[
|
|
{
|
|
method: "enroll",
|
|
object: TELEMETRY_OBJECT,
|
|
value: experiment.slug,
|
|
extra: {
|
|
experimentType: EXPERIMENT_TYPE,
|
|
branch: experiment.branch.slug,
|
|
enrollmentId: experiment.enrollmentId,
|
|
},
|
|
},
|
|
],
|
|
EVENT_FILTER
|
|
);
|
|
|
|
await cleanup();
|
|
|
|
TelemetryTestUtils.assertEvents(
|
|
[
|
|
{
|
|
method: "unenroll",
|
|
object: TELEMETRY_OBJECT,
|
|
value: experiment.slug,
|
|
extra: {
|
|
reason: "mochitest-cleanup",
|
|
branch: experiment.branch.slug,
|
|
enrollmentId: experiment.enrollmentId,
|
|
},
|
|
},
|
|
],
|
|
EVENT_FILTER
|
|
);
|
|
});
|
|
|
|
add_task(async function test_experiment_expose_Telemetry() {
|
|
const { recipe, cleanup } = await addExperiment();
|
|
|
|
let experiment = ExperimentAPI.getExperiment({
|
|
slug: recipe.slug,
|
|
});
|
|
|
|
const { featureId } = experiment.branch.feature;
|
|
const feature = new ExperimentFeature(featureId);
|
|
|
|
Services.telemetry.clearEvents();
|
|
feature.getValue({ sendExposureEvent: true });
|
|
|
|
TelemetryTestUtils.assertEvents(
|
|
[
|
|
{
|
|
method: "expose",
|
|
object: TELEMETRY_OBJECT,
|
|
value: experiment.slug,
|
|
extra: {
|
|
branchSlug: experiment.branch.slug,
|
|
featureId,
|
|
},
|
|
},
|
|
],
|
|
EVENT_FILTER
|
|
);
|
|
|
|
await cleanup();
|
|
});
|