Home / Function/ testFollowNsRedirects() — netty Function Reference

testFollowNsRedirects() — netty Function Reference

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

Function java Buffer Search calls 3 called by 6

Entity Profile

Dependency Diagram

graph TD
  d2c4f806_547d_c83f_0c4a_272a5a398d07["testFollowNsRedirects()"]
  b6215f36_0afe_a284_a3fd_3999e90a8e97["DnsNameResolverTest"]
  d2c4f806_547d_c83f_0c4a_272a5a398d07 -->|defined in| b6215f36_0afe_a284_a3fd_3999e90a8e97
  2bdecd5c_adb7_56a1_7077_0b7f5c59a1d0["testFollowNsRedirectsNoopCaches()"]
  2bdecd5c_adb7_56a1_7077_0b7f5c59a1d0 -->|calls| d2c4f806_547d_c83f_0c4a_272a5a398d07
  d81f9ad1_1113_dd0e_86fb_b7e2e4b3ed21["testFollowNsRedirectsNoopDnsCache()"]
  d81f9ad1_1113_dd0e_86fb_b7e2e4b3ed21 -->|calls| d2c4f806_547d_c83f_0c4a_272a5a398d07
  ff1582c1_f10a_35d6_076c_8b48366632fd["testFollowNsRedirectsNoopAuthoritativeDnsServerCache()"]
  ff1582c1_f10a_35d6_076c_8b48366632fd -->|calls| d2c4f806_547d_c83f_0c4a_272a5a398d07
  75e48225_105d_0e15_21ba_a94afed7454c["testFollowNsRedirectsDefaultCaches()"]
  75e48225_105d_0e15_21ba_a94afed7454c -->|calls| d2c4f806_547d_c83f_0c4a_272a5a398d07
  48ebc5b6_b7e1_3b3b_55d4_944dc230153b["testFollowNsRedirectAndTrySecondNsOnTimeout()"]
  48ebc5b6_b7e1_3b3b_55d4_944dc230153b -->|calls| d2c4f806_547d_c83f_0c4a_272a5a398d07
  9aeb37f5_19fc_2fe5_b0e2_37475f79afa9["testFollowNsRedirectAndTrySecondNsOnTimeoutDefaultCaches()"]
  9aeb37f5_19fc_2fe5_b0e2_37475f79afa9 -->|calls| d2c4f806_547d_c83f_0c4a_272a5a398d07
  6379f5e9_9105_8ed2_288e_b124a4c8863f["InetSocketAddress()"]
  d2c4f806_547d_c83f_0c4a_272a5a398d07 -->|calls| 6379f5e9_9105_8ed2_288e_b124a4c8863f
  f68a278a_d1e5_7598_a2d3_c261c81029bc["get()"]
  d2c4f806_547d_c83f_0c4a_272a5a398d07 -->|calls| f68a278a_d1e5_7598_a2d3_c261c81029bc
  e0db6033_0923_3a43_22a1_11714277de6c["clear()"]
  d2c4f806_547d_c83f_0c4a_272a5a398d07 -->|calls| e0db6033_0923_3a43_22a1_11714277de6c
  style d2c4f806_547d_c83f_0c4a_272a5a398d07 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

