diff --git a/wifi/supplicant/1.0/vts/functional/supplicant_hidl_test.cpp b/wifi/supplicant/1.0/vts/functional/supplicant_hidl_test.cpp index ac39a24fa4..eabbf1b141 100644 --- a/wifi/supplicant/1.0/vts/functional/supplicant_hidl_test.cpp +++ b/wifi/supplicant/1.0/vts/functional/supplicant_hidl_test.cpp @@ -38,12 +38,15 @@ class SupplicantHidlTest : public ::testing::TestWithParam> { public: virtual void SetUp() override { + // Stop Wi-Fi + ASSERT_TRUE(stopWifiFramework()); // stop & wait for wifi to shutdown. + wifi_instance_name_ = std::get<0>(GetParam()); supplicant_instance_name_ = std::get<1>(GetParam()); + std::system("/system/bin/start"); + ASSERT_TRUE(waitForFrameworkReady()); isP2pOn_ = testing::deviceSupportsFeature("android.hardware.wifi.direct"); - // Stop Framework - std::system("/system/bin/stop"); stopSupplicant(wifi_instance_name_); startSupplicantAndWaitForHidlService(wifi_instance_name_, supplicant_instance_name_); @@ -53,8 +56,8 @@ class SupplicantHidlTest virtual void TearDown() override { stopSupplicant(wifi_instance_name_); - // Start Framework - std::system("/system/bin/start"); + // Start Wi-Fi + startWifiFramework(); } protected: @@ -220,4 +223,4 @@ INSTANTIATE_TEST_CASE_P( android::hardware::getAllHalInstanceNames(IWifi::descriptor)), testing::ValuesIn(android::hardware::getAllHalInstanceNames( ISupplicant::descriptor))), - android::hardware::PrintInstanceTupleNameToString<>); \ No newline at end of file + android::hardware::PrintInstanceTupleNameToString<>); diff --git a/wifi/supplicant/1.0/vts/functional/supplicant_hidl_test_utils.cpp b/wifi/supplicant/1.0/vts/functional/supplicant_hidl_test_utils.cpp index be6aad9583..8cb7e22f0e 100644 --- a/wifi/supplicant/1.0/vts/functional/supplicant_hidl_test_utils.cpp +++ b/wifi/supplicant/1.0/vts/functional/supplicant_hidl_test_utils.cpp @@ -48,6 +48,26 @@ using ::android::wifi_system::InterfaceTool; using ::android::wifi_system::SupplicantManager; namespace { +bool waitForSupplicantState(bool is_running) { + SupplicantManager supplicant_manager; + int count = 50; /* wait at most 5 seconds for completion */ + while (count-- > 0) { + if (supplicant_manager.IsSupplicantRunning() == is_running) { + return true; + } + usleep(100000); + } + LOG(ERROR) << "Supplicant not " << is_running ? "running" : "stopped"; + return false; +} + +// Helper function to wait for supplicant to be started by framework on wifi +// enable. +bool waitForSupplicantStart() { return waitForSupplicantState(true); } + +// Helper function to wait for supplicant to be stopped by framework on wifi +// disable. +bool waitForSupplicantStop() { return waitForSupplicantState(false); } // Helper function to initialize the driver and firmware to STA mode // using the vendor HAL HIDL interface. @@ -118,6 +138,18 @@ std::string getP2pIfaceName() { } } // namespace +bool startWifiFramework() { + std::system("svc wifi enable"); + std::system("cmd wifi set-scan-always-available enabled"); + return waitForSupplicantStart(); // wait for wifi to start. +} + +bool stopWifiFramework() { + std::system("svc wifi disable"); + std::system("cmd wifi set-scan-always-available disabled"); + return waitForSupplicantStop(); // wait for wifi to shutdown. +} + void stopSupplicant() { stopSupplicant(""); } void stopSupplicant(const std::string& wifi_instance_name) { diff --git a/wifi/supplicant/1.0/vts/functional/supplicant_hidl_test_utils.h b/wifi/supplicant/1.0/vts/functional/supplicant_hidl_test_utils.h index 33945ccb19..22cea8c14c 100644 --- a/wifi/supplicant/1.0/vts/functional/supplicant_hidl_test_utils.h +++ b/wifi/supplicant/1.0/vts/functional/supplicant_hidl_test_utils.h @@ -29,9 +29,11 @@ #include "wifi_hidl_test_utils.h" +// Used to start the android wifi framework after every test. +bool startWifiFramework(); + // Used to stop the android wifi framework before every test. -void stopWifiFramework(const std::string& wifi_instance_name); -void startWifiFramework(const std::string& wifi_instance_name); +bool stopWifiFramework(); void stopSupplicant(const std::string& wifi_instance_name); // Used to configure the chip, driver and start wpa_supplicant before every @@ -70,16 +72,16 @@ class SupplicantHidlTestBase : public ::testing::TestWithParam> { public: virtual void SetUp() override { + // Stop Wi-Fi + ASSERT_TRUE(stopWifiFramework()); // stop & wait for wifi to shutdown. + // should always be v1.0 wifi wifi_v1_0_instance_name_ = std::get<0>(GetParam()); supplicant_instance_name_ = std::get<1>(GetParam()); std::system("/system/bin/start"); ASSERT_TRUE(waitForFrameworkReady()); - isP2pOn_ = testing::deviceSupportsFeature("android.hardware.wifi.direct"); - // Stop Framework - std::system("/system/bin/stop"); stopSupplicant(wifi_v1_0_instance_name_); startSupplicantAndWaitForHidlService(wifi_v1_0_instance_name_, supplicant_instance_name_); @@ -88,8 +90,8 @@ class SupplicantHidlTestBase virtual void TearDown() override { stopSupplicant(wifi_v1_0_instance_name_); - // Start Framework - std::system("/system/bin/start"); + // Start Wi-Fi + startWifiFramework(); } protected: