Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Errors

"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
);
});