Bug 1659157 - Add testing for allowed app sources telemetry r=chutten

Differential Revision: https://phabricator.services.mozilla.com/D89191
This commit is contained in:
Kirk Steuber 2020-09-09 17:35:32 +00:00
Родитель 6f0c1a1b97
Коммит 4724b9dd94
2 изменённых файлов: 109 добавлений и 0 удалений

Просмотреть файл

@ -0,0 +1,107 @@
/* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/
*/
"use strict";
const { OsEnvironment } = ChromeUtils.import(
"resource://gre/modules/OsEnvironment.jsm"
);
const { TelemetryTestUtils } = ChromeUtils.import(
"resource://testing-common/TelemetryTestUtils.jsm"
);
// Valid values that telemetry might report. Except for "Error" and
// "NoSuchFeature", these are also the values that we read from the registry.
var APP_SOURCE_ANYWHERE = "Anywhere";
var APP_SOURCE_RECOMMENDATIONS = "Recommendations";
var APP_SOURCE_PREFER_STORE = "PreferStore";
var APP_SOURCE_STORE_ONLY = "StoreOnly";
var APP_SOURCE_NO_SUCH_FEATURE = "NoSuchFeature";
var APP_SOURCE_COLLECTION_ERROR = "Error";
// This variable will store the value that we will fake reading from the
// registry (i.e. the value that would normally be read from
// SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\AicEnabled"). A value
// of undefined represents the registry value not existing.
var gRegistryData;
// If this is set to true, we will throw an exception rather than providing a
// value when Policy.getAllowedAppSources is called.
var gErrorReadingRegistryValue = false;
// This holds the value that Policy.windowsVersionHasAppSourcesFeature will
// return, to allow us to simulate detection of operating system versions
// without the App Sources feature.
var gHaveAppSourcesFeature = true;
// If this is set to true, we will throw an exception rather than providing a
// value when Policy.windowsVersionHasAppSourcesFeature is called.
var gErrorDetectingAppSourcesFeature = false;
function setup() {
// Mock up the function that gets the allowed app sources so we don't actually
// have to change OS settings to test.
OsEnvironment.Policy.getAllowedAppSources = () => {
if (gErrorReadingRegistryValue) {
throw new Error("Arbitrary Testing Error");
}
// To mimic the normal functionality here, we want to return undefined if
// the registry value doesn't exist. But that is already how we are
// representing that state in gRegistryData. So no conversion is necessary.
return gRegistryData;
};
OsEnvironment.Policy.windowsVersionHasAppSourcesFeature = () => {
if (gErrorDetectingAppSourcesFeature) {
throw new Error("Arbitrary Testing Error");
}
return gHaveAppSourcesFeature;
};
}
function runTest(
{
registryData = "",
registryValueExists = true,
registryReadError = false,
osHasAppSourcesFeature = true,
errorDetectingAppSourcesFeature = false,
},
expectedScalarValue
) {
if (registryValueExists) {
gRegistryData = registryData;
} else {
gRegistryData = undefined;
}
gErrorReadingRegistryValue = registryReadError;
gHaveAppSourcesFeature = osHasAppSourcesFeature;
gErrorDetectingAppSourcesFeature = errorDetectingAppSourcesFeature;
OsEnvironment.reportAllowedAppSources();
const scalars = TelemetryTestUtils.getProcessScalars("parent");
// Can't use TelemetryTestUtils.assertScalar here. It does not currently work
// for strings. See Bug 1633883.
const scalarName = "os.environment.allowed_app_sources";
Assert.ok(
scalarName in scalars && scalars[scalarName] === expectedScalarValue,
"The allowed app sources reported should match the expected sources"
);
}
add_task(async function testAppSources() {
setup();
runTest({ registryData: APP_SOURCE_ANYWHERE }, APP_SOURCE_ANYWHERE);
runTest(
{ registryData: APP_SOURCE_RECOMMENDATIONS },
APP_SOURCE_RECOMMENDATIONS
);
runTest({ registryData: APP_SOURCE_PREFER_STORE }, APP_SOURCE_PREFER_STORE);
runTest({ registryData: APP_SOURCE_STORE_ONLY }, APP_SOURCE_STORE_ONLY);
runTest({ registryValueExists: false }, APP_SOURCE_ANYWHERE);
runTest({ registryReadError: true }, APP_SOURCE_COLLECTION_ERROR);
runTest({ registryData: "UnexpectedValue" }, APP_SOURCE_COLLECTION_ERROR);
runTest({ osHasAppSourcesFeature: false }, APP_SOURCE_NO_SUCH_FEATURE);
runTest(
{ errorDetectingAppSourcesFeature: true },
APP_SOURCE_COLLECTION_ERROR
);
});

Просмотреть файл

@ -63,3 +63,5 @@ reason = LOCALE is not defined without MOZ_UPDATER
[test_ProfileAge.js]
[test_firstStartup.js]
skip-if = toolkit == 'android'
[test_AllowedAppSources.js]
skip-if = os != 'win' # Test of a Windows-specific feature