1
0
Fork 0
firefox/toolkit/components/doh/test/unit/test_heuristics.js
Daniel Baumann 5e9a113729
Adding upstream version 140.0.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
2025-06-25 09:37:52 +02:00

186 lines
4.2 KiB
JavaScript

/* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/
*/
"use strict";
const { MockRegistrar } = ChromeUtils.importESModule(
"resource://testing-common/MockRegistrar.sys.mjs"
);
let cid;
async function SetMockParentalControlEnabled(aEnabled) {
if (cid) {
MockRegistrar.unregister(cid);
}
let parentalControlsService = {
parentalControlsEnabled: aEnabled,
QueryInterface: ChromeUtils.generateQI(["nsIParentalControlsService"]),
};
cid = MockRegistrar.register(
"@mozilla.org/parental-controls-service;1",
parentalControlsService
);
}
registerCleanupFunction(() => {
if (cid) {
MockRegistrar.unregister(cid);
}
});
add_task(setup);
add_task(async function test_parentalControls() {
let DoHHeuristics = ChromeUtils.importESModule(
"resource://gre/modules/DoHHeuristics.sys.mjs"
);
let parentalControls = DoHHeuristics.parentalControls;
Assert.equal(
await parentalControls(),
"enable_doh",
"By default, parental controls should be disabled and doh should be enabled"
);
SetMockParentalControlEnabled(false);
Assert.equal(
await parentalControls(),
"enable_doh",
"Mocked parental controls service is disabled; doh is enabled"
);
SetMockParentalControlEnabled(true);
Assert.equal(
await parentalControls(),
"enable_doh",
"Default value of mocked parental controls service is disabled; doh is enabled"
);
SetMockParentalControlEnabled(false);
Assert.equal(
await parentalControls(),
"enable_doh",
"Mocked parental controls service is disabled; doh is enabled"
);
MockRegistrar.unregister(cid);
Assert.equal(
await parentalControls(),
"enable_doh",
"By default, parental controls should be disabled and doh should be enabled"
);
});
add_task(async function test_canary() {
let DoHHeuristics = ChromeUtils.importESModule(
"resource://gre/modules/DoHHeuristics.sys.mjs"
);
const override = Cc["@mozilla.org/network/native-dns-override;1"].getService(
Ci.nsINativeDNSResolverOverride
);
function setCanary(ip, pre, post) {
override.clearOverrides();
override.addIPOverride("use-application-dns.net.", ip);
if (!pre) {
pre = "1.2.3.4";
}
if (!post) {
post = "1.2.3.4";
}
override.addIPOverride("firefox.com.", pre);
override.addIPOverride("mozilla.org.", post);
}
setCanary("1.2.3.4");
Assert.equal(
await DoHHeuristics.globalCanary(),
"enable_doh",
"Canary should not be triggered"
);
setCanary("0.0.0.0");
Assert.equal(
await DoHHeuristics.globalCanary(),
"disable_doh",
"Canary should be triggered"
);
setCanary("127.0.0.1");
Assert.equal(
await DoHHeuristics.globalCanary(),
"disable_doh",
"Canary should be triggered"
);
setCanary("::1");
Assert.equal(
await DoHHeuristics.globalCanary(),
"disable_doh",
"Canary should be triggered"
);
setCanary("192.168.1.1");
Assert.equal(
await DoHHeuristics.globalCanary(),
"disable_doh",
"Canary should be triggered"
);
setCanary("10.1.1.1");
Assert.equal(
await DoHHeuristics.globalCanary(),
"disable_doh",
"Canary should be triggered"
);
setCanary("N/A");
Assert.equal(
await DoHHeuristics.globalCanary(),
"disable_doh",
"Canary should be triggered"
);
Services.io.offline = true;
setCanary("N/A");
Assert.equal(
await DoHHeuristics.globalCanary(),
"enable_doh",
"Canary should not be triggered when offline"
);
Services.io.offline = false;
Assert.equal(
await DoHHeuristics.globalCanary(),
"disable_doh",
"Canary should be triggered when online"
);
setCanary("N/A", "N/A", "1.2.3.4");
Assert.equal(
await DoHHeuristics.globalCanary(),
"enable_doh",
"Canary should not be triggered when precondition fails"
);
setCanary("N/A", "1.2.3.4", "N/A");
Assert.equal(
await DoHHeuristics.globalCanary(),
"enable_doh",
"Canary should not be triggered when postcondition fails"
);
setCanary("N/A", "N/A", "N/A");
Assert.equal(
await DoHHeuristics.globalCanary(),
"enable_doh",
"Canary should not be triggered when pre&postcondition fails"
);
override.clearOverrides();
});