From 057de7cf35fdf4305fa9e2aa8d929b5394dcb4fd Mon Sep 17 00:00:00 2001 From: Gabriel Biren Date: Mon, 29 Jan 2024 19:21:28 +0000 Subject: [PATCH] Add VTS tests for findWithParams and connectWithParams. Bug: 322815584 Test: atest VtsHalWifiSupplicantP2pIfaceTargetTest Change-Id: I58c59d045f2fbe5af4101d152a487954e8e16bd5 --- .../supplicant_p2p_iface_aidl_test.cpp | 55 +++++++++++++++++++ .../vts/functional/supplicant_test_utils.h | 29 ++++++++++ 2 files changed, 84 insertions(+) diff --git a/wifi/supplicant/aidl/vts/functional/supplicant_p2p_iface_aidl_test.cpp b/wifi/supplicant/aidl/vts/functional/supplicant_p2p_iface_aidl_test.cpp index 2d6823f207..2e22807363 100644 --- a/wifi/supplicant/aidl/vts/functional/supplicant_p2p_iface_aidl_test.cpp +++ b/wifi/supplicant/aidl/vts/functional/supplicant_p2p_iface_aidl_test.cpp @@ -35,7 +35,9 @@ using aidl::android::hardware::wifi::supplicant::IfaceType; using aidl::android::hardware::wifi::supplicant::ISupplicant; using aidl::android::hardware::wifi::supplicant::ISupplicantP2pIface; using aidl::android::hardware::wifi::supplicant::MiracastMode; +using aidl::android::hardware::wifi::supplicant::P2pConnectInfo; using aidl::android::hardware::wifi::supplicant::P2pDeviceFoundEventParams; +using aidl::android::hardware::wifi::supplicant::P2pDiscoveryInfo; using aidl::android::hardware::wifi::supplicant::P2pFrameTypeMask; using aidl::android::hardware::wifi::supplicant::P2pGoNegotiationReqEventParams; using aidl::android::hardware::wifi::supplicant::P2pGroupCapabilityMask; @@ -45,6 +47,7 @@ using aidl::android::hardware::wifi::supplicant::P2pPeerClientDisconnectedEventP using aidl::android::hardware::wifi::supplicant::P2pPeerClientJoinedEventParams; using aidl::android::hardware::wifi::supplicant::P2pProvDiscStatusCode; using aidl::android::hardware::wifi::supplicant::P2pProvisionDiscoveryCompletedEventParams; +using aidl::android::hardware::wifi::supplicant::P2pScanType; using aidl::android::hardware::wifi::supplicant::P2pStatusCode; using aidl::android::hardware::wifi::supplicant::SupplicantStatusCode; using aidl::android::hardware::wifi::supplicant::WpsConfigMethods; @@ -69,6 +72,7 @@ const uint32_t kTestNetworkId = 7; const uint32_t kTestGroupFreq = 0; const bool kTestGroupPersistent = false; const bool kTestGroupIsJoin = false; +const auto& kTestVendorData = generateOuiKeyedDataList(5); } // namespace @@ -222,6 +226,7 @@ class SupplicantP2pIfaceAidlTest : public testing::TestWithParam { initializeService(); supplicant_ = getSupplicant(GetParam().c_str()); ASSERT_NE(supplicant_, nullptr); + ASSERT_TRUE(supplicant_->getInterfaceVersion(&interface_version_).isOk()); ASSERT_TRUE(supplicant_ ->setDebugParams(DebugLevel::EXCESSIVE, true, // show timestamps @@ -247,6 +252,7 @@ class SupplicantP2pIfaceAidlTest : public testing::TestWithParam { protected: std::shared_ptr supplicant_; std::shared_ptr p2p_iface_; + int interface_version_; }; /* @@ -549,6 +555,34 @@ TEST_P(SupplicantP2pIfaceAidlTest, FindSpecificFrequency) { EXPECT_TRUE(p2p_iface_->findOnSpecificFrequency(2412, kTestFindTimeout).isOk()); } +/* + * FindWithParams + */ +TEST_P(SupplicantP2pIfaceAidlTest, FindWithParams) { + if (interface_version_ < 3) { + GTEST_SKIP() << "findWithParams is available as of Supplicant V3"; + } + + P2pDiscoveryInfo discoveryParams; + discoveryParams.timeoutInSec = kTestFindTimeout; + discoveryParams.vendorData = kTestVendorData; + + discoveryParams.scanType = P2pScanType::FULL; + EXPECT_TRUE(p2p_iface_->findWithParams(discoveryParams).isOk()); + EXPECT_TRUE(p2p_iface_->stopFind().isOk()); + sleep(1); + + discoveryParams.scanType = P2pScanType::SOCIAL; + EXPECT_TRUE(p2p_iface_->findWithParams(discoveryParams).isOk()); + EXPECT_TRUE(p2p_iface_->stopFind().isOk()); + sleep(1); + + discoveryParams.scanType = P2pScanType::SPECIFIC_FREQ; + discoveryParams.frequencyMhz = 2412; + EXPECT_TRUE(p2p_iface_->findWithParams(discoveryParams).isOk()); + EXPECT_TRUE(p2p_iface_->stopFind().isOk()); +} + /* * StopFind */ @@ -575,6 +609,27 @@ TEST_P(SupplicantP2pIfaceAidlTest, Connect) { .isOk()); } +/* + * ConnectWithParams + */ +TEST_P(SupplicantP2pIfaceAidlTest, ConnectWithParams) { + if (interface_version_ < 3) { + GTEST_SKIP() << "connectWithParams is available as of Supplicant V3"; + } + + P2pConnectInfo connectInfo; + connectInfo.peerAddress = vecToArrayMacAddr(kTestMacAddr); + connectInfo.provisionMethod = WpsProvisionMethod::PBC; + connectInfo.preSelectedPin = kTestConnectPin; + connectInfo.joinExistingGroup = true; + connectInfo.persistent = false; + connectInfo.goIntent = kTestConnectGoIntent; + connectInfo.vendorData = kTestVendorData; + + std::string pin; + EXPECT_TRUE(p2p_iface_->connectWithParams(connectInfo, &pin).isOk()); +} + /* * CancelConnect */ diff --git a/wifi/supplicant/aidl/vts/functional/supplicant_test_utils.h b/wifi/supplicant/aidl/vts/functional/supplicant_test_utils.h index f2cb3f665c..b38e669875 100644 --- a/wifi/supplicant/aidl/vts/functional/supplicant_test_utils.h +++ b/wifi/supplicant/aidl/vts/functional/supplicant_test_utils.h @@ -16,14 +16,18 @@ #pragma once +#include + #include "supplicant_aidl_test_utils.h" #include "supplicant_legacy_test_utils.h" +using aidl::android::hardware::wifi::common::OuiKeyedData; using aidl::android::hardware::wifi::supplicant::IfaceInfo; using aidl::android::hardware::wifi::supplicant::ISupplicant; using aidl::android::hardware::wifi::supplicant::ISupplicantP2pIface; using aidl::android::hardware::wifi::supplicant::ISupplicantStaIface; using aidl::android::hardware::wifi::supplicant::KeyMgmtMask; +using aidl::android::os::PersistableBundle; std::string getStaIfaceName() { std::array buffer; @@ -91,3 +95,28 @@ std::shared_ptr getSupplicant(const char* supplicant_name) { } return supplicant; } + +std::array vecToArrayMacAddr(std::vector vectorAddr) { + std::array arrayAddr; + std::copy(vectorAddr.begin(), vectorAddr.begin() + 6, arrayAddr.begin()); + return arrayAddr; +} + +std::optional generateOuiKeyedData(int oui) { + PersistableBundle bundle; + bundle.putString("stringKey", "stringValue"); + bundle.putInt("intKey", 12345); + + OuiKeyedData data; + data.oui = oui; + data.vendorData = bundle; + return std::optional{data}; +} + +std::optional>> generateOuiKeyedDataList(int size) { + std::vector> dataList; + for (int i = 0; i < size; i++) { + dataList.push_back(generateOuiKeyedData(i + 1)); + } + return std::optional>>{dataList}; +}