aboutsummaryrefslogtreecommitdiff
path: root/tests/unsolicited_listener
diff options
context:
space:
mode:
authorpaulhu <paulhu@google.com>2020-12-29 15:50:42 +0800
committerpaulhu <paulhu@google.com>2021-01-18 22:37:48 +0800
commit7e17c5f204a0279c47d65696566c2403e825b06e (patch)
tree19446c834cebe038a83f5803d22c6777e78ab582 /tests/unsolicited_listener
parentdcadba54be95a1f679465d5c6ce549825cb820c8 (diff)
downloadDnsResolver-7e17c5f204a0279c47d65696566c2403e825b06e.tar.gz
[DRUEL05] Implement unsolicited dns health event
Implement unsolicited dns health event that will report to the listener when get dns lookup result. Bug: 173485754 Test: atest resolv_integration_test resolv_unit_test\ resolv_stress_test resolv_stats_test_utils_test Change-Id: Ib44304b3806838682c6403973e364ff5825f7eb0
Diffstat (limited to 'tests/unsolicited_listener')
-rw-r--r--tests/unsolicited_listener/unsolicited_event_listener.cpp28
-rw-r--r--tests/unsolicited_listener/unsolicited_event_listener.h10
2 files changed, 35 insertions, 3 deletions
diff --git a/tests/unsolicited_listener/unsolicited_event_listener.cpp b/tests/unsolicited_listener/unsolicited_event_listener.cpp
index 8cf75054..773c3856 100644
--- a/tests/unsolicited_listener/unsolicited_event_listener.cpp
+++ b/tests/unsolicited_listener/unsolicited_event_listener.cpp
@@ -23,18 +23,21 @@
namespace android::net::resolv::aidl {
+using ::aidl::android::net::resolv::aidl::DnsHealthEventParcel;
using ::aidl::android::net::resolv::aidl::IDnsResolverUnsolicitedEventListener;
using ::aidl::android::net::resolv::aidl::Nat64PrefixEventParcel;
using ::aidl::android::net::resolv::aidl::PrivateDnsValidationEventParcel;
+using android::base::Error;
+using android::base::Result;
using android::base::ScopedLockAssertion;
using std::chrono::milliseconds;
constexpr milliseconds kEventTimeoutMs{5000};
constexpr milliseconds kRetryIntervalMs{20};
-::ndk::ScopedAStatus UnsolicitedEventListener::onDnsHealthEvent(
- const ::aidl::android::net::resolv::aidl::DnsHealthEventParcel&) {
- // default no-op
+::ndk::ScopedAStatus UnsolicitedEventListener::onDnsHealthEvent(const DnsHealthEventParcel& event) {
+ std::lock_guard lock(mMutex);
+ if (event.netId == mNetId) mDnsHealthResultRecords.push(event.healthResult);
return ::ndk::ScopedAStatus::ok();
}
@@ -105,4 +108,23 @@ bool UnsolicitedEventListener::waitForNat64Prefix(int operation, const milliseco
return false;
}
+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::lock_guard lock(mMutex);
+ if (mDnsHealthResultRecords.empty()) return Error() << "Dns health result record is empty";
+
+ auto ret = mDnsHealthResultRecords.front();
+ mDnsHealthResultRecords.pop();
+ return ret;
+}
+
} // namespace android::net::resolv::aidl
diff --git a/tests/unsolicited_listener/unsolicited_event_listener.h b/tests/unsolicited_listener/unsolicited_event_listener.h
index e8fce1de..5edabd49 100644
--- a/tests/unsolicited_listener/unsolicited_event_listener.h
+++ b/tests/unsolicited_listener/unsolicited_event_listener.h
@@ -23,6 +23,7 @@
#include <utility>
#include <aidl/android/net/resolv/aidl/BnDnsResolverUnsolicitedEventListener.h>
+#include <android-base/result.h>
#include <android-base/thread_annotations.h>
namespace android::net::resolv::aidl {
@@ -48,6 +49,9 @@ class UnsolicitedEventListener
bool waitForNat64Prefix(int operation, const std::chrono::milliseconds& timeout)
EXCLUDES(mMutex);
+ // Pop up last receiving dns health result.
+ android::base::Result<int> popDnsHealthResult() EXCLUDES(mMutex);
+
// Return true if a validation result for |serverAddr| is found; otherwise, return false.
bool findValidationRecord(const std::string& serverAddr) const EXCLUDES(mMutex) {
std::lock_guard lock(mMutex);
@@ -64,6 +68,9 @@ class UnsolicitedEventListener
std::lock_guard lock(mMutex);
mValidationRecords.clear();
mUnexpectedNat64PrefixUpdates = 0;
+
+ std::queue<int> emptyQueue;
+ std::swap(mDnsHealthResultRecords, emptyQueue);
}
private:
@@ -89,6 +96,9 @@ class UnsolicitedEventListener
// resort to timeouts that make the tests slower and flakier.
int mUnexpectedNat64PrefixUpdates GUARDED_BY(mMutex);
+ // Used to store the dns health result from onDnsHealthEvent().
+ std::queue<int> mDnsHealthResultRecords GUARDED_BY(mMutex);
+
mutable std::mutex mMutex;
std::condition_variable mCv;
};