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/. */
8 registerCleanupFunction(async () => {
12 function makeChan(url
) {
13 let chan
= NetUtil
.newChannel({
15 loadUsingSystemPrincipal
: true,
16 }).QueryInterface(Ci
.nsIHttpChannel
);
20 function channelOpenPromise(chan
) {
21 return new Promise(resolve
=> {
22 function finish(req
, buffer
) {
23 resolve([req
, buffer
]);
25 chan
.asyncOpen(new ChannelListener(finish
));
29 add_task(async
function test_trr_casing() {
30 let trrServer
= new TRRServer();
31 registerCleanupFunction(async () => {
32 await trrServer
.stop();
34 await trrServer
.start();
35 dump(`port = ${trrServer.port()}\n`);
36 let chan
= makeChan(`https://localhost:${trrServer.port()}/test?bla=some`);
37 let [, resp
] = await
channelOpenPromise(chan
);
38 equal(resp
, "<h1> 404 Path not found: /test</h1>");
40 Services
.dns
.clearCache(true);
41 Services
.prefs
.setIntPref("network.trr.mode", 3);
42 Services
.prefs
.setCharPref(
44 `https://foo.example.com:${trrServer.port()}/dns-query`
47 // This CNAME response goes to B.example.com (uppercased)
48 // It should be lowercased by the code
49 await trrServer
.registerDoHAnswers("a.example.com", "A", {
52 name
: "a.example.com",
56 data
: "B.example.com",
60 // Like in bug 1635566, the response for B.example.com will be lowercased
61 // by the server too -> b.example.com
62 // Requesting this resource would case the browser to reject the resource
63 await trrServer
.registerDoHAnswers("B.example.com", "A", {
66 name
: "b.example.com",
70 data
: "c.example.com",
75 // The browser should request this one
76 await trrServer
.registerDoHAnswers("b.example.com", "A", {
79 name
: "b.example.com",
83 data
: "c.example.com",
87 // Finally, it gets an IP
88 await trrServer
.registerDoHAnswers("c.example.com", "A", {
91 name
: "c.example.com",
99 await
new TRRDNSListener("a.example.com", { expectedAnswer
: "1.2.3.4" });
101 await trrServer
.registerDoHAnswers("a.test.com", "A", {
112 // We try this again, this time we explicitly make sure this resource
114 await trrServer
.registerDoHAnswers("B.test.com", "A", {
125 await trrServer
.registerDoHAnswers("b.test.com", "A", {
136 await
new TRRDNSListener("a.test.com", { expectedAnswer
: "8.8.8.8" });
138 await trrServer
.registerDoHAnswers("capital.com", "A", {
149 await
new TRRDNSListener("CAPITAL.COM", { expectedAnswer
: "2.2.2.2" });
150 await
new TRRDNSListener("CAPITAL.COM.", { expectedAnswer
: "2.2.2.2" });
152 await trrServer
.stop();