1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
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
);
});
|