From 894739b6b035f8a07666f5804d2be883c898ce6d Mon Sep 17 00:00:00 2001 From: Roshan Pius Date: Wed, 4 Nov 2020 09:31:02 -0800 Subject: [PATCH] vts(wifi): Stop wifi fully instead of stopping framework Stopping entire framework can cause other essential services to be stopped. When wifi is stopped, it does not interact with any of the wifi HAL's. Bug: 168278011 Test: atest --iterations 10 VtsHalWifiSupplicantP2pV1_0TargetTest VtsHalWifiSupplicantP2pV1_1TargetTest VtsHalWifiSupplicantP2pV1_2TargetTest VtsHalWifiSupplicantP2pV1_3TargetTest Change-Id: Ia93e78cf4c147e42dd3d68e24a582c0c1af15899 --- .../vts/functional/supplicant_hidl_test.cpp | 13 +++++--- .../functional/supplicant_hidl_test_utils.cpp | 32 +++++++++++++++++++ .../functional/supplicant_hidl_test_utils.h | 16 ++++++---- 3 files changed, 49 insertions(+), 12 deletions(-) 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 47f0394db1..d7681720b9 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: @@ -219,4 +222,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: