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); +}