Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

/* Any copyright is dedicated to the Public Domain.
*/
"use strict";
async function waitForStartup() {
await ensureTRRMode(2);
await checkHeuristicsTelemetry("enable_doh", "startup");
}
async function setPrefAndWaitForConfigFlush(pref, value) {
let configFlushed = DoHTestUtils.waitForConfigFlush();
if (value) {
Preferences.set(pref, value);
} else {
Preferences.reset(pref);
}
await configFlushed;
await waitForStartup();
}
add_task(setup);
add_task(async function testTRRSelect() {
// Clean start: doh-rollout.uri should be set after init.
setPassingHeuristics();
let prefPromise = TestUtils.waitForPrefChange(prefs.BREADCRUMB_PREF);
Preferences.set(prefs.ENABLED_PREF, true);
await prefPromise;
is(Preferences.get(prefs.BREADCRUMB_PREF), true, "Breadcrumb saved.");
is(
Preferences.get(prefs.TRR_SELECT_URI_PREF),
"TRR selection complete."
);
// Wait for heuristics to complete.
await ensureTRRMode(2);
await checkHeuristicsTelemetry("enable_doh", "startup");
// Reset and restart the controller for good measure.
Preferences.reset(prefs.TRR_SELECT_DRY_RUN_RESULT_PREF);
Preferences.reset(prefs.TRR_SELECT_URI_PREF);
await restartDoHController();
await waitForStartup();
is(
Preferences.get(prefs.TRR_SELECT_URI_PREF),
"TRR selection complete."
);
// Disable committing. The committed URI should be reset to the
// default provider and the dry-run-result should persist.
prefPromise = TestUtils.waitForPrefChange(
prefs.TRR_SELECT_URI_PREF,
newVal => newVal == "https://example.com/1"
);
await setPrefAndWaitForConfigFlush(prefs.TRR_SELECT_COMMIT_PREF, false);
await prefPromise;
is(
Preferences.get(prefs.TRR_SELECT_URI_PREF),
"Default TRR selected."
);
try {
await BrowserTestUtils.waitForCondition(() => {
return !Preferences.isSet(prefs.TRR_SELECT_DRY_RUN_RESULT_PREF);
});
ok(false, "Dry run result was cleared, fail!");
} catch (e) {
ok(true, "Dry run result was not cleared.");
}
is(
Preferences.get(prefs.TRR_SELECT_DRY_RUN_RESULT_PREF),
"dry-run result has the correct value."
);
// Reset again, dry-run-result should be recorded but not
// be committed. Committing is still disabled from above.
Preferences.reset(prefs.TRR_SELECT_DRY_RUN_RESULT_PREF);
Preferences.reset(prefs.TRR_SELECT_URI_PREF);
await restartDoHController();
await waitForStartup();
try {
await BrowserTestUtils.waitForCondition(() => {
return (
Preferences.get(prefs.TRR_SELECT_URI_PREF) ==
);
});
ok(false, "Dry run result got committed, fail!");
} catch (e) {
ok(true, "Dry run result did not get committed");
}
is(
Preferences.get(prefs.TRR_SELECT_URI_PREF),
"Default TRR selected."
);
is(
Preferences.get(prefs.TRR_SELECT_DRY_RUN_RESULT_PREF),
"TRR selection complete, dry-run result recorded."
);
// Reset doh-rollout.uri, and change the dry-run-result to another one on the
// default list. After init, the existing dry-run-result should be committed.
Preferences.reset(prefs.TRR_SELECT_URI_PREF);
Preferences.set(
prefs.TRR_SELECT_DRY_RUN_RESULT_PREF,
);
prefPromise = TestUtils.waitForPrefChange(
prefs.TRR_SELECT_URI_PREF,
newVal => newVal == "https://example.com/2"
);
await setPrefAndWaitForConfigFlush(prefs.TRR_SELECT_COMMIT_PREF, true);
await prefPromise;
is(
Preferences.get(prefs.TRR_SELECT_URI_PREF),
"TRR selection complete, existing dry-run-result committed."
);
// Reset doh-rollout.uri, and change the dry-run-result to another one NOT on
// default list. After init, a new TRR should be selected and committed.
prefPromise = TestUtils.waitForPrefChange(
prefs.TRR_SELECT_URI_PREF,
newVal => newVal == "https://example.com/dns-query"
);
Preferences.reset(prefs.TRR_SELECT_URI_PREF);
Preferences.set(
prefs.TRR_SELECT_DRY_RUN_RESULT_PREF,
);
await restartDoHController();
await prefPromise;
is(
Preferences.get(prefs.TRR_SELECT_URI_PREF),
"TRR selection complete, existing dry-run-result discarded and refreshed."
);
});