Merge "Convert VtsHalWifiHostapdV1_*TargetTest to be parameterized test"

am: 9361c70c9b

Change-Id: Iadff8983280b631f21bc5632cc16605ebe52a5a1
This commit is contained in:
Dan Shi
2019-11-08 14:30:16 -08:00
committed by android-build-merger
12 changed files with 154 additions and 252 deletions

View File

@@ -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);
}

View File

@@ -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:

View File

@@ -49,5 +49,5 @@ cc_test {
"libwifi-system",
"libwifi-system-iface",
],
test_suites: ["general-tests"],
test_suites: ["general-tests", "vts-core"],
}

View File

@@ -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;

View File

@@ -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<>);

View File

@@ -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>());
}
}

View File

@@ -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 */

View File

@@ -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"],
}

View File

@@ -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;

View File

@@ -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<>);

View File

@@ -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()); }

View File

@@ -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 */