mirror of
https://github.com/Evolution-X/hardware_interfaces
synced 2026-02-01 11:36:00 +00:00
Merge "Convert VtsHalWifiHostapdV1_*TargetTest to be parameterized test"
am: 9361c70c9b
Change-Id: Iadff8983280b631f21bc5632cc16605ebe52a5a1
This commit is contained in:
@@ -14,6 +14,8 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#include <android/log.h>
|
||||
|
||||
#include <VtsHalHidlTargetTestBase.h>
|
||||
|
||||
#include "wifi_hidl_call_util.h"
|
||||
@@ -87,14 +89,21 @@ bool configureChipToSupportIfaceTypeInternal(const sp<IWifiChip>& wifi_chip,
|
||||
}
|
||||
} // namespace
|
||||
|
||||
sp<IWifi> getWifi() {
|
||||
sp<IWifi> wifi = ::testing::VtsHalHidlTargetTestBase::getService<IWifi>(
|
||||
gEnv->getServiceName<IWifi>());
|
||||
return wifi;
|
||||
sp<IWifi> getWifi(const std::string& instance_name) {
|
||||
if ((!gEnv && instance_name.empty()) || (gEnv && !instance_name.empty())) {
|
||||
ALOGE("instance_name and gEnv must have one and only one set.");
|
||||
return nullptr;
|
||||
}
|
||||
if (gEnv) {
|
||||
return ::testing::VtsHalHidlTargetTestBase::getService<IWifi>(
|
||||
gEnv->getServiceName<IWifi>());
|
||||
} else {
|
||||
return IWifi::getService(instance_name);
|
||||
}
|
||||
}
|
||||
|
||||
sp<IWifiChip> getWifiChip() {
|
||||
sp<IWifi> wifi = getWifi();
|
||||
sp<IWifiChip> getWifiChip(const std::string& instance_name) {
|
||||
sp<IWifi> wifi = getWifi(instance_name);
|
||||
if (!wifi.get()) {
|
||||
return nullptr;
|
||||
}
|
||||
@@ -122,8 +131,8 @@ sp<IWifiChip> getWifiChip() {
|
||||
return status_and_chip.second;
|
||||
}
|
||||
|
||||
sp<IWifiApIface> getWifiApIface() {
|
||||
sp<IWifiChip> wifi_chip = getWifiChip();
|
||||
sp<IWifiApIface> getWifiApIface(const std::string& instance_name) {
|
||||
sp<IWifiChip> wifi_chip = getWifiChip(instance_name);
|
||||
if (!wifi_chip.get()) {
|
||||
return nullptr;
|
||||
}
|
||||
@@ -137,8 +146,8 @@ sp<IWifiApIface> getWifiApIface() {
|
||||
return status_and_iface.second;
|
||||
}
|
||||
|
||||
sp<IWifiNanIface> getWifiNanIface() {
|
||||
sp<IWifiChip> wifi_chip = getWifiChip();
|
||||
sp<IWifiNanIface> getWifiNanIface(const std::string& instance_name) {
|
||||
sp<IWifiChip> wifi_chip = getWifiChip(instance_name);
|
||||
if (!wifi_chip.get()) {
|
||||
return nullptr;
|
||||
}
|
||||
@@ -152,8 +161,8 @@ sp<IWifiNanIface> getWifiNanIface() {
|
||||
return status_and_iface.second;
|
||||
}
|
||||
|
||||
sp<IWifiP2pIface> getWifiP2pIface() {
|
||||
sp<IWifiChip> wifi_chip = getWifiChip();
|
||||
sp<IWifiP2pIface> getWifiP2pIface(const std::string& instance_name) {
|
||||
sp<IWifiChip> wifi_chip = getWifiChip(instance_name);
|
||||
if (!wifi_chip.get()) {
|
||||
return nullptr;
|
||||
}
|
||||
@@ -167,8 +176,8 @@ sp<IWifiP2pIface> getWifiP2pIface() {
|
||||
return status_and_iface.second;
|
||||
}
|
||||
|
||||
sp<IWifiStaIface> getWifiStaIface() {
|
||||
sp<IWifiChip> wifi_chip = getWifiChip();
|
||||
sp<IWifiStaIface> getWifiStaIface(const std::string& instance_name) {
|
||||
sp<IWifiChip> wifi_chip = getWifiChip(instance_name);
|
||||
if (!wifi_chip.get()) {
|
||||
return nullptr;
|
||||
}
|
||||
@@ -182,8 +191,8 @@ sp<IWifiStaIface> getWifiStaIface() {
|
||||
return status_and_iface.second;
|
||||
}
|
||||
|
||||
sp<IWifiRttController> getWifiRttController() {
|
||||
sp<IWifiChip> wifi_chip = getWifiChip();
|
||||
sp<IWifiRttController> getWifiRttController(const std::string& instance_name) {
|
||||
sp<IWifiChip> wifi_chip = getWifiChip(instance_name);
|
||||
if (!wifi_chip.get()) {
|
||||
return nullptr;
|
||||
}
|
||||
@@ -206,8 +215,8 @@ bool configureChipToSupportIfaceType(const sp<IWifiChip>& wifi_chip,
|
||||
configured_mode_id);
|
||||
}
|
||||
|
||||
void stopWifi() {
|
||||
sp<IWifi> wifi = getWifi();
|
||||
void stopWifi(const std::string& instance_name) {
|
||||
sp<IWifi> wifi = getWifi(instance_name);
|
||||
ASSERT_NE(wifi, nullptr);
|
||||
HIDL_INVOKE(wifi, stop);
|
||||
}
|
||||
|
||||
@@ -31,14 +31,21 @@
|
||||
// Note: We only have a single instance of each of these objects currently.
|
||||
// These helper functions should be modified to return vectors if we support
|
||||
// multiple instances.
|
||||
android::sp<android::hardware::wifi::V1_0::IWifi> getWifi();
|
||||
android::sp<android::hardware::wifi::V1_0::IWifiChip> getWifiChip();
|
||||
android::sp<android::hardware::wifi::V1_0::IWifiApIface> getWifiApIface();
|
||||
android::sp<android::hardware::wifi::V1_0::IWifiNanIface> getWifiNanIface();
|
||||
android::sp<android::hardware::wifi::V1_0::IWifiP2pIface> getWifiP2pIface();
|
||||
android::sp<android::hardware::wifi::V1_0::IWifiStaIface> getWifiStaIface();
|
||||
// TODO(b/143892896): Remove the default value as part of the cleanup.
|
||||
android::sp<android::hardware::wifi::V1_0::IWifi> getWifi(
|
||||
const std::string& instance_name = "");
|
||||
android::sp<android::hardware::wifi::V1_0::IWifiChip> getWifiChip(
|
||||
const std::string& instance_name = "");
|
||||
android::sp<android::hardware::wifi::V1_0::IWifiApIface> getWifiApIface(
|
||||
const std::string& instance_name = "");
|
||||
android::sp<android::hardware::wifi::V1_0::IWifiNanIface> getWifiNanIface(
|
||||
const std::string& instance_name = "");
|
||||
android::sp<android::hardware::wifi::V1_0::IWifiP2pIface> getWifiP2pIface(
|
||||
const std::string& instance_name = "");
|
||||
android::sp<android::hardware::wifi::V1_0::IWifiStaIface> getWifiStaIface(
|
||||
const std::string& instance_name = "");
|
||||
android::sp<android::hardware::wifi::V1_0::IWifiRttController>
|
||||
getWifiRttController();
|
||||
getWifiRttController(const std::string& instance_name = "");
|
||||
// Configure the chip in a mode to support the creation of the provided
|
||||
// iface type.
|
||||
bool configureChipToSupportIfaceType(
|
||||
@@ -46,7 +53,7 @@ bool configureChipToSupportIfaceType(
|
||||
android::hardware::wifi::V1_0::IfaceType type,
|
||||
android::hardware::wifi::V1_0::ChipModeId* configured_mode_id);
|
||||
// Used to trigger IWifi.stop() at the end of every test.
|
||||
void stopWifi();
|
||||
void stopWifi(const std::string& instance_name = "");
|
||||
|
||||
class WifiHidlEnvironment : public ::testing::VtsHalHidlTargetTestEnvBase {
|
||||
protected:
|
||||
|
||||
@@ -49,5 +49,5 @@ cc_test {
|
||||
"libwifi-system",
|
||||
"libwifi-system-iface",
|
||||
],
|
||||
test_suites: ["general-tests"],
|
||||
test_suites: ["general-tests", "vts-core"],
|
||||
}
|
||||
|
||||
@@ -14,36 +14,8 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#include <android-base/logging.h>
|
||||
#include <android/hardware/wifi/1.0/IWifi.h>
|
||||
#include <VtsHalHidlTargetTestEnvBase.h>
|
||||
|
||||
#include "hostapd_hidl_test_utils.h"
|
||||
|
||||
class WifiHostapdHidlEnvironment_1_0 : public WifiHostapdHidlEnvironment {
|
||||
public:
|
||||
// get the test environment singleton
|
||||
static WifiHostapdHidlEnvironment_1_0* Instance() {
|
||||
static WifiHostapdHidlEnvironment_1_0* instance =
|
||||
new WifiHostapdHidlEnvironment_1_0;
|
||||
return instance;
|
||||
}
|
||||
|
||||
virtual void registerTestServices() override {
|
||||
registerTestService<::android::hardware::wifi::V1_0::IWifi>();
|
||||
registerTestService<android::hardware::wifi::hostapd::V1_0::IHostapd>();
|
||||
}
|
||||
|
||||
private:
|
||||
WifiHostapdHidlEnvironment_1_0() {}
|
||||
};
|
||||
|
||||
WifiHostapdHidlEnvironment* gEnv = WifiHostapdHidlEnvironment_1_0::Instance();
|
||||
|
||||
int main(int argc, char** argv) {
|
||||
::testing::AddGlobalTestEnvironment(gEnv);
|
||||
::testing::InitGoogleTest(&argc, argv);
|
||||
gEnv->init(&argc, argv);
|
||||
int status = RUN_ALL_TESTS();
|
||||
LOG(INFO) << "Test result = " << status;
|
||||
return status;
|
||||
}
|
||||
// TODO(b/143892896): Remove this file after wifi_hidl_test_utils.cpp is
|
||||
// updated.
|
||||
::testing::VtsHalHidlTargetTestEnvBase* gEnv = nullptr;
|
||||
|
||||
@@ -17,18 +17,22 @@
|
||||
#include <android-base/logging.h>
|
||||
#include <cutils/properties.h>
|
||||
|
||||
#include <VtsHalHidlTargetTestBase.h>
|
||||
|
||||
#include <android/hardware/wifi/1.0/IWifi.h>
|
||||
#include <android/hardware/wifi/hostapd/1.0/IHostapd.h>
|
||||
|
||||
#include <gtest/gtest.h>
|
||||
#include <hidl/GtestPrinter.h>
|
||||
#include <hidl/ServiceManagement.h>
|
||||
|
||||
#include "hostapd_hidl_call_util.h"
|
||||
#include "hostapd_hidl_test_utils.h"
|
||||
|
||||
using ::android::sp;
|
||||
using ::android::hardware::hidl_vec;
|
||||
using ::android::hardware::wifi::hostapd::V1_0::IHostapd;
|
||||
using ::android::hardware::wifi::hostapd::V1_0::HostapdStatus;
|
||||
using ::android::hardware::wifi::hostapd::V1_0::HostapdStatusCode;
|
||||
using ::android::hardware::wifi::hostapd::V1_0::IHostapd;
|
||||
using ::android::hardware::wifi::V1_0::IWifi;
|
||||
|
||||
namespace {
|
||||
constexpr unsigned char kNwSsid[] = {'t', 'e', 's', 't', '1',
|
||||
@@ -38,16 +42,20 @@ constexpr int kIfaceChannel = 6;
|
||||
constexpr int kIfaceInvalidChannel = 567;
|
||||
} // namespace
|
||||
|
||||
class HostapdHidlTest : public ::testing::VtsHalHidlTargetTestBase {
|
||||
class HostapdHidlTest
|
||||
: public ::testing::TestWithParam<std::tuple<std::string, std::string>> {
|
||||
public:
|
||||
virtual void SetUp() override {
|
||||
stopSupplicantIfNeeded();
|
||||
startHostapdAndWaitForHidlService();
|
||||
hostapd_ = getHostapd();
|
||||
wifi_instance_name_ = std::get<0>(GetParam());
|
||||
hostapd_instance_name_ = std::get<1>(GetParam());
|
||||
stopSupplicantIfNeeded(wifi_instance_name_);
|
||||
startHostapdAndWaitForHidlService(wifi_instance_name_,
|
||||
hostapd_instance_name_);
|
||||
hostapd_ = IHostapd::getService(hostapd_instance_name_);
|
||||
ASSERT_NE(hostapd_.get(), nullptr);
|
||||
}
|
||||
|
||||
virtual void TearDown() override { stopHostapd(); }
|
||||
virtual void TearDown() override { stopHostapd(wifi_instance_name_); }
|
||||
|
||||
protected:
|
||||
std::string getPrimaryWlanIfaceName() {
|
||||
@@ -121,6 +129,8 @@ class HostapdHidlTest : public ::testing::VtsHalHidlTargetTestBase {
|
||||
}
|
||||
// IHostapd object used for all tests in this fixture.
|
||||
sp<IHostapd> hostapd_;
|
||||
std::string wifi_instance_name_;
|
||||
std::string hostapd_instance_name_;
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -128,17 +138,19 @@ class HostapdHidlTest : public ::testing::VtsHalHidlTargetTestBase {
|
||||
* Ensures that an instance of the IHostapd proxy object is
|
||||
* successfully created.
|
||||
*/
|
||||
TEST(HostapdHidlTestNoFixture, Create) {
|
||||
startHostapdAndWaitForHidlService();
|
||||
EXPECT_NE(nullptr, getHostapd().get());
|
||||
stopHostapd();
|
||||
TEST_P(HostapdHidlTest, Create) {
|
||||
stopHostapd(wifi_instance_name_);
|
||||
startHostapdAndWaitForHidlService(wifi_instance_name_,
|
||||
hostapd_instance_name_);
|
||||
sp<IHostapd> hostapd = IHostapd::getService(hostapd_instance_name_);
|
||||
EXPECT_NE(nullptr, hostapd.get());
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds an access point with PSK network config & ACS enabled.
|
||||
* Access point creation should pass.
|
||||
*/
|
||||
TEST_F(HostapdHidlTest, AddPskAccessPointWithAcs) {
|
||||
TEST_P(HostapdHidlTest, AddPskAccessPointWithAcs) {
|
||||
if (!is_1_1(hostapd_)) {
|
||||
auto status = HIDL_INVOKE(hostapd_, addAccessPoint,
|
||||
getIfaceParamsWithAcs(), getPskNwParams());
|
||||
@@ -151,7 +163,7 @@ TEST_F(HostapdHidlTest, AddPskAccessPointWithAcs) {
|
||||
* Adds an access point with Open network config & ACS enabled.
|
||||
* Access point creation should pass.
|
||||
*/
|
||||
TEST_F(HostapdHidlTest, AddOpenAccessPointWithAcs) {
|
||||
TEST_P(HostapdHidlTest, AddOpenAccessPointWithAcs) {
|
||||
if (!is_1_1(hostapd_)) {
|
||||
auto status = HIDL_INVOKE(hostapd_, addAccessPoint,
|
||||
getIfaceParamsWithAcs(), getOpenNwParams());
|
||||
@@ -164,7 +176,7 @@ TEST_F(HostapdHidlTest, AddOpenAccessPointWithAcs) {
|
||||
* Adds an access point with PSK network config & ACS disabled.
|
||||
* Access point creation should pass.
|
||||
*/
|
||||
TEST_F(HostapdHidlTest, AddPskAccessPointWithoutAcs) {
|
||||
TEST_P(HostapdHidlTest, AddPskAccessPointWithoutAcs) {
|
||||
if (!is_1_1(hostapd_)) {
|
||||
auto status = HIDL_INVOKE(hostapd_, addAccessPoint,
|
||||
getIfaceParamsWithoutAcs(), getPskNwParams());
|
||||
@@ -176,7 +188,7 @@ TEST_F(HostapdHidlTest, AddPskAccessPointWithoutAcs) {
|
||||
* Adds an access point with Open network config & ACS disabled.
|
||||
* Access point creation should pass.
|
||||
*/
|
||||
TEST_F(HostapdHidlTest, AddOpenAccessPointWithoutAcs) {
|
||||
TEST_P(HostapdHidlTest, AddOpenAccessPointWithoutAcs) {
|
||||
if (!is_1_1(hostapd_)) {
|
||||
auto status =
|
||||
HIDL_INVOKE(hostapd_, addAccessPoint, getIfaceParamsWithoutAcs(),
|
||||
@@ -189,7 +201,7 @@ TEST_F(HostapdHidlTest, AddOpenAccessPointWithoutAcs) {
|
||||
* Adds & then removes an access point with PSK network config & ACS enabled.
|
||||
* Access point creation & removal should pass.
|
||||
*/
|
||||
TEST_F(HostapdHidlTest, RemoveAccessPointWithAcs) {
|
||||
TEST_P(HostapdHidlTest, RemoveAccessPointWithAcs) {
|
||||
if (!is_1_1(hostapd_)) {
|
||||
auto status = HIDL_INVOKE(hostapd_, addAccessPoint,
|
||||
getIfaceParamsWithAcs(), getPskNwParams());
|
||||
@@ -207,7 +219,7 @@ TEST_F(HostapdHidlTest, RemoveAccessPointWithAcs) {
|
||||
* Adds & then removes an access point with PSK network config & ACS disabled.
|
||||
* Access point creation & removal should pass.
|
||||
*/
|
||||
TEST_F(HostapdHidlTest, RemoveAccessPointWithoutAcs) {
|
||||
TEST_P(HostapdHidlTest, RemoveAccessPointWithoutAcs) {
|
||||
if (!is_1_1(hostapd_)) {
|
||||
auto status = HIDL_INVOKE(hostapd_, addAccessPoint,
|
||||
getIfaceParamsWithoutAcs(), getPskNwParams());
|
||||
@@ -222,7 +234,7 @@ TEST_F(HostapdHidlTest, RemoveAccessPointWithoutAcs) {
|
||||
* Adds an access point with invalid channel.
|
||||
* Access point creation should fail.
|
||||
*/
|
||||
TEST_F(HostapdHidlTest, AddPskAccessPointWithInvalidChannel) {
|
||||
TEST_P(HostapdHidlTest, AddPskAccessPointWithInvalidChannel) {
|
||||
if (!is_1_1(hostapd_)) {
|
||||
auto status =
|
||||
HIDL_INVOKE(hostapd_, addAccessPoint,
|
||||
@@ -235,7 +247,7 @@ TEST_F(HostapdHidlTest, AddPskAccessPointWithInvalidChannel) {
|
||||
* Adds an access point with invalid PSK network config.
|
||||
* Access point creation should fail.
|
||||
*/
|
||||
TEST_F(HostapdHidlTest, AddInvalidPskAccessPointWithoutAcs) {
|
||||
TEST_P(HostapdHidlTest, AddInvalidPskAccessPointWithoutAcs) {
|
||||
if (!is_1_1(hostapd_)) {
|
||||
auto status =
|
||||
HIDL_INVOKE(hostapd_, addAccessPoint, getIfaceParamsWithoutAcs(),
|
||||
@@ -248,6 +260,13 @@ TEST_F(HostapdHidlTest, AddInvalidPskAccessPointWithoutAcs) {
|
||||
* Terminate
|
||||
* This terminates the service.
|
||||
*/
|
||||
TEST_F(HostapdHidlTest, Terminate) {
|
||||
hostapd_->terminate();
|
||||
}
|
||||
TEST_P(HostapdHidlTest, Terminate) { hostapd_->terminate(); }
|
||||
|
||||
INSTANTIATE_TEST_SUITE_P(
|
||||
PerInstance, HostapdHidlTest,
|
||||
testing::Combine(
|
||||
testing::ValuesIn(
|
||||
android::hardware::getAllHalInstanceNames(IWifi::descriptor)),
|
||||
testing::ValuesIn(
|
||||
android::hardware::getAllHalInstanceNames(IHostapd::descriptor))),
|
||||
android::hardware::PrintInstanceTupleNameToString<>);
|
||||
|
||||
@@ -44,13 +44,11 @@ using ::android::hidl::manager::V1_0::IServiceNotification;
|
||||
using ::android::wifi_system::HostapdManager;
|
||||
using ::android::wifi_system::SupplicantManager;
|
||||
|
||||
extern WifiHostapdHidlEnvironment* gEnv;
|
||||
|
||||
namespace {
|
||||
// Helper function to initialize the driver and firmware to AP mode
|
||||
// using the vendor HAL HIDL interface.
|
||||
void initilializeDriverAndFirmware() {
|
||||
sp<IWifiChip> wifi_chip = getWifiChip();
|
||||
void initilializeDriverAndFirmware(const std::string& wifi_instance_name) {
|
||||
sp<IWifiChip> wifi_chip = getWifiChip(wifi_instance_name);
|
||||
ChipModeId mode_id;
|
||||
EXPECT_TRUE(configureChipToSupportIfaceType(
|
||||
wifi_chip, ::android::hardware::wifi::V1_0::IfaceType::AP, &mode_id));
|
||||
@@ -58,7 +56,9 @@ void initilializeDriverAndFirmware() {
|
||||
|
||||
// Helper function to deinitialize the driver and firmware
|
||||
// using the vendor HAL HIDL interface.
|
||||
void deInitilializeDriverAndFirmware() { stopWifi(); }
|
||||
void deInitilializeDriverAndFirmware(const std::string& wifi_instance_name) {
|
||||
stopWifi(wifi_instance_name);
|
||||
}
|
||||
} // namespace
|
||||
|
||||
// Utility class to wait for wpa_hostapd's HIDL service registration.
|
||||
@@ -110,45 +110,42 @@ class ServiceNotificationListener : public IServiceNotification {
|
||||
std::condition_variable condition_;
|
||||
};
|
||||
|
||||
void stopSupplicantIfNeeded() {
|
||||
void stopSupplicantIfNeeded(const std::string& instance_name) {
|
||||
SupplicantManager supplicant_manager;
|
||||
if (supplicant_manager.IsSupplicantRunning()) {
|
||||
LOG(INFO) << "Supplicant is running, stop supplicant first.";
|
||||
ASSERT_TRUE(supplicant_manager.StopSupplicant());
|
||||
deInitilializeDriverAndFirmware();
|
||||
deInitilializeDriverAndFirmware(instance_name);
|
||||
ASSERT_FALSE(supplicant_manager.IsSupplicantRunning());
|
||||
}
|
||||
}
|
||||
|
||||
void stopHostapd() {
|
||||
void stopHostapd(const std::string& instance_name) {
|
||||
HostapdManager hostapd_manager;
|
||||
|
||||
ASSERT_TRUE(hostapd_manager.StopHostapd());
|
||||
deInitilializeDriverAndFirmware();
|
||||
deInitilializeDriverAndFirmware(instance_name);
|
||||
}
|
||||
|
||||
void startHostapdAndWaitForHidlService() {
|
||||
initilializeDriverAndFirmware();
|
||||
void startHostapdAndWaitForHidlService(
|
||||
const std::string& wifi_instance_name,
|
||||
const std::string& hostapd_instance_name) {
|
||||
initilializeDriverAndFirmware(wifi_instance_name);
|
||||
|
||||
android::sp<ServiceNotificationListener> notification_listener =
|
||||
new ServiceNotificationListener();
|
||||
string service_name = gEnv->getServiceName<IHostapd>();
|
||||
ASSERT_TRUE(notification_listener->registerForHidlServiceNotifications(
|
||||
service_name));
|
||||
hostapd_instance_name));
|
||||
|
||||
HostapdManager hostapd_manager;
|
||||
ASSERT_TRUE(hostapd_manager.StartHostapd());
|
||||
|
||||
ASSERT_TRUE(notification_listener->waitForHidlService(500, service_name));
|
||||
ASSERT_TRUE(
|
||||
notification_listener->waitForHidlService(500, hostapd_instance_name));
|
||||
}
|
||||
|
||||
bool is_1_1(const sp<IHostapd>& hostapd) {
|
||||
sp<::android::hardware::wifi::hostapd::V1_1::IHostapd> hostapd_1_1 =
|
||||
::android::hardware::wifi::hostapd::V1_1::IHostapd::castFrom(hostapd);
|
||||
return hostapd_1_1.get() != nullptr;
|
||||
}
|
||||
|
||||
sp<IHostapd> getHostapd() {
|
||||
return ::testing::VtsHalHidlTargetTestBase::getService<IHostapd>(
|
||||
gEnv->getServiceName<IHostapd>());
|
||||
}
|
||||
}
|
||||
@@ -20,32 +20,18 @@
|
||||
#include <android/hardware/wifi/hostapd/1.0/IHostapd.h>
|
||||
#include <android/hardware/wifi/hostapd/1.1/IHostapd.h>
|
||||
|
||||
#include <VtsHalHidlTargetTestEnvBase.h>
|
||||
|
||||
// Used to stop the android wifi framework before every test.
|
||||
void stopWifiFramework();
|
||||
void startWifiFramework();
|
||||
void stopSupplicantIfNeeded();
|
||||
void stopHostapd();
|
||||
void stopWifiFramework(const std::string& instance_name);
|
||||
void startWifiFramework(const std::string& instance_name);
|
||||
void stopSupplicantIfNeeded(const std::string& instance_name);
|
||||
void stopHostapd(const std::string& instance_name);
|
||||
// Used to configure the chip, driver and start wpa_hostapd before every
|
||||
// test.
|
||||
void startHostapdAndWaitForHidlService();
|
||||
void startHostapdAndWaitForHidlService(
|
||||
const std::string& wifi_instance_name,
|
||||
const std::string& hostapd_instance_name);
|
||||
|
||||
// Helper functions to obtain references to the various HIDL interface objects.
|
||||
// Note: We only have a single instance of each of these objects currently.
|
||||
// These helper functions should be modified to return vectors if we support
|
||||
// multiple instances.
|
||||
android::sp<android::hardware::wifi::hostapd::V1_0::IHostapd> getHostapd();
|
||||
bool is_1_1(const android::sp<android::hardware::wifi::hostapd::V1_0::IHostapd>&
|
||||
hostapd);
|
||||
|
||||
class WifiHostapdHidlEnvironment
|
||||
: public ::testing::VtsHalHidlTargetTestEnvBase {
|
||||
public:
|
||||
virtual void HidlSetUp() override { stopHostapd(); }
|
||||
virtual void HidlTearDown() override {
|
||||
startHostapdAndWaitForHidlService();
|
||||
}
|
||||
};
|
||||
|
||||
#endif /* HOSTAPD_HIDL_TEST_UTILS_H */
|
||||
|
||||
@@ -14,25 +14,6 @@
|
||||
// limitations under the License.
|
||||
//
|
||||
|
||||
cc_library_static {
|
||||
name: "VtsHalWifiHostapdV1_1TargetTestUtil",
|
||||
defaults: ["VtsHalTargetTestDefaults"],
|
||||
srcs: ["hostapd_hidl_test_utils_1_1.cpp"],
|
||||
export_include_dirs: [
|
||||
"."
|
||||
],
|
||||
static_libs: [
|
||||
"VtsHalWifiV1_0TargetTestUtil",
|
||||
"VtsHalWifiHostapdV1_0TargetTestUtil",
|
||||
"android.hardware.wifi.hostapd@1.0",
|
||||
"android.hardware.wifi.hostapd@1.1",
|
||||
"android.hardware.wifi@1.0",
|
||||
"libgmock",
|
||||
"libwifi-system",
|
||||
"libwifi-system-iface",
|
||||
],
|
||||
}
|
||||
|
||||
cc_test {
|
||||
name: "VtsHalWifiHostapdV1_1TargetTest",
|
||||
defaults: ["VtsHalTargetTestDefaults"],
|
||||
@@ -43,7 +24,6 @@ cc_test {
|
||||
static_libs: [
|
||||
"VtsHalWifiV1_0TargetTestUtil",
|
||||
"VtsHalWifiHostapdV1_0TargetTestUtil",
|
||||
"VtsHalWifiHostapdV1_1TargetTestUtil",
|
||||
"android.hardware.wifi.hostapd@1.0",
|
||||
"android.hardware.wifi.hostapd@1.1",
|
||||
"android.hardware.wifi@1.0",
|
||||
@@ -51,6 +31,6 @@ cc_test {
|
||||
"libwifi-system",
|
||||
"libwifi-system-iface",
|
||||
],
|
||||
test_suites: ["general-tests"],
|
||||
test_suites: ["general-tests", "vts-core"],
|
||||
}
|
||||
|
||||
|
||||
@@ -14,38 +14,8 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#include <android-base/logging.h>
|
||||
#include <android/hardware/wifi/1.0/IWifi.h>
|
||||
#include <VtsHalHidlTargetTestEnvBase.h>
|
||||
|
||||
#include "hostapd_hidl_test_utils.h"
|
||||
#include "hostapd_hidl_test_utils_1_1.h"
|
||||
|
||||
class WifiHostapdHidlEnvironment_1_1 : public WifiHostapdHidlEnvironment {
|
||||
public:
|
||||
// get the test environment singleton
|
||||
static WifiHostapdHidlEnvironment_1_1* Instance() {
|
||||
static WifiHostapdHidlEnvironment_1_1* instance =
|
||||
new WifiHostapdHidlEnvironment_1_1;
|
||||
return instance;
|
||||
}
|
||||
|
||||
virtual void registerTestServices() override {
|
||||
registerTestService<::android::hardware::wifi::V1_0::IWifi>();
|
||||
registerTestService<android::hardware::wifi::hostapd::V1_0::IHostapd>();
|
||||
registerTestService<android::hardware::wifi::hostapd::V1_1::IHostapd>();
|
||||
}
|
||||
|
||||
private:
|
||||
WifiHostapdHidlEnvironment_1_1() {}
|
||||
};
|
||||
|
||||
WifiHostapdHidlEnvironment* gEnv = WifiHostapdHidlEnvironment_1_1::Instance();
|
||||
|
||||
int main(int argc, char** argv) {
|
||||
::testing::AddGlobalTestEnvironment(gEnv);
|
||||
::testing::InitGoogleTest(&argc, argv);
|
||||
gEnv->init(&argc, argv);
|
||||
int status = RUN_ALL_TESTS();
|
||||
LOG(INFO) << "Test result = " << status;
|
||||
return status;
|
||||
}
|
||||
// TODO(b/143892896): Remove this file after wifi_hidl_test_utils.cpp is
|
||||
// updated.
|
||||
::testing::VtsHalHidlTargetTestEnvBase* gEnv = nullptr;
|
||||
@@ -17,13 +17,15 @@
|
||||
#include <android-base/logging.h>
|
||||
#include <cutils/properties.h>
|
||||
|
||||
#include <VtsHalHidlTargetTestBase.h>
|
||||
#include <gtest/gtest.h>
|
||||
#include <hidl/GtestPrinter.h>
|
||||
#include <hidl/ServiceManagement.h>
|
||||
|
||||
#include <android/hardware/wifi/1.0/IWifi.h>
|
||||
#include <android/hardware/wifi/hostapd/1.1/IHostapd.h>
|
||||
|
||||
#include "hostapd_hidl_call_util.h"
|
||||
#include "hostapd_hidl_test_utils.h"
|
||||
#include "hostapd_hidl_test_utils_1_1.h"
|
||||
|
||||
using ::android::sp;
|
||||
using ::android::hardware::hidl_string;
|
||||
@@ -33,6 +35,7 @@ using ::android::hardware::wifi::hostapd::V1_0::HostapdStatus;
|
||||
using ::android::hardware::wifi::hostapd::V1_0::HostapdStatusCode;
|
||||
using ::android::hardware::wifi::hostapd::V1_1::IHostapd;
|
||||
using ::android::hardware::wifi::hostapd::V1_1::IHostapdCallback;
|
||||
using ::android::hardware::wifi::V1_0::IWifi;
|
||||
|
||||
namespace {
|
||||
constexpr unsigned char kNwSsid[] = {'t', 'e', 's', 't', '1',
|
||||
@@ -42,16 +45,20 @@ constexpr int kIfaceChannel = 6;
|
||||
constexpr int kIfaceInvalidChannel = 567;
|
||||
} // namespace
|
||||
|
||||
class HostapdHidlTest : public ::testing::VtsHalHidlTargetTestBase {
|
||||
class HostapdHidlTest
|
||||
: public ::testing::TestWithParam<std::tuple<std::string, std::string>> {
|
||||
public:
|
||||
virtual void SetUp() override {
|
||||
stopSupplicantIfNeeded();
|
||||
startHostapdAndWaitForHidlService();
|
||||
hostapd_ = getHostapd_1_1();
|
||||
wifi_instance_name_ = std::get<0>(GetParam());
|
||||
hostapd_instance_name_ = std::get<1>(GetParam());
|
||||
stopSupplicantIfNeeded(wifi_instance_name_);
|
||||
startHostapdAndWaitForHidlService(wifi_instance_name_,
|
||||
hostapd_instance_name_);
|
||||
hostapd_ = IHostapd::getService(hostapd_instance_name_);
|
||||
ASSERT_NE(hostapd_.get(), nullptr);
|
||||
}
|
||||
|
||||
virtual void TearDown() override { stopHostapd(); }
|
||||
virtual void TearDown() override { stopHostapd(wifi_instance_name_); }
|
||||
|
||||
protected:
|
||||
std::string getPrimaryWlanIfaceName() {
|
||||
@@ -152,6 +159,8 @@ class HostapdHidlTest : public ::testing::VtsHalHidlTargetTestBase {
|
||||
|
||||
// IHostapd object used for all tests in this fixture.
|
||||
sp<IHostapd> hostapd_;
|
||||
std::string wifi_instance_name_;
|
||||
std::string hostapd_instance_name_;
|
||||
};
|
||||
|
||||
class IfaceCallback : public IHostapdCallback {
|
||||
@@ -164,7 +173,7 @@ class IfaceCallback : public IHostapdCallback {
|
||||
/*
|
||||
* RegisterCallback
|
||||
*/
|
||||
TEST_F(HostapdHidlTest, registerCallback) {
|
||||
TEST_P(HostapdHidlTest, registerCallback) {
|
||||
hostapd_->registerCallback(
|
||||
new IfaceCallback(), [](const HostapdStatus& status) {
|
||||
EXPECT_EQ(HostapdStatusCode::SUCCESS, status.code);
|
||||
@@ -175,7 +184,7 @@ TEST_F(HostapdHidlTest, registerCallback) {
|
||||
* Adds an access point with PSK network config & ACS enabled.
|
||||
* Access point creation should pass.
|
||||
*/
|
||||
TEST_F(HostapdHidlTest, AddPskAccessPointWithAcs) {
|
||||
TEST_P(HostapdHidlTest, AddPskAccessPointWithAcs) {
|
||||
auto status = HIDL_INVOKE(hostapd_, addAccessPoint_1_1,
|
||||
getIfaceParamsWithAcs(), getPskNwParams());
|
||||
// TODO: b/140172237, fix this in R.
|
||||
@@ -186,7 +195,7 @@ TEST_F(HostapdHidlTest, AddPskAccessPointWithAcs) {
|
||||
* Adds an access point with PSK network config, ACS enabled & channel Range.
|
||||
* Access point creation should pass.
|
||||
*/
|
||||
TEST_F(HostapdHidlTest, AddPskAccessPointWithAcsAndChannelRange) {
|
||||
TEST_P(HostapdHidlTest, AddPskAccessPointWithAcsAndChannelRange) {
|
||||
auto status =
|
||||
HIDL_INVOKE(hostapd_, addAccessPoint_1_1,
|
||||
getIfaceParamsWithAcsAndChannelRange(), getPskNwParams());
|
||||
@@ -198,7 +207,7 @@ TEST_F(HostapdHidlTest, AddPskAccessPointWithAcsAndChannelRange) {
|
||||
* Adds an access point with invalid channel range.
|
||||
* Access point creation should fail.
|
||||
*/
|
||||
TEST_F(HostapdHidlTest, AddPskAccessPointWithAcsAndInvalidChannelRange) {
|
||||
TEST_P(HostapdHidlTest, AddPskAccessPointWithAcsAndInvalidChannelRange) {
|
||||
auto status = HIDL_INVOKE(hostapd_, addAccessPoint_1_1,
|
||||
getIfaceParamsWithAcsAndInvalidChannelRange(),
|
||||
getPskNwParams());
|
||||
@@ -210,7 +219,7 @@ TEST_F(HostapdHidlTest, AddPskAccessPointWithAcsAndInvalidChannelRange) {
|
||||
* Adds an access point with Open network config & ACS enabled.
|
||||
* Access point creation should pass.
|
||||
*/
|
||||
TEST_F(HostapdHidlTest, AddOpenAccessPointWithAcs) {
|
||||
TEST_P(HostapdHidlTest, AddOpenAccessPointWithAcs) {
|
||||
auto status = HIDL_INVOKE(hostapd_, addAccessPoint_1_1,
|
||||
getIfaceParamsWithAcs(), getOpenNwParams());
|
||||
// TODO: b/140172237, fix this in R
|
||||
@@ -221,7 +230,7 @@ TEST_F(HostapdHidlTest, AddOpenAccessPointWithAcs) {
|
||||
* Adds an access point with PSK network config & ACS disabled.
|
||||
* Access point creation should pass.
|
||||
*/
|
||||
TEST_F(HostapdHidlTest, AddPskAccessPointWithoutAcs) {
|
||||
TEST_P(HostapdHidlTest, AddPskAccessPointWithoutAcs) {
|
||||
auto status = HIDL_INVOKE(hostapd_, addAccessPoint_1_1,
|
||||
getIfaceParamsWithoutAcs(), getPskNwParams());
|
||||
EXPECT_EQ(HostapdStatusCode::SUCCESS, status.code);
|
||||
@@ -231,7 +240,7 @@ TEST_F(HostapdHidlTest, AddPskAccessPointWithoutAcs) {
|
||||
* Adds an access point with Open network config & ACS disabled.
|
||||
* Access point creation should pass.
|
||||
*/
|
||||
TEST_F(HostapdHidlTest, AddOpenAccessPointWithoutAcs) {
|
||||
TEST_P(HostapdHidlTest, AddOpenAccessPointWithoutAcs) {
|
||||
auto status = HIDL_INVOKE(hostapd_, addAccessPoint_1_1,
|
||||
getIfaceParamsWithoutAcs(), getOpenNwParams());
|
||||
EXPECT_EQ(HostapdStatusCode::SUCCESS, status.code);
|
||||
@@ -241,7 +250,7 @@ TEST_F(HostapdHidlTest, AddOpenAccessPointWithoutAcs) {
|
||||
* Adds & then removes an access point with PSK network config & ACS enabled.
|
||||
* Access point creation & removal should pass.
|
||||
*/
|
||||
TEST_F(HostapdHidlTest, RemoveAccessPointWithAcs) {
|
||||
TEST_P(HostapdHidlTest, RemoveAccessPointWithAcs) {
|
||||
auto status = HIDL_INVOKE(hostapd_, addAccessPoint_1_1,
|
||||
getIfaceParamsWithAcs(), getPskNwParams());
|
||||
// TODO: b/140172237, fix this in R
|
||||
@@ -257,7 +266,7 @@ TEST_F(HostapdHidlTest, RemoveAccessPointWithAcs) {
|
||||
* Adds & then removes an access point with PSK network config & ACS disabled.
|
||||
* Access point creation & removal should pass.
|
||||
*/
|
||||
TEST_F(HostapdHidlTest, RemoveAccessPointWithoutAcs) {
|
||||
TEST_P(HostapdHidlTest, RemoveAccessPointWithoutAcs) {
|
||||
auto status = HIDL_INVOKE(hostapd_, addAccessPoint_1_1,
|
||||
getIfaceParamsWithoutAcs(), getPskNwParams());
|
||||
EXPECT_EQ(HostapdStatusCode::SUCCESS, status.code);
|
||||
@@ -270,7 +279,7 @@ TEST_F(HostapdHidlTest, RemoveAccessPointWithoutAcs) {
|
||||
* Adds an access point with invalid channel.
|
||||
* Access point creation should fail.
|
||||
*/
|
||||
TEST_F(HostapdHidlTest, AddPskAccessPointWithInvalidChannel) {
|
||||
TEST_P(HostapdHidlTest, AddPskAccessPointWithInvalidChannel) {
|
||||
auto status =
|
||||
HIDL_INVOKE(hostapd_, addAccessPoint_1_1,
|
||||
getIfaceParamsWithInvalidChannel(), getPskNwParams());
|
||||
@@ -281,9 +290,18 @@ TEST_F(HostapdHidlTest, AddPskAccessPointWithInvalidChannel) {
|
||||
* Adds an access point with invalid PSK network config.
|
||||
* Access point creation should fail.
|
||||
*/
|
||||
TEST_F(HostapdHidlTest, AddInvalidPskAccessPointWithoutAcs) {
|
||||
TEST_P(HostapdHidlTest, AddInvalidPskAccessPointWithoutAcs) {
|
||||
auto status =
|
||||
HIDL_INVOKE(hostapd_, addAccessPoint_1_1, getIfaceParamsWithoutAcs(),
|
||||
getInvalidPskNwParams());
|
||||
EXPECT_NE(HostapdStatusCode::SUCCESS, status.code);
|
||||
}
|
||||
|
||||
INSTANTIATE_TEST_CASE_P(
|
||||
PerInstance, HostapdHidlTest,
|
||||
testing::Combine(
|
||||
testing::ValuesIn(
|
||||
android::hardware::getAllHalInstanceNames(IWifi::descriptor)),
|
||||
testing::ValuesIn(android::hardware::getAllHalInstanceNames(
|
||||
android::hardware::wifi::hostapd::V1_1::IHostapd::descriptor))),
|
||||
android::hardware::PrintInstanceTupleNameToString<>);
|
||||
|
||||
@@ -1,26 +0,0 @@
|
||||
/*
|
||||
* 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 <VtsHalHidlTargetTestBase.h>
|
||||
#include <android-base/logging.h>
|
||||
|
||||
#include "hostapd_hidl_test_utils.h"
|
||||
#include "hostapd_hidl_test_utils_1_1.h"
|
||||
|
||||
using ::android::sp;
|
||||
using ::android::hardware::wifi::hostapd::V1_1::IHostapd;
|
||||
|
||||
sp<IHostapd> getHostapd_1_1() { return IHostapd::castFrom(getHostapd()); }
|
||||
@@ -1,30 +0,0 @@
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#ifndef HOSTAPD_HIDL_TEST_UTILS_1_1_H
|
||||
#define HOSTAPD_HIDL_TEST_UTILS_1_1_H
|
||||
|
||||
#include <android/hardware/wifi/hostapd/1.1/IHostapd.h>
|
||||
|
||||
#include <VtsHalHidlTargetTestEnvBase.h>
|
||||
|
||||
// Helper functions to obtain references to the various HIDL interface objects.
|
||||
// Note: We only have a single instance of each of these objects currently.
|
||||
// These helper functions should be modified to return vectors if we support
|
||||
// multiple instances.
|
||||
android::sp<android::hardware::wifi::hostapd::V1_1::IHostapd> getHostapd_1_1();
|
||||
|
||||
#endif /* HOSTAPD_HIDL_TEST_UTILS_1_1_H */
|
||||
Reference in New Issue
Block a user