mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-30 21:55:31 +00:00
80 lines
3.2 KiB
JavaScript
80 lines
3.2 KiB
JavaScript
var dns = Cc["@mozilla.org/network/dns-service;1"].getService(Ci.nsIDNSService);
|
|
|
|
// This test checks DNSService host resolver when a network interface is supplied
|
|
// as well. In the test 3 request are sent: two with a network interface set
|
|
// and one without a network interface.
|
|
// All requests have the same host to be resolved and the same flags.
|
|
// One of the request with the network interface will be canceled.
|
|
// The request with and without a network interface should not be mixed during
|
|
// the requests lifetime.
|
|
|
|
var netInterface1 = "interface1";
|
|
var netInterface2 = "interface2";
|
|
|
|
// We are not using localhost because on e10s a host resolve callback is almost
|
|
// always faster than a cancel request, therefore cancel operation would not be
|
|
// tested.
|
|
var hostname = "thisshouldnotexist.mozilla.com";
|
|
|
|
// 3 requests.
|
|
var requestWithInterfaceCanceled;
|
|
var requestWithoutInterfaceNotCanceled;
|
|
var requestWithInterfaceNotCanceled;
|
|
|
|
var listener = {
|
|
onLookupComplete: function(inRequest, inRecord, inStatus) {
|
|
// Two requests should be resolved and one request should be canceled.
|
|
// Since cancalation of a request is racy we will check only for not
|
|
// canceled request - they should not be canceled.
|
|
if ((inRequest == requestWithoutInterfaceNotCanceled) ||
|
|
(inRequest == requestWithInterfaceNotCanceled)) {
|
|
// This request should not be canceled.
|
|
do_check_neq(inStatus, Cr.NS_ERROR_ABORT);
|
|
|
|
do_test_finished();
|
|
} else if (inRequest == requestWithInterfaceCanceled) {
|
|
// We do not check the outcome for this one because it is racy -
|
|
// whether the request cancelation is faster than resolving the request.
|
|
do_test_finished();
|
|
}
|
|
},
|
|
QueryInterface: function(aIID) {
|
|
if (aIID.equals(Ci.nsIDNSListener) ||
|
|
aIID.equals(Ci.nsISupports)) {
|
|
return this;
|
|
}
|
|
throw Cr.NS_ERROR_NO_INTERFACE;
|
|
}
|
|
};
|
|
|
|
function run_test() {
|
|
var threadManager = Cc["@mozilla.org/thread-manager;1"]
|
|
.getService(Ci.nsIThreadManager);
|
|
var mainThread = threadManager.currentThread;
|
|
|
|
var flags = Ci.nsIDNSService.RESOLVE_BYPASS_CACHE;
|
|
|
|
// This one will be canceled.
|
|
requestWithInterfaceCanceled = dns.asyncResolveExtended(hostname, flags,
|
|
netInterface1,
|
|
listener,
|
|
mainThread);
|
|
requestWithInterfaceCanceled.cancel(Cr.NS_ERROR_ABORT);
|
|
|
|
// This one will not be canceled. This is the request without a network
|
|
// interface.
|
|
requestWithoutInterfaceNotCanceled = dns.asyncResolve(hostname, flags,
|
|
listener, mainThread);
|
|
|
|
// This one will not be canceled.
|
|
requestWithInterfaceNotCanceled = dns.asyncResolveExtended(hostname, flags,
|
|
netInterface2,
|
|
listener,
|
|
mainThread);
|
|
// We wait for notifications for the requests.
|
|
// For each request onLookupComplete will be called.
|
|
do_test_pending();
|
|
do_test_pending();
|
|
do_test_pending();
|
|
}
|