resolver-dns/src/test/java/io/netty/resolver/dns/DnsNameResolverTest.java lines 1606–1737

    private void testFollowNsRedirects(DnsNameResolverChannelStrategy strategy, DnsCache cache,
                                       AuthoritativeDnsServerCache authoritativeDnsServerCache,
                                       final boolean invalidNsFirst) throws Exception {
        final String domain = "netty.io";
        final String ns1Name = "ns1." + domain;
        final String ns2Name = "ns2." + domain;
        final InetAddress expected = InetAddress.getByAddress("some.record." + domain, new byte[] { 10, 10, 10, 10 });

        // This is used to simulate a query timeout...
        final DatagramSocket socket = new DatagramSocket(new InetSocketAddress(0));

        final TestDnsServer dnsServerAuthority = new TestDnsServer(new RecordStore() {
            @Override
            public Set<ResourceRecord> getRecords(QuestionRecord question) {
                if (question.getDomainName().equals(expected.getHostName())) {
                    return Collections.singleton(newARecord(
                            expected.getHostName(), expected.getHostAddress()));
                }
                return Collections.emptySet();
            }
        });
        dnsServerAuthority.start();

        TestDnsServer redirectServer = new TestDnsServer(new HashSet<String>(
                asList(expected.getHostName(), ns1Name, ns2Name))) {
            @Override
            protected DnsMessage filterMessage(DnsMessage message) {
                for (QuestionRecord record: message.getQuestionRecords()) {
                    if (record.getDomainName().equals(expected.getHostName())) {
                        message.getAdditionalRecords().clear();
                        message.getAnswerRecords().clear();
                        if (invalidNsFirst) {
                            message.getAuthorityRecords().add(TestDnsServer.newNsRecord(domain, ns2Name));
                            message.getAuthorityRecords().add(TestDnsServer.newNsRecord(domain, ns1Name));
                        } else {
                            message.getAuthorityRecords().add(TestDnsServer.newNsRecord(domain, ns1Name));
                            message.getAuthorityRecords().add(TestDnsServer.newNsRecord(domain, ns2Name));
                        }
                        return message;
                    }
                }
                return message;
            }
        };
        redirectServer.start();
        EventLoopGroup group = new MultiThreadIoEventLoopGroup(1, NioIoHandler.newFactory());
        SingletonDnsServerAddressStreamProvider provider =
                new SingletonDnsServerAddressStreamProvider(redirectServer.localAddress());
        final DnsNameResolver resolver = new DnsNameResolver(
                group.next(), new ReflectiveChannelFactory<DatagramChannel>(NioDatagramChannel.class), null, false,
                cache, NoopDnsCnameCache.INSTANCE, authoritativeDnsServerCache, null,
                NoopDnsQueryLifecycleObserverFactory.INSTANCE, 2000, ResolvedAddressTypes.IPV4_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) {
                try {
                    if (server.getHostName().startsWith(ns1Name)) {
                        return new InetSocketAddress(InetAddress.getByAddress(ns1Name,
                                dnsServerAuthority.localAddress().getAddress().getAddress()),
                                dnsServerAuthority.localAddress().getPort());
                    }
                    if (server.getHostName().startsWith(ns2Name)) {
                        return new InetSocketAddress(InetAddress.getByAddress(ns2Name,
                                NetUtil.LOCALHOST.getAddress()), socket.getLocalPort());
                    }
                } catch (UnknownHostException e) {
                    throw new IllegalStateException(e);
                }
                return super.newRedirectServerAddress(server);
            }
        };

        try {
            List<InetAddress> resolved = resolver.resolveAll(expected.getHostName()).syncUninterruptibly().getNow();
            assertEquals(1, resolved.size());
            assertEquals(expected, resolved.get(0));

            List<InetAddress> resolved2 = resolver.resolveAll(expected.getHostName()).syncUninterruptibly().getNow();

Domain

Subdomains

Frequently Asked Questions

What does testFollowNsRedirects() do?
testFollowNsRedirects() is a function in the netty codebase, defined in resolver-dns/src/test/java/io/netty/resolver/dns/DnsNameResolverTest.java.
Where is testFollowNsRedirects() defined?
testFollowNsRedirects() is defined in resolver-dns/src/test/java/io/netty/resolver/dns/DnsNameResolverTest.java at line 1606.
What does testFollowNsRedirects() call?
testFollowNsRedirects() calls 3 function(s): InetSocketAddress, clear, get.
What calls testFollowNsRedirects()?
testFollowNsRedirects() is called by 6 function(s): testFollowNsRedirectAndTrySecondNsOnTimeout, testFollowNsRedirectAndTrySecondNsOnTimeoutDefaultCaches, testFollowNsRedirectsDefaultCaches, testFollowNsRedirectsNoopAuthoritativeDnsServerCache, testFollowNsRedirectsNoopCaches, testFollowNsRedirectsNoopDnsCache.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free