mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 983231 - Telemetry experiments: test manifest condition evaluation. r=felipe
This commit is contained in:
parent
449379d2cc
commit
922a09db9e
@ -226,6 +226,11 @@ Experiments.Policy.prototype = {
|
||||
return UpdateChannel.get();
|
||||
},
|
||||
|
||||
locale: function () {
|
||||
let chrome = Cc["@mozilla.org/chrome/chrome-registry;1"].getService(Ci.nsIXULChromeRegistry);
|
||||
return chrome.getSelectedLocale("global");
|
||||
},
|
||||
|
||||
/*
|
||||
* @return Promise<> Resolved with the payload data.
|
||||
*/
|
||||
@ -1159,9 +1164,8 @@ Experiments.ExperimentEntry.prototype = {
|
||||
let app = Cc["@mozilla.org/xre/app-info;1"].getService(Ci.nsIXULAppInfo);
|
||||
let runtime = Cc["@mozilla.org/xre/app-info;1"]
|
||||
.getService(Ci.nsIXULRuntime);
|
||||
let chrome = Cc["@mozilla.org/chrome/chrome-registry;1"].getService(Ci.nsIXULChromeRegistry);
|
||||
|
||||
let locale = chrome.getSelectedLocale("global");
|
||||
let locale = this._policy.locale();
|
||||
let channel = this._policy.updatechannel();
|
||||
let data = this._manifestData;
|
||||
|
||||
@ -1171,6 +1175,7 @@ Experiments.ExperimentEntry.prototype = {
|
||||
let startSec = (this.startDate || 0) / 1000;
|
||||
|
||||
gLogger.trace("ExperimentEntry::isApplicable() - now=" + now
|
||||
+ ", randomValue=" + this._randomValue
|
||||
+ ", data=" + JSON.stringify(this._manifestData));
|
||||
|
||||
// Not applicable if it already ran.
|
||||
@ -1193,11 +1198,11 @@ Experiments.ExperimentEntry.prototype = {
|
||||
{ name: "endTime",
|
||||
condition: () => now < data.endTime },
|
||||
{ name: "maxStartTime",
|
||||
condition: () => !data.maxStartTime || now <= (data.maxStartTime - minActive) },
|
||||
condition: () => !data.maxStartTime || now <= data.maxStartTime },
|
||||
{ name: "maxActiveSeconds",
|
||||
condition: () => !this._startDate || now <= (startSec + maxActive) },
|
||||
{ name: "appName",
|
||||
condition: () => !data.name || data.appName.indexOf(app.name) != -1 },
|
||||
condition: () => !data.appName || data.appName.indexOf(app.name) != -1 },
|
||||
{ name: "minBuildID",
|
||||
condition: () => !data.minBuildID || app.platformBuildID >= data.minBuildID },
|
||||
{ name: "maxBuildID",
|
||||
@ -1211,9 +1216,9 @@ Experiments.ExperimentEntry.prototype = {
|
||||
{ name: "locale",
|
||||
condition: () => !data.locale || data.locale.indexOf(locale) != -1 },
|
||||
{ name: "sample",
|
||||
condition: () => !data.sample || this._randomValue <= data.sample },
|
||||
condition: () => data.sample === undefined || this._randomValue <= data.sample },
|
||||
{ name: "version",
|
||||
condition: () => !data.version || data.appVersion.indexOf(app.version) != -1 },
|
||||
condition: () => !data.version || data.version.indexOf(app.version) != -1 },
|
||||
{ name: "minVersion",
|
||||
condition: () => !data.minVersion || versionCmp.compare(app.version, data.minVersion) >= 0 },
|
||||
{ name: "maxVersion",
|
||||
|
@ -28,6 +28,8 @@ const EXPERIMENT2_XPI_NAME = "experiment-2.xpi";
|
||||
const EXPERIMENT3_ID = "test-experiment-3@tests.mozilla.org";
|
||||
const EXPERIMENT4_ID = "test-experiment-4@tests.mozilla.org";
|
||||
|
||||
const DEFAULT_BUILDID = "2014060601";
|
||||
|
||||
const FAKE_EXPERIMENTS_1 = [
|
||||
{
|
||||
id: "id1",
|
||||
@ -169,7 +171,7 @@ function createAppInfo(options) {
|
||||
let platformVersion = options.platformVersion || "1.0";
|
||||
let date = options.date || new Date();
|
||||
|
||||
let buildID = "" + date.getYear() + date.getMonth() + date.getDate() + "01";
|
||||
let buildID = options.buildID || DEFAULT_BUILDID;
|
||||
|
||||
gAppInfo = {
|
||||
// nsIXULAppInfo
|
||||
|
@ -64,7 +64,9 @@ add_task(function* test_setup() {
|
||||
|
||||
patchPolicy(gPolicy, {
|
||||
updatechannel: () => "nightly",
|
||||
locale: () => "en-US",
|
||||
healthReportPayload: () => Promise.resolve(payload),
|
||||
random: () => 0.5,
|
||||
});
|
||||
|
||||
Services.prefs.setBoolPref(PREF_EXPERIMENTS_ENABLED, true);
|
||||
@ -108,10 +110,81 @@ const sanityFilter = function filter(c) {
|
||||
add_task(function* test_simpleFields() {
|
||||
let testData = [
|
||||
// "expected applicable?", failure reason or null, manifest data
|
||||
|
||||
// misc. environment
|
||||
|
||||
[false, ["appName"], {appName: []}],
|
||||
[false, ["appName"], {appName: ["foo", gAppInfo.name + "-invalid"]}],
|
||||
[true, null, {appName: ["not-an-app-name", gAppInfo.name]}],
|
||||
|
||||
[false, ["os"], {os: []}],
|
||||
[false, ["os"], {os: ["42", "abcdef"]}],
|
||||
[true, null, {os: [gAppInfo.OS, "plan9"]}],
|
||||
[true, null, {os: [gAppInfo.OS, "plan9"]}],
|
||||
|
||||
[false, ["channel"], {channel: []}],
|
||||
[false, ["channel"], {channel: ["foo", gPolicy.updatechannel() + "-invalid"]}],
|
||||
[true, null, {channel: ["not-a-channel", gPolicy.updatechannel()]}],
|
||||
|
||||
[false, ["locale"], {locale: []}],
|
||||
[false, ["locale"], {locale: ["foo", gPolicy.locale + "-invalid"]}],
|
||||
[true, null, {locale: ["not-a-locale", gPolicy.locale()]}],
|
||||
|
||||
// version
|
||||
|
||||
[false, ["version"], {version: []}],
|
||||
[false, ["version"], {version: ["-1", gAppInfo.version + "-invalid", "asdf", "0,4", "99.99", "0.1.1.1"]}],
|
||||
[true, null, {version: ["99999999.999", "-1", gAppInfo.version]}],
|
||||
|
||||
[false, ["minVersion"], {minVersion: "1.0.1"}],
|
||||
[true, null, {minVersion: "1.0b1"}],
|
||||
[true, null, {minVersion: "1.0"}],
|
||||
[true, null, {minVersion: "0.9"}],
|
||||
|
||||
[false, ["maxVersion"], {maxVersion: "0.1"}],
|
||||
[false, ["maxVersion"], {maxVersion: "0.9.9"}],
|
||||
[false, ["maxVersion"], {maxVersion: "1.0b1"}],
|
||||
[true, ["maxVersion"], {maxVersion: "1.0"}],
|
||||
[true, ["maxVersion"], {maxVersion: "1.7pre"}],
|
||||
|
||||
// build id
|
||||
|
||||
[false, ["buildIDs"], {buildIDs: []}],
|
||||
[false, ["buildIDs"], {buildIDs: ["not-a-build-id", gAppInfo.platformBuildID + "-invalid"]}],
|
||||
[true, null, {buildIDs: ["not-a-build-id", gAppInfo.platformBuildID]}],
|
||||
[true, null, {buildIDs: ["not-a-build-id", gAppInfo.platformBuildID]}],
|
||||
|
||||
[true, null, {minBuildID: "2014060501"}],
|
||||
[true, null, {minBuildID: "2014060601"}],
|
||||
[false, ["minBuildID"], {minBuildID: "2014060701"}],
|
||||
|
||||
[false, ["maxBuildID"], {maxBuildID: "2014010101"}],
|
||||
[true, null, {maxBuildID: "2014060601"}],
|
||||
[true, null, {maxBuildID: "2014060901"}],
|
||||
|
||||
// sample
|
||||
|
||||
[false, ["sample"], {sample: -1 }],
|
||||
[false, ["sample"], {sample: 0.0}],
|
||||
[false, ["sample"], {sample: 0.1}],
|
||||
[true, null, {sample: 0.5}],
|
||||
[true, null, {sample: 0.6}],
|
||||
[true, null, {sample: 1.0}],
|
||||
[true, null, {sample: 0.5}],
|
||||
|
||||
// experiment control
|
||||
|
||||
[false, ["disabled"], {disabled: true}],
|
||||
[true, null, {disabled: false}],
|
||||
|
||||
[false, ["frozen"], {frozen: true}],
|
||||
[true, null, {frozen: false}],
|
||||
|
||||
[false, null, {frozen: true, disabled: true}],
|
||||
[false, null, {frozen: true, disabled: false}],
|
||||
[false, null, {frozen: false, disabled: true}],
|
||||
[true, null, {frozen: false, disabled: false}],
|
||||
|
||||
// jsfilter
|
||||
|
||||
[true, null, {jsfilter: "function filter(c) { return true; }"}],
|
||||
[false, ["jsfilter-false"], {jsfilter: "function filter(c) { return false; }"}],
|
||||
[true, null, {jsfilter: "function filter(c) { return 123; }"}], // truthy
|
||||
@ -150,18 +223,73 @@ add_task(function* test_simpleFields() {
|
||||
});
|
||||
|
||||
add_task(function* test_times() {
|
||||
let baseDate = new Date(2014, 5, 6, 12);
|
||||
let baseTimeSec = baseDate.getTime() / 1000;
|
||||
let now = new Date(2014, 5, 6, 12);
|
||||
let nowSec = now.getTime() / 1000;
|
||||
let testData = [
|
||||
// "expected applicable?", rejection reason or null, fake now date, manifest data
|
||||
[false, "maxStartTime", baseDate,
|
||||
{maxStartTime: baseTimeSec - 10 * SEC_IN_ONE_DAY}],
|
||||
[false, "endTime", baseDate,
|
||||
{startTime: baseTimeSec - 10 * SEC_IN_ONE_DAY,
|
||||
endTime: baseTimeSec - 5 * SEC_IN_ONE_DAY}],
|
||||
[true, null, baseDate,
|
||||
{startTime: baseTimeSec - 5 * SEC_IN_ONE_DAY,
|
||||
endTime: baseTimeSec + 10 * SEC_IN_ONE_DAY}],
|
||||
|
||||
// start time
|
||||
|
||||
[true, null, now,
|
||||
{startTime: nowSec - 5 * SEC_IN_ONE_DAY,
|
||||
endTime: nowSec + 10 * SEC_IN_ONE_DAY}],
|
||||
[true, null, now,
|
||||
{startTime: nowSec ,
|
||||
endTime: nowSec + 10 * SEC_IN_ONE_DAY}],
|
||||
[false, "startTime", now,
|
||||
{startTime: nowSec + 5 * SEC_IN_ONE_DAY,
|
||||
endTime: nowSec + 10 * SEC_IN_ONE_DAY}],
|
||||
|
||||
// end time
|
||||
|
||||
[false, "endTime", now,
|
||||
{startTime: nowSec - 5 * SEC_IN_ONE_DAY,
|
||||
endTime: nowSec - 10 * SEC_IN_ONE_DAY}],
|
||||
[false, "endTime", now,
|
||||
{startTime: nowSec - 5 * SEC_IN_ONE_DAY,
|
||||
endTime: nowSec - 5 * SEC_IN_ONE_DAY}],
|
||||
|
||||
// max start time
|
||||
|
||||
[false, "maxStartTime", now,
|
||||
{maxStartTime: nowSec - 15 * SEC_IN_ONE_DAY,
|
||||
startTime: nowSec - 10 * SEC_IN_ONE_DAY,
|
||||
endTime: nowSec + 10 * SEC_IN_ONE_DAY}],
|
||||
[false, "maxStartTime", now,
|
||||
{maxStartTime: nowSec - 1 * SEC_IN_ONE_DAY,
|
||||
startTime: nowSec - 10 * SEC_IN_ONE_DAY,
|
||||
endTime: nowSec + 10 * SEC_IN_ONE_DAY}],
|
||||
[false, "maxStartTime", now,
|
||||
{maxStartTime: nowSec - 10 * SEC_IN_ONE_DAY,
|
||||
startTime: nowSec - 10 * SEC_IN_ONE_DAY,
|
||||
endTime: nowSec + 10 * SEC_IN_ONE_DAY}],
|
||||
[true, null, now,
|
||||
{maxStartTime: nowSec,
|
||||
startTime: nowSec - 10 * SEC_IN_ONE_DAY,
|
||||
endTime: nowSec + 10 * SEC_IN_ONE_DAY}],
|
||||
[true, null, now,
|
||||
{maxStartTime: nowSec + 1 * SEC_IN_ONE_DAY,
|
||||
startTime: nowSec - 10 * SEC_IN_ONE_DAY,
|
||||
endTime: nowSec + 10 * SEC_IN_ONE_DAY}],
|
||||
|
||||
// max active seconds
|
||||
|
||||
[true, null, now,
|
||||
{maxActiveSeconds: 5 * SEC_IN_ONE_DAY,
|
||||
startTime: nowSec - 10 * SEC_IN_ONE_DAY,
|
||||
endTime: nowSec + 10 * SEC_IN_ONE_DAY}],
|
||||
[true, null, now,
|
||||
{maxActiveSeconds: 10 * SEC_IN_ONE_DAY,
|
||||
startTime: nowSec - 10 * SEC_IN_ONE_DAY,
|
||||
endTime: nowSec + 10 * SEC_IN_ONE_DAY}],
|
||||
[true, null, now,
|
||||
{maxActiveSeconds: 15 * SEC_IN_ONE_DAY,
|
||||
startTime: nowSec - 10 * SEC_IN_ONE_DAY,
|
||||
endTime: nowSec + 10 * SEC_IN_ONE_DAY}],
|
||||
[true, null, now,
|
||||
{maxActiveSeconds: 20 * SEC_IN_ONE_DAY,
|
||||
startTime: nowSec - 10 * SEC_IN_ONE_DAY,
|
||||
endTime: nowSec + 10 * SEC_IN_ONE_DAY}],
|
||||
];
|
||||
|
||||
for (let i=0; i<testData.length; ++i) {
|
||||
|
Loading…
Reference in New Issue
Block a user