Home / Function/ testCNAMERecursiveResolveMultipleNameServers() — netty Function Reference

testCNAMERecursiveResolveMultipleNameServers() — netty Function Reference

Architecture documentation for the testCNAMERecursiveResolveMultipleNameServers() function in DnsNameResolverTest.java from the netty codebase.

Function java Buffer Search calls 4 called by 2

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

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