testCNAMERecursiveResolveMultipleNameServers() — netty Function Reference
Architecture documentation for the testCNAMERecursiveResolveMultipleNameServers() function in DnsNameResolverTest.java from the netty codebase.
Entity Profile
Dependency Diagram
graph TD a0bec8a5_e540_50ae_f902_a2944cf3eb8c["testCNAMERecursiveResolveMultipleNameServers()"] b6215f36_0afe_a284_a3fd_3999e90a8e97["DnsNameResolverTest"] a0bec8a5_e540_50ae_f902_a2944cf3eb8c -->|defined in| b6215f36_0afe_a284_a3fd_3999e90a8e97 83e2f218_447a_3ab5_ebcc_04449abe5320["testCNAMERecursiveResolveMultipleNameServersIPv4()"] 83e2f218_447a_3ab5_ebcc_04449abe5320 -->|calls| a0bec8a5_e540_50ae_f902_a2944cf3eb8c 5ec96455_f580_240b_3908_952064b1dce2["testCNAMERecursiveResolveMultipleNameServersIPv6()"] 5ec96455_f580_240b_3908_952064b1dce2 -->|calls| a0bec8a5_e540_50ae_f902_a2944cf3eb8c 6379f5e9_9105_8ed2_288e_b124a4c8863f["InetSocketAddress()"] a0bec8a5_e540_50ae_f902_a2944cf3eb8c -->|calls| 6379f5e9_9105_8ed2_288e_b124a4c8863f 320a7bb7_1770_5812_3b9d_752bd44edf24["cache()"] a0bec8a5_e540_50ae_f902_a2944cf3eb8c -->|calls| 320a7bb7_1770_5812_3b9d_752bd44edf24 f68a278a_d1e5_7598_a2d3_c261c81029bc["get()"] a0bec8a5_e540_50ae_f902_a2944cf3eb8c -->|calls| f68a278a_d1e5_7598_a2d3_c261c81029bc df4510f5_88a8_20fd_2366_a4c543cdf3b8["resolve()"] a0bec8a5_e540_50ae_f902_a2944cf3eb8c -->|calls| df4510f5_88a8_20fd_2366_a4c543cdf3b8 style a0bec8a5_e540_50ae_f902_a2944cf3eb8c fill:#6366f1,stroke:#818cf8,color:#fff
Relationship Graph
Source Code
resolver-dns/src/test/java/io/netty/resolver/dns/DnsNameResolverTest.java lines 1032–1128
private static void testCNAMERecursiveResolveMultipleNameServers(DnsNameResolverChannelStrategy strategy,
boolean ipv4Preferred) throws IOException {
final String firstName = "firstname.nettyfoo.com";
final String lastName = "lastname.nettybar.com";
final String ipv4Addr = "1.2.3.4";
final String ipv6Addr = "::1";
final AtomicBoolean hitServer2 = new AtomicBoolean();
final TestDnsServer dnsServer2 = new TestDnsServer(new RecordStore() {
@Override
public Set<ResourceRecord> getRecords(QuestionRecord question) throws DnsException {
hitServer2.set(true);
if (question.getDomainName().equals(firstName)) {
ResourceRecordModifier rm = new ResourceRecordModifier();
rm.setDnsClass(RecordClass.IN);
rm.setDnsName(question.getDomainName());
rm.setDnsTtl(100);
rm.setDnsType(RecordType.CNAME);
rm.put(DnsAttribute.DOMAIN_NAME, lastName);
return Collections.singleton(rm.getEntry());
} else {
throw new DnsException(ResponseCode.REFUSED);
}
}
});
final TestDnsServer dnsServer3 = new TestDnsServer(new RecordStore() {
@Override
public Set<ResourceRecord> getRecords(QuestionRecord question) throws DnsException {
if (question.getDomainName().equals(lastName)) {
ResourceRecordModifier rm = new ResourceRecordModifier();
rm.setDnsClass(RecordClass.IN);
rm.setDnsName(question.getDomainName());
rm.setDnsTtl(100);
rm.setDnsType(question.getRecordType());
switch (question.getRecordType()) {
case A:
rm.put(DnsAttribute.IP_ADDRESS, ipv4Addr);
break;
case AAAA:
rm.put(DnsAttribute.IP_ADDRESS, ipv6Addr);
break;
default:
return null;
}
return Collections.singleton(rm.getEntry());
} else {
throw new DnsException(ResponseCode.REFUSED);
}
}
});
dnsServer2.start();
dnsServer3.start();
DnsNameResolver resolver = null;
try {
AuthoritativeDnsServerCache nsCache = new DefaultAuthoritativeDnsServerCache();
// What we want to test is the following:
// 1. Do a DNS query.
// 2. CNAME is returned, we want to lookup that CNAME on multiple DNS servers
// 3. The first DNS server should fail
// 4. The second DNS server should succeed
// This verifies that we do in fact follow multiple DNS servers in the CNAME resolution.
// The DnsCache is used for the name server cache, but doesn't provide a InetSocketAddress (only InetAddress
// so no port), so we only specify the name server in the cache, and then specify both name servers in the
// fallback name server provider.
nsCache.cache("nettyfoo.com.", dnsServer2.localAddress(), 10000, group.next());
SequentialDnsServerAddressStreamProvider provider =
new SequentialDnsServerAddressStreamProvider(dnsServer2.localAddress(), dnsServer3.localAddress());
resolver = new DnsNameResolver(
group.next(), new ReflectiveChannelFactory<DatagramChannel>(NioDatagramChannel.class), null,
false, NoopDnsCache.INSTANCE, NoopDnsCnameCache.INSTANCE, nsCache, null,
NoopDnsQueryLifecycleObserverFactory.INSTANCE, 3000,
ipv4Preferred ? ResolvedAddressTypes.IPV4_ONLY : ResolvedAddressTypes.IPV6_ONLY, true,
10, true, 4096, false, HostsFileEntriesResolver.DEFAULT,
provider, new ThreadLocalNameServerAddressStream(provider),
DnsNameResolver.DEFAULT_SEARCH_DOMAINS, 0, true, false, 0, strategy) {
@Override
InetSocketAddress newRedirectServerAddress(InetAddress server) {
int port = hitServer2.get() ? dnsServer3.localAddress().getPort() :
dnsServer2.localAddress().getPort();
return new InetSocketAddress(server, port);
}
Domain
Subdomains
Called By
Source
Frequently Asked Questions
What does testCNAMERecursiveResolveMultipleNameServers() do?
testCNAMERecursiveResolveMultipleNameServers() is a function in the netty codebase, defined in resolver-dns/src/test/java/io/netty/resolver/dns/DnsNameResolverTest.java.
Where is testCNAMERecursiveResolveMultipleNameServers() defined?
testCNAMERecursiveResolveMultipleNameServers() is defined in resolver-dns/src/test/java/io/netty/resolver/dns/DnsNameResolverTest.java at line 1032.
What does testCNAMERecursiveResolveMultipleNameServers() call?
testCNAMERecursiveResolveMultipleNameServers() calls 4 function(s): InetSocketAddress, cache, get, resolve.
What calls testCNAMERecursiveResolveMultipleNameServers()?
testCNAMERecursiveResolveMultipleNameServers() is called by 2 function(s): testCNAMERecursiveResolveMultipleNameServersIPv4, testCNAMERecursiveResolveMultipleNameServersIPv6.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free