summaryrefslogtreecommitdiffstats
path: root/netwerk/test/unit/test_trr_telemetry.js
diff options
context:
space:
mode:
Diffstat (limited to 'netwerk/test/unit/test_trr_telemetry.js')
-rw-r--r--netwerk/test/unit/test_trr_telemetry.js118
1 files changed, 118 insertions, 0 deletions
diff --git a/netwerk/test/unit/test_trr_telemetry.js b/netwerk/test/unit/test_trr_telemetry.js
new file mode 100644
index 0000000000..fff6f07774
--- /dev/null
+++ b/netwerk/test/unit/test_trr_telemetry.js
@@ -0,0 +1,118 @@
+"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
+);
+
+const { TelemetryTestUtils } = ChromeUtils.importESModule(
+ "resource://testing-common/TelemetryTestUtils.sys.mjs"
+);
+
+function setup() {
+ h2Port = trr_test_setup();
+}
+
+setup();
+registerCleanupFunction(async () => {
+ trr_clear_prefs();
+});
+
+async function trrLookup(mode, rolloutMode) {
+ let hist = TelemetryTestUtils.getAndClearKeyedHistogram(
+ "TRR_SKIP_REASON_TRR_FIRST2"
+ );
+
+ if (rolloutMode) {
+ info("Testing doh-rollout.mode");
+ setModeAndURI(0, "doh?responseIP=2.2.2.2");
+ Services.prefs.setIntPref("doh-rollout.mode", rolloutMode);
+ } else {
+ setModeAndURI(mode, "doh?responseIP=2.2.2.2");
+ }
+
+ Services.dns.clearCache(true);
+ await new TRRDNSListener("test.example.com", "2.2.2.2");
+ let expectedKey = `(other)_${mode}`;
+ if (mode == 0) {
+ expectedKey = "(other)";
+ }
+
+ let snapshot = hist.snapshot();
+ await TestUtils.waitForCondition(() => {
+ snapshot = hist.snapshot();
+ info("snapshot:" + JSON.stringify(snapshot));
+ return snapshot;
+ });
+ TelemetryTestUtils.assertKeyedHistogramValue(
+ hist,
+ expectedKey,
+ Ci.nsITRRSkipReason.TRR_OK,
+ 1
+ );
+}
+
+add_task(async function test_trr_lookup_mode_2() {
+ await trrLookup(Ci.nsIDNSService.MODE_TRRFIRST);
+});
+
+add_task(async function test_trr_lookup_mode_3() {
+ await trrLookup(Ci.nsIDNSService.MODE_TRRONLY);
+});
+
+add_task(async function test_trr_lookup_mode_0() {
+ await trrLookup(
+ Ci.nsIDNSService.MODE_NATIVEONLY,
+ Ci.nsIDNSService.MODE_TRRFIRST
+ );
+});
+
+async function trrByTypeLookup(trrURI, expectedSuccess, expectedSkipReason) {
+ Services.prefs.setIntPref(
+ "doh-rollout.mode",
+ Ci.nsIDNSService.MODE_NATIVEONLY
+ );
+
+ let hist = TelemetryTestUtils.getAndClearKeyedHistogram(
+ "TRR_RELEVANT_SKIP_REASON_TRR_FIRST_TYPE_REC"
+ );
+
+ setModeAndURI(Ci.nsIDNSService.MODE_TRRFIRST, trrURI);
+
+ Services.dns.clearCache(true);
+ await new TRRDNSListener("test.httpssvc.com", {
+ type: Ci.nsIDNSService.RESOLVE_TYPE_HTTPSSVC,
+ expectedSuccess,
+ });
+ let expectedKey = `(other)_2`;
+
+ let snapshot = hist.snapshot();
+ await TestUtils.waitForCondition(() => {
+ snapshot = hist.snapshot();
+ info("snapshot:" + JSON.stringify(snapshot));
+ return snapshot;
+ });
+
+ TelemetryTestUtils.assertKeyedHistogramValue(
+ hist,
+ expectedKey,
+ expectedSkipReason,
+ 1
+ );
+}
+
+add_task(async function test_trr_by_type_lookup_success() {
+ await trrByTypeLookup("httpssvc", true, Ci.nsITRRSkipReason.TRR_OK);
+});
+
+add_task(async function test_trr_by_type_lookup_fail() {
+ await trrByTypeLookup(
+ "doh?responseIP=none",
+ false,
+ Ci.nsITRRSkipReason.TRR_NO_ANSWERS
+ );
+});