Bug 1857386 [wpt PR 42383] - Update wpt metadata, a=testonly
[gecko.git] / netwerk / test / unit / test_dns_service.js
blobda404c1e7d2d725e29c09185686d5ace305442ad
1 "use strict";
3 const defaultOriginAttributes = {};
4 const mainThread = Services.tm.currentThread;
6 const overrideService = Cc[
7   "@mozilla.org/network/native-dns-override;1"
8 ].getService(Ci.nsINativeDNSResolverOverride);
10 class Listener {
11   constructor() {
12     this.promise = new Promise(resolve => {
13       this.resolve = resolve;
14     });
15   }
17   onLookupComplete(inRequest, inRecord, inStatus) {
18     this.resolve([inRequest, inRecord, inStatus]);
19   }
21   then() {
22     return this.promise.then.apply(this.promise, arguments);
23   }
26 Listener.prototype.QueryInterface = ChromeUtils.generateQI(["nsIDNSListener"]);
28 const DOMAIN_IDN = "bücher.org";
29 const ACE_IDN = "xn--bcher-kva.org";
31 const ADDR1 = "127.0.0.1";
32 const ADDR2 = "::1";
34 add_task(async function test_dns_localhost() {
35   let listener = new Listener();
36   Services.dns.asyncResolve(
37     "localhost",
38     Ci.nsIDNSService.RESOLVE_TYPE_DEFAULT,
39     0,
40     null, // resolverInfo
41     listener,
42     mainThread,
43     defaultOriginAttributes
44   );
45   let [, inRecord] = await listener;
46   inRecord.QueryInterface(Ci.nsIDNSAddrRecord);
47   let answer = inRecord.getNextAddrAsString();
48   Assert.ok(answer == ADDR1 || answer == ADDR2);
49 });
51 add_task(async function test_idn_cname() {
52   let listener = new Listener();
53   Services.dns.asyncResolve(
54     DOMAIN_IDN,
55     Ci.nsIDNSService.RESOLVE_TYPE_DEFAULT,
56     Ci.nsIDNSService.RESOLVE_CANONICAL_NAME,
57     null, // resolverInfo
58     listener,
59     mainThread,
60     defaultOriginAttributes
61   );
62   let [, inRecord] = await listener;
63   inRecord.QueryInterface(Ci.nsIDNSAddrRecord);
64   Assert.equal(inRecord.canonicalName, ACE_IDN, "IDN is returned as punycode");
65 });
67 add_task(
68   {
69     skip_if: () =>
70       Services.appinfo.processType != Ci.nsIXULRuntime.PROCESS_TYPE_DEFAULT,
71   },
72   async function test_long_domain() {
73     let listener = new Listener();
74     let domain = "a".repeat(253);
75     overrideService.addIPOverride(domain, "1.2.3.4");
76     Services.dns.asyncResolve(
77       domain,
78       Ci.nsIDNSService.RESOLVE_TYPE_DEFAULT,
79       Ci.nsIDNSService.RESOLVE_CANONICAL_NAME,
80       null, // resolverInfo
81       listener,
82       mainThread,
83       defaultOriginAttributes
84     );
85     let [, , inStatus] = await listener;
86     Assert.equal(inStatus, Cr.NS_OK);
88     listener = new Listener();
89     domain = "a".repeat(254);
90     overrideService.addIPOverride(domain, "1.2.3.4");
92     if (mozinfo.socketprocess_networking) {
93       // When using the socket process, the call fails asynchronously.
94       Services.dns.asyncResolve(
95         domain,
96         Ci.nsIDNSService.RESOLVE_TYPE_DEFAULT,
97         Ci.nsIDNSService.RESOLVE_CANONICAL_NAME,
98         null, // resolverInfo
99         listener,
100         mainThread,
101         defaultOriginAttributes
102       );
103       let [, , inStatus1] = await listener;
104       Assert.equal(inStatus1, Cr.NS_ERROR_UNKNOWN_HOST);
105     } else {
106       Assert.throws(
107         () => {
108           Services.dns.asyncResolve(
109             domain,
110             Ci.nsIDNSService.RESOLVE_TYPE_DEFAULT,
111             Ci.nsIDNSService.RESOLVE_CANONICAL_NAME,
112             null, // resolverInfo
113             listener,
114             mainThread,
115             defaultOriginAttributes
116           );
117         },
118         /NS_ERROR_UNKNOWN_HOST/,
119         "Should throw for large domains"
120       );
121     }
122   }