aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Yu <yumike@google.com>2023-11-10 03:36:48 +0000
committerMike Yu <yumike@google.com>2023-11-20 11:45:48 +0000
commitf47c007446cbb459bdab1e6f1cb778d2a41b0dca (patch)
tree4be09e632f34453c9695396b5e2b194d60e582d7
parent4f4f57a842138b76534743789b7914303f0d63b9 (diff)
downloadDnsResolver-f47c007446cbb459bdab1e6f1cb778d2a41b0dca.tar.gz
Test: Use condition_variable to wait for onDnsEvent
This CL improves the test running time. ResolverTest.BrokenEdns: 8197ms -> 7667ms The timeout for onDnsEvent is changed from 1s to 5s. Bug: 310108475 Test: resolv_integration_test passed Change-Id: Ic881dcd58dcfb6b4fd66cbb91db10c6660325808
-rw-r--r--tests/dns_metrics_listener/dns_metrics_listener.cpp20
-rw-r--r--tests/unsolicited_listener/unsolicited_event_listener.cpp19
2 files changed, 14 insertions, 25 deletions
diff --git a/tests/dns_metrics_listener/dns_metrics_listener.cpp b/tests/dns_metrics_listener/dns_metrics_listener.cpp
index 2ce99966..c1d4883d 100644
--- a/tests/dns_metrics_listener/dns_metrics_listener.cpp
+++ b/tests/dns_metrics_listener/dns_metrics_listener.cpp
@@ -18,7 +18,6 @@
#include <thread>
-#include <android-base/chrono_utils.h>
#include <android-base/format.h>
namespace android::net::metrics {
@@ -26,7 +25,6 @@ namespace android::net::metrics {
using android::base::ScopedLockAssertion;
using std::chrono::milliseconds;
-constexpr milliseconds kRetryIntervalMs{20};
constexpr milliseconds kEventTimeoutMs{5000};
bool DnsMetricsListener::DnsEvent::operator==(const DnsMetricsListener::DnsEvent& o) const {
@@ -73,6 +71,7 @@ std::ostream& operator<<(std::ostream& os, const DnsMetricsListener::DnsEvent& d
mDnsEventRecords.push(
{netId, eventType, returnCode, hostname, ipAddresses, ipAddressesCount});
}
+ mCv.notify_all();
return ::ndk::ScopedAStatus::ok();
}
@@ -110,18 +109,13 @@ bool DnsMetricsListener::findAndRemoveValidationRecord(const ServerKey& key, con
}
std::optional<DnsMetricsListener::DnsEvent> DnsMetricsListener::popDnsEvent() {
- // Wait until the queue is not empty or timeout.
- android::base::Timer t;
- while (t.duration() < milliseconds{1000}) {
- {
- std::lock_guard lock(mMutex);
- if (!mDnsEventRecords.empty()) break;
- }
- std::this_thread::sleep_for(kRetryIntervalMs);
- }
+ std::unique_lock lock(mMutex);
+ ScopedLockAssertion assume_lock(mMutex);
- std::lock_guard lock(mMutex);
- if (mDnsEventRecords.empty()) return std::nullopt;
+ if (!mCv.wait_for(lock, kEventTimeoutMs,
+ [&]() REQUIRES(mMutex) { return !mDnsEventRecords.empty(); })) {
+ return std::nullopt;
+ }
auto ret = mDnsEventRecords.front();
mDnsEventRecords.pop();
diff --git a/tests/unsolicited_listener/unsolicited_event_listener.cpp b/tests/unsolicited_listener/unsolicited_event_listener.cpp
index bae42754..b337496f 100644
--- a/tests/unsolicited_listener/unsolicited_event_listener.cpp
+++ b/tests/unsolicited_listener/unsolicited_event_listener.cpp
@@ -33,11 +33,11 @@ using android::base::ScopedLockAssertion;
using std::chrono::milliseconds;
constexpr milliseconds kEventTimeoutMs{5000};
-constexpr milliseconds kRetryIntervalMs{20};
::ndk::ScopedAStatus UnsolicitedEventListener::onDnsHealthEvent(const DnsHealthEventParcel& event) {
std::lock_guard lock(mMutex);
if (event.netId == mNetId) mDnsHealthResultRecords.push(event.healthResult);
+ mCv.notify_all();
return ::ndk::ScopedAStatus::ok();
}
@@ -105,18 +105,13 @@ bool UnsolicitedEventListener::waitForNat64Prefix(int operation, const milliseco
}
Result<int> UnsolicitedEventListener::popDnsHealthResult() {
- // Wait until the queue is not empty or timeout.
- android::base::Timer t;
- while (t.duration() < milliseconds{1000}) {
- {
- std::lock_guard lock(mMutex);
- if (!mDnsHealthResultRecords.empty()) break;
- }
- std::this_thread::sleep_for(kRetryIntervalMs);
- }
+ std::unique_lock lock(mMutex);
+ ScopedLockAssertion assume_lock(mMutex);
- std::lock_guard lock(mMutex);
- if (mDnsHealthResultRecords.empty()) return Error() << "Dns health result record is empty";
+ if (!mCv.wait_for(lock, kEventTimeoutMs,
+ [&]() REQUIRES(mMutex) { return !mDnsHealthResultRecords.empty(); })) {
+ return Error() << "Dns health result record is empty";
+ }
auto ret = mDnsHealthResultRecords.front();
mDnsHealthResultRecords.pop();