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
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 fd4a671..92f5d14 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 <numeric>
+#include <vector>
+
#include <android-base/logging.h>
#include <android/hardware/wifi/1.2/IWifiStaIface.h>
@@ -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 @@
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<IWifiStaIface> wifi_sta_iface_;
};
@@ -54,3 +65,45 @@
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<uint32_t>(500));
+
+ // Create a buffer and fill it with some values.
+ std::vector<uint8_t> 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);
+}