Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 18408a93 authored by Nate Jiang's avatar Nate Jiang
Browse files

[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
parent 87592de6
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -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<std::mutex> 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
+3 −1
Original line number Diff line number Diff line
@@ -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<std::mutex> 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,