Bug 1631609 - Test provider steering heuristic. r=valentin,johannh

Depends on D76618

Differential Revision: https://phabricator.services.mozilla.com/D76619
This commit is contained in:
Nihanth Subramanya 2020-06-04 19:02:33 +00:00
Родитель 9d6398b7db
Коммит dfa242407d
3 изменённых файлов: 86 добавлений и 1 удалений

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

@ -8,6 +8,7 @@ skip-if = debug # Bug 1548006 - reloading an addon upsets the leak checker.
[browser_doorhanger_newProfile.js]
[browser_policyOverride.js]
skip-if = (!debug && bits == 64) #Bug 1605297
[browser_providerSteering.js]
[browser_rollback.js]
skip-if = asan && !debug && os == 'linux' && bits == 64 && os_version == '18.04' # Bug 1613994 for linux1804
[browser_trrSelect.js]

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

@ -0,0 +1,77 @@
"use strict";
const TEST_DOMAIN = "doh.test";
add_task(setup);
add_task(async function testProviderSteering() {
setPassingHeuristics();
Preferences.set(prefs.DOH_ENABLED_PREF, true);
await BrowserTestUtils.waitForCondition(() => {
return Preferences.get(prefs.DOH_SELF_ENABLED_PREF);
});
is(Preferences.get(prefs.DOH_SELF_ENABLED_PREF), true, "Breadcrumb saved.");
await checkHeuristicsTelemetry("enable_doh", "startup");
let providerTestcases = [
{
name: "provider1",
canonicalName: "foo.provider1.com",
uri: "https://foo.provider1.com/query",
},
{
name: "provider2",
canonicalName: "bar.provider2.com",
uri: "https://bar.provider2.com/query",
},
];
Preferences.set(
prefs.DOH_PROVIDER_STEERING_LIST_PREF,
JSON.stringify(providerTestcases)
);
for (let { name, canonicalName, uri } of providerTestcases) {
gDNSOverride.addIPOverride(TEST_DOMAIN, "9.9.9.9");
gDNSOverride.setCnameOverride(TEST_DOMAIN, canonicalName);
let trrURIChanged = TestUtils.topicObserved(
"network:trr-uri-changed",
() => {
// We need this check because this topic is observed once immediately
// after the network change when the URI is reset, and then when the
// provider steering heuristic runs and sets it to our uri.
return gDNSService.currentTrrURI == uri;
}
);
simulateNetworkChange();
await trrURIChanged;
is(gDNSService.currentTrrURI, uri, "TRR URI set to provider endpoint");
await checkHeuristicsTelemetry("enable_doh", "netchange", name);
gDNSOverride.clearHostOverride(TEST_DOMAIN);
}
let trrURIChanged = TestUtils.topicObserved("network:trr-uri-changed");
simulateNetworkChange();
await trrURIChanged;
is(
gDNSService.currentTrrURI,
"https://dummytrr.com/query",
"TRR URI set to auto-selected"
);
await checkHeuristicsTelemetry("enable_doh", "netchange");
// Set enterprise roots enabled and ensure provider steering is disabled.
Preferences.set("security.enterprise_roots.enabled", true);
gDNSOverride.setCnameOverride(
TEST_DOMAIN,
providerTestcases[0].canonicalName
);
simulateNetworkChange();
await checkHeuristicsTelemetry("disable_doh", "netchange");
is(
gDNSService.currentTrrURI,
"https://dummytrr.com/query",
"TRR URI set to auto-selected"
);
Preferences.reset("security.enterprise_roots.enabled");
gDNSOverride.clearHostOverride(TEST_DOMAIN);
});

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

@ -52,6 +52,8 @@ const prefs = {
DOH_TRR_SELECT_DRY_RUN_RESULT_PREF:
"doh-rollout.trr-selection.dry-run-result",
DOH_PROVIDER_STEERING_PREF: "doh-rollout.provider-steering.enabled",
DOH_PROVIDER_STEERING_LIST_PREF:
"doh-rollout.provider-steering.provider-list",
PROFILE_CREATION_THRESHOLD_PREF: "doh-rollout.profileCreationThreshold",
};
@ -149,7 +151,11 @@ function ensureNoTRRSelectionTelemetry() {
is(events.length, 0, "Found no trrselect events.");
}
async function checkHeuristicsTelemetry(decision, evaluateReason) {
async function checkHeuristicsTelemetry(
decision,
evaluateReason,
steeredProvider = ""
) {
let events;
await BrowserTestUtils.waitForCondition(() => {
events = Services.telemetry.snapshotEvents(
@ -165,6 +171,7 @@ async function checkHeuristicsTelemetry(decision, evaluateReason) {
if (evaluateReason) {
is(events[0][5].evaluateReason, evaluateReason, "Got the expected reason.");
}
is(events[0][5].steeredProvider, steeredProvider, "Got expected provider.");
// After checking the event, clear all telemetry. Since we check for a single
// event above, this ensures all heuristics events are intentional and tested.