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

Commit 8c216524 authored by Roshan Pius's avatar Roshan Pius
Browse files

wifi(vts): Ignore IWifi.stop() returning ERROR_NOT_AVAILABLE

When IWifi.stop() is invoked back to back (happens in the ConfigureChip
vts test), the HAL would return ERROR_NOT_AVAILABLE if the previous stop
is still being processed. This is not an error that needs to fail the test,
but a legitimate status for stop. We have a retry mechanism to handle
this in both the VTS test and framework for the case where IWifi.start()
is invoked while the previous stop is being processed.

While there, corrected a few log messages emitted by the HAL to debug
such startup/stop issues better.

Bug: 63971806
Test: `vts-tradefed run commandAndExit vts --skip-all-system-status-check
--primary-abi-only --skip-preconditions --module VtsHalWifiV1_0Target -l
INFO`

Change-Id: I5e3470ac97541a6ea10aceec9b737e5d03ed5206
parent 6d5cf73b
Loading
Loading
Loading
Loading
+3 −1
Original line number Original line Diff line number Diff line
@@ -206,5 +206,7 @@ bool configureChipToSupportIfaceType(const sp<IWifiChip>& wifi_chip,
void stopWifi() {
void stopWifi() {
    sp<IWifi> wifi = getWifi();
    sp<IWifi> wifi = getWifi();
    ASSERT_NE(wifi, nullptr);
    ASSERT_NE(wifi, nullptr);
    ASSERT_EQ(HIDL_INVOKE(wifi, stop).code, WifiStatusCode::SUCCESS);
    const auto status = HIDL_INVOKE(wifi, stop);
    ASSERT_TRUE((status.code == WifiStatusCode::SUCCESS) ||
                (status.code == WifiStatusCode::ERROR_NOT_AVAILABLE));
}
}
+1 −1
Original line number Original line Diff line number Diff line
@@ -27,7 +27,7 @@ using android::hardware::joinRpcThreadpool;
int main(int /*argc*/, char** argv) {
int main(int /*argc*/, char** argv) {
  android::base::InitLogging(argv,
  android::base::InitLogging(argv,
                             android::base::LogdLogger(android::base::SYSTEM));
                             android::base::LogdLogger(android::base::SYSTEM));
  LOG(INFO) << "Wifi Hal is starting up...";
  LOG(INFO) << "Wifi Hal is booting up...";


  configureRpcThreadpool(1, true /* callerWillJoin */);
  configureRpcThreadpool(1, true /* callerWillJoin */);


+4 −2
Original line number Original line Diff line number Diff line
@@ -108,14 +108,15 @@ WifiStatus Wifi::startInternal() {
        LOG(ERROR) << "Failed to invoke onStart callback";
        LOG(ERROR) << "Failed to invoke onStart callback";
      };
      };
    }
    }
    LOG(INFO) << "Wifi HAL started";
  } else {
  } else {
    for (const auto& callback : event_cb_handler_.getCallbacks()) {
    for (const auto& callback : event_cb_handler_.getCallbacks()) {
      if (!callback->onFailure(wifi_status).isOk()) {
      if (!callback->onFailure(wifi_status).isOk()) {
        LOG(ERROR) << "Failed to invoke onFailure callback";
        LOG(ERROR) << "Failed to invoke onFailure callback";
      }
      }
    }
    }
    LOG(ERROR) << "Wifi HAL start failed";
  }
  }
  LOG(INFO) << "Wifi HAL started";
  return wifi_status;
  return wifi_status;
}
}


@@ -139,14 +140,15 @@ WifiStatus Wifi::stopInternal() {
        LOG(ERROR) << "Failed to invoke onStop callback";
        LOG(ERROR) << "Failed to invoke onStop callback";
      };
      };
    }
    }
    LOG(INFO) << "Wifi HAL stopped";
  } else {
  } else {
    for (const auto& callback : event_cb_handler_.getCallbacks()) {
    for (const auto& callback : event_cb_handler_.getCallbacks()) {
      if (!callback->onFailure(wifi_status).isOk()) {
      if (!callback->onFailure(wifi_status).isOk()) {
        LOG(ERROR) << "Failed to invoke onFailure callback";
        LOG(ERROR) << "Failed to invoke onFailure callback";
      }
      }
    }
    }
    LOG(ERROR) << "Wifi HAL stop failed";
  }
  }
  LOG(INFO) << "Wifi HAL stopped";
  return wifi_status;
  return wifi_status;
}
}