From 18408a93d9da2f757618e6ecafa2798a65ee5816 Mon Sep 17 00:00:00 2001 From: Nate Jiang Date: Tue, 28 May 2019 20:05:25 -0700 Subject: [PATCH] [VTS][AWARE]Setting callbacktype type to invalid value before invoking HIDL call Avoid race condition between event callback and wait context. Make callbacktype to invalid before call function to change it. Test: atest VtsHalWifiNanV1_0TargetTest VtsHalWifiNanV1_2TargetTest Bug: 133484330 Change-Id: I9211c3e172727f56d0cceaf91b98f8d5b3c7fc7e --- wifi/1.0/vts/functional/wifi_nan_iface_hidl_test.cpp | 3 ++- wifi/1.2/vts/functional/wifi_nan_iface_hidl_test.cpp | 4 +++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/wifi/1.0/vts/functional/wifi_nan_iface_hidl_test.cpp b/wifi/1.0/vts/functional/wifi_nan_iface_hidl_test.cpp index 85bcccd230..64b4fb6d1a 100644 --- a/wifi/1.0/vts/functional/wifi_nan_iface_hidl_test.cpp +++ b/wifi/1.0/vts/functional/wifi_nan_iface_hidl_test.cpp @@ -91,12 +91,12 @@ class WifiNanIfaceHidlTest : public ::testing::VtsHalHidlTargetTestBase { }; /* Test code calls this function to wait for data/event callback */ + /* Must set callbackType = INVALID before call this function */ inline std::cv_status wait(CallbackType waitForCallbackType) { std::unique_lock lock(mtx_); EXPECT_NE(INVALID, waitForCallbackType); // can't ASSERT in a non-void-returning method - callbackType = INVALID; std::cv_status status = std::cv_status::no_timeout; auto now = std::chrono::system_clock::now(); while (count_ == 0) { @@ -469,6 +469,7 @@ TEST(WifiNanIfaceHidlTestNoFixture, FailOnIfaceInvalid) { */ TEST_F(WifiNanIfaceHidlTest, getCapabilitiesRequest) { uint16_t inputCmdId = 10; + callbackType = INVALID; ASSERT_EQ(WifiStatusCode::SUCCESS, HIDL_INVOKE(iwifiNanIface, getCapabilitiesRequest, inputCmdId).code); // wait for a callback diff --git a/wifi/1.2/vts/functional/wifi_nan_iface_hidl_test.cpp b/wifi/1.2/vts/functional/wifi_nan_iface_hidl_test.cpp index cc36faeafc..4dbc82bd99 100644 --- a/wifi/1.2/vts/functional/wifi_nan_iface_hidl_test.cpp +++ b/wifi/1.2/vts/functional/wifi_nan_iface_hidl_test.cpp @@ -100,13 +100,13 @@ class WifiNanIfaceHidlTest : public ::testing::VtsHalHidlTargetTestBase { }; /* Test code calls this function to wait for data/event callback */ + /* Must set callbackType = INVALID before call this function */ inline std::cv_status wait(CallbackType waitForCallbackType) { std::unique_lock lock(mtx_); EXPECT_NE(INVALID, waitForCallbackType); // can't ASSERT in a // non-void-returning method - callbackType = INVALID; std::cv_status status = std::cv_status::no_timeout; auto now = std::chrono::system_clock::now(); while (count_ == 0) { @@ -475,6 +475,7 @@ TEST(WifiNanIfaceHidlTestNoFixture, Create) { */ TEST_F(WifiNanIfaceHidlTest, enableRequest_1_2InvalidArgs) { uint16_t inputCmdId = 10; + callbackType = INVALID; NanEnableRequest nanEnableRequest = {}; NanConfigRequestSupplemental nanConfigRequestSupp = {}; ASSERT_EQ(WifiStatusCode::SUCCESS, @@ -509,6 +510,7 @@ TEST_F(WifiNanIfaceHidlTest, enableRequest_1_2ShimInvalidArgs) { */ TEST_F(WifiNanIfaceHidlTest, configRequest_1_2InvalidArgs) { uint16_t inputCmdId = 10; + callbackType = INVALID; NanConfigRequest nanConfigRequest = {}; NanConfigRequestSupplemental nanConfigRequestSupp = {}; ASSERT_EQ(WifiStatusCode::SUCCESS,