blob: ccc0f3f91cd9f07a24e3eda0259988c6195aa130 [file] [log] [blame]
Yu Shan726d51a2022-02-22 17:37:21 -08001/*
2 * Copyright (C) 2022 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#define LOG_TAG "VtsHalAutomotiveVehicle"
18
19#include <IVhalClient.h>
20#include <VehicleHalTypes.h>
21#include <VehicleUtils.h>
Yu Shanf3698fd2023-12-18 12:29:00 -080022#include <VersionForVehicleProperty.h>
Yu Shan726d51a2022-02-22 17:37:21 -080023#include <aidl/Gtest.h>
24#include <aidl/Vintf.h>
25#include <aidl/android/hardware/automotive/vehicle/IVehicle.h>
26#include <android-base/stringprintf.h>
27#include <android-base/thread_annotations.h>
28#include <android/binder_process.h>
Yu Shanda2fa092024-01-25 17:40:41 -080029#include <android/hardware/automotive/vehicle/2.0/IVehicle.h>
Yu Shanf3698fd2023-12-18 12:29:00 -080030#include <gmock/gmock.h>
Yu Shan726d51a2022-02-22 17:37:21 -080031#include <gtest/gtest.h>
32#include <hidl/GtestPrinter.h>
33#include <hidl/ServiceManagement.h>
34#include <inttypes.h>
35#include <utils/Log.h>
Yu Shan4569ef52022-03-18 14:34:25 -070036#include <utils/SystemClock.h>
Yu Shan726d51a2022-02-22 17:37:21 -080037
38#include <chrono>
39#include <mutex>
Yu Shana9cbdea2024-01-30 16:33:56 -080040#include <thread>
Yu Shan726d51a2022-02-22 17:37:21 -080041#include <unordered_map>
42#include <unordered_set>
43#include <vector>
44
45using ::aidl::android::hardware::automotive::vehicle::IVehicle;
46using ::aidl::android::hardware::automotive::vehicle::StatusCode;
47using ::aidl::android::hardware::automotive::vehicle::SubscribeOptions;
48using ::aidl::android::hardware::automotive::vehicle::VehicleArea;
49using ::aidl::android::hardware::automotive::vehicle::VehicleProperty;
50using ::aidl::android::hardware::automotive::vehicle::VehiclePropertyAccess;
Aaqib Ismail20486702022-10-27 16:58:50 -070051using ::aidl::android::hardware::automotive::vehicle::VehiclePropertyChangeMode;
52using ::aidl::android::hardware::automotive::vehicle::VehiclePropertyGroup;
Yu Shanead15a22024-01-24 16:14:21 -080053using ::aidl::android::hardware::automotive::vehicle::VehiclePropertyStatus;
Yu Shan726d51a2022-02-22 17:37:21 -080054using ::aidl::android::hardware::automotive::vehicle::VehiclePropertyType;
Yu Shanf3698fd2023-12-18 12:29:00 -080055using ::aidl::android::hardware::automotive::vehicle::VersionForVehicleProperty;
Yu Shan726d51a2022-02-22 17:37:21 -080056using ::android::getAidlHalInstanceNames;
Yu Shanead15a22024-01-24 16:14:21 -080057using ::android::uptimeMillis;
Yu Shan726d51a2022-02-22 17:37:21 -080058using ::android::base::ScopedLockAssertion;
59using ::android::base::StringPrintf;
Chen Chengfaf9adc2022-06-22 23:09:09 +000060using ::android::frameworks::automotive::vhal::ErrorCode;
Yu Shan726d51a2022-02-22 17:37:21 -080061using ::android::frameworks::automotive::vhal::HalPropError;
shrikar127dc872024-02-12 19:12:33 +000062using ::android::frameworks::automotive::vhal::IHalAreaConfig;
Yu Shan726d51a2022-02-22 17:37:21 -080063using ::android::frameworks::automotive::vhal::IHalPropConfig;
64using ::android::frameworks::automotive::vhal::IHalPropValue;
65using ::android::frameworks::automotive::vhal::ISubscriptionCallback;
66using ::android::frameworks::automotive::vhal::IVhalClient;
Yu Shana9cbdea2024-01-30 16:33:56 -080067using ::android::frameworks::automotive::vhal::SubscribeOptionsBuilder;
Yu Shanead15a22024-01-24 16:14:21 -080068using ::android::frameworks::automotive::vhal::VhalClientResult;
Yu Shan726d51a2022-02-22 17:37:21 -080069using ::android::hardware::getAllHalInstanceNames;
70using ::android::hardware::Sanitize;
Yu Shanf3698fd2023-12-18 12:29:00 -080071using ::android::hardware::automotive::vehicle::isSystemProp;
72using ::android::hardware::automotive::vehicle::propIdToString;
Yu Shan726d51a2022-02-22 17:37:21 -080073using ::android::hardware::automotive::vehicle::toInt;
Yu Shanf3698fd2023-12-18 12:29:00 -080074using ::testing::Ge;
Yu Shan726d51a2022-02-22 17:37:21 -080075
76constexpr int32_t kInvalidProp = 0x31600207;
Yu Shanead15a22024-01-24 16:14:21 -080077// The timeout for retrying getting prop value after setting prop value.
78constexpr int64_t kRetryGetPropAfterSetPropTimeoutMillis = 10'000;
Yu Shan726d51a2022-02-22 17:37:21 -080079
80struct ServiceDescriptor {
81 std::string name;
82 bool isAidlService;
83};
84
85class VtsVehicleCallback final : public ISubscriptionCallback {
86 private:
87 std::mutex mLock;
Yu Shana9cbdea2024-01-30 16:33:56 -080088 std::unordered_map<int32_t, std::vector<std::unique_ptr<IHalPropValue>>> mEvents
89 GUARDED_BY(mLock);
Yu Shan726d51a2022-02-22 17:37:21 -080090 std::condition_variable mEventCond;
91
92 public:
93 void onPropertyEvent(const std::vector<std::unique_ptr<IHalPropValue>>& values) override {
94 {
95 std::lock_guard<std::mutex> lockGuard(mLock);
96 for (auto& value : values) {
Yu Shan4569ef52022-03-18 14:34:25 -070097 int32_t propId = value->getPropId();
Yu Shana9cbdea2024-01-30 16:33:56 -080098 mEvents[propId].push_back(std::move(value->clone()));
Yu Shan726d51a2022-02-22 17:37:21 -080099 }
100 }
101 mEventCond.notify_one();
102 }
103
104 void onPropertySetError([[maybe_unused]] const std::vector<HalPropError>& errors) override {
105 // Do nothing.
106 }
107
108 template <class Rep, class Period>
109 bool waitForExpectedEvents(int32_t propId, size_t expectedEvents,
110 const std::chrono::duration<Rep, Period>& timeout) {
111 std::unique_lock<std::mutex> uniqueLock(mLock);
112 return mEventCond.wait_for(uniqueLock, timeout, [this, propId, expectedEvents] {
113 ScopedLockAssertion lockAssertion(mLock);
Yu Shana9cbdea2024-01-30 16:33:56 -0800114 return mEvents[propId].size() >= expectedEvents;
Yu Shan726d51a2022-02-22 17:37:21 -0800115 });
116 }
117
Yu Shana9cbdea2024-01-30 16:33:56 -0800118 std::vector<std::unique_ptr<IHalPropValue>> getEvents(int32_t propId) {
119 std::lock_guard<std::mutex> lockGuard(mLock);
120 std::vector<std::unique_ptr<IHalPropValue>> events;
121 if (mEvents.find(propId) == mEvents.end()) {
122 return events;
Yu Shan4569ef52022-03-18 14:34:25 -0700123 }
Yu Shana9cbdea2024-01-30 16:33:56 -0800124 for (const auto& eventPtr : mEvents[propId]) {
125 events.push_back(std::move(eventPtr->clone()));
126 }
127 return events;
128 }
129
130 std::vector<int64_t> getEventTimestamps(int32_t propId) {
131 std::lock_guard<std::mutex> lockGuard(mLock);
132 std::vector<int64_t> timestamps;
133 if (mEvents.find(propId) == mEvents.end()) {
134 return timestamps;
135 }
136 for (const auto& valuePtr : mEvents[propId]) {
137 timestamps.push_back(valuePtr->getTimestamp());
138 }
139 return timestamps;
Yu Shan4569ef52022-03-18 14:34:25 -0700140 }
141
Yu Shan726d51a2022-02-22 17:37:21 -0800142 void reset() {
143 std::lock_guard<std::mutex> lockGuard(mLock);
Yu Shana9cbdea2024-01-30 16:33:56 -0800144 mEvents.clear();
Yu Shan726d51a2022-02-22 17:37:21 -0800145 }
146};
147
148class VtsHalAutomotiveVehicleTargetTest : public testing::TestWithParam<ServiceDescriptor> {
Yu Shanec5d5b02023-10-09 14:43:36 -0700149 protected:
Yu Shan0ebd8762023-10-11 11:31:04 -0700150 bool checkIsSupported(int32_t propertyId);
Yu Shanec5d5b02023-10-09 14:43:36 -0700151
Yu Shanead15a22024-01-24 16:14:21 -0800152 static bool isUnavailable(const VhalClientResult<std::unique_ptr<IHalPropValue>>& result);
153 static bool isResultOkayWithValue(
154 const VhalClientResult<std::unique_ptr<IHalPropValue>>& result, int32_t value);
155
Yu Shan726d51a2022-02-22 17:37:21 -0800156 public:
shrikar6a4f3a82023-10-16 18:49:49 +0000157 void verifyAccessMode(int actualAccess, int expectedAccess);
shrikar127dc872024-02-12 19:12:33 +0000158 void verifyGlobalAccessIsMaximalAreaAccessSubset(
159 int propertyLevelAccess,
160 const std::vector<std::unique_ptr<IHalAreaConfig>>& areaConfigs) const;
Aaqib Ismail20486702022-10-27 16:58:50 -0700161 void verifyProperty(VehicleProperty propId, VehiclePropertyAccess access,
162 VehiclePropertyChangeMode changeMode, VehiclePropertyGroup group,
163 VehicleArea area, VehiclePropertyType propertyType);
Yu Shan726d51a2022-02-22 17:37:21 -0800164 virtual void SetUp() override {
165 auto descriptor = GetParam();
166 if (descriptor.isAidlService) {
167 mVhalClient = IVhalClient::tryCreateAidlClient(descriptor.name.c_str());
168 } else {
169 mVhalClient = IVhalClient::tryCreateHidlClient(descriptor.name.c_str());
170 }
171
172 ASSERT_NE(mVhalClient, nullptr) << "Failed to connect to VHAL";
173
174 mCallback = std::make_shared<VtsVehicleCallback>();
175 }
176
177 static bool isBooleanGlobalProp(int32_t property) {
178 return (property & toInt(VehiclePropertyType::MASK)) ==
179 toInt(VehiclePropertyType::BOOLEAN) &&
180 (property & toInt(VehicleArea::MASK)) == toInt(VehicleArea::GLOBAL);
181 }
182
183 protected:
184 std::shared_ptr<IVhalClient> mVhalClient;
185 std::shared_ptr<VtsVehicleCallback> mCallback;
186};
187
188TEST_P(VtsHalAutomotiveVehicleTargetTest, useAidlBackend) {
189 if (!mVhalClient->isAidlVhal()) {
190 GTEST_SKIP() << "AIDL backend is not available, HIDL backend is used instead";
191 }
192}
193
194TEST_P(VtsHalAutomotiveVehicleTargetTest, useHidlBackend) {
195 if (mVhalClient->isAidlVhal()) {
196 GTEST_SKIP() << "AIDL backend is available, HIDL backend is not used";
197 }
198}
199
Yu Shanec5d5b02023-10-09 14:43:36 -0700200// Test getAllPropConfigs() returns at least 1 property configs.
Yu Shan726d51a2022-02-22 17:37:21 -0800201TEST_P(VtsHalAutomotiveVehicleTargetTest, getAllPropConfigs) {
202 ALOGD("VtsHalAutomotiveVehicleTargetTest::getAllPropConfigs");
203
204 auto result = mVhalClient->getAllPropConfigs();
205
206 ASSERT_TRUE(result.ok()) << "Failed to get all property configs, error: "
207 << result.error().message();
Yu Shanec5d5b02023-10-09 14:43:36 -0700208 ASSERT_GE(result.value().size(), 1u) << StringPrintf(
209 "Expect to get at least 1 property config, got %zu", result.value().size());
Yu Shan726d51a2022-02-22 17:37:21 -0800210}
211
Yu Shanec5d5b02023-10-09 14:43:36 -0700212// Test getPropConfigs() can query properties returned by getAllPropConfigs.
213TEST_P(VtsHalAutomotiveVehicleTargetTest, getPropConfigsWithValidProps) {
Yu Shan726d51a2022-02-22 17:37:21 -0800214 ALOGD("VtsHalAutomotiveVehicleTargetTest::getRequiredPropConfigs");
215
Yu Shanec5d5b02023-10-09 14:43:36 -0700216 std::vector<int32_t> properties;
217 auto result = mVhalClient->getAllPropConfigs();
Yu Shan726d51a2022-02-22 17:37:21 -0800218
Yu Shanec5d5b02023-10-09 14:43:36 -0700219 ASSERT_TRUE(result.ok()) << "Failed to get all property configs, error: "
220 << result.error().message();
221 for (const auto& cfgPtr : result.value()) {
222 properties.push_back(cfgPtr->getPropId());
223 }
224
225 result = mVhalClient->getPropConfigs(properties);
Yu Shan726d51a2022-02-22 17:37:21 -0800226
227 ASSERT_TRUE(result.ok()) << "Failed to get required property config, error: "
228 << result.error().message();
Yu Shanec5d5b02023-10-09 14:43:36 -0700229 ASSERT_EQ(result.value().size(), properties.size()) << StringPrintf(
230 "Expect to get exactly %zu configs, got %zu", properties.size(), result.value().size());
Yu Shan726d51a2022-02-22 17:37:21 -0800231}
232
233// Test getPropConfig() with an invalid propertyId returns an error code.
234TEST_P(VtsHalAutomotiveVehicleTargetTest, getPropConfigsWithInvalidProp) {
235 ALOGD("VtsHalAutomotiveVehicleTargetTest::getPropConfigsWithInvalidProp");
236
237 auto result = mVhalClient->getPropConfigs({kInvalidProp});
238
239 ASSERT_FALSE(result.ok()) << StringPrintf(
240 "Expect failure to get prop configs for invalid prop: %" PRId32, kInvalidProp);
241 ASSERT_NE(result.error().message(), "") << "Expect error message not to be empty";
242}
243
Yu Shanf3698fd2023-12-18 12:29:00 -0800244// Test system property IDs returned by getPropConfigs() are defined in the VHAL property interface.
245TEST_P(VtsHalAutomotiveVehicleTargetTest, testPropConfigs_onlyDefinedSystemPropertyIdsReturned) {
246 if (!mVhalClient->isAidlVhal()) {
247 GTEST_SKIP() << "Skip for HIDL VHAL because HAL interface run-time version is only"
248 << "introduced for AIDL";
249 }
250
251 auto result = mVhalClient->getAllPropConfigs();
252 ASSERT_TRUE(result.ok()) << "Failed to get all property configs, error: "
253 << result.error().message();
254
255 int32_t vhalVersion = mVhalClient->getRemoteInterfaceVersion();
256 const auto& configs = result.value();
257 for (size_t i = 0; i < configs.size(); i++) {
258 int32_t propId = configs[i]->getPropId();
259 if (!isSystemProp(propId)) {
260 continue;
261 }
262
263 std::string propName = propIdToString(propId);
264 auto it = VersionForVehicleProperty.find(static_cast<VehicleProperty>(propId));
265 bool found = (it != VersionForVehicleProperty.end());
266 EXPECT_TRUE(found) << "System Property: " << propName
267 << " is not defined in VHAL property interface";
268 if (!found) {
269 continue;
270 }
271 int32_t requiredVersion = it->second;
272 EXPECT_THAT(vhalVersion, Ge(requiredVersion))
273 << "System Property: " << propName << " requires VHAL version: " << requiredVersion
274 << ", but the current VHAL version"
275 << " is " << vhalVersion << ", must not be supported";
276 }
277}
278
shrikar127dc872024-02-12 19:12:33 +0000279TEST_P(VtsHalAutomotiveVehicleTargetTest, testPropConfigs_globalAccessIsMaximalAreaAccessSubset) {
280 if (!mVhalClient->isAidlVhal()) {
281 GTEST_SKIP() << "Skip for HIDL VHAL because HAL interface run-time version is only"
282 << "introduced for AIDL";
283 }
284
285 auto result = mVhalClient->getAllPropConfigs();
286 ASSERT_TRUE(result.ok()) << "Failed to get all property configs, error: "
287 << result.error().message();
288
289 const auto& configs = result.value();
290 for (size_t i = 0; i < configs.size(); i++) {
291 verifyGlobalAccessIsMaximalAreaAccessSubset(configs[i]->getAccess(),
292 configs[i]->getAreaConfigs());
293 }
294}
295
Yu Shan726d51a2022-02-22 17:37:21 -0800296// Test get() return current value for properties.
297TEST_P(VtsHalAutomotiveVehicleTargetTest, get) {
298 ALOGD("VtsHalAutomotiveVehicleTargetTest::get");
299
300 int32_t propId = toInt(VehicleProperty::PERF_VEHICLE_SPEED);
Yu Shan0ebd8762023-10-11 11:31:04 -0700301 if (!checkIsSupported(propId)) {
302 GTEST_SKIP() << "Property: " << propId << " is not supported, skip the test";
303 }
Yu Shan726d51a2022-02-22 17:37:21 -0800304 auto result = mVhalClient->getValueSync(*mVhalClient->createHalPropValue(propId));
305
306 ASSERT_TRUE(result.ok()) << StringPrintf("Failed to get value for property: %" PRId32
307 ", error: %s",
308 propId, result.error().message().c_str());
309 ASSERT_NE(result.value(), nullptr) << "Result value must not be null";
310}
311
312// Test get() with an invalid propertyId return an error codes.
313TEST_P(VtsHalAutomotiveVehicleTargetTest, getInvalidProp) {
314 ALOGD("VtsHalAutomotiveVehicleTargetTest::getInvalidProp");
315
316 auto result = mVhalClient->getValueSync(*mVhalClient->createHalPropValue(kInvalidProp));
317
318 ASSERT_FALSE(result.ok()) << StringPrintf(
319 "Expect failure to get property for invalid prop: %" PRId32, kInvalidProp);
320}
321
Yu Shanead15a22024-01-24 16:14:21 -0800322bool VtsHalAutomotiveVehicleTargetTest::isResultOkayWithValue(
323 const VhalClientResult<std::unique_ptr<IHalPropValue>>& result, int32_t value) {
324 return result.ok() && result.value() != nullptr &&
325 result.value()->getStatus() == VehiclePropertyStatus::AVAILABLE &&
326 result.value()->getInt32Values().size() == 1 &&
327 result.value()->getInt32Values()[0] == value;
328}
329
330bool VtsHalAutomotiveVehicleTargetTest::isUnavailable(
331 const VhalClientResult<std::unique_ptr<IHalPropValue>>& result) {
Yu Shan97770cf2024-01-26 18:25:26 -0800332 if (!result.ok()) {
333 return result.error().code() == ErrorCode::NOT_AVAILABLE_FROM_VHAL;
Yu Shanead15a22024-01-24 16:14:21 -0800334 }
335 if (result.value() != nullptr &&
336 result.value()->getStatus() == VehiclePropertyStatus::UNAVAILABLE) {
337 return true;
338 }
339
340 return false;
341}
342
Yu Shan726d51a2022-02-22 17:37:21 -0800343// Test set() on read_write properties.
344TEST_P(VtsHalAutomotiveVehicleTargetTest, setProp) {
345 ALOGD("VtsHalAutomotiveVehicleTargetTest::setProp");
346
347 // skip hvac related properties
348 std::unordered_set<int32_t> hvacProps = {toInt(VehicleProperty::HVAC_DEFROSTER),
349 toInt(VehicleProperty::HVAC_AC_ON),
350 toInt(VehicleProperty::HVAC_MAX_AC_ON),
351 toInt(VehicleProperty::HVAC_MAX_DEFROST_ON),
352 toInt(VehicleProperty::HVAC_RECIRC_ON),
353 toInt(VehicleProperty::HVAC_DUAL_ON),
354 toInt(VehicleProperty::HVAC_AUTO_ON),
355 toInt(VehicleProperty::HVAC_POWER_ON),
356 toInt(VehicleProperty::HVAC_AUTO_RECIRC_ON),
357 toInt(VehicleProperty::HVAC_ELECTRIC_DEFROSTER_ON)};
358 auto result = mVhalClient->getAllPropConfigs();
359 ASSERT_TRUE(result.ok());
360
361 for (const auto& cfgPtr : result.value()) {
362 const IHalPropConfig& cfg = *cfgPtr;
363 int32_t propId = cfg.getPropId();
364 // test on boolean and writable property
shrikar6a4f3a82023-10-16 18:49:49 +0000365 bool isReadWrite = (cfg.getAccess() == toInt(VehiclePropertyAccess::READ_WRITE));
366 if (cfg.getAreaConfigSize() != 0 &&
367 cfg.getAreaConfigs()[0]->getAccess() != toInt(VehiclePropertyAccess::NONE)) {
368 isReadWrite = (cfg.getAreaConfigs()[0]->getAccess() ==
369 toInt(VehiclePropertyAccess::READ_WRITE));
370 }
371 if (isReadWrite && isBooleanGlobalProp(propId) && !hvacProps.count(propId)) {
Yu Shan726d51a2022-02-22 17:37:21 -0800372 auto propToGet = mVhalClient->createHalPropValue(propId);
373 auto getValueResult = mVhalClient->getValueSync(*propToGet);
374
Yu Shanead15a22024-01-24 16:14:21 -0800375 if (isUnavailable(getValueResult)) {
376 ALOGW("getProperty for %" PRId32
377 " returns NOT_AVAILABLE, "
378 "skip testing setProp",
379 propId);
380 return;
381 }
382
Yu Shan726d51a2022-02-22 17:37:21 -0800383 ASSERT_TRUE(getValueResult.ok())
384 << StringPrintf("Failed to get value for property: %" PRId32 ", error: %s",
385 propId, getValueResult.error().message().c_str());
386 ASSERT_NE(getValueResult.value(), nullptr)
387 << StringPrintf("Result value must not be null for property: %" PRId32, propId);
388
389 const IHalPropValue& value = *getValueResult.value();
390 size_t intValueSize = value.getInt32Values().size();
391 ASSERT_EQ(intValueSize, 1u) << StringPrintf(
392 "Expect exactly 1 int value for boolean property: %" PRId32 ", got %zu", propId,
393 intValueSize);
394
Yu Shanead15a22024-01-24 16:14:21 -0800395 int32_t setValue = value.getInt32Values()[0] == 1 ? 0 : 1;
Yu Shan726d51a2022-02-22 17:37:21 -0800396 auto propToSet = mVhalClient->createHalPropValue(propId);
397 propToSet->setInt32Values({setValue});
398 auto setValueResult = mVhalClient->setValueSync(*propToSet);
399
Yu Shanead15a22024-01-24 16:14:21 -0800400 if (!setValueResult.ok() &&
401 setValueResult.error().code() == ErrorCode::NOT_AVAILABLE_FROM_VHAL) {
402 ALOGW("setProperty for %" PRId32
403 " returns NOT_AVAILABLE, "
404 "skip verifying getProperty returns the same value",
405 propId);
406 return;
407 }
408
Yu Shan726d51a2022-02-22 17:37:21 -0800409 ASSERT_TRUE(setValueResult.ok())
410 << StringPrintf("Failed to set value for property: %" PRId32 ", error: %s",
411 propId, setValueResult.error().message().c_str());
Yu Shanead15a22024-01-24 16:14:21 -0800412 // Retry getting the value until we pass the timeout. getValue might not return
413 // the expected value immediately since setValue is async.
414 auto timeoutMillis = uptimeMillis() + kRetryGetPropAfterSetPropTimeoutMillis;
Yu Shan726d51a2022-02-22 17:37:21 -0800415
Yu Shanead15a22024-01-24 16:14:21 -0800416 while (true) {
417 getValueResult = mVhalClient->getValueSync(*propToGet);
418 if (isResultOkayWithValue(getValueResult, setValue)) {
419 break;
420 }
421 if (uptimeMillis() >= timeoutMillis) {
422 // Reach timeout, the following assert should fail.
423 break;
424 }
425 // Sleep for 100ms between each getValueSync retry.
426 std::this_thread::sleep_for(std::chrono::milliseconds(100));
427 }
428
429 if (isUnavailable(getValueResult)) {
430 ALOGW("getProperty for %" PRId32
431 " returns NOT_AVAILABLE, "
432 "skip verifying the return value",
433 propId);
434 return;
435 }
436
Yu Shan726d51a2022-02-22 17:37:21 -0800437 ASSERT_TRUE(getValueResult.ok())
438 << StringPrintf("Failed to get value for property: %" PRId32 ", error: %s",
439 propId, getValueResult.error().message().c_str());
440 ASSERT_NE(getValueResult.value(), nullptr)
441 << StringPrintf("Result value must not be null for property: %" PRId32, propId);
442 ASSERT_EQ(getValueResult.value()->getInt32Values(), std::vector<int32_t>({setValue}))
443 << StringPrintf("Boolean value not updated after set for property: %" PRId32,
444 propId);
445 }
446 }
447}
448
449// Test set() on an read_only property.
450TEST_P(VtsHalAutomotiveVehicleTargetTest, setNotWritableProp) {
451 ALOGD("VtsHalAutomotiveVehicleTargetTest::setNotWritableProp");
452
453 int32_t propId = toInt(VehicleProperty::PERF_VEHICLE_SPEED);
Yu Shan0ebd8762023-10-11 11:31:04 -0700454 if (!checkIsSupported(propId)) {
455 GTEST_SKIP() << "Property: " << propId << " is not supported, skip the test";
456 }
Yu Shanec5d5b02023-10-09 14:43:36 -0700457
Yu Shan726d51a2022-02-22 17:37:21 -0800458 auto getValueResult = mVhalClient->getValueSync(*mVhalClient->createHalPropValue(propId));
459 ASSERT_TRUE(getValueResult.ok())
460 << StringPrintf("Failed to get value for property: %" PRId32 ", error: %s", propId,
461 getValueResult.error().message().c_str());
462
463 auto setValueResult = mVhalClient->setValueSync(*getValueResult.value());
464
465 ASSERT_FALSE(setValueResult.ok()) << "Expect set a read-only value to fail";
Chen Chengfaf9adc2022-06-22 23:09:09 +0000466 ASSERT_EQ(setValueResult.error().code(), ErrorCode::ACCESS_DENIED_FROM_VHAL);
Yu Shan726d51a2022-02-22 17:37:21 -0800467}
468
shrikar8a140232023-03-07 16:57:59 +0000469// Test get(), set() and getAllPropConfigs() on VehicleProperty::INVALID.
470TEST_P(VtsHalAutomotiveVehicleTargetTest, getSetPropertyIdInvalid) {
471 ALOGD("VtsHalAutomotiveVehicleTargetTest::getSetPropertyIdInvalid");
472
473 int32_t propId = toInt(VehicleProperty::INVALID);
474 auto getValueResult = mVhalClient->getValueSync(*mVhalClient->createHalPropValue(propId));
475 ASSERT_FALSE(getValueResult.ok()) << "Expect get on VehicleProperty::INVALID to fail";
476 ASSERT_EQ(getValueResult.error().code(), ErrorCode::INVALID_ARG);
477
478 auto propToSet = mVhalClient->createHalPropValue(propId);
479 propToSet->setInt32Values({0});
480 auto setValueResult = mVhalClient->setValueSync(*propToSet);
481 ASSERT_FALSE(setValueResult.ok()) << "Expect set on VehicleProperty::INVALID to fail";
482 ASSERT_EQ(setValueResult.error().code(), ErrorCode::INVALID_ARG);
483
484 auto result = mVhalClient->getAllPropConfigs();
485 ASSERT_TRUE(result.ok());
486 for (const auto& cfgPtr : result.value()) {
487 const IHalPropConfig& cfg = *cfgPtr;
488 ASSERT_FALSE(cfg.getPropId() == propId) << "Expect VehicleProperty::INVALID to not be "
489 "included in propConfigs";
490 }
491}
492
Yu Shan726d51a2022-02-22 17:37:21 -0800493// Test subscribe() and unsubscribe().
494TEST_P(VtsHalAutomotiveVehicleTargetTest, subscribeAndUnsubscribe) {
495 ALOGD("VtsHalAutomotiveVehicleTargetTest::subscribeAndUnsubscribe");
496
497 int32_t propId = toInt(VehicleProperty::PERF_VEHICLE_SPEED);
Yu Shan0ebd8762023-10-11 11:31:04 -0700498 if (!checkIsSupported(propId)) {
499 GTEST_SKIP() << "Property: " << propId << " is not supported, skip the test";
500 }
Yu Shan726d51a2022-02-22 17:37:21 -0800501
Yu Shan4569ef52022-03-18 14:34:25 -0700502 auto propConfigsResult = mVhalClient->getPropConfigs({propId});
503
504 ASSERT_TRUE(propConfigsResult.ok()) << "Failed to get property config for PERF_VEHICLE_SPEED: "
505 << "error: " << propConfigsResult.error().message();
506 ASSERT_EQ(propConfigsResult.value().size(), 1u)
507 << "Expect to return 1 config for PERF_VEHICLE_SPEED";
508 auto& propConfig = propConfigsResult.value()[0];
509 float minSampleRate = propConfig->getMinSampleRate();
510 float maxSampleRate = propConfig->getMaxSampleRate();
511
512 if (minSampleRate < 1) {
513 GTEST_SKIP() << "Sample rate for vehicle speed < 1 times/sec, skip test since it would "
514 "take too long";
515 }
Yu Shan726d51a2022-02-22 17:37:21 -0800516
517 auto client = mVhalClient->getSubscriptionClient(mCallback);
518 ASSERT_NE(client, nullptr) << "Failed to get subscription client";
519
Yu Shan4569ef52022-03-18 14:34:25 -0700520 auto result = client->subscribe({{.propId = propId, .sampleRate = minSampleRate}});
Yu Shan726d51a2022-02-22 17:37:21 -0800521
522 ASSERT_TRUE(result.ok()) << StringPrintf("Failed to subscribe to property: %" PRId32
523 ", error: %s",
524 propId, result.error().message().c_str());
Yu Shan4569ef52022-03-18 14:34:25 -0700525
526 if (mVhalClient->isAidlVhal()) {
527 // Skip checking timestamp for HIDL because the behavior for sample rate and timestamp is
528 // only specified clearly for AIDL.
529
530 // Timeout is 2 seconds, which gives a 1 second buffer.
531 ASSERT_TRUE(mCallback->waitForExpectedEvents(propId, std::floor(minSampleRate),
532 std::chrono::seconds(2)))
533 << "Didn't get enough events for subscribing to minSampleRate";
534 }
535
536 result = client->subscribe({{.propId = propId, .sampleRate = maxSampleRate}});
537
538 ASSERT_TRUE(result.ok()) << StringPrintf("Failed to subscribe to property: %" PRId32
539 ", error: %s",
540 propId, result.error().message().c_str());
541
542 if (mVhalClient->isAidlVhal()) {
543 ASSERT_TRUE(mCallback->waitForExpectedEvents(propId, std::floor(maxSampleRate),
544 std::chrono::seconds(2)))
545 << "Didn't get enough events for subscribing to maxSampleRate";
546
547 std::unordered_set<int64_t> timestamps;
548 // Event event should have a different timestamp.
549 for (const int64_t& eventTimestamp : mCallback->getEventTimestamps(propId)) {
550 ASSERT_TRUE(timestamps.find(eventTimestamp) == timestamps.end())
551 << "two events for the same property must not have the same timestamp";
552 timestamps.insert(eventTimestamp);
553 }
554 }
Yu Shan726d51a2022-02-22 17:37:21 -0800555
556 result = client->unsubscribe({propId});
557 ASSERT_TRUE(result.ok()) << StringPrintf("Failed to unsubscribe to property: %" PRId32
558 ", error: %s",
559 propId, result.error().message().c_str());
560
561 mCallback->reset();
562 ASSERT_FALSE(mCallback->waitForExpectedEvents(propId, 10, std::chrono::seconds(1)))
563 << "Expect not to get events after unsubscription";
564}
565
Yu Shana9cbdea2024-01-30 16:33:56 -0800566bool isVariableUpdateRateSupported(const std::unique_ptr<IHalPropConfig>& config, int32_t areaId) {
567 for (const auto& areaConfigPtr : config->getAreaConfigs()) {
568 if (areaConfigPtr->getAreaId() == areaId &&
569 areaConfigPtr->isVariableUpdateRateSupported()) {
570 return true;
571 }
572 }
573 return false;
574}
575
576// Test subscribe with variable update rate enabled if supported.
577TEST_P(VtsHalAutomotiveVehicleTargetTest, subscribe_enableVurIfSupported) {
578 ALOGD("VtsHalAutomotiveVehicleTargetTest::subscribe_enableVurIfSupported");
579
580 int32_t propId = toInt(VehicleProperty::PERF_VEHICLE_SPEED);
581 if (!checkIsSupported(propId)) {
582 GTEST_SKIP() << "Property: " << propId << " is not supported, skip the test";
583 }
584 if (!mVhalClient->isAidlVhal()) {
585 GTEST_SKIP() << "Variable update rate is only supported by AIDL VHAL";
586 }
587
588 auto propConfigsResult = mVhalClient->getPropConfigs({propId});
589
590 ASSERT_TRUE(propConfigsResult.ok()) << "Failed to get property config for PERF_VEHICLE_SPEED: "
591 << "error: " << propConfigsResult.error().message();
592 ASSERT_EQ(propConfigsResult.value().size(), 1u)
593 << "Expect to return 1 config for PERF_VEHICLE_SPEED";
594 auto& propConfig = propConfigsResult.value()[0];
595 float maxSampleRate = propConfig->getMaxSampleRate();
596 if (maxSampleRate < 1) {
597 GTEST_SKIP() << "Sample rate for vehicle speed < 1 times/sec, skip test since it would "
598 "take too long";
599 }
600 // PERF_VEHICLE_SPEED is a global property, so areaId is 0.
601 if (!isVariableUpdateRateSupported(propConfig, /* areaId= */ 0)) {
602 GTEST_SKIP() << "Variable update rate is not supported for PERF_VEHICLE_SPEED, "
603 << "skip testing";
604 }
605
606 auto client = mVhalClient->getSubscriptionClient(mCallback);
607 ASSERT_NE(client, nullptr) << "Failed to get subscription client";
608 SubscribeOptionsBuilder builder(propId);
609 // By default variable update rate is true.
610 builder.setSampleRate(maxSampleRate);
611 auto option = builder.build();
612
613 auto result = client->subscribe({option});
614
615 ASSERT_TRUE(result.ok()) << StringPrintf("Failed to subscribe to property: %" PRId32
616 ", error: %s",
617 propId, result.error().message().c_str());
618
619 ASSERT_TRUE(mCallback->waitForExpectedEvents(propId, 1, std::chrono::seconds(2)))
620 << "Must get at least 1 events within 2 seconds after subscription for rate: "
621 << maxSampleRate;
622
623 // Sleep for 1 seconds to wait for more possible events to arrive.
624 std::this_thread::sleep_for(std::chrono::seconds(1));
625
626 client->unsubscribe({propId});
627
628 auto events = mCallback->getEvents(propId);
629 if (events.size() == 1) {
630 // We only received one event, the value is not changing so nothing to check here.
631 return;
632 }
633
634 // Sort the values by the timestamp.
635 std::map<int64_t, float> valuesByTimestamp;
636 for (size_t i = 0; i < events.size(); i++) {
637 valuesByTimestamp[events[i]->getTimestamp()] = events[i]->getFloatValues()[0];
638 }
639
640 size_t i = 0;
641 float previousValue;
642 for (const auto& [_, value] : valuesByTimestamp) {
643 if (i == 0) {
644 previousValue = value;
645 } else {
646 ASSERT_FALSE(value != previousValue) << "received duplicate value: " << value
647 << " when variable update rate is true";
648 previousValue = value;
649 }
650 }
651}
652
Yu Shan726d51a2022-02-22 17:37:21 -0800653// Test subscribe() with an invalid property.
654TEST_P(VtsHalAutomotiveVehicleTargetTest, subscribeInvalidProp) {
655 ALOGD("VtsHalAutomotiveVehicleTargetTest::subscribeInvalidProp");
656
657 std::vector<SubscribeOptions> options = {
658 SubscribeOptions{.propId = kInvalidProp, .sampleRate = 10.0}};
659
660 auto client = mVhalClient->getSubscriptionClient(mCallback);
661 ASSERT_NE(client, nullptr) << "Failed to get subscription client";
662
663 auto result = client->subscribe(options);
664
665 ASSERT_FALSE(result.ok()) << StringPrintf("Expect subscribing to property: %" PRId32 " to fail",
666 kInvalidProp);
667}
668
Yu Shan4569ef52022-03-18 14:34:25 -0700669// Test the timestamp returned in GetValues results is the timestamp when the value is retrieved.
670TEST_P(VtsHalAutomotiveVehicleTargetTest, testGetValuesTimestampAIDL) {
671 if (!mVhalClient->isAidlVhal()) {
672 GTEST_SKIP() << "Skip checking timestamp for HIDL because the behavior is only specified "
673 "for AIDL";
674 }
675
676 int32_t propId = toInt(VehicleProperty::PARKING_BRAKE_ON);
Yu Shan0ebd8762023-10-11 11:31:04 -0700677 if (!checkIsSupported(propId)) {
678 GTEST_SKIP() << "Property: " << propId << " is not supported, skip the test";
679 }
Yu Shan4569ef52022-03-18 14:34:25 -0700680 auto prop = mVhalClient->createHalPropValue(propId);
681
682 auto result = mVhalClient->getValueSync(*prop);
683
684 ASSERT_TRUE(result.ok()) << StringPrintf("Failed to get value for property: %" PRId32
685 ", error: %s",
686 propId, result.error().message().c_str());
687 ASSERT_NE(result.value(), nullptr) << "Result value must not be null";
688 ASSERT_EQ(result.value()->getInt32Values().size(), 1u) << "Result must contain 1 int value";
689
690 bool parkBrakeOnValue1 = (result.value()->getInt32Values()[0] == 1);
691 int64_t timestampValue1 = result.value()->getTimestamp();
692
693 result = mVhalClient->getValueSync(*prop);
694
695 ASSERT_TRUE(result.ok()) << StringPrintf("Failed to get value for property: %" PRId32
696 ", error: %s",
697 propId, result.error().message().c_str());
698 ASSERT_NE(result.value(), nullptr) << "Result value must not be null";
699 ASSERT_EQ(result.value()->getInt32Values().size(), 1u) << "Result must contain 1 int value";
700
701 bool parkBarkeOnValue2 = (result.value()->getInt32Values()[0] == 1);
702 int64_t timestampValue2 = result.value()->getTimestamp();
703
704 if (parkBarkeOnValue2 == parkBrakeOnValue1) {
705 ASSERT_EQ(timestampValue2, timestampValue1)
706 << "getValue result must contain a timestamp updated when the value was updated, if"
707 "the value does not change, expect the same timestamp";
708 } else {
709 ASSERT_GT(timestampValue2, timestampValue1)
710 << "getValue result must contain a timestamp updated when the value was updated, if"
711 "the value changes, expect the newer value has a larger timestamp";
712 }
713}
714
shrikar6a4f3a82023-10-16 18:49:49 +0000715void VtsHalAutomotiveVehicleTargetTest::verifyAccessMode(int actualAccess, int expectedAccess) {
shrikar127dc872024-02-12 19:12:33 +0000716 if (actualAccess == toInt(VehiclePropertyAccess::NONE)) {
717 return;
718 }
shrikar6a4f3a82023-10-16 18:49:49 +0000719 if (expectedAccess == toInt(VehiclePropertyAccess::READ_WRITE)) {
720 ASSERT_TRUE(actualAccess == expectedAccess ||
721 actualAccess == toInt(VehiclePropertyAccess::READ))
722 << StringPrintf("Expect to get VehiclePropertyAccess: %i or %i, got %i",
723 expectedAccess, toInt(VehiclePropertyAccess::READ), actualAccess);
724 return;
725 }
726 ASSERT_EQ(actualAccess, expectedAccess) << StringPrintf(
727 "Expect to get VehiclePropertyAccess: %i, got %i", expectedAccess, actualAccess);
728}
729
shrikar127dc872024-02-12 19:12:33 +0000730void VtsHalAutomotiveVehicleTargetTest::verifyGlobalAccessIsMaximalAreaAccessSubset(
731 int propertyLevelAccess,
732 const std::vector<std::unique_ptr<IHalAreaConfig>>& areaConfigs) const {
733 bool readOnlyPresent = false;
734 bool writeOnlyPresent = false;
735 bool readWritePresent = false;
736 int maximalAreaAccessSubset = toInt(VehiclePropertyAccess::NONE);
737 for (size_t i = 0; i < areaConfigs.size(); i++) {
738 int access = areaConfigs[i]->getAccess();
739 switch (access) {
740 case toInt(VehiclePropertyAccess::READ):
741 readOnlyPresent = true;
742 break;
743 case toInt(VehiclePropertyAccess::WRITE):
744 writeOnlyPresent = true;
745 break;
746 case toInt(VehiclePropertyAccess::READ_WRITE):
747 readWritePresent = true;
748 break;
749 default:
750 ASSERT_EQ(access, toInt(VehiclePropertyAccess::NONE)) << StringPrintf(
751 "Area access can be NONE only if global property access is also NONE");
752 return;
753 }
754 }
755
756 if (readOnlyPresent && !writeOnlyPresent) {
757 maximalAreaAccessSubset = toInt(VehiclePropertyAccess::READ);
758 } else if (writeOnlyPresent) {
759 maximalAreaAccessSubset = toInt(VehiclePropertyAccess::WRITE);
760 } else if (readWritePresent) {
761 maximalAreaAccessSubset = toInt(VehiclePropertyAccess::READ_WRITE);
762 }
763 ASSERT_EQ(propertyLevelAccess, maximalAreaAccessSubset) << StringPrintf(
764 "Expected global access to be equal to maximal area access subset %d, Instead got %d",
765 maximalAreaAccessSubset, propertyLevelAccess);
766}
767
Aaqib Ismail20486702022-10-27 16:58:50 -0700768// Helper function to compare actual vs expected property config
769void VtsHalAutomotiveVehicleTargetTest::verifyProperty(VehicleProperty propId,
770 VehiclePropertyAccess access,
771 VehiclePropertyChangeMode changeMode,
772 VehiclePropertyGroup group, VehicleArea area,
773 VehiclePropertyType propertyType) {
774 int expectedPropId = toInt(propId);
775 int expectedAccess = toInt(access);
776 int expectedChangeMode = toInt(changeMode);
777 int expectedGroup = toInt(group);
778 int expectedArea = toInt(area);
779 int expectedPropertyType = toInt(propertyType);
780
Eva Chen17bc5782023-01-06 22:59:58 -0800781 auto result = mVhalClient->getAllPropConfigs();
782 ASSERT_TRUE(result.ok()) << "Failed to get all property configs, error: "
783 << result.error().message();
784
785 // Check if property is implemented by getting all configs and looking to see if the expected
786 // property id is in that list.
787 bool isExpectedPropIdImplemented = false;
788 for (const auto& cfgPtr : result.value()) {
789 const IHalPropConfig& cfg = *cfgPtr;
790 if (expectedPropId == cfg.getPropId()) {
791 isExpectedPropIdImplemented = true;
792 break;
793 }
794 }
795
796 if (!isExpectedPropIdImplemented) {
797 GTEST_SKIP() << StringPrintf("Property %" PRId32 " has not been implemented",
798 expectedPropId);
799 }
800
801 result = mVhalClient->getPropConfigs({expectedPropId});
Aaqib Ismail20486702022-10-27 16:58:50 -0700802 ASSERT_TRUE(result.ok()) << "Failed to get required property config, error: "
803 << result.error().message();
804
Aaqib Ismail20486702022-10-27 16:58:50 -0700805 ASSERT_EQ(result.value().size(), 1u)
806 << StringPrintf("Expect to get exactly 1 config, got %zu", result.value().size());
807
808 const auto& config = result.value().at(0);
809 int actualPropId = config->getPropId();
Aaqib Ismail20486702022-10-27 16:58:50 -0700810 int actualChangeMode = config->getChangeMode();
811 int actualGroup = actualPropId & toInt(VehiclePropertyGroup::MASK);
812 int actualArea = actualPropId & toInt(VehicleArea::MASK);
813 int actualPropertyType = actualPropId & toInt(VehiclePropertyType::MASK);
814
815 ASSERT_EQ(actualPropId, expectedPropId)
816 << StringPrintf("Expect to get property ID: %i, got %i", expectedPropId, actualPropId);
817
shrikar6a4f3a82023-10-16 18:49:49 +0000818 int globalAccess = config->getAccess();
819 if (config->getAreaConfigSize() == 0) {
820 verifyAccessMode(globalAccess, expectedAccess);
Aaqib Ismail20486702022-10-27 16:58:50 -0700821 } else {
shrikar6a4f3a82023-10-16 18:49:49 +0000822 for (const auto& areaConfig : config->getAreaConfigs()) {
823 int areaConfigAccess = areaConfig->getAccess();
824 int actualAccess = (areaConfigAccess != toInt(VehiclePropertyAccess::NONE))
825 ? areaConfigAccess
826 : globalAccess;
827 verifyAccessMode(actualAccess, expectedAccess);
828 }
Aaqib Ismail20486702022-10-27 16:58:50 -0700829 }
830
831 ASSERT_EQ(actualChangeMode, expectedChangeMode)
832 << StringPrintf("Expect to get VehiclePropertyChangeMode: %i, got %i",
833 expectedChangeMode, actualChangeMode);
834 ASSERT_EQ(actualGroup, expectedGroup) << StringPrintf(
835 "Expect to get VehiclePropertyGroup: %i, got %i", expectedGroup, actualGroup);
836 ASSERT_EQ(actualArea, expectedArea)
837 << StringPrintf("Expect to get VehicleArea: %i, got %i", expectedArea, actualArea);
838 ASSERT_EQ(actualPropertyType, expectedPropertyType)
839 << StringPrintf("Expect to get VehiclePropertyType: %i, got %i", expectedPropertyType,
840 actualPropertyType);
841}
842
shrikar34563642023-02-14 02:57:17 +0000843TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyLocationCharacterizationConfig) {
844 verifyProperty(VehicleProperty::LOCATION_CHARACTERIZATION, VehiclePropertyAccess::READ,
845 VehiclePropertyChangeMode::STATIC, VehiclePropertyGroup::SYSTEM,
846 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
847}
848
Eva Chen544b24b2023-12-05 00:13:53 -0800849TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyUltrasonicsSensorPositionConfig) {
850 verifyProperty(VehicleProperty::ULTRASONICS_SENSOR_POSITION, VehiclePropertyAccess::READ,
851 VehiclePropertyChangeMode::STATIC, VehiclePropertyGroup::SYSTEM,
852 VehicleArea::VENDOR, VehiclePropertyType::INT32_VEC);
853}
854
Eva Chen9e226e52023-12-06 00:23:18 -0800855TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyUltrasonicsSensorOrientationConfig) {
856 verifyProperty(VehicleProperty::ULTRASONICS_SENSOR_ORIENTATION, VehiclePropertyAccess::READ,
857 VehiclePropertyChangeMode::STATIC, VehiclePropertyGroup::SYSTEM,
Eva Chen8818f192024-01-25 18:21:43 -0800858 VehicleArea::VENDOR, VehiclePropertyType::FLOAT_VEC);
Eva Chen9e226e52023-12-06 00:23:18 -0800859}
860
Eva Chen727aa3f2023-12-06 01:13:29 -0800861TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyUltrasonicsSensorFieldOfViewConfig) {
862 verifyProperty(VehicleProperty::ULTRASONICS_SENSOR_FIELD_OF_VIEW, VehiclePropertyAccess::READ,
863 VehiclePropertyChangeMode::STATIC, VehiclePropertyGroup::SYSTEM,
864 VehicleArea::VENDOR, VehiclePropertyType::INT32_VEC);
865}
866
Eva Chen968bf442023-12-06 01:21:51 -0800867TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyUltrasonicsSensorDetectionRangeConfig) {
868 verifyProperty(VehicleProperty::ULTRASONICS_SENSOR_DETECTION_RANGE, VehiclePropertyAccess::READ,
869 VehiclePropertyChangeMode::STATIC, VehiclePropertyGroup::SYSTEM,
870 VehicleArea::VENDOR, VehiclePropertyType::INT32_VEC);
871}
872
Eva Chendf05df52023-12-06 01:42:55 -0800873TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyUltrasonicsSensorSupportedRangesConfig) {
874 verifyProperty(VehicleProperty::ULTRASONICS_SENSOR_SUPPORTED_RANGES,
875 VehiclePropertyAccess::READ, VehiclePropertyChangeMode::STATIC,
876 VehiclePropertyGroup::SYSTEM, VehicleArea::VENDOR,
877 VehiclePropertyType::INT32_VEC);
878}
879
Eva Chen75661732023-12-06 01:51:40 -0800880TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyUltrasonicsSensorMeasuredDistanceConfig) {
881 verifyProperty(VehicleProperty::ULTRASONICS_SENSOR_MEASURED_DISTANCE,
882 VehiclePropertyAccess::READ, VehiclePropertyChangeMode::CONTINUOUS,
883 VehiclePropertyGroup::SYSTEM, VehicleArea::VENDOR,
884 VehiclePropertyType::INT32_VEC);
885}
886
shrikar668df362022-12-20 22:08:17 +0000887TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyEmergencyLaneKeepAssistEnabledConfig) {
888 verifyProperty(VehicleProperty::EMERGENCY_LANE_KEEP_ASSIST_ENABLED,
889 VehiclePropertyAccess::READ_WRITE, VehiclePropertyChangeMode::ON_CHANGE,
890 VehiclePropertyGroup::SYSTEM, VehicleArea::GLOBAL, VehiclePropertyType::BOOLEAN);
891}
892
shrikar80cc0c52023-01-30 16:56:53 +0000893TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyEmergencyLaneKeepAssistStateConfig) {
894 verifyProperty(VehicleProperty::EMERGENCY_LANE_KEEP_ASSIST_STATE, VehiclePropertyAccess::READ,
895 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
896 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
897}
898
shrikar5d1b8162023-01-25 19:31:23 +0000899TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyCruiseControlEnabledConfig) {
900 verifyProperty(VehicleProperty::CRUISE_CONTROL_ENABLED, VehiclePropertyAccess::READ_WRITE,
901 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
902 VehicleArea::GLOBAL, VehiclePropertyType::BOOLEAN);
shrikar808a2942022-12-21 17:07:32 +0000903}
904
shrikard440ed42023-01-31 00:25:14 +0000905TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyCruiseControlTypeConfig) {
906 verifyProperty(VehicleProperty::CRUISE_CONTROL_TYPE, VehiclePropertyAccess::READ_WRITE,
907 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
908 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
909}
910
shrikar2753b9e2023-01-31 00:25:14 +0000911TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyCruiseControlStateConfig) {
912 verifyProperty(VehicleProperty::CRUISE_CONTROL_STATE, VehiclePropertyAccess::READ,
913 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
914 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
915}
916
shrikar5df0f952023-02-02 00:15:39 +0000917TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyCruiseControlCommandConfig) {
918 verifyProperty(VehicleProperty::CRUISE_CONTROL_COMMAND, VehiclePropertyAccess::WRITE,
919 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
920 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
921}
922
shrikarfde8c242023-02-02 01:10:33 +0000923TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyCruiseControlTargetSpeedConfig) {
924 verifyProperty(VehicleProperty::CRUISE_CONTROL_TARGET_SPEED, VehiclePropertyAccess::READ,
925 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
926 VehicleArea::GLOBAL, VehiclePropertyType::FLOAT);
927}
928
shrikarb9661d32023-02-02 19:22:50 +0000929TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyAdaptiveCruiseControlTargetTimeGapConfig) {
930 verifyProperty(VehicleProperty::ADAPTIVE_CRUISE_CONTROL_TARGET_TIME_GAP,
931 VehiclePropertyAccess::READ_WRITE, VehiclePropertyChangeMode::ON_CHANGE,
932 VehiclePropertyGroup::SYSTEM, VehicleArea::GLOBAL, VehiclePropertyType::INT32);
933}
934
shrikarf62d7472023-02-03 00:20:04 +0000935TEST_P(VtsHalAutomotiveVehicleTargetTest,
936 verifyAdaptiveCruiseControlLeadVehicleMeasuredDistanceConfig) {
937 verifyProperty(VehicleProperty::ADAPTIVE_CRUISE_CONTROL_LEAD_VEHICLE_MEASURED_DISTANCE,
938 VehiclePropertyAccess::READ, VehiclePropertyChangeMode::CONTINUOUS,
939 VehiclePropertyGroup::SYSTEM, VehicleArea::GLOBAL, VehiclePropertyType::INT32);
940}
941
shrikar37833e12022-12-15 20:13:14 +0000942TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyHandsOnDetectionEnabledConfig) {
943 verifyProperty(VehicleProperty::HANDS_ON_DETECTION_ENABLED, VehiclePropertyAccess::READ_WRITE,
944 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
945 VehicleArea::GLOBAL, VehiclePropertyType::BOOLEAN);
946}
947
shrikar6d88bf52023-01-17 17:04:21 +0000948TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyHandsOnDetectionDriverStateConfig) {
949 verifyProperty(VehicleProperty::HANDS_ON_DETECTION_DRIVER_STATE, VehiclePropertyAccess::READ,
950 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
951 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
952}
953
shrikara6785992023-01-18 23:07:06 +0000954TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyHandsOnDetectionWarningConfig) {
955 verifyProperty(VehicleProperty::HANDS_ON_DETECTION_WARNING, VehiclePropertyAccess::READ,
956 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
957 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
958}
959
Eva Chenbbb7b6d2023-11-21 00:07:14 -0800960TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyDriverDrowsinessAttentionSystemEnabledConfig) {
961 verifyProperty(VehicleProperty::DRIVER_DROWSINESS_ATTENTION_SYSTEM_ENABLED,
962 VehiclePropertyAccess::READ_WRITE, VehiclePropertyChangeMode::ON_CHANGE,
963 VehiclePropertyGroup::SYSTEM, VehicleArea::GLOBAL, VehiclePropertyType::BOOLEAN);
964}
965
Eva Chen9f1d8c02023-11-28 16:50:14 -0800966TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyDriverDrowsinessAttentionStateConfig) {
967 verifyProperty(VehicleProperty::DRIVER_DROWSINESS_ATTENTION_STATE, VehiclePropertyAccess::READ,
968 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
969 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
970}
971
Eva Chen6ec790b2023-12-01 23:37:29 -0800972TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyDriverDrowsinessAttentionWarningEnabledConfig) {
973 verifyProperty(VehicleProperty::DRIVER_DROWSINESS_ATTENTION_WARNING_ENABLED,
974 VehiclePropertyAccess::READ_WRITE, VehiclePropertyChangeMode::ON_CHANGE,
975 VehiclePropertyGroup::SYSTEM, VehicleArea::GLOBAL, VehiclePropertyType::BOOLEAN);
976}
977
Eva Chen05c548c2023-12-02 01:20:10 -0800978TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyDriverDrowsinessAttentionWarningConfig) {
979 verifyProperty(VehicleProperty::DRIVER_DROWSINESS_ATTENTION_WARNING,
980 VehiclePropertyAccess::READ, VehiclePropertyChangeMode::ON_CHANGE,
981 VehiclePropertyGroup::SYSTEM, VehicleArea::GLOBAL, VehiclePropertyType::INT32);
982}
983
Eva Chen51770b02023-12-02 15:27:31 -0800984TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyDriverDistractionSystemEnabledConfig) {
985 verifyProperty(VehicleProperty::DRIVER_DISTRACTION_SYSTEM_ENABLED,
986 VehiclePropertyAccess::READ_WRITE, VehiclePropertyChangeMode::ON_CHANGE,
987 VehiclePropertyGroup::SYSTEM, VehicleArea::GLOBAL, VehiclePropertyType::BOOLEAN);
988}
989
Eva Chena342b722023-12-04 00:40:45 -0800990TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyDriverDistractionStateConfig) {
991 verifyProperty(VehicleProperty::DRIVER_DISTRACTION_STATE, VehiclePropertyAccess::READ,
992 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
993 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
994}
995
Eva Chenc62166e2023-12-04 02:17:36 -0800996TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyDriverDistractionWarningEnabledConfig) {
997 verifyProperty(VehicleProperty::DRIVER_DISTRACTION_WARNING_ENABLED,
998 VehiclePropertyAccess::READ_WRITE, VehiclePropertyChangeMode::ON_CHANGE,
999 VehiclePropertyGroup::SYSTEM, VehicleArea::GLOBAL, VehiclePropertyType::BOOLEAN);
1000}
1001
Eva Chen9a0925e2023-12-04 03:52:23 -08001002TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyDriverDistractionWarningConfig) {
1003 verifyProperty(VehicleProperty::DRIVER_DISTRACTION_WARNING, VehiclePropertyAccess::READ,
1004 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
1005 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
1006}
1007
Aaqib Ismailc69e9682022-11-22 12:50:00 -08001008TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyEvBrakeRegenerationLevelConfig) {
1009 verifyProperty(VehicleProperty::EV_BRAKE_REGENERATION_LEVEL,
1010 VehiclePropertyAccess::READ_WRITE, VehiclePropertyChangeMode::ON_CHANGE,
1011 VehiclePropertyGroup::SYSTEM, VehicleArea::GLOBAL, VehiclePropertyType::INT32);
1012}
1013
shrikar2dae80f2022-12-21 23:50:17 +00001014TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyEvStoppingModeConfig) {
1015 verifyProperty(VehicleProperty::EV_STOPPING_MODE, VehiclePropertyAccess::READ_WRITE,
1016 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
1017 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
1018}
1019
Aaqib Ismailaec678a2022-12-07 16:22:42 -08001020TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyEvCurrentBatteryCapacityConfig) {
1021 verifyProperty(VehicleProperty::EV_CURRENT_BATTERY_CAPACITY, VehiclePropertyAccess::READ,
1022 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
1023 VehicleArea::GLOBAL, VehiclePropertyType::FLOAT);
1024}
1025
shrikar83914472022-12-16 20:28:47 +00001026TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyEngineIdleAutoStopEnabledConfig) {
1027 verifyProperty(VehicleProperty::ENGINE_IDLE_AUTO_STOP_ENABLED,
1028 VehiclePropertyAccess::READ_WRITE, VehiclePropertyChangeMode::ON_CHANGE,
1029 VehiclePropertyGroup::SYSTEM, VehicleArea::GLOBAL, VehiclePropertyType::BOOLEAN);
1030}
1031
Aaqib Ismail20486702022-10-27 16:58:50 -07001032TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyDoorChildLockEnabledConfig) {
1033 verifyProperty(VehicleProperty::DOOR_CHILD_LOCK_ENABLED, VehiclePropertyAccess::READ_WRITE,
1034 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
1035 VehicleArea::DOOR, VehiclePropertyType::BOOLEAN);
1036}
1037
Aaqib Ismail63d52d12023-01-30 12:35:10 -08001038TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyWindshieldWipersPeriodConfig) {
1039 verifyProperty(VehicleProperty::WINDSHIELD_WIPERS_PERIOD, VehiclePropertyAccess::READ,
1040 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
1041 VehicleArea::WINDOW, VehiclePropertyType::INT32);
1042}
1043
Aaqib Ismail732a1d72023-01-31 10:25:45 -08001044TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyWindshieldWipersStateConfig) {
1045 verifyProperty(VehicleProperty::WINDSHIELD_WIPERS_STATE, VehiclePropertyAccess::READ,
1046 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
1047 VehicleArea::WINDOW, VehiclePropertyType::INT32);
1048}
1049
Aaqib Ismailc37a2112023-02-02 11:30:08 -08001050TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyWindshieldWipersSwitchConfig) {
1051 verifyProperty(VehicleProperty::WINDSHIELD_WIPERS_SWITCH, VehiclePropertyAccess::READ_WRITE,
1052 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
1053 VehicleArea::WINDOW, VehiclePropertyType::INT32);
1054}
1055
Aaqib Ismail7f941b42022-11-04 14:55:13 -07001056TEST_P(VtsHalAutomotiveVehicleTargetTest, verifySteeringWheelDepthPosConfig) {
1057 verifyProperty(VehicleProperty::STEERING_WHEEL_DEPTH_POS, VehiclePropertyAccess::READ_WRITE,
1058 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
1059 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
1060}
1061
Aaqib Ismail34fe92f2022-11-04 21:41:23 -07001062TEST_P(VtsHalAutomotiveVehicleTargetTest, verifySteeringWheelDepthMoveConfig) {
1063 verifyProperty(VehicleProperty::STEERING_WHEEL_DEPTH_MOVE, VehiclePropertyAccess::READ_WRITE,
1064 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
1065 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
1066}
1067
Aaqib Ismail53b81c92022-11-07 17:47:04 -08001068TEST_P(VtsHalAutomotiveVehicleTargetTest, verifySteeringWheelHeightPosConfig) {
1069 verifyProperty(VehicleProperty::STEERING_WHEEL_HEIGHT_POS, VehiclePropertyAccess::READ_WRITE,
1070 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
1071 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
1072}
1073
Aaqib Ismail6c4bf192022-11-08 15:00:32 -08001074TEST_P(VtsHalAutomotiveVehicleTargetTest, verifySteeringWheelHeightMoveConfig) {
1075 verifyProperty(VehicleProperty::STEERING_WHEEL_HEIGHT_MOVE, VehiclePropertyAccess::READ_WRITE,
1076 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
1077 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
1078}
1079
Aaqib Ismail8d051182022-11-09 13:28:48 -08001080TEST_P(VtsHalAutomotiveVehicleTargetTest, verifySteeringWheelTheftLockEnabledConfig) {
1081 verifyProperty(VehicleProperty::STEERING_WHEEL_THEFT_LOCK_ENABLED,
1082 VehiclePropertyAccess::READ_WRITE, VehiclePropertyChangeMode::ON_CHANGE,
1083 VehiclePropertyGroup::SYSTEM, VehicleArea::GLOBAL, VehiclePropertyType::BOOLEAN);
1084}
1085
Aaqib Ismail68d3f122022-11-09 14:43:32 -08001086TEST_P(VtsHalAutomotiveVehicleTargetTest, verifySteeringWheelLockedConfig) {
1087 verifyProperty(VehicleProperty::STEERING_WHEEL_LOCKED, VehiclePropertyAccess::READ_WRITE,
1088 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
1089 VehicleArea::GLOBAL, VehiclePropertyType::BOOLEAN);
1090}
1091
Aaqib Ismaild4d6adf2022-11-09 16:59:47 -08001092TEST_P(VtsHalAutomotiveVehicleTargetTest, verifySteeringWheelEasyAccessEnabledConfig) {
1093 verifyProperty(VehicleProperty::STEERING_WHEEL_EASY_ACCESS_ENABLED,
1094 VehiclePropertyAccess::READ_WRITE, VehiclePropertyChangeMode::ON_CHANGE,
1095 VehiclePropertyGroup::SYSTEM, VehicleArea::GLOBAL, VehiclePropertyType::BOOLEAN);
1096}
1097
Aaqib Ismail0dc7ba02022-11-10 14:28:09 -08001098TEST_P(VtsHalAutomotiveVehicleTargetTest, verifySteeringWheelLightsStateConfig) {
1099 verifyProperty(VehicleProperty::STEERING_WHEEL_LIGHTS_STATE, VehiclePropertyAccess::READ,
1100 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
1101 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
1102}
1103
Aaqib Ismail4b8688f2022-11-15 15:13:35 -08001104TEST_P(VtsHalAutomotiveVehicleTargetTest, verifySteeringWheelLightsSwitchConfig) {
1105 verifyProperty(VehicleProperty::STEERING_WHEEL_LIGHTS_SWITCH, VehiclePropertyAccess::READ_WRITE,
1106 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
1107 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
1108}
1109
Arati Gerdesd86c7fd2022-12-19 12:32:29 -08001110TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyGloveBoxDoorPosConfig) {
1111 verifyProperty(VehicleProperty::GLOVE_BOX_DOOR_POS, VehiclePropertyAccess::READ_WRITE,
1112 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
1113 VehicleArea::SEAT, VehiclePropertyType::INT32);
1114}
1115
Aaqib Ismail57be4032023-02-02 14:15:03 -08001116TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyGloveBoxLockedConfig) {
1117 verifyProperty(VehicleProperty::GLOVE_BOX_LOCKED, VehiclePropertyAccess::READ_WRITE,
1118 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
1119 VehicleArea::SEAT, VehiclePropertyType::BOOLEAN);
1120}
1121
shrikara1367212022-11-02 16:07:35 +00001122TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyMirrorAutoFoldEnabledConfig) {
1123 verifyProperty(VehicleProperty::MIRROR_AUTO_FOLD_ENABLED, VehiclePropertyAccess::READ_WRITE,
1124 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
1125 VehicleArea::MIRROR, VehiclePropertyType::BOOLEAN);
1126}
1127
1128TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyMirrorAutoTiltEnabledConfig) {
1129 verifyProperty(VehicleProperty::MIRROR_AUTO_TILT_ENABLED, VehiclePropertyAccess::READ_WRITE,
1130 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
1131 VehicleArea::MIRROR, VehiclePropertyType::BOOLEAN);
1132}
1133
Aaqib Ismail4e6144c2022-12-15 15:32:18 -08001134TEST_P(VtsHalAutomotiveVehicleTargetTest, verifySeatHeadrestHeightPosV2Config) {
1135 verifyProperty(VehicleProperty::SEAT_HEADREST_HEIGHT_POS_V2, VehiclePropertyAccess::READ_WRITE,
1136 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
1137 VehicleArea::SEAT, VehiclePropertyType::INT32);
1138}
1139
shrikar6ae79162022-12-16 03:03:25 +00001140TEST_P(VtsHalAutomotiveVehicleTargetTest, verifySeatWalkInPosConfig) {
1141 verifyProperty(VehicleProperty::SEAT_WALK_IN_POS, VehiclePropertyAccess::READ_WRITE,
1142 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
1143 VehicleArea::SEAT, VehiclePropertyType::INT32);
1144}
1145
shrikarfb65ae52022-11-03 23:12:51 +00001146TEST_P(VtsHalAutomotiveVehicleTargetTest, verifySeatFootwellLightsStateConfig) {
1147 verifyProperty(VehicleProperty::SEAT_FOOTWELL_LIGHTS_STATE, VehiclePropertyAccess::READ,
1148 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
1149 VehicleArea::SEAT, VehiclePropertyType::INT32);
1150}
1151
shrikar93cf1be2022-11-30 15:00:52 -08001152TEST_P(VtsHalAutomotiveVehicleTargetTest, verifySeatFootwellLightsSwitchConfig) {
1153 verifyProperty(VehicleProperty::SEAT_FOOTWELL_LIGHTS_SWITCH, VehiclePropertyAccess::READ_WRITE,
1154 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
1155 VehicleArea::SEAT, VehiclePropertyType::INT32);
1156}
1157
shrikar3326de02022-11-07 23:51:20 +00001158TEST_P(VtsHalAutomotiveVehicleTargetTest, verifySeatEasyAccessEnabledConfig) {
1159 verifyProperty(VehicleProperty::SEAT_EASY_ACCESS_ENABLED, VehiclePropertyAccess::READ_WRITE,
1160 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
1161 VehicleArea::SEAT, VehiclePropertyType::BOOLEAN);
1162}
1163
shrikarb96e3762022-11-08 16:49:58 -08001164TEST_P(VtsHalAutomotiveVehicleTargetTest, verifySeatAirbagEnabledConfig) {
1165 verifyProperty(VehicleProperty::SEAT_AIRBAG_ENABLED, VehiclePropertyAccess::READ_WRITE,
1166 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
1167 VehicleArea::SEAT, VehiclePropertyType::BOOLEAN);
1168}
1169
shrikar802ecb52022-11-09 18:27:06 +00001170TEST_P(VtsHalAutomotiveVehicleTargetTest, verifySeatCushionSideSupportPosConfig) {
1171 verifyProperty(VehicleProperty::SEAT_CUSHION_SIDE_SUPPORT_POS,
1172 VehiclePropertyAccess::READ_WRITE, VehiclePropertyChangeMode::ON_CHANGE,
1173 VehiclePropertyGroup::SYSTEM, VehicleArea::SEAT, VehiclePropertyType::INT32);
1174}
1175
shrikar1f0ce0d2022-11-11 17:46:06 +00001176TEST_P(VtsHalAutomotiveVehicleTargetTest, verifySeatCushionSideSupportMoveConfig) {
1177 verifyProperty(VehicleProperty::SEAT_CUSHION_SIDE_SUPPORT_MOVE,
1178 VehiclePropertyAccess::READ_WRITE, VehiclePropertyChangeMode::ON_CHANGE,
1179 VehiclePropertyGroup::SYSTEM, VehicleArea::SEAT, VehiclePropertyType::INT32);
1180}
1181
shrikareff71b22022-11-11 11:02:43 -08001182TEST_P(VtsHalAutomotiveVehicleTargetTest, verifySeatLumbarVerticalPosConfig) {
1183 verifyProperty(VehicleProperty::SEAT_LUMBAR_VERTICAL_POS, VehiclePropertyAccess::READ_WRITE,
1184 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
1185 VehicleArea::SEAT, VehiclePropertyType::INT32);
1186}
1187
shrikar2a081c52022-11-11 16:49:58 -08001188TEST_P(VtsHalAutomotiveVehicleTargetTest, verifySeatLumbarVerticalMoveConfig) {
1189 verifyProperty(VehicleProperty::SEAT_LUMBAR_VERTICAL_MOVE, VehiclePropertyAccess::READ_WRITE,
1190 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
1191 VehicleArea::SEAT, VehiclePropertyType::INT32);
1192}
1193
Aaqib Ismail5d53aa32022-12-13 22:30:23 +00001194TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyAutomaticEmergencyBrakingEnabledConfig) {
1195 verifyProperty(VehicleProperty::AUTOMATIC_EMERGENCY_BRAKING_ENABLED,
1196 VehiclePropertyAccess::READ_WRITE, VehiclePropertyChangeMode::ON_CHANGE,
1197 VehiclePropertyGroup::SYSTEM, VehicleArea::GLOBAL, VehiclePropertyType::BOOLEAN);
1198}
1199
Aaqib Ismail28ee23c2023-01-04 23:04:46 -08001200TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyAutomaticEmergencyBrakingStateConfig) {
1201 verifyProperty(VehicleProperty::AUTOMATIC_EMERGENCY_BRAKING_STATE, VehiclePropertyAccess::READ,
1202 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
1203 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
1204}
1205
Aaqib Ismaila2513672022-12-15 00:55:27 +00001206TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyForwardCollisionWarningEnabledConfig) {
1207 verifyProperty(VehicleProperty::FORWARD_COLLISION_WARNING_ENABLED,
1208 VehiclePropertyAccess::READ_WRITE, VehiclePropertyChangeMode::ON_CHANGE,
1209 VehiclePropertyGroup::SYSTEM, VehicleArea::GLOBAL, VehiclePropertyType::BOOLEAN);
1210}
1211
Aaqib Ismail0a1ab292023-01-19 21:33:56 +00001212TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyForwardCollisionWarningStateConfig) {
1213 verifyProperty(VehicleProperty::FORWARD_COLLISION_WARNING_STATE, VehiclePropertyAccess::READ,
1214 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
1215 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
1216}
1217
Aaqib Ismail3f7177a2022-12-17 09:20:00 -08001218TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyBlindSpotWarningEnabledConfig) {
1219 verifyProperty(VehicleProperty::BLIND_SPOT_WARNING_ENABLED, VehiclePropertyAccess::READ_WRITE,
1220 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
1221 VehicleArea::GLOBAL, VehiclePropertyType::BOOLEAN);
1222}
1223
Aaqib Ismail5fc97bb2023-01-10 17:07:47 -08001224TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyBlindSpotWarningStateConfig) {
1225 verifyProperty(VehicleProperty::BLIND_SPOT_WARNING_STATE, VehiclePropertyAccess::READ,
1226 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
1227 VehicleArea::MIRROR, VehiclePropertyType::INT32);
1228}
1229
Aaqib Ismail7a46cef2022-12-17 10:00:59 -08001230TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyLaneDepartureWarningEnabledConfig) {
1231 verifyProperty(VehicleProperty::LANE_DEPARTURE_WARNING_ENABLED,
1232 VehiclePropertyAccess::READ_WRITE, VehiclePropertyChangeMode::ON_CHANGE,
1233 VehiclePropertyGroup::SYSTEM, VehicleArea::GLOBAL, VehiclePropertyType::BOOLEAN);
1234}
1235
Aaqib Ismail8462db52023-01-27 19:59:49 -08001236TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyLaneDepartureWarningStateConfig) {
1237 verifyProperty(VehicleProperty::LANE_DEPARTURE_WARNING_STATE, VehiclePropertyAccess::READ,
1238 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
1239 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
1240}
1241
Aaqib Ismail20cc66a2022-12-22 05:38:28 -08001242TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyLaneKeepAssistEnabledConfig) {
1243 verifyProperty(VehicleProperty::LANE_KEEP_ASSIST_ENABLED, VehiclePropertyAccess::READ_WRITE,
1244 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
1245 VehicleArea::GLOBAL, VehiclePropertyType::BOOLEAN);
1246}
1247
Aaqib Ismail78db2ca2023-01-10 17:34:28 -08001248TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyLaneKeepAssistStateConfig) {
1249 verifyProperty(VehicleProperty::LANE_KEEP_ASSIST_STATE, VehiclePropertyAccess::READ,
1250 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
1251 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
1252}
1253
Aaqib Ismailb1680a72022-12-14 23:28:49 +00001254TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyLaneCenteringAssistEnabledConfig) {
1255 verifyProperty(VehicleProperty::LANE_CENTERING_ASSIST_ENABLED,
1256 VehiclePropertyAccess::READ_WRITE, VehiclePropertyChangeMode::ON_CHANGE,
1257 VehiclePropertyGroup::SYSTEM, VehicleArea::GLOBAL, VehiclePropertyType::BOOLEAN);
1258}
1259
Aaqib Ismail0ffd39c2023-01-11 12:19:10 -08001260TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyLaneCenteringAssistCommandConfig) {
1261 verifyProperty(VehicleProperty::LANE_CENTERING_ASSIST_COMMAND, VehiclePropertyAccess::WRITE,
1262 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
1263 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
1264}
1265
Aaqib Ismaildb034442023-01-10 18:14:28 -08001266TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyLaneCenteringAssistStateConfig) {
1267 verifyProperty(VehicleProperty::LANE_CENTERING_ASSIST_STATE, VehiclePropertyAccess::READ,
1268 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
1269 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
1270}
1271
Yuncheol Heo8fbbfd12023-09-27 15:43:59 -07001272TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyClusterHeartbeatConfig) {
1273 verifyProperty(VehicleProperty::CLUSTER_HEARTBEAT, VehiclePropertyAccess::WRITE,
1274 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
1275 VehicleArea::GLOBAL, VehiclePropertyType::MIXED);
1276}
1277
shrikard6f9f8e2023-11-02 22:35:28 +00001278TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyVehicleDrivingAutomationCurrentLevelConfig) {
1279 verifyProperty(VehicleProperty::VEHICLE_DRIVING_AUTOMATION_CURRENT_LEVEL,
1280 VehiclePropertyAccess::READ, VehiclePropertyChangeMode::ON_CHANGE,
1281 VehiclePropertyGroup::SYSTEM, VehicleArea::GLOBAL, VehiclePropertyType::INT32);
1282}
1283
Changyeon Jo7cc84532024-02-14 17:39:41 -08001284TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyCameraServiceCurrentStateConfig) {
1285 verifyProperty(VehicleProperty::CAMERA_SERVICE_CURRENT_STATE, VehiclePropertyAccess::WRITE,
1286 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
1287 VehicleArea::GLOBAL, VehiclePropertyType::INT32_VEC);
1288}
1289
shrikar420b31d2023-11-07 16:15:35 +00001290TEST_P(VtsHalAutomotiveVehicleTargetTest, verifySeatAirbagsDeployedConfig) {
1291 verifyProperty(VehicleProperty::SEAT_AIRBAGS_DEPLOYED, VehiclePropertyAccess::READ,
1292 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
1293 VehicleArea::SEAT, VehiclePropertyType::INT32);
1294}
1295
shrikar7717aa82023-11-07 21:05:46 +00001296TEST_P(VtsHalAutomotiveVehicleTargetTest, verifySeatBeltPretensionerDeployedConfig) {
1297 verifyProperty(VehicleProperty::SEAT_BELT_PRETENSIONER_DEPLOYED, VehiclePropertyAccess::READ,
1298 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
1299 VehicleArea::SEAT, VehiclePropertyType::BOOLEAN);
1300}
1301
shrikard816e042023-11-08 20:12:55 +00001302TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyImpactDetectedConfig) {
1303 verifyProperty(VehicleProperty::IMPACT_DETECTED, VehiclePropertyAccess::READ,
1304 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
1305 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
1306}
1307
shrikara492e7d2023-11-09 00:27:54 +00001308TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyEvBatteryAverageTemperatureConfig) {
1309 verifyProperty(VehicleProperty::EV_BATTERY_AVERAGE_TEMPERATURE, VehiclePropertyAccess::READ,
1310 VehiclePropertyChangeMode::CONTINUOUS, VehiclePropertyGroup::SYSTEM,
1311 VehicleArea::GLOBAL, VehiclePropertyType::FLOAT);
1312}
1313
shrikar45df34b2023-11-10 21:14:17 +00001314TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyLowSpeedCollisionWarningEnabledConfig) {
1315 verifyProperty(VehicleProperty::LOW_SPEED_COLLISION_WARNING_ENABLED,
1316 VehiclePropertyAccess::READ_WRITE, VehiclePropertyChangeMode::ON_CHANGE,
1317 VehiclePropertyGroup::SYSTEM, VehicleArea::GLOBAL, VehiclePropertyType::BOOLEAN);
1318}
1319
shrikar858c4e12023-11-14 17:33:11 +00001320TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyLowSpeedCollisionWarningStateConfig) {
1321 verifyProperty(VehicleProperty::LOW_SPEED_COLLISION_WARNING_STATE, VehiclePropertyAccess::READ,
1322 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
1323 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
1324}
1325
shrikar84866f72023-11-27 00:30:59 +00001326TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyValetModeEnabledConfig) {
1327 verifyProperty(VehicleProperty::VALET_MODE_ENABLED, VehiclePropertyAccess::READ_WRITE,
1328 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
1329 VehicleArea::GLOBAL, VehiclePropertyType::BOOLEAN);
1330}
1331
shrikar33a33692023-11-30 01:38:01 +00001332TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyElectronicStabilityControlEnabledConfig) {
1333 verifyProperty(VehicleProperty::ELECTRONIC_STABILITY_CONTROL_ENABLED,
1334 VehiclePropertyAccess::READ_WRITE, VehiclePropertyChangeMode::ON_CHANGE,
1335 VehiclePropertyGroup::SYSTEM, VehicleArea::GLOBAL, VehiclePropertyType::BOOLEAN);
1336}
1337
shrikara45d1cf2023-11-27 17:40:46 +00001338TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyElectronicStabilityControlStateConfig) {
1339 verifyProperty(VehicleProperty::ELECTRONIC_STABILITY_CONTROL_STATE, VehiclePropertyAccess::READ,
1340 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
1341 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
1342}
1343
shrikar7fde8f52023-11-27 22:47:53 +00001344TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyCrossTrafficMonitoringEnabledConfig) {
1345 verifyProperty(VehicleProperty::CROSS_TRAFFIC_MONITORING_ENABLED,
1346 VehiclePropertyAccess::READ_WRITE, VehiclePropertyChangeMode::ON_CHANGE,
1347 VehiclePropertyGroup::SYSTEM, VehicleArea::GLOBAL, VehiclePropertyType::BOOLEAN);
1348}
1349
shrikar813ba7c2023-11-28 18:35:34 +00001350TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyCrossTrafficMonitoringWarningStateConfig) {
1351 verifyProperty(VehicleProperty::CROSS_TRAFFIC_MONITORING_WARNING_STATE,
1352 VehiclePropertyAccess::READ, VehiclePropertyChangeMode::ON_CHANGE,
1353 VehiclePropertyGroup::SYSTEM, VehicleArea::GLOBAL, VehiclePropertyType::INT32);
1354}
1355
shrikar55559892023-12-01 23:35:06 +00001356TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyHeadUpDisplayEnabledConfig) {
1357 verifyProperty(VehicleProperty::HEAD_UP_DISPLAY_ENABLED, VehiclePropertyAccess::READ_WRITE,
1358 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
1359 VehicleArea::SEAT, VehiclePropertyType::BOOLEAN);
1360}
1361
shrikard11b9f82023-12-04 17:39:28 +00001362TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyLowSpeedAutomaticEmergencyBrakingEnabledConfig) {
1363 verifyProperty(VehicleProperty::LOW_SPEED_AUTOMATIC_EMERGENCY_BRAKING_ENABLED,
1364 VehiclePropertyAccess::READ_WRITE, VehiclePropertyChangeMode::ON_CHANGE,
1365 VehiclePropertyGroup::SYSTEM, VehicleArea::GLOBAL, VehiclePropertyType::BOOLEAN);
1366}
1367
shrikarbd6ab732023-12-04 19:07:26 +00001368TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyLowSpeedAutomaticEmergencyBrakingStateConfig) {
1369 verifyProperty(VehicleProperty::LOW_SPEED_AUTOMATIC_EMERGENCY_BRAKING_STATE,
1370 VehiclePropertyAccess::READ, VehiclePropertyChangeMode::ON_CHANGE,
1371 VehiclePropertyGroup::SYSTEM, VehicleArea::GLOBAL, VehiclePropertyType::INT32);
1372}
1373
Yu Shan0ebd8762023-10-11 11:31:04 -07001374bool VtsHalAutomotiveVehicleTargetTest::checkIsSupported(int32_t propertyId) {
Yu Shanec5d5b02023-10-09 14:43:36 -07001375 auto result = mVhalClient->getPropConfigs({propertyId});
Yu Shan0ebd8762023-10-11 11:31:04 -07001376 return result.ok();
Yu Shanec5d5b02023-10-09 14:43:36 -07001377}
1378
Yu Shan726d51a2022-02-22 17:37:21 -08001379std::vector<ServiceDescriptor> getDescriptors() {
1380 std::vector<ServiceDescriptor> descriptors;
1381 for (std::string name : getAidlHalInstanceNames(IVehicle::descriptor)) {
1382 descriptors.push_back({
1383 .name = name,
1384 .isAidlService = true,
1385 });
1386 }
Yu Shanda2fa092024-01-25 17:40:41 -08001387 for (std::string name : getAllHalInstanceNames(
1388 android::hardware::automotive::vehicle::V2_0::IVehicle::descriptor)) {
Yu Shan726d51a2022-02-22 17:37:21 -08001389 descriptors.push_back({
1390 .name = name,
1391 .isAidlService = false,
1392 });
1393 }
1394 return descriptors;
1395}
1396
1397GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(VtsHalAutomotiveVehicleTargetTest);
1398
1399INSTANTIATE_TEST_SUITE_P(PerInstance, VtsHalAutomotiveVehicleTargetTest,
1400 testing::ValuesIn(getDescriptors()),
1401 [](const testing::TestParamInfo<ServiceDescriptor>& info) {
1402 std::string name = "";
1403 if (info.param.isAidlService) {
1404 name += "aidl_";
1405 } else {
1406 name += "hidl_";
1407 }
1408 name += info.param.name;
1409 return Sanitize(name);
1410 });
1411
1412int main(int argc, char** argv) {
1413 ::testing::InitGoogleTest(&argc, argv);
1414 ABinderProcess_setThreadPoolMaxThreadCount(1);
1415 return RUN_ALL_TESTS();
1416}