aboutsummaryrefslogtreecommitdiff
path: root/pal/tests/src/wifi_pal_impl_test.cc
diff options
context:
space:
mode:
Diffstat (limited to 'pal/tests/src/wifi_pal_impl_test.cc')
-rw-r--r--pal/tests/src/wifi_pal_impl_test.cc256
1 files changed, 0 insertions, 256 deletions
diff --git a/pal/tests/src/wifi_pal_impl_test.cc b/pal/tests/src/wifi_pal_impl_test.cc
deleted file mode 100644
index 7e43ff4c..00000000
--- a/pal/tests/src/wifi_pal_impl_test.cc
+++ /dev/null
@@ -1,256 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "wifi_pal_impl_test.h"
-
-#include "chre/platform/log.h"
-#include "chre/platform/shared/pal_system_api.h"
-#include "chre/platform/system_time.h"
-#include "chre/util/lock_guard.h"
-#include "chre/util/nanoapp/wifi.h"
-
-#include <cinttypes>
-
-// Flag to require on-demand WiFi scanning capability to be enabled for the test
-// to pass. Set to false to allow tests to pass on disabled platforms.
-#ifndef PAL_IMPL_TEST_WIFI_ON_DEMAND_SCAN_REQUIRED
-#define PAL_IMPL_TEST_WIFI_ON_DEMAND_SCAN_REQUIRED true
-#endif
-
-// Same as above for scan monitoring.
-#ifndef PAL_IMPL_TEST_WIFI_SCAN_MONITORING_REQUIRED
-#define PAL_IMPL_TEST_WIFI_SCAN_MONITORING_REQUIRED true
-#endif
-
-namespace wifi_pal_impl_test {
-
-namespace {
-
-using ::chre::Nanoseconds;
-using ::chre::Seconds;
-using ::chre::SystemTime;
-
-//! A pointer to the current test running
-wifi_pal_impl_test::PalWifiTest *gTest = nullptr;
-
-//! Timeout as specified by the CHRE API
-const Nanoseconds kAsyncResultTimeoutNs =
- Nanoseconds(CHRE_ASYNC_RESULT_TIMEOUT_NS);
-const Nanoseconds kScanResultTimeoutNs =
- Nanoseconds(CHRE_WIFI_SCAN_RESULT_TIMEOUT_NS);
-
-void chrePalScanMonitorStatusChangeCallback(bool enabled, uint8_t errorCode) {
- if (gTest != nullptr) {
- gTest->scanMonitorStatusChangeCallback(enabled, errorCode);
- }
-}
-
-void chrePalScanResponseCallback(bool pending, uint8_t errorCode) {
- if (gTest != nullptr) {
- gTest->scanResponseCallback(pending, errorCode);
- }
-}
-
-void chrePalScanEventCallback(struct chreWifiScanEvent *event) {
- if (gTest != nullptr) {
- gTest->scanEventCallback(event);
- }
-}
-
-void chrePalRangingEventCallback(uint8_t errorCode,
- struct chreWifiRangingEvent *event) {
- if (gTest != nullptr) {
- gTest->rangingEventCallback(errorCode, event);
- }
-}
-
-} // anonymous namespace
-
-void PalWifiTest::SetUp() {
- api_ = chrePalWifiGetApi(CHRE_PAL_WIFI_API_CURRENT_VERSION);
- ASSERT_NE(api_, nullptr);
- EXPECT_EQ(api_->moduleVersion, CHRE_PAL_WIFI_API_CURRENT_VERSION);
-
- // Open the PAL API
- static const struct chrePalWifiCallbacks kCallbacks = {
- .scanMonitorStatusChangeCallback = chrePalScanMonitorStatusChangeCallback,
- .scanResponseCallback = chrePalScanResponseCallback,
- .scanEventCallback = chrePalScanEventCallback,
- .rangingEventCallback = chrePalRangingEventCallback,
- };
- ASSERT_TRUE(api_->open(&chre::gChrePalSystemApi, &kCallbacks));
- gTest = this;
-
- errorCode_ = CHRE_ERROR_LAST;
- numScanResultCount_ = 0;
- lastScanEventReceived_ = false;
- scanEventList_.clear();
- scanParams_.reset();
- lastEventIndex_ = UINT8_MAX;
- scanMonitorEnabled_ = false;
-}
-
-void PalWifiTest::TearDown() {
- gTest = nullptr;
- if (api_ != nullptr) {
- api_->close();
- }
-}
-
-void PalWifiTest::scanMonitorStatusChangeCallback(bool enabled,
- uint8_t errorCode) {
- LOGI("Received scan monitor response with enabled %d error %" PRIu8, enabled,
- errorCode);
- if (errorCode == CHRE_ERROR_LAST) {
- LOGE("Received CHRE_ERROR_LAST");
- errorCode = CHRE_ERROR;
- }
- chre::LockGuard<chre::Mutex> lock(mutex_);
- scanMonitorEnabled_ = enabled;
- errorCode_ = errorCode;
- condVar_.notify_one();
-}
-
-void PalWifiTest::scanResponseCallback(bool pending, uint8_t errorCode) {
- LOGI("Received scan response with pending %d error %" PRIu8, pending,
- errorCode);
- if (errorCode == CHRE_ERROR_LAST) {
- LOGE("Received CHRE_ERROR_LAST");
- errorCode = CHRE_ERROR;
- }
- chre::LockGuard<chre::Mutex> lock(mutex_);
- errorCode_ = errorCode;
- condVar_.notify_one();
-}
-
-void PalWifiTest::scanEventCallback(struct chreWifiScanEvent *event) {
- if (event == nullptr) {
- LOGE("Got null scan event");
- } else {
- {
- chre::LockGuard<chre::Mutex> lock(mutex_);
- scanEventList_.push_back(event);
- numScanResultCount_ += event->resultCount;
- lastScanEventReceived_ = (numScanResultCount_ == event->resultTotal);
- }
-
- condVar_.notify_one();
- }
-}
-
-void PalWifiTest::rangingEventCallback(uint8_t errorCode,
- struct chreWifiRangingEvent *event) {
- // TODO:
-}
-
-void PalWifiTest::validateWifiScanEvent(const chreWifiScanEvent &event) {
- if (scanParams_.has_value()) {
- EXPECT_EQ(event.scanType, scanParams_->scanType);
- EXPECT_GE(event.referenceTime,
- chreGetTime() - (scanParams_->maxScanAgeMs *
- chre::kOneMillisecondInNanoseconds));
- EXPECT_EQ(event.radioChainPref, scanParams_->radioChainPref);
- EXPECT_EQ(event.eventIndex, static_cast<uint8_t>(lastEventIndex_ + 1));
- }
-}
-
-void PalWifiTest::waitForAsyncResponseAssertSuccess(
- chre::Nanoseconds timeoutNs) {
- bool waitSuccess = true;
- while (errorCode_ == CHRE_ERROR_LAST && waitSuccess) {
- waitSuccess = condVar_.wait_for(mutex_, timeoutNs);
- }
- ASSERT_TRUE(waitSuccess);
- ASSERT_EQ(errorCode_, CHRE_ERROR_NONE);
-}
-
-TEST_F(PalWifiTest, ScanAsyncTest) {
- bool hasOnDemandScanCapability =
- (api_->getCapabilities() & CHRE_WIFI_CAPABILITIES_ON_DEMAND_SCAN) ==
- CHRE_WIFI_CAPABILITIES_ON_DEMAND_SCAN;
-#if PAL_IMPL_TEST_WIFI_ON_DEMAND_SCAN_REQUIRED
- ASSERT_TRUE(hasOnDemandScanCapability);
-#else
- if (!hasOnDemandScanCapability) {
- GTEST_SKIP();
- }
-#endif
-
- // Request a WiFi scan
- chre::LockGuard<chre::Mutex> lock(mutex_);
-
- struct chreWifiScanParams params = {};
- params.scanType = CHRE_WIFI_SCAN_TYPE_ACTIVE;
- params.maxScanAgeMs = 5000; // 5 seconds
- params.frequencyListLen = 0;
- params.ssidListLen = 0;
- params.radioChainPref = CHRE_WIFI_RADIO_CHAIN_PREF_DEFAULT;
- scanParams_ = params;
-
- prepareForAsyncResponse();
- ASSERT_TRUE(api_->requestScan(&scanParams_.value()));
- waitForAsyncResponseAssertSuccess(kScanResultTimeoutNs);
-
- // The CHRE API only poses timeout requirements on the async response. Use
- // the same timeout to receive the scan results to avoid blocking forever.
- bool waitSuccess = true;
- while (!lastScanEventReceived_ && waitSuccess) {
- waitSuccess = condVar_.wait_for(mutex_, kScanResultTimeoutNs);
- }
-
- for (auto *event : scanEventList_) {
- for (uint8_t i = 0; i < event->resultCount; i++) {
- const chreWifiScanResult &result = event->results[i];
- chre::logChreWifiResult(result);
- }
- validateWifiScanEvent(*event);
-
- lastEventIndex_ = event->eventIndex;
- api_->releaseScanEvent(event);
- }
-
- EXPECT_TRUE(lastScanEventReceived_);
- EXPECT_GT(numScanResultCount_, 0u);
-}
-
-// Note: This test only verifies that the scan monitor succeeds according
-// to the async response.
-TEST_F(PalWifiTest, ScanMonitorTest) {
- bool hasScanMonitoringCapability =
- (api_->getCapabilities() & CHRE_WIFI_CAPABILITIES_SCAN_MONITORING) ==
- CHRE_WIFI_CAPABILITIES_SCAN_MONITORING;
-#if PAL_IMPL_TEST_WIFI_SCAN_MONITORING_REQUIRED
- ASSERT_TRUE(hasScanMonitoringCapability);
-#else
- if (!hasScanMonitoringCapability) {
- GTEST_SKIP();
- }
-#endif
-
- chre::LockGuard<chre::Mutex> lock(mutex_);
-
- prepareForAsyncResponse();
- ASSERT_TRUE(api_->configureScanMonitor(true /* enable */));
- waitForAsyncResponseAssertSuccess(kAsyncResultTimeoutNs);
- ASSERT_TRUE(scanMonitorEnabled_);
-
- prepareForAsyncResponse();
- ASSERT_TRUE(api_->configureScanMonitor(false /* enable */));
- waitForAsyncResponseAssertSuccess(kAsyncResultTimeoutNs);
- ASSERT_FALSE(scanMonitorEnabled_);
-}
-
-} // namespace wifi_pal_impl_test