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

Commit dd4ac2d9 authored by Mike Yu's avatar Mike Yu
Browse files

resolv: improve the tests TlsBypass and BrokenEdns

Starting up a DnsTlsFrontend server in each loop iteration is costly.
Move the start up to the beginning of the tests for speed ups.

ResolverTest.BrokenEdns: 4406 ms -> 1412 ms
ResolverTest.TlsBypass: 4102 ms -> 1142 ms

Bug: 134372242
Test: resolv_integration_test passed

Change-Id: I51bafaeb4b73f9424778c183629bd17f9ca01850
parent 0ed71283
Loading
Loading
Loading
Loading
+23 −22
Original line number Diff line number Diff line
@@ -1605,6 +1605,7 @@ TEST_F(ResolverTest, TlsBypass) {
    ASSERT_TRUE(dns.startServer());

    test::DnsTlsFrontend tls(cleartext_addr, tls_port, cleartext_addr, cleartext_port);
    ASSERT_TRUE(tls.startServer());

    struct TestConfig {
        const std::string mode;
@@ -1618,24 +1619,24 @@ TEST_F(ResolverTest, TlsBypass) {
                                method.c_str());
        }
    } testConfigs[]{
        {OFF,           false, GETHOSTBYNAME},
        {OPPORTUNISTIC, false, GETHOSTBYNAME},
        {STRICT,        false, GETHOSTBYNAME},
        {OFF,           true,  GETHOSTBYNAME},
        {OPPORTUNISTIC, true,  GETHOSTBYNAME},
        {STRICT,        true,  GETHOSTBYNAME},
        {OFF,           false, GETADDRINFO},
        {OPPORTUNISTIC, false, GETADDRINFO},
        {STRICT,        false, GETADDRINFO},
        {OFF,           true,  GETADDRINFO},
        {OPPORTUNISTIC, true,  GETADDRINFO},
        {STRICT,        true,  GETADDRINFO},
        {OFF,           false, GETADDRINFOFORNET},
        {OPPORTUNISTIC, false, GETADDRINFOFORNET},
        {STRICT,        false, GETADDRINFOFORNET},
        {OFF,           true,  GETADDRINFOFORNET},
        {OPPORTUNISTIC, true,  GETADDRINFOFORNET},
        {STRICT,        true,  GETADDRINFOFORNET},
        {OFF,           false, GETHOSTBYNAME},
        {OPPORTUNISTIC, false, GETHOSTBYNAME},
        {STRICT,        false, GETHOSTBYNAME},
        {OFF,           false, GETADDRINFO},
        {OPPORTUNISTIC, false, GETADDRINFO},
        {STRICT,        false, GETADDRINFO},
        {OFF,           false, GETADDRINFOFORNET},
        {OPPORTUNISTIC, false, GETADDRINFOFORNET},
        {STRICT,        false, GETADDRINFOFORNET},
    };

    for (const auto& config : testConfigs) {
@@ -1647,7 +1648,15 @@ TEST_F(ResolverTest, TlsBypass) {
        dns.addMapping(host_name, ns_type::ns_t_a, ADDR4);
        dns.addMapping(host_name, ns_type::ns_t_aaaa, ADDR6);

        if (config.withWorkingTLS) ASSERT_TRUE(tls.startServer());
        if (config.withWorkingTLS) {
            if (!tls.running()) {
                ASSERT_TRUE(tls.startServer());
            }
        } else {
            if (tls.running()) {
                ASSERT_TRUE(tls.stopServer());
            }
        }

        if (config.mode == OFF) {
            ASSERT_TRUE(mDnsClient.SetResolversForNetwork(servers, kDefaultSearchDomains,
@@ -1667,11 +1676,8 @@ TEST_F(ResolverTest, TlsBypass) {
                                                       {base64Encode(fingerprint)}));
            // Wait for validation to complete.
            if (config.withWorkingTLS) EXPECT_TRUE(tls.waitForQueries(1, 5000));
        } else {
            FAIL() << "Unsupported Private DNS mode: " << config.mode;
        }

        const int tlsQueriesBefore = tls.queries();
        tls.clearQueries();

        const hostent* h_result = nullptr;
        ScopedAddrinfo ai_result;
@@ -1708,16 +1714,12 @@ TEST_F(ResolverTest, TlsBypass) {
            const std::string result_str = ToString(ai_result);
            EXPECT_TRUE(result_str == ADDR4 || result_str == ADDR6)
                << ", result_str='" << result_str << "'";
        } else {
            FAIL() << "Unsupported query method: " << config.method;
        }

        const int tlsQueriesAfter = tls.queries();
        EXPECT_EQ(0, tlsQueriesAfter - tlsQueriesBefore);
        EXPECT_EQ(0, tls.queries());

        // Clear per-process resolv netid.
        ASSERT_EQ(0, setNetworkForResolv(NETID_UNSET));
        tls.stopServer();
        dns.clearQueries();
    }
}
@@ -2319,6 +2321,7 @@ TEST_F(ResolverTest, BrokenEdns) {
    ASSERT_TRUE(dns.startServer());

    test::DnsTlsFrontend tls(CLEARTEXT_ADDR, TLS_PORT, CLEARTEXT_ADDR, CLEARTEXT_PORT);
    ASSERT_TRUE(tls.startServer());

    static const struct TestConfig {
        std::string mode;
@@ -2390,13 +2393,11 @@ TEST_F(ResolverTest, BrokenEdns) {
            ASSERT_TRUE(mDnsClient.SetResolversWithTls(servers, kDefaultSearchDomains,
                                                       kDefaultParams, "", {}));
        } else if (config.mode == OPPORTUNISTIC_TLS) {
            ASSERT_TRUE(tls.startServer());
            ASSERT_TRUE(mDnsClient.SetResolversWithTls(servers, kDefaultSearchDomains,
                                                       kDefaultParams, "", {}));
            // Wait for validation to complete.
            EXPECT_TRUE(tls.waitForQueries(1, 5000));
        } else if (config.mode == STRICT) {
            ASSERT_TRUE(tls.startServer());
            ASSERT_TRUE(mDnsClient.SetResolversWithTls(servers, kDefaultSearchDomains,
                                                       kDefaultParams, "",
                                                       {base64Encode(tls.fingerprint())}));
@@ -2435,7 +2436,7 @@ TEST_F(ResolverTest, BrokenEdns) {
            FAIL() << "Unsupported query method: " << config.method;
        }

        tls.stopServer();
        tls.clearQueries();
        dns.clearQueries();
    }
}