100 lines
2.7 KiB
JavaScript
100 lines
2.7 KiB
JavaScript
"use strict";
|
|
|
|
/* import-globals-from trr_common.js */
|
|
|
|
// Allow telemetry probes which may otherwise be disabled for some
|
|
// applications (e.g. Thunderbird).
|
|
Services.prefs.setBoolPref(
|
|
"toolkit.telemetry.testing.overrideProductsCheck",
|
|
true
|
|
);
|
|
|
|
let trrServer;
|
|
add_setup(async function setup() {
|
|
trr_test_setup();
|
|
|
|
registerCleanupFunction(async () => {
|
|
if (trrServer) {
|
|
await trrServer.stop();
|
|
}
|
|
trr_clear_prefs();
|
|
});
|
|
});
|
|
|
|
async function createAndStartServer() {
|
|
trrServer = new TRRServer();
|
|
await trrServer.start();
|
|
|
|
await trrServer.registerDoHAnswers("testdomain.com", "A", {
|
|
answers: [
|
|
{
|
|
name: "testdomain.com",
|
|
ttl: 55,
|
|
type: "A",
|
|
flush: false,
|
|
data: "5.5.5.5",
|
|
},
|
|
],
|
|
});
|
|
|
|
Services.prefs.setCharPref(
|
|
"network.trr.uri",
|
|
`https://foo.example.com:${trrServer.port()}/dns-query`
|
|
);
|
|
}
|
|
|
|
add_task(async function test_idle_telemetry() {
|
|
// Disable backup connection
|
|
Services.prefs.setBoolPref("network.dns.disableIPv6", true);
|
|
|
|
Services.prefs.setIntPref("network.trr.mode", Ci.nsIDNSService.MODE_TRRONLY);
|
|
|
|
await createAndStartServer();
|
|
Services.dns.clearCache(true);
|
|
Services.fog.testResetFOG();
|
|
await new TRRDNSListener("testdomain.com", { expectedAnswer: "5.5.5.5" });
|
|
|
|
let timeout = 2; // 2 seconds
|
|
await new Promise(resolve => do_timeout(timeout * 1000, resolve));
|
|
|
|
// gracefully shut down the server
|
|
await trrServer.execute(`
|
|
global.sessions.forEach(session => {
|
|
session.close();
|
|
});
|
|
global.server.close()
|
|
`);
|
|
|
|
// Small timeout to make sure telemetry gets recorded
|
|
await new Promise(resolve => do_timeout(1000, resolve));
|
|
// Kill the server.
|
|
await trrServer.stop();
|
|
|
|
let distr = await Glean.network.trrIdleCloseTimeH2.other.testGetValue();
|
|
Assert.equal(distr.count, 1, "just one connection being killed");
|
|
Assert.greater(
|
|
distr.sum,
|
|
timeout * 1000000000,
|
|
"should be slightly longer than the timeout. Note timeout is in microseconds"
|
|
);
|
|
Assert.less(
|
|
distr.sum,
|
|
timeout * 1000000000 * 1.1,
|
|
"Shouldn't be much longer than the timeout."
|
|
);
|
|
|
|
// Test again, but this time kill connections. No idle connection telemetry should be recorded.
|
|
await createAndStartServer();
|
|
Services.dns.clearCache(true);
|
|
Services.fog.testResetFOG();
|
|
await new TRRDNSListener("testdomain.com", { expectedAnswer: "5.5.5.5" });
|
|
|
|
Services.obs.notifyObservers(null, "net:cancel-all-connections");
|
|
// Small timeout to make sure telemetry gets recorded
|
|
await new Promise(resolve => do_timeout(1000, resolve));
|
|
// No telemetry should be recorded, since this is not a clean shutdown.
|
|
Assert.equal(
|
|
await Glean.network.trrIdleCloseTimeH2.other.testGetValue(),
|
|
null
|
|
);
|
|
});
|