/*
* Copyright (C) 2016 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 <android-base/logging.h>
#include <VtsHalHidlTargetTestBase.h>
#include <android/hardware/wifi/supplicant/1.0/ISupplicant.h>
#include "supplicant_hidl_test_utils.h"
using ::android::sp;
using ::android::hardware::hidl_vec;
using ::android::hardware::wifi::supplicant::V1_0::ISupplicant;
using ::android::hardware::wifi::supplicant::V1_0::ISupplicantIface;
using ::android::hardware::wifi::supplicant::V1_0::SupplicantStatus;
using ::android::hardware::wifi::supplicant::V1_0::SupplicantStatusCode;
using ::android::hardware::wifi::supplicant::V1_0::IfaceType;
class SupplicantHidlTest : public ::testing::VtsHalHidlTargetTestBase {
public:
virtual void SetUp() override {
startSupplicantAndWaitForHidlService();
supplicant_ = getSupplicant();
ASSERT_NE(supplicant_.get(), nullptr);
}
virtual void TearDown() override { stopSupplicant(); }
protected:
// ISupplicant object used for all tests in this fixture.
sp<ISupplicant> supplicant_;
};
/*
* Create:
* Ensures that an instance of the ISupplicant proxy object is
* successfully created.
*/
TEST(SupplicantHidlTestNoFixture, Create) {
startSupplicantAndWaitForHidlService();
EXPECT_NE(nullptr, getSupplicant().get());
stopSupplicant();
}
/*
* ListInterfaces
*/
TEST_F(SupplicantHidlTest, ListInterfaces) {
std::vector<ISupplicant::IfaceInfo> ifaces;
supplicant_->listInterfaces(
[&](const SupplicantStatus& status,
const hidl_vec<ISupplicant::IfaceInfo>& hidl_ifaces) {
EXPECT_EQ(SupplicantStatusCode::SUCCESS, status.code);
ifaces = hidl_ifaces;
});
EXPECT_NE(ifaces.end(),
std::find_if(ifaces.begin(), ifaces.end(), [](const auto& iface) {
return iface.type == IfaceType::STA;
}));
EXPECT_NE(ifaces.end(),
std::find_if(ifaces.begin(), ifaces.end(), [](const auto& iface) {
return iface.type == IfaceType::P2P;
}));
}
/*
* GetInterface
*/
TEST_F(SupplicantHidlTest, GetInterface) {
std::vector<ISupplicant::IfaceInfo> ifaces;
supplicant_->listInterfaces(
[&](const SupplicantStatus& status,
const hidl_vec<ISupplicant::IfaceInfo>& hidl_ifaces) {
EXPECT_EQ(SupplicantStatusCode::SUCCESS, status.code);
ifaces = hidl_ifaces;
});
ASSERT_NE(0u, ifaces.size());
supplicant_->getInterface(
ifaces[0],
[&](const SupplicantStatus& status, const sp<ISupplicantIface>& iface) {
EXPECT_EQ(SupplicantStatusCode::SUCCESS, status.code);
EXPECT_NE(nullptr, iface.get());
});
}
/*
* SetDebugParams
*/
TEST_F(SupplicantHidlTest, SetDebugParams) {
bool show_timestamp = true;
bool show_keys = true;
ISupplicant::DebugLevel level = ISupplicant::DebugLevel::EXCESSIVE;
supplicant_->setDebugParams(level,
show_timestamp, // show timestamps
show_keys, // show keys
[](const SupplicantStatus& status) {
EXPECT_EQ(SupplicantStatusCode::SUCCESS,
status.code);
});
}
/*
* GetDebugLevel
*/
TEST_F(SupplicantHidlTest, GetDebugLevel) {
bool show_timestamp = true;
bool show_keys = true;
ISupplicant::DebugLevel level = ISupplicant::DebugLevel::EXCESSIVE;
supplicant_->setDebugParams(level,
show_timestamp, // show timestamps
show_keys, // show keys
[](const SupplicantStatus& status) {
EXPECT_EQ(SupplicantStatusCode::SUCCESS,
status.code);
});
EXPECT_EQ(level, supplicant_->getDebugLevel());
}
/*
* IsDebugShowTimestampEnabled
*/
TEST_F(SupplicantHidlTest, IsDebugShowTimestampEnabled) {
bool show_timestamp = true;
bool show_keys = true;
ISupplicant::DebugLevel level = ISupplicant::DebugLevel::EXCESSIVE;
supplicant_->setDebugParams(level,
show_timestamp, // show timestamps
show_keys, // show keys
[](const SupplicantStatus& status) {
EXPECT_EQ(SupplicantStatusCode::SUCCESS,
status.code);
});
EXPECT_EQ(show_timestamp, supplicant_->isDebugShowTimestampEnabled());
}
/*
* IsDebugShowKeysEnabled
*/
TEST_F(SupplicantHidlTest, IsDebugShowKeysEnabled) {
bool show_timestamp = true;
bool show_keys = true;
ISupplicant::DebugLevel level = ISupplicant::DebugLevel::EXCESSIVE;
supplicant_->setDebugParams(level,
show_timestamp, // show timestamps
show_keys, // show keys
[](const SupplicantStatus& status) {
EXPECT_EQ(SupplicantStatusCode::SUCCESS,
status.code);
});
EXPECT_EQ(show_keys, supplicant_->isDebugShowKeysEnabled());
}
/*
* SetConcurrenyPriority
*/
TEST_F(SupplicantHidlTest, SetConcurrencyPriority) {
supplicant_->setConcurrencyPriority(
IfaceType::STA, [](const SupplicantStatus& status) {
EXPECT_EQ(SupplicantStatusCode::SUCCESS, status.code);
});
supplicant_->setConcurrencyPriority(
IfaceType::P2P, [](const SupplicantStatus& status) {
EXPECT_EQ(SupplicantStatusCode::SUCCESS, status.code);
});
}