Bug 1931425 - Limit how often moz-label's #setStyles runs r=reusable-components-revie...
[gecko.git] / netwerk / test / unit / test_https_rr_sorted_alpn.js
blob95284de0c3d412d6b0c1047b1750eda53e48b54f
1 /* This Source Code Form is subject to the terms of the Mozilla Public
2 * License, v. 2.0. If a copy of the MPL was not distributed with this
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
5 "use strict";
7 let trrServer;
9 const { TestUtils } = ChromeUtils.importESModule(
10 "resource://testing-common/TestUtils.sys.mjs"
13 add_setup(async function setup() {
14 trr_test_setup();
15 registerCleanupFunction(async () => {
16 trr_clear_prefs();
17 Services.prefs.clearUserPref("network.http.http3.support_version1");
18 Services.prefs.clearUserPref("security.tls.version.max");
19 if (trrServer) {
20 await trrServer.stop();
22 });
24 if (mozinfo.socketprocess_networking) {
25 Services.dns; // Needed to trigger socket process.
26 await TestUtils.waitForCondition(() => Services.io.socketProcessLaunched);
28 });
30 function checkResult(inRecord, noHttp2, noHttp3, result) {
31 if (!result) {
32 Assert.throws(
33 () => {
34 inRecord
35 .QueryInterface(Ci.nsIDNSHTTPSSVCRecord)
36 .GetServiceModeRecord(noHttp2, noHttp3);
38 /NS_ERROR_NOT_AVAILABLE/,
39 "Should get an error"
41 return;
44 let record = inRecord
45 .QueryInterface(Ci.nsIDNSHTTPSSVCRecord)
46 .GetServiceModeRecord(noHttp2, noHttp3);
47 Assert.equal(record.priority, result.expectedPriority);
48 Assert.equal(record.name, result.expectedName);
49 Assert.equal(record.selectedAlpn, result.expectedAlpn);
52 add_task(async function testSortedAlpnH3() {
53 Services.dns.clearCache(true);
55 trrServer = new TRRServer();
56 await trrServer.start();
58 Services.prefs.setIntPref("network.trr.mode", 3);
59 Services.prefs.setCharPref(
60 "network.trr.uri",
61 `https://foo.example.com:${trrServer.port()}/dns-query`
63 Services.prefs.setBoolPref("network.http.http3.support_version1", true);
64 await trrServer.registerDoHAnswers("test.alpn.com", "HTTPS", {
65 answers: [
67 name: "test.alpn.com",
68 ttl: 55,
69 type: "HTTPS",
70 flush: false,
71 data: {
72 priority: 1,
73 name: "test.alpn.com",
74 values: [{ key: "alpn", value: ["h2", "http/1.1", "h3-30", "h3"] }],
78 });
80 let { inRecord } = await new TRRDNSListener("test.alpn.com", {
81 type: Ci.nsIDNSService.RESOLVE_TYPE_HTTPSSVC,
82 });
84 checkResult(inRecord, false, false, {
85 expectedPriority: 1,
86 expectedName: "test.alpn.com",
87 expectedAlpn: "h3",
88 });
89 checkResult(inRecord, false, true, {
90 expectedPriority: 1,
91 expectedName: "test.alpn.com",
92 expectedAlpn: "h2",
93 });
94 checkResult(inRecord, true, false, {
95 expectedPriority: 1,
96 expectedName: "test.alpn.com",
97 expectedAlpn: "h3",
98 });
99 checkResult(inRecord, true, true, {
100 expectedPriority: 1,
101 expectedName: "test.alpn.com",
102 expectedAlpn: "http/1.1",
105 Services.prefs.setBoolPref("network.http.http3.support_version1", false);
106 checkResult(inRecord, false, false, {
107 expectedPriority: 1,
108 expectedName: "test.alpn.com",
109 expectedAlpn: "h3-30",
111 checkResult(inRecord, false, true, {
112 expectedPriority: 1,
113 expectedName: "test.alpn.com",
114 expectedAlpn: "h2",
116 checkResult(inRecord, true, false, {
117 expectedPriority: 1,
118 expectedName: "test.alpn.com",
119 expectedAlpn: "h3-30",
121 checkResult(inRecord, true, true, {
122 expectedPriority: 1,
123 expectedName: "test.alpn.com",
124 expectedAlpn: "http/1.1",
126 Services.prefs.setBoolPref("network.http.http3.support_version1", true);
128 // Disable TLS1.3
129 Services.prefs.setIntPref("security.tls.version.max", 3);
130 checkResult(inRecord, false, false, {
131 expectedPriority: 1,
132 expectedName: "test.alpn.com",
133 expectedAlpn: "h2",
135 checkResult(inRecord, false, true, {
136 expectedPriority: 1,
137 expectedName: "test.alpn.com",
138 expectedAlpn: "h2",
140 checkResult(inRecord, true, false, {
141 expectedPriority: 1,
142 expectedName: "test.alpn.com",
143 expectedAlpn: "http/1.1",
145 checkResult(inRecord, true, true, {
146 expectedPriority: 1,
147 expectedName: "test.alpn.com",
148 expectedAlpn: "http/1.1",
151 // Enable TLS1.3
152 Services.prefs.setIntPref("security.tls.version.max", 4);
153 checkResult(inRecord, false, false, {
154 expectedPriority: 1,
155 expectedName: "test.alpn.com",
156 expectedAlpn: "h3",
158 checkResult(inRecord, false, true, {
159 expectedPriority: 1,
160 expectedName: "test.alpn.com",
161 expectedAlpn: "h2",
163 checkResult(inRecord, true, false, {
164 expectedPriority: 1,
165 expectedName: "test.alpn.com",
166 expectedAlpn: "h3",
168 checkResult(inRecord, true, true, {
169 expectedPriority: 1,
170 expectedName: "test.alpn.com",
171 expectedAlpn: "http/1.1",
175 add_task(async function testSortedAlpnH2() {
176 Services.dns.clearCache(true);
178 Services.prefs.setIntPref("network.trr.mode", 3);
179 Services.prefs.setCharPref(
180 "network.trr.uri",
181 `https://foo.example.com:${trrServer.port()}/dns-query`
183 await trrServer.registerDoHAnswers("test.alpn_2.com", "HTTPS", {
184 answers: [
186 name: "test.alpn_2.com",
187 ttl: 55,
188 type: "HTTPS",
189 flush: false,
190 data: {
191 priority: 1,
192 name: "test.alpn_2.com",
193 values: [{ key: "alpn", value: ["http/1.1", "h2"] }],
199 let { inRecord } = await new TRRDNSListener("test.alpn_2.com", {
200 type: Ci.nsIDNSService.RESOLVE_TYPE_HTTPSSVC,
203 checkResult(inRecord, false, false, {
204 expectedPriority: 1,
205 expectedName: "test.alpn_2.com",
206 expectedAlpn: "h2",
208 checkResult(inRecord, false, true, {
209 expectedPriority: 1,
210 expectedName: "test.alpn_2.com",
211 expectedAlpn: "h2",
213 checkResult(inRecord, true, false, {
214 expectedPriority: 1,
215 expectedName: "test.alpn_2.com",
216 expectedAlpn: "http/1.1",
218 checkResult(inRecord, true, true, {
219 expectedPriority: 1,
220 expectedName: "test.alpn_2.com",
221 expectedAlpn: "http/1.1",
224 await trrServer.stop();
225 trrServer = null;