diff options
author | Mike Yu <yumike@google.com> | 2023-11-10 03:36:48 +0000 |
---|---|---|
committer | Mike Yu <yumike@google.com> | 2023-11-20 11:45:48 +0000 |
commit | f47c007446cbb459bdab1e6f1cb778d2a41b0dca (patch) | |
tree | 4be09e632f34453c9695396b5e2b194d60e582d7 | |
parent | 4f4f57a842138b76534743789b7914303f0d63b9 (diff) | |
download | DnsResolver-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.cpp | 20 | ||||
-rw-r--r-- | tests/unsolicited_listener/unsolicited_event_listener.cpp | 19 |
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(); |