blob: 9ffe0ece0903b4553c9a8e5eaf5ba6d8239cf728 [file] [log] [blame]
/*
* Copyright (C) 2019 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 <VtsCoreUtil.h>
#include <android/hardware/wifi/1.1/IWifi.h>
#include <android/hardware/wifi/supplicant/1.1/ISupplicant.h>
#include <android/hardware/wifi/supplicant/1.2/types.h>
#include <android/hardware/wifi/supplicant/1.3/ISupplicant.h>
#include <android/hardware/wifi/supplicant/1.3/ISupplicantStaIface.h>
#include <android/hardware/wifi/supplicant/1.3/ISupplicantStaIfaceCallback.h>
#include <android/hardware/wifi/supplicant/1.3/ISupplicantStaNetwork.h>
#include <android/hardware/wifi/supplicant/1.3/types.h>
#include <android/hardware/wifi/supplicant/1.4/ISupplicantStaIface.h>
#include <android/hardware/wifi/supplicant/1.4/types.h>
#include <gtest/gtest.h>
#include <hidl/GtestPrinter.h>
#include <hidl/HidlSupport.h>
#include <hidl/ServiceManagement.h>
#include <hidl/Status.h>
#include "supplicant_hidl_test_utils.h"
#include "supplicant_hidl_test_utils_1_3.h"
using ::android::sp;
using ::android::hardware::hidl_array;
using ::android::hardware::hidl_string;
using ::android::hardware::hidl_vec;
using ::android::hardware::Return;
using ::android::hardware::Void;
using ::android::hardware::wifi::supplicant::V1_0::SupplicantStatus;
using ::android::hardware::wifi::supplicant::V1_0::SupplicantStatusCode;
using ::android::hardware::wifi::supplicant::V1_2::DppAkm;
using ::android::hardware::wifi::supplicant::V1_2::DppFailureCode;
using ::android::hardware::wifi::supplicant::V1_2::DppNetRole;
using ::android::hardware::wifi::supplicant::V1_2::DppProgressCode;
using ::android::hardware::wifi::supplicant::V1_3::ConnectionCapabilities;
using ::android::hardware::wifi::supplicant::V1_3::DppSuccessCode;
using ::android::hardware::wifi::supplicant::V1_3::ISupplicant;
using ::android::hardware::wifi::supplicant::V1_3::ISupplicantStaIface;
using ::android::hardware::wifi::supplicant::V1_3::ISupplicantStaIfaceCallback;
using ::android::hardware::wifi::supplicant::V1_3::ISupplicantStaNetwork;
using ::android::hardware::wifi::supplicant::V1_3::WpaDriverCapabilitiesMask;
#define TIMEOUT_PERIOD 60
class IfaceDppCallback;
class SupplicantStaIfaceHidlTest : public SupplicantHidlTestBaseV1_3 {
public:
virtual void SetUp() override {
SupplicantHidlTestBaseV1_3::SetUp();
sta_iface_ = getSupplicantStaIface_1_3(supplicant_);
ASSERT_NE(sta_iface_.get(), nullptr);
/* Variable used to check the underlying HAL version. */
sta_iface_v1_4_ = ::android::hardware::wifi::supplicant::V1_4::
ISupplicantStaIface::castFrom(sta_iface_);
}
int64_t pmkCacheExpirationTimeInSec;
std::vector<uint8_t> serializedPmkCacheEntry;
// Data retrieved from BSS transition management frame.
ISupplicantStaIfaceCallback::BssTmData tmData;
enum DppCallbackType {
ANY_CALLBACK = -2,
INVALID = -1,
EVENT_SUCCESS = 0,
EVENT_PROGRESS,
EVENT_FAILURE,
};
DppCallbackType dppCallbackType;
uint32_t code;
/* Used as a mechanism to inform the test about data/event callback */
inline void notify() {
std::unique_lock<std::mutex> lock(mtx_);
count_++;
cv_.notify_one();
}
/* Test code calls this function to wait for data/event callback */
inline std::cv_status wait(DppCallbackType waitForCallbackType) {
std::unique_lock<std::mutex> lock(mtx_);
EXPECT_NE(INVALID, waitForCallbackType); // can't ASSERT in a
// non-void-returning method
auto now = std::chrono::system_clock::now();
std::cv_status status =
cv_.wait_until(lock, now + std::chrono::seconds(TIMEOUT_PERIOD));
return status;
}
private:
// synchronization objects
std::mutex mtx_;
std::condition_variable cv_;
int count_;
protected:
// ISupplicantStaIface object used for all tests in this fixture.
sp<ISupplicantStaIface> sta_iface_;
sp<::android::hardware::wifi::supplicant::V1_4::ISupplicantStaIface>
sta_iface_v1_4_ = nullptr;
bool isDppSupported() {
uint32_t keyMgmtMask = 0;
// We need to first get the key management capabilities from the device.
// If DPP is not supported, we just pass the test.
sta_iface_->getKeyMgmtCapabilities_1_3(
[&](const SupplicantStatus& status, uint32_t keyMgmtMaskInternal) {
EXPECT_EQ(SupplicantStatusCode::SUCCESS, status.code);
keyMgmtMask = keyMgmtMaskInternal;
});
if (!(keyMgmtMask & ISupplicantStaNetwork::KeyMgmtMask::DPP)) {
// DPP not supported
return false;
}
return true;
}
};
class IfaceCallback : public ISupplicantStaIfaceCallback {
Return<void> onNetworkAdded(uint32_t /* id */) override { return Void(); }
Return<void> onNetworkRemoved(uint32_t /* id */) override { return Void(); }
Return<void> onStateChanged(
ISupplicantStaIfaceCallback::State /* newState */,
const hidl_array<uint8_t, 6>& /*bssid */, uint32_t /* id */,
const hidl_vec<uint8_t>& /* ssid */) override {
return Void();
}
Return<void> onAnqpQueryDone(
const hidl_array<uint8_t, 6>& /* bssid */,
const ISupplicantStaIfaceCallback::AnqpData& /* data */,
const ISupplicantStaIfaceCallback::Hs20AnqpData& /* hs20Data */)
override {
return Void();
}
virtual Return<void> onHs20IconQueryDone(
const hidl_array<uint8_t, 6>& /* bssid */,
const hidl_string& /* fileName */,
const hidl_vec<uint8_t>& /* data */) override {
return Void();
}
virtual Return<void> onHs20SubscriptionRemediation(
const hidl_array<uint8_t, 6>& /* bssid */,
ISupplicantStaIfaceCallback::OsuMethod /* osuMethod */,
const hidl_string& /* url*/) override {
return Void();
}
Return<void> onHs20DeauthImminentNotice(
const hidl_array<uint8_t, 6>& /* bssid */, uint32_t /* reasonCode */,
uint32_t /* reAuthDelayInSec */,
const hidl_string& /* url */) override {
return Void();
}
Return<void> onDisconnected(const hidl_array<uint8_t, 6>& /* bssid */,
bool /* locallyGenerated */,
ISupplicantStaIfaceCallback::ReasonCode
/* reasonCode */) override {
return Void();
}
Return<void> onAssociationRejected(
const hidl_array<uint8_t, 6>& /* bssid */,
ISupplicantStaIfaceCallback::StatusCode /* statusCode */,
bool /*timedOut */) override {
return Void();
}
Return<void> onAuthenticationTimeout(
const hidl_array<uint8_t, 6>& /* bssid */) override {
return Void();
}
Return<void> onBssidChanged(
ISupplicantStaIfaceCallback::BssidChangeReason /* reason */,
const hidl_array<uint8_t, 6>& /* bssid */) override {
return Void();
}
Return<void> onEapFailure() override { return Void(); }
Return<void> onEapFailure_1_1(
ISupplicantStaIfaceCallback::EapErrorCode /* eapErrorCode */) override {
return Void();
}
Return<void> onEapFailure_1_3(uint32_t /* eapErrorCode */) override {
return Void();
}
Return<void> onWpsEventSuccess() override { return Void(); }
Return<void> onWpsEventFail(
const hidl_array<uint8_t, 6>& /* bssid */,
ISupplicantStaIfaceCallback::WpsConfigError /* configError */,
ISupplicantStaIfaceCallback::WpsErrorIndication /* errorInd */)
override {
return Void();
}
Return<void> onWpsEventPbcOverlap() override { return Void(); }
Return<void> onExtRadioWorkStart(uint32_t /* id */) override {
return Void();
}
Return<void> onExtRadioWorkTimeout(uint32_t /* id*/) override {
return Void();
}
Return<void> onDppSuccessConfigReceived(
const hidl_vec<uint8_t>& /* ssid */, const hidl_string& /* password */,
const hidl_array<uint8_t, 32>& /* psk */,
DppAkm /* securityAkm */) override {
return Void();
}
Return<void> onDppSuccessConfigSent() override { return Void(); }
Return<void> onDppProgress(DppProgressCode /* code */) override {
return Void();
}
Return<void> onDppFailure(DppFailureCode /* code */) override {
return Void();
}
Return<void> onDppSuccess(DppSuccessCode /* code */) override {
return Void();
}
Return<void> onDppProgress_1_3(
::android::hardware::wifi::supplicant::V1_3::DppProgressCode /* code */)
override {
return Void();
}
Return<void> onDppFailure_1_3(
::android::hardware::wifi::supplicant::V1_3::DppFailureCode /* code */,
const hidl_string& /* ssid */, const hidl_string& /* channelList */,
const hidl_vec<uint16_t>& /* bandList */) override {
return Void();
}
Return<void> onPmkCacheAdded(
int64_t /* expirationTimeInSec */,
const hidl_vec<uint8_t>& /* serializedEntry */) override {
return Void();
}
Return<void> onBssTmHandlingDone(
const ISupplicantStaIfaceCallback::BssTmData& /* data */) override {
return Void();
}
Return<void> onStateChanged_1_3(
ISupplicantStaIfaceCallback::State /* newState */,
const hidl_array<uint8_t, 6>& /*bssid */, uint32_t /* id */,
const hidl_vec<uint8_t>& /* ssid */, bool /* filsHlpSent */) override {
return Void();
}
};
class IfacePmkCacheCallback : public IfaceCallback {
SupplicantStaIfaceHidlTest& parent_;
Return<void> onPmkCacheAdded(
int64_t expirationTimeInSec,
const hidl_vec<uint8_t>& serializedEntry) override {
parent_.pmkCacheExpirationTimeInSec = expirationTimeInSec;
parent_.serializedPmkCacheEntry = serializedEntry;
return Void();
}
public:
IfacePmkCacheCallback(SupplicantStaIfaceHidlTest& parent)
: parent_(parent) {}
};
class IfaceDppCallback : public IfaceCallback {
SupplicantStaIfaceHidlTest& parent_;
Return<void> onDppSuccess(DppSuccessCode code) override {
parent_.code = (uint32_t)code;
parent_.dppCallbackType =
SupplicantStaIfaceHidlTest::DppCallbackType::EVENT_SUCCESS;
parent_.notify();
return Void();
}
Return<void> onDppProgress_1_3(
::android::hardware::wifi::supplicant::V1_3::DppProgressCode code)
override {
parent_.code = (uint32_t)code;
parent_.dppCallbackType =
SupplicantStaIfaceHidlTest::DppCallbackType::EVENT_PROGRESS;
parent_.notify();
return Void();
}
Return<void> onDppFailure_1_3(
::android::hardware::wifi::supplicant::V1_3::DppFailureCode code,
const hidl_string& ssid __attribute__((unused)),
const hidl_string& channelList __attribute__((unused)),
const hidl_vec<uint16_t>& bandList __attribute__((unused))) override {
parent_.code = (uint32_t)code;
parent_.dppCallbackType =
SupplicantStaIfaceHidlTest::DppCallbackType::EVENT_FAILURE;
parent_.notify();
return Void();
}
public:
IfaceDppCallback(SupplicantStaIfaceHidlTest& parent) : parent_(parent){};
};
class IfaceBssTmHandlingDoneCallback : public IfaceCallback {
SupplicantStaIfaceHidlTest& parent_;
Return<void> onBssTmHandlingDone(
const ISupplicantStaIfaceCallback::BssTmData& data) override {
parent_.tmData = data;
return Void();
}
public:
IfaceBssTmHandlingDoneCallback(SupplicantStaIfaceHidlTest& parent)
: parent_(parent) {}
};
/*
* RegisterCallback_1_3
*/
TEST_P(SupplicantStaIfaceHidlTest, RegisterCallback_1_3) {
SupplicantStatusCode expectedCode =
(nullptr != sta_iface_v1_4_) ? SupplicantStatusCode::FAILURE_UNKNOWN
: SupplicantStatusCode::SUCCESS;
sta_iface_->registerCallback_1_3(new IfaceCallback(),
[&](const SupplicantStatus& status) {
EXPECT_EQ(expectedCode, status.code);
});
}
/*
* getConnectionCapabilities
*/
TEST_P(SupplicantStaIfaceHidlTest, GetConnectionCapabilities) {
sta_iface_->getConnectionCapabilities(
[&](const SupplicantStatus& status,
ConnectionCapabilities /* capabilities */) {
// Since getConnectionCapabilities() is overridden by an
// upgraded API in newer HAL versions, allow for FAILURE_UNKNOWN
if (status.code != SupplicantStatusCode::FAILURE_UNKNOWN) {
EXPECT_EQ(SupplicantStatusCode::SUCCESS, status.code);
}
});
}
/*
* GetWpaDriverCapabilities
*/
TEST_P(SupplicantStaIfaceHidlTest, GetWpaDriverCapabilities) {
SupplicantStatusCode expectedCode =
(nullptr != sta_iface_v1_4_) ? SupplicantStatusCode::FAILURE_UNKNOWN
: SupplicantStatusCode::SUCCESS;
sta_iface_->getWpaDriverCapabilities(
[&](const SupplicantStatus& status, uint32_t) {
EXPECT_EQ(expectedCode, status.code);
});
}
/*
* SetMboCellularDataStatus
*/
TEST_P(SupplicantStaIfaceHidlTest, SetMboCellularDataStatus) {
uint32_t driverCapMask = 0;
// Get MBO support from the device.
if (nullptr != sta_iface_v1_4_) {
sta_iface_v1_4_->getWpaDriverCapabilities_1_4(
[&](const ::android::hardware::wifi::supplicant::V1_4::
SupplicantStatus& status,
uint32_t driverCapMaskInternal) {
EXPECT_EQ(::android::hardware::wifi::supplicant::V1_4::
SupplicantStatusCode::SUCCESS,
status.code);
driverCapMask = driverCapMaskInternal;
});
} else {
sta_iface_->getWpaDriverCapabilities(
[&](const SupplicantStatus& status,
uint32_t driverCapMaskInternal) {
EXPECT_EQ(SupplicantStatusCode::SUCCESS, status.code);
driverCapMask = driverCapMaskInternal;
});
}
SupplicantStatusCode expectedStatusCode =
(driverCapMask & WpaDriverCapabilitiesMask::MBO)
? SupplicantStatusCode::SUCCESS
: SupplicantStatusCode::FAILURE_UNKNOWN;
sta_iface_->setMboCellularDataStatus(
true, [expectedStatusCode](const SupplicantStatus& status) {
EXPECT_EQ(expectedStatusCode, status.code);
});
}
/*
* GetKeyMgmtCapabilities_1_3
*/
TEST_P(SupplicantStaIfaceHidlTest, GetKeyMgmtCapabilities_1_3) {
sta_iface_->getKeyMgmtCapabilities_1_3([&](const SupplicantStatus& status,
uint32_t keyMgmtMask) {
if (SupplicantStatusCode::SUCCESS != status.code) {
// for unsupport case
EXPECT_EQ(SupplicantStatusCode::FAILURE_UNKNOWN, status.code);
} else {
// Even though capabilities vary, these two are always set in HAL
// v1.3
EXPECT_TRUE(keyMgmtMask & ISupplicantStaNetwork::KeyMgmtMask::NONE);
EXPECT_TRUE(keyMgmtMask &
ISupplicantStaNetwork::KeyMgmtMask::IEEE8021X);
}
});
}
/*
* StartDppEnrolleeInitiator
*/
TEST_P(SupplicantStaIfaceHidlTest, StartDppEnrolleeInitiator) {
// We need to first get the key management capabilities from the device.
// If DPP is not supported, we just pass the test.
if (!isDppSupported()) {
// DPP not supported
return;
}
if (sta_iface_v1_4_ != nullptr) {
GTEST_SKIP() << "Test not supported with this HAL version";
return;
}
hidl_string uri =
"DPP:C:81/1,117/"
"40;M:48d6d5bd1de1;I:G1197843;K:MDkwEwYHKoZIzj0CAQYIKoZIzj"
"0DAQcDIgAD0edY4X3N//HhMFYsZfMbQJTiNFtNIWF/cIwMB/gzqOM=;;";
uint32_t peer_id = 0;
// Register callbacks
sta_iface_->registerCallback_1_3(
new IfaceDppCallback(*this), [](const SupplicantStatus& status) {
EXPECT_EQ(SupplicantStatusCode::SUCCESS, status.code);
});
// Add a peer URI
sta_iface_->addDppPeerUri(
uri, [&](const SupplicantStatus& status, uint32_t id) {
EXPECT_EQ(SupplicantStatusCode::SUCCESS, status.code);
EXPECT_NE(0, id);
EXPECT_NE(-1, id);
peer_id = id;
});
// Start DPP as Enrollee-Initiator. Since this operation requires two
// devices, we start the operation and expect a timeout.
sta_iface_->startDppEnrolleeInitiator(
peer_id, 0, [&](const SupplicantStatus& status) {
EXPECT_EQ(SupplicantStatusCode::SUCCESS, status.code);
});
// Wait for the timeout callback
ASSERT_EQ(std::cv_status::no_timeout,
wait(SupplicantStaIfaceHidlTest::DppCallbackType::EVENT_FAILURE));
ASSERT_EQ(SupplicantStaIfaceHidlTest::DppCallbackType::EVENT_FAILURE,
dppCallbackType);
// ...and then remove the peer URI.
sta_iface_->removeDppUri(peer_id, [&](const SupplicantStatus& status) {
EXPECT_EQ(SupplicantStatusCode::SUCCESS, status.code);
});
}
/*
* StartDppConfiguratorInitiator
*/
TEST_P(SupplicantStaIfaceHidlTest, StartDppConfiguratorInitiator) {
// We need to first get the key management capabilities from the device.
// If DPP is not supported, we just pass the test.
if (!isDppSupported()) {
// DPP not supported
return;
}
if (sta_iface_v1_4_ != nullptr) {
GTEST_SKIP() << "Test not supported with this HAL version";
return;
}
hidl_string uri =
"DPP:C:81/1,117/"
"40;M:48d6d5bd1de1;I:G1197843;K:MDkwEwYHKoZIzj0CAQYIKoZIzj"
"0DAQcDIgAD0edY4X3N//HhMFYsZfMbQJTiNFtNIWF/cIwMB/gzqOM=;;";
uint32_t peer_id = 0;
// Register callbacks
sta_iface_->registerCallback_1_3(
new IfaceDppCallback(*this), [](const SupplicantStatus& status) {
EXPECT_EQ(SupplicantStatusCode::SUCCESS, status.code);
});
// Add a peer URI
sta_iface_->addDppPeerUri(
uri, [&](const SupplicantStatus& status, uint32_t id) {
EXPECT_EQ(SupplicantStatusCode::SUCCESS, status.code);
EXPECT_NE(0, id);
EXPECT_NE(-1, id);
peer_id = id;
});
std::string ssid =
"6D795F746573745F73736964"; // 'my_test_ssid' encoded in hex
std::string password = "746F70736563726574"; // 'topsecret' encoded in hex
// Start DPP as Configurator-Initiator. Since this operation requires two
// devices, we start the operation and expect a timeout.
sta_iface_->startDppConfiguratorInitiator(
peer_id, 0, ssid, password, NULL, DppNetRole::STA, DppAkm::PSK,
[&](const SupplicantStatus& status) {
EXPECT_EQ(SupplicantStatusCode::SUCCESS, status.code);
});
// Wait for the timeout callback
ASSERT_EQ(std::cv_status::no_timeout,
wait(SupplicantStaIfaceHidlTest::DppCallbackType::EVENT_FAILURE));
ASSERT_EQ(SupplicantStaIfaceHidlTest::DppCallbackType::EVENT_FAILURE,
dppCallbackType);
// ...and then remove the peer URI.
sta_iface_->removeDppUri(peer_id, [&](const SupplicantStatus& status) {
EXPECT_EQ(SupplicantStatusCode::SUCCESS, status.code);
});
}
/*
* FilsHlpAddRequest
*/
TEST_P(SupplicantStaIfaceHidlTest, FilsHlpAddRequest) {
if (!isFilsSupported(sta_iface_)) {
GTEST_SKIP()
<< "Skipping test since driver/supplicant doesn't support FILS";
}
uint8_t destMacAddr[] = {0x00, 0x11, 0x22, 0x33, 0x44, 0x55};
std::vector<uint8_t> pktBuffer = {
0x08, 0x00, 0x45, 0x10, 0x01, 0x3a, 0x00, 0x00, 0x40, 0x00, 0x40, 0x11,
0x39, 0xa4, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x44,
0x00, 0x43, 0x01, 0x26, 0x77, 0x1e, 0x01, 0x01, 0x06, 0x00, 0x81, 0xf9,
0xf7, 0xcd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0xc3,
0x65, 0xca, 0x34, 0x63, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x63, 0x82, 0x53, 0x63, 0x35, 0x01, 0x01, 0x3d,
0x07, 0x01, 0x86, 0xc3, 0x65, 0xca, 0x34, 0x63, 0x39, 0x02, 0x05, 0xdc,
0x3c, 0x0e, 0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x2d, 0x64, 0x68,
0x63, 0x70, 0x2d, 0x52, 0x37, 0x0a, 0x01, 0x03, 0x06, 0x0f, 0x1a, 0x1c,
0x33, 0x3a, 0x3b, 0x2b, 0xff, 0x00};
sta_iface_->filsHlpAddRequest(
destMacAddr, pktBuffer, [](const SupplicantStatus& status) {
EXPECT_EQ(SupplicantStatusCode::SUCCESS, status.code);
});
}
/*
* FilsHlpFlushRequest
*/
TEST_P(SupplicantStaIfaceHidlTest, FilsHlpFlushRequest) {
if (!isFilsSupported(sta_iface_)) {
GTEST_SKIP()
<< "Skipping test since driver/supplicant doesn't support FILS";
}
sta_iface_->filsHlpFlushRequest([](const SupplicantStatus& status) {
EXPECT_EQ(SupplicantStatusCode::SUCCESS, status.code);
});
}
GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(SupplicantStaIfaceHidlTest);
INSTANTIATE_TEST_CASE_P(
PerInstance, SupplicantStaIfaceHidlTest,
testing::Combine(
testing::ValuesIn(android::hardware::getAllHalInstanceNames(
android::hardware::wifi::V1_0::IWifi::descriptor)),
testing::ValuesIn(android::hardware::getAllHalInstanceNames(
android::hardware::wifi::supplicant::V1_3::ISupplicant::
descriptor))),
android::hardware::PrintInstanceTupleNameToString<>);