147 lines
4.5 KiB
JavaScript
147 lines
4.5 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
* http://creativecommons.org/publicdomain/zero/1.0/
|
|
*/
|
|
|
|
"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),
|
|
"https://example.com/dns-query",
|
|
"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),
|
|
"https://example.com/dns-query",
|
|
"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),
|
|
"https://example.com/1",
|
|
"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),
|
|
"https://example.com/dns-query",
|
|
"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) ==
|
|
"https://example.com/dns-query"
|
|
);
|
|
});
|
|
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),
|
|
"https://example.com/1",
|
|
"Default TRR selected."
|
|
);
|
|
is(
|
|
Preferences.get(prefs.TRR_SELECT_DRY_RUN_RESULT_PREF),
|
|
"https://example.com/dns-query",
|
|
"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,
|
|
"https://example.com/2"
|
|
);
|
|
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),
|
|
"https://example.com/2",
|
|
"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,
|
|
"https://example.com/4"
|
|
);
|
|
await restartDoHController();
|
|
await prefPromise;
|
|
is(
|
|
Preferences.get(prefs.TRR_SELECT_URI_PREF),
|
|
"https://example.com/dns-query",
|
|
"TRR selection complete, existing dry-run-result discarded and refreshed."
|
|
);
|
|
});
|