Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5cf83fe0 authored by Ken Chen's avatar Ken Chen
Browse files

Add test MdnsIPv6LinkLocalWithDefaultRoute

The test verifies if device can still send v6 mdns when the v6 address
is link-local with default route.

Bug: 203748535
Bug: 238583316
Test: atest
Change-Id: I612db9149c5624963592ddd1314c661ee697874f
parent 41fc0e71
Loading
Loading
Loading
Loading
+39 −0
Original line number Diff line number Diff line
@@ -7585,6 +7585,45 @@ TEST_F(ResolverMultinetworkTest, IPv6LinkLocalWithDefaultRoute) {
    EXPECT_EQ(GetNumQueriesForType(*dnsPair->dnsServer, ns_type::ns_t_aaaa, host_name), 0U);
}

// v6 mdns is expected to be sent when the IPv6 address is a link-local with a default route.
TEST_F(ResolverMultinetworkTest, MdnsIPv6LinkLocalWithDefaultRoute) {
    constexpr char v6addr[] = "::127.0.0.3";
    constexpr char v4addr[] = "127.0.0.3";
    constexpr char host_name[] = "hello.local.";
    ScopedPhysicalNetwork network = CreateScopedPhysicalNetwork(ConnectivityType::V4);
    ASSERT_RESULT_OK(network.init());

    // Add IPv6 default route
    ASSERT_TRUE(mDnsClient.netdService()
                        ->networkAddRoute(network.netId(), network.ifname(), "::/0", "")
                        .isOk());

    const Result<DnsServerPair> dnsPair = network.addIpv4Dns();
    ASSERT_RESULT_OK(dnsPair);
    StartDns(*dnsPair->dnsServer, {});

    ASSERT_TRUE(network.setDnsConfiguration());
    ASSERT_TRUE(network.startTunForwarder());

    test::DNSResponder mdnsv4("127.0.0.3", test::kDefaultMdnsListenService);
    test::DNSResponder mdnsv6("::1", test::kDefaultMdnsListenService);
    mdnsv4.setNetwork(network.netId());
    mdnsv6.setNetwork(network.netId());
    StartDns(mdnsv4, {{host_name, ns_type::ns_t_a, v4addr}});
    StartDns(mdnsv6, {{host_name, ns_type::ns_t_aaaa, v6addr}});

    auto result = android_getaddrinfofornet_wrapper("hello.local", network.netId());
    ASSERT_RESULT_OK(result);
    ScopedAddrinfo ai_result(std::move(result.value()));
    EXPECT_THAT(ToStrings(ai_result), testing::UnorderedElementsAreArray({v4addr, v6addr}));

    // make sure queries were sent & received via mdns.
    EXPECT_EQ(GetNumQueries(mdnsv4, host_name), 1U);
    EXPECT_EQ(GetNumQueries(mdnsv6, host_name), 1U);
    EXPECT_EQ(GetNumQueriesForType(*dnsPair->dnsServer, ns_type::ns_t_a, host_name), 0U);
    EXPECT_EQ(GetNumQueriesForType(*dnsPair->dnsServer, ns_type::ns_t_aaaa, host_name), 0U);
}

TEST_F(ResolverTest, NegativeValueInExperimentFlag) {
    // Test setting up different retry count and BASE_TIMEOUT_MSEC in DNS server.
    const struct TestConfig {