From ac10280ea5c15de6a7415f3c9dd0a090242c475d Mon Sep 17 00:00:00 2001 From: Bernie Innocenti Date: Fri, 2 Mar 2018 19:41:38 +0900 Subject: [PATCH] VTS tests for IWifiStaIface@1.2. Note that the new test is currently disabled because we have no meaningful way to test wifi interfaces that require the interface to be in connected state. For the full story, read the TODOs above the test. Change-Id: Iad7abd1f04a9ac6ca60e675222fbd2a893cb4072 Bug: 71581915 Bug: 73804303 Test: as follows: m VtsHalWifiV1_2TargetTest adb sync data adb shell /data/nativetest64/VtsHalWifiV1_2TargetTest/VtsHalWifiV1_2TargetTest --- .../functional/wifi_sta_iface_hidl_test.cpp | 55 ++++++++++++++++++- 1 file changed, 54 insertions(+), 1 deletion(-) diff --git a/wifi/1.2/vts/functional/wifi_sta_iface_hidl_test.cpp b/wifi/1.2/vts/functional/wifi_sta_iface_hidl_test.cpp index fd4a671c0a..92f5d1453e 100644 --- a/wifi/1.2/vts/functional/wifi_sta_iface_hidl_test.cpp +++ b/wifi/1.2/vts/functional/wifi_sta_iface_hidl_test.cpp @@ -14,6 +14,9 @@ * limitations under the License. */ +#include +#include + #include #include @@ -24,8 +27,9 @@ #include "wifi_hidl_test_utils.h" using ::android::sp; -using ::android::hardware::wifi::V1_2::IWifiStaIface; +using ::android::hardware::wifi::V1_0::CommandId; using ::android::hardware::wifi::V1_0::WifiStatusCode; +using ::android::hardware::wifi::V1_2::IWifiStaIface; /** * Fixture to use for all STA Iface HIDL interface tests. @@ -40,6 +44,13 @@ class WifiStaIfaceHidlTest : public ::testing::VtsHalHidlTargetTestBase { virtual void TearDown() override { stopWifi(); } protected: + bool isCapabilitySupported(IWifiStaIface::StaIfaceCapabilityMask cap_mask) { + const auto& status_and_caps = + HIDL_INVOKE(wifi_sta_iface_, getCapabilities); + EXPECT_EQ(WifiStatusCode::SUCCESS, status_and_caps.first.code); + return (status_and_caps.second & cap_mask) != 0; + } + sp wifi_sta_iface_; }; @@ -54,3 +65,45 @@ TEST_F(WifiStaIfaceHidlTest, SetMacAddress) { EXPECT_EQ(WifiStatusCode::SUCCESS, HIDL_INVOKE(wifi_sta_iface_, setMacAddress, kMac).code); } + +/* + * ReadApfPacketFilterData: + * Ensures that we can read the APF working memory when supported. + * + * TODO: Test disabled because we can't even test reading and writing the APF + * memory while the interface is in disconnected state (b/73804303#comment25). + * There's a pending bug on VTS infra to add such support (b/32974062). + * TODO: We can't execute APF opcodes from this test because there's no way + * to loop test packets through the wifi firmware (b/73804303#comment29). + */ +TEST_F(WifiStaIfaceHidlTest, DISABLED_ReadApfPacketFilterData) { + if (!isCapabilitySupported(IWifiStaIface::StaIfaceCapabilityMask::APF)) { + // Disable test if APF packet filer is not supported. + LOG(WARNING) << "TEST SKIPPED: APF packet filtering not supported"; + return; + } + + const auto& status_and_caps = + HIDL_INVOKE(wifi_sta_iface_, getApfPacketFilterCapabilities); + EXPECT_EQ(WifiStatusCode::SUCCESS, status_and_caps.first.code); + LOG(WARNING) << "StaApfPacketFilterCapabilities: version=" + << status_and_caps.second.version + << " maxLength=" << status_and_caps.second.maxLength; + + const CommandId kCmd = 0; // Matches what WifiVendorHal.java uses. + const uint32_t kDataSize = + std::min(status_and_caps.second.maxLength, static_cast(500)); + + // Create a buffer and fill it with some values. + std::vector data(kDataSize); + std::iota(data.begin(), data.end(), 0); + + EXPECT_EQ( + HIDL_INVOKE(wifi_sta_iface_, installApfPacketFilter, kCmd, data).code, + WifiStatusCode::SUCCESS); + const auto& status_and_data = + HIDL_INVOKE(wifi_sta_iface_, readApfPacketFilterData); + EXPECT_EQ(WifiStatusCode::SUCCESS, status_and_data.first.code); + + EXPECT_EQ(status_and_data.second, data); +}