Harden TLS fingerprint test against flakiness
This change might reduce the flakiness of this test, and
also might help debug any future issues with it.
Bug: 64779303
Test: Tests continue to pass for me
Change-Id: I3a71b12f4ee3749c70210f1c19ca924473756fd5
diff --git a/tests/netd_test.cpp b/tests/netd_test.cpp
index 0217f5b..6759f3f 100644
--- a/tests/netd_test.cpp
+++ b/tests/netd_test.cpp
@@ -743,6 +743,9 @@
.sin_port = htons(853),
};
ASSERT_TRUE(inet_pton(AF_INET, listen_addr, &tlsServer.sin_addr));
+ const int one = 1;
+ setsockopt(s, SOL_SOCKET, SO_REUSEPORT, &one, sizeof(one));
+ setsockopt(s, SOL_SOCKET, SO_REUSEADDR, &one, sizeof(one));
ASSERT_FALSE(bind(s, reinterpret_cast<struct sockaddr*>(&tlsServer), sizeof(tlsServer)));
ASSERT_FALSE(listen(s, 1));
@@ -832,19 +835,23 @@
TEST_F(ResolverTest, GetHostByName_TlsFingerprint) {
const char* listen_addr = "127.0.0.3";
const char* listen_udp = "53";
- const char* listen_tls = "853";
+ test::DNSResponder dns(listen_addr, listen_udp, 250, ns_rcode::ns_r_servfail, 1.0);
+ ASSERT_TRUE(dns.startServer());
for (int chain_length = 1; chain_length <= 3; ++chain_length) {
const char* host_name = StringPrintf("tlsfingerprint%d.example.com.", chain_length).c_str();
- test::DNSResponder dns(listen_addr, listen_udp, 250, ns_rcode::ns_r_servfail, 1.0);
dns.addMapping(host_name, ns_type::ns_t_a, "1.2.3.1");
- ASSERT_TRUE(dns.startServer());
std::vector<std::string> servers = { listen_addr };
+ // Run each TLS server on a new port to avoid any possible races related to reopening
+ // sockets that were just closed.
+ int tls_port = 853 + chain_length;
+ const char* listen_tls = std::to_string(tls_port).c_str();
test::DnsTlsFrontend tls(listen_addr, listen_tls, listen_addr, listen_udp);
tls.set_chain_length(chain_length);
ASSERT_TRUE(tls.startServer());
- auto rv = mNetdSrv->addPrivateDnsServer(listen_addr, 853, "SHA-256",
+ auto rv = mNetdSrv->addPrivateDnsServer(listen_addr, tls_port, "SHA-256",
{ base64Encode(tls.fingerprint()) });
+ EXPECT_EQ(0, rv.exceptionCode());
ASSERT_TRUE(SetResolversForNetwork(mDefaultSearchDomains, servers, mDefaultParams));
const hostent* result;
@@ -862,9 +869,10 @@
}
rv = mNetdSrv->removePrivateDnsServer(listen_addr);
+ EXPECT_EQ(0, rv.exceptionCode());
tls.stopServer();
- dns.stopServer();
}
+ dns.stopServer();
}
TEST_F(ResolverTest, GetHostByName_BadTlsFingerprint) {