From 29a9a9ccfd673c0cc25a3f10ae6891c8ef899e4a Mon Sep 17 00:00:00 2001 From: Kevin Karl Date: Tue, 12 Dec 2023 09:06:52 +0100 Subject: [PATCH] [DO NOT MERGE] vts: Fix for setProp in VtsHalAutomotiveVehicleV2_0TargetTest setProp test, sets READ_WRITE property and reads prop value immediately, without considering the time delay Vehicle HAL service required to process the set request. This is handled by a retry and timeout mechanism, where the read trials will happen in 500 milliseconds for a timeout of 2 seconds. Bug: 312265787 Test: VtsHalAutomotiveVehicleV2_0TargetTest Change-Id: I5db6d724710033f271064ac81c5178f0dec74b26 --- .../VtsHalAutomotiveVehicleV2_0TargetTest.cpp | 24 ++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/automotive/vehicle/2.0/vts/functional/VtsHalAutomotiveVehicleV2_0TargetTest.cpp b/automotive/vehicle/2.0/vts/functional/VtsHalAutomotiveVehicleV2_0TargetTest.cpp index 692e3d2b35..05634fbdbf 100644 --- a/automotive/vehicle/2.0/vts/functional/VtsHalAutomotiveVehicleV2_0TargetTest.cpp +++ b/automotive/vehicle/2.0/vts/functional/VtsHalAutomotiveVehicleV2_0TargetTest.cpp @@ -24,6 +24,10 @@ #include #include #include +#include + +#include +#include using namespace android::hardware::automotive::vehicle::V2_0; using ::android::sp; @@ -32,6 +36,7 @@ using ::android::hardware::Return; constexpr auto kTimeout = std::chrono::milliseconds(500); constexpr auto kInvalidProp = 0x31600207; +static constexpr auto kPropSetDelayMillis = std::chrono::milliseconds(10000); class VtsVehicleCallback : public IVehicleCallback { private: @@ -240,8 +245,25 @@ TEST_P(VehicleHalHidlTest, setProp) { // check set success invokeGet(cfg.prop, 0); - ASSERT_EQ(StatusCode::OK, mActualStatusCode); + // Retry getting the value until we pass the timeout. getValue might not return + // the expected value immediately since setValue is async. + auto propSetTimeoutMillis = ::android::uptimeMillis() + kPropSetDelayMillis.count(); + while (true) { + invokeGet(cfg.prop, 0); + if (mActualStatusCode == StatusCode::OK && + mActualValue.status == VehiclePropertyStatus::AVAILABLE && + mActualValue.value.int32Values[0] == setValue) { + break; + } + if (::android::uptimeMillis() >= propSetTimeoutMillis) { + // Reach timeout, the following assert should fail. + break; + } + // Sleep for 100ms between each invokeGet retry. + std::this_thread::sleep_for(std::chrono::milliseconds(100)); + } + ASSERT_EQ(StatusCode::OK, mActualStatusCode); // If the property isn't available, it doesn't make sense to check // the returned value. if (mActualValue.status == VehiclePropertyStatus::AVAILABLE) {