Skip to content

Commit

Permalink
DNSClient should send datagram requests with recursion desired flag s…
Browse files Browse the repository at this point in the history
…et - fixes #2232
  • Loading branch information
vietj committed Dec 5, 2017
1 parent 12f0188 commit 6a1825f
Show file tree
Hide file tree
Showing 3 changed files with 11 additions and 16 deletions.
2 changes: 1 addition & 1 deletion src/main/java/io/vertx/core/dns/impl/DnsClientImpl.java
Expand Up @@ -259,7 +259,7 @@ private class Query<T> {
long timerID;

public Query(String name, DnsRecordType[] types, Handler<AsyncResult<List<T>>> handler) {
this.msg = new DatagramDnsQuery(null, dnsServer, ThreadLocalRandom.current().nextInt());
this.msg = new DatagramDnsQuery(null, dnsServer, ThreadLocalRandom.current().nextInt()).setRecursionDesired(true);
for (DnsRecordType type: types) {
msg.addRecord(DnsSection.QUESTION, new DefaultDnsQuestion(name, type, DnsRecord.CLASS_IN));
}
Expand Down
4 changes: 3 additions & 1 deletion src/test/java/io/vertx/test/core/DNSTest.java
Expand Up @@ -27,6 +27,7 @@
import io.vertx.core.dns.SrvRecord;
import io.vertx.core.dns.impl.DnsClientImpl;
import io.vertx.test.fakedns.FakeDNSServer;
import org.apache.directory.server.dns.messages.DnsMessage;
import org.junit.Test;

import java.net.InetSocketAddress;
Expand Down Expand Up @@ -204,9 +205,10 @@ public void testLookup4() throws Exception {
final String ip = "10.0.0.1";
FakeDNSServer server = FakeDNSServer.testLookup4(ip);
DnsClient dns = prepareDns(server);

dns.lookup4("vertx.io", onSuccess(result -> {
assertEquals(ip, result);
DnsMessage msg = server.pollMessage();
assertTrue(msg.isRecursionDesired());
testComplete();
}));
await();
Expand Down
21 changes: 7 additions & 14 deletions src/test/java/io/vertx/test/fakedns/FakeDNSServer.java
Expand Up @@ -43,12 +43,7 @@

import java.io.IOException;
import java.net.InetSocketAddress;
import java.util.Collections;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ThreadLocalRandom;
import java.util.*;
import java.util.stream.Collectors;

/**
Expand All @@ -73,14 +68,14 @@ public static RecordStore A_store(Map<String, String> entries) {
private int port = PORT;
private final RecordStore store;
private DatagramAcceptor acceptor;
private final ThreadLocal<DnsMessage> currentMessage = new ThreadLocal<>();
private final Deque<DnsMessage> currentMessage = new ArrayDeque<>();

public FakeDNSServer(RecordStore store) {
this.store = store;
}

public DnsMessage currentDnsMessage() {
return currentMessage.get();
public synchronized DnsMessage pollMessage() {
return currentMessage.poll();
}

public InetSocketAddress localAddress() {
Expand Down Expand Up @@ -350,13 +345,11 @@ public void sessionCreated(IoSession session) throws Exception {
@Override
public void messageReceived(IoSession session, Object message) {
if (message instanceof DnsMessage) {
DnsMessage dnsMessage = (DnsMessage) message;
currentMessage.set(dnsMessage);
synchronized (FakeDNSServer.this) {
currentMessage.add((DnsMessage) message);
}
}
super.messageReceived(session, message);
if (message instanceof DnsMessage) {
currentMessage.set(null);
}
}
});

Expand Down

0 comments on commit 6a1825f

Please sign in to comment.