blob: d91f4f26169d664be27969113be555239dc094ef [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>
40#include <unordered_map>
41#include <unordered_set>
42#include <vector>
43
44using ::aidl::android::hardware::automotive::vehicle::IVehicle;
45using ::aidl::android::hardware::automotive::vehicle::StatusCode;
46using ::aidl::android::hardware::automotive::vehicle::SubscribeOptions;
47using ::aidl::android::hardware::automotive::vehicle::VehicleArea;
48using ::aidl::android::hardware::automotive::vehicle::VehicleProperty;
49using ::aidl::android::hardware::automotive::vehicle::VehiclePropertyAccess;
Aaqib Ismail20486702022-10-27 16:58:50 -070050using ::aidl::android::hardware::automotive::vehicle::VehiclePropertyChangeMode;
51using ::aidl::android::hardware::automotive::vehicle::VehiclePropertyGroup;
Yu Shanead15a22024-01-24 16:14:21 -080052using ::aidl::android::hardware::automotive::vehicle::VehiclePropertyStatus;
Yu Shan726d51a2022-02-22 17:37:21 -080053using ::aidl::android::hardware::automotive::vehicle::VehiclePropertyType;
Yu Shanf3698fd2023-12-18 12:29:00 -080054using ::aidl::android::hardware::automotive::vehicle::VersionForVehicleProperty;
Yu Shan726d51a2022-02-22 17:37:21 -080055using ::android::getAidlHalInstanceNames;
Yu Shanead15a22024-01-24 16:14:21 -080056using ::android::uptimeMillis;
Yu Shan726d51a2022-02-22 17:37:21 -080057using ::android::base::ScopedLockAssertion;
58using ::android::base::StringPrintf;
Chen Chengfaf9adc2022-06-22 23:09:09 +000059using ::android::frameworks::automotive::vhal::ErrorCode;
Yu Shan726d51a2022-02-22 17:37:21 -080060using ::android::frameworks::automotive::vhal::HalPropError;
61using ::android::frameworks::automotive::vhal::IHalPropConfig;
62using ::android::frameworks::automotive::vhal::IHalPropValue;
63using ::android::frameworks::automotive::vhal::ISubscriptionCallback;
64using ::android::frameworks::automotive::vhal::IVhalClient;
Yu Shanead15a22024-01-24 16:14:21 -080065using ::android::frameworks::automotive::vhal::VhalClientResult;
Yu Shan726d51a2022-02-22 17:37:21 -080066using ::android::hardware::getAllHalInstanceNames;
67using ::android::hardware::Sanitize;
Yu Shanf3698fd2023-12-18 12:29:00 -080068using ::android::hardware::automotive::vehicle::isSystemProp;
69using ::android::hardware::automotive::vehicle::propIdToString;
Yu Shan726d51a2022-02-22 17:37:21 -080070using ::android::hardware::automotive::vehicle::toInt;
Yu Shanf3698fd2023-12-18 12:29:00 -080071using ::testing::Ge;
Yu Shan726d51a2022-02-22 17:37:21 -080072
73constexpr int32_t kInvalidProp = 0x31600207;
Yu Shanead15a22024-01-24 16:14:21 -080074// The timeout for retrying getting prop value after setting prop value.
75constexpr int64_t kRetryGetPropAfterSetPropTimeoutMillis = 10'000;
Yu Shan726d51a2022-02-22 17:37:21 -080076
77struct ServiceDescriptor {
78 std::string name;
79 bool isAidlService;
80};
81
82class VtsVehicleCallback final : public ISubscriptionCallback {
83 private:
84 std::mutex mLock;
85 std::unordered_map<int32_t, size_t> mEventsCount GUARDED_BY(mLock);
Yu Shan4569ef52022-03-18 14:34:25 -070086 std::unordered_map<int32_t, std::vector<int64_t>> mEventTimestamps GUARDED_BY(mLock);
Yu Shan726d51a2022-02-22 17:37:21 -080087 std::condition_variable mEventCond;
88
89 public:
90 void onPropertyEvent(const std::vector<std::unique_ptr<IHalPropValue>>& values) override {
91 {
92 std::lock_guard<std::mutex> lockGuard(mLock);
93 for (auto& value : values) {
Yu Shan4569ef52022-03-18 14:34:25 -070094 int32_t propId = value->getPropId();
95 mEventsCount[propId] += 1;
96 mEventTimestamps[propId].push_back(value->getTimestamp());
Yu Shan726d51a2022-02-22 17:37:21 -080097 }
98 }
99 mEventCond.notify_one();
100 }
101
102 void onPropertySetError([[maybe_unused]] const std::vector<HalPropError>& errors) override {
103 // Do nothing.
104 }
105
106 template <class Rep, class Period>
107 bool waitForExpectedEvents(int32_t propId, size_t expectedEvents,
108 const std::chrono::duration<Rep, Period>& timeout) {
109 std::unique_lock<std::mutex> uniqueLock(mLock);
110 return mEventCond.wait_for(uniqueLock, timeout, [this, propId, expectedEvents] {
111 ScopedLockAssertion lockAssertion(mLock);
112 return mEventsCount[propId] >= expectedEvents;
113 });
114 }
115
Yu Shan4569ef52022-03-18 14:34:25 -0700116 std::vector<int64_t> getEventTimestamps(int32_t propId) {
117 {
118 std::lock_guard<std::mutex> lockGuard(mLock);
119 return mEventTimestamps[propId];
120 }
121 }
122
Yu Shan726d51a2022-02-22 17:37:21 -0800123 void reset() {
124 std::lock_guard<std::mutex> lockGuard(mLock);
125 mEventsCount.clear();
126 }
127};
128
129class VtsHalAutomotiveVehicleTargetTest : public testing::TestWithParam<ServiceDescriptor> {
Yu Shanec5d5b02023-10-09 14:43:36 -0700130 protected:
Yu Shan0ebd8762023-10-11 11:31:04 -0700131 bool checkIsSupported(int32_t propertyId);
Yu Shanec5d5b02023-10-09 14:43:36 -0700132
Yu Shanead15a22024-01-24 16:14:21 -0800133 static bool isUnavailable(const VhalClientResult<std::unique_ptr<IHalPropValue>>& result);
134 static bool isResultOkayWithValue(
135 const VhalClientResult<std::unique_ptr<IHalPropValue>>& result, int32_t value);
136
Yu Shan726d51a2022-02-22 17:37:21 -0800137 public:
Aaqib Ismail20486702022-10-27 16:58:50 -0700138 void verifyProperty(VehicleProperty propId, VehiclePropertyAccess access,
139 VehiclePropertyChangeMode changeMode, VehiclePropertyGroup group,
140 VehicleArea area, VehiclePropertyType propertyType);
Yu Shan726d51a2022-02-22 17:37:21 -0800141 virtual void SetUp() override {
142 auto descriptor = GetParam();
143 if (descriptor.isAidlService) {
144 mVhalClient = IVhalClient::tryCreateAidlClient(descriptor.name.c_str());
145 } else {
146 mVhalClient = IVhalClient::tryCreateHidlClient(descriptor.name.c_str());
147 }
148
149 ASSERT_NE(mVhalClient, nullptr) << "Failed to connect to VHAL";
150
151 mCallback = std::make_shared<VtsVehicleCallback>();
152 }
153
154 static bool isBooleanGlobalProp(int32_t property) {
155 return (property & toInt(VehiclePropertyType::MASK)) ==
156 toInt(VehiclePropertyType::BOOLEAN) &&
157 (property & toInt(VehicleArea::MASK)) == toInt(VehicleArea::GLOBAL);
158 }
159
160 protected:
161 std::shared_ptr<IVhalClient> mVhalClient;
162 std::shared_ptr<VtsVehicleCallback> mCallback;
163};
164
165TEST_P(VtsHalAutomotiveVehicleTargetTest, useAidlBackend) {
166 if (!mVhalClient->isAidlVhal()) {
167 GTEST_SKIP() << "AIDL backend is not available, HIDL backend is used instead";
168 }
169}
170
171TEST_P(VtsHalAutomotiveVehicleTargetTest, useHidlBackend) {
172 if (mVhalClient->isAidlVhal()) {
173 GTEST_SKIP() << "AIDL backend is available, HIDL backend is not used";
174 }
175}
176
Yu Shanec5d5b02023-10-09 14:43:36 -0700177// Test getAllPropConfigs() returns at least 1 property configs.
Yu Shan726d51a2022-02-22 17:37:21 -0800178TEST_P(VtsHalAutomotiveVehicleTargetTest, getAllPropConfigs) {
179 ALOGD("VtsHalAutomotiveVehicleTargetTest::getAllPropConfigs");
180
181 auto result = mVhalClient->getAllPropConfigs();
182
183 ASSERT_TRUE(result.ok()) << "Failed to get all property configs, error: "
184 << result.error().message();
Yu Shanec5d5b02023-10-09 14:43:36 -0700185 ASSERT_GE(result.value().size(), 1u) << StringPrintf(
186 "Expect to get at least 1 property config, got %zu", result.value().size());
Yu Shan726d51a2022-02-22 17:37:21 -0800187}
188
Yu Shanec5d5b02023-10-09 14:43:36 -0700189// Test getPropConfigs() can query properties returned by getAllPropConfigs.
190TEST_P(VtsHalAutomotiveVehicleTargetTest, getPropConfigsWithValidProps) {
Yu Shan726d51a2022-02-22 17:37:21 -0800191 ALOGD("VtsHalAutomotiveVehicleTargetTest::getRequiredPropConfigs");
192
Yu Shanec5d5b02023-10-09 14:43:36 -0700193 std::vector<int32_t> properties;
194 auto result = mVhalClient->getAllPropConfigs();
Yu Shan726d51a2022-02-22 17:37:21 -0800195
Yu Shanec5d5b02023-10-09 14:43:36 -0700196 ASSERT_TRUE(result.ok()) << "Failed to get all property configs, error: "
197 << result.error().message();
198 for (const auto& cfgPtr : result.value()) {
199 properties.push_back(cfgPtr->getPropId());
200 }
201
202 result = mVhalClient->getPropConfigs(properties);
Yu Shan726d51a2022-02-22 17:37:21 -0800203
204 ASSERT_TRUE(result.ok()) << "Failed to get required property config, error: "
205 << result.error().message();
Yu Shanec5d5b02023-10-09 14:43:36 -0700206 ASSERT_EQ(result.value().size(), properties.size()) << StringPrintf(
207 "Expect to get exactly %zu configs, got %zu", properties.size(), result.value().size());
Yu Shan726d51a2022-02-22 17:37:21 -0800208}
209
210// Test getPropConfig() with an invalid propertyId returns an error code.
211TEST_P(VtsHalAutomotiveVehicleTargetTest, getPropConfigsWithInvalidProp) {
212 ALOGD("VtsHalAutomotiveVehicleTargetTest::getPropConfigsWithInvalidProp");
213
214 auto result = mVhalClient->getPropConfigs({kInvalidProp});
215
216 ASSERT_FALSE(result.ok()) << StringPrintf(
217 "Expect failure to get prop configs for invalid prop: %" PRId32, kInvalidProp);
218 ASSERT_NE(result.error().message(), "") << "Expect error message not to be empty";
219}
220
Yu Shanf3698fd2023-12-18 12:29:00 -0800221// Test system property IDs returned by getPropConfigs() are defined in the VHAL property interface.
222TEST_P(VtsHalAutomotiveVehicleTargetTest, testPropConfigs_onlyDefinedSystemPropertyIdsReturned) {
223 if (!mVhalClient->isAidlVhal()) {
224 GTEST_SKIP() << "Skip for HIDL VHAL because HAL interface run-time version is only"
225 << "introduced for AIDL";
226 }
227
228 auto result = mVhalClient->getAllPropConfigs();
229 ASSERT_TRUE(result.ok()) << "Failed to get all property configs, error: "
230 << result.error().message();
231
232 int32_t vhalVersion = mVhalClient->getRemoteInterfaceVersion();
233 const auto& configs = result.value();
234 for (size_t i = 0; i < configs.size(); i++) {
235 int32_t propId = configs[i]->getPropId();
236 if (!isSystemProp(propId)) {
237 continue;
238 }
239
240 std::string propName = propIdToString(propId);
241 auto it = VersionForVehicleProperty.find(static_cast<VehicleProperty>(propId));
242 bool found = (it != VersionForVehicleProperty.end());
243 EXPECT_TRUE(found) << "System Property: " << propName
244 << " is not defined in VHAL property interface";
245 if (!found) {
246 continue;
247 }
248 int32_t requiredVersion = it->second;
249 EXPECT_THAT(vhalVersion, Ge(requiredVersion))
250 << "System Property: " << propName << " requires VHAL version: " << requiredVersion
251 << ", but the current VHAL version"
252 << " is " << vhalVersion << ", must not be supported";
253 }
254}
255
Yu Shan726d51a2022-02-22 17:37:21 -0800256// Test get() return current value for properties.
257TEST_P(VtsHalAutomotiveVehicleTargetTest, get) {
258 ALOGD("VtsHalAutomotiveVehicleTargetTest::get");
259
260 int32_t propId = toInt(VehicleProperty::PERF_VEHICLE_SPEED);
Yu Shan0ebd8762023-10-11 11:31:04 -0700261 if (!checkIsSupported(propId)) {
262 GTEST_SKIP() << "Property: " << propId << " is not supported, skip the test";
263 }
Yu Shan726d51a2022-02-22 17:37:21 -0800264 auto result = mVhalClient->getValueSync(*mVhalClient->createHalPropValue(propId));
265
266 ASSERT_TRUE(result.ok()) << StringPrintf("Failed to get value for property: %" PRId32
267 ", error: %s",
268 propId, result.error().message().c_str());
269 ASSERT_NE(result.value(), nullptr) << "Result value must not be null";
270}
271
272// Test get() with an invalid propertyId return an error codes.
273TEST_P(VtsHalAutomotiveVehicleTargetTest, getInvalidProp) {
274 ALOGD("VtsHalAutomotiveVehicleTargetTest::getInvalidProp");
275
276 auto result = mVhalClient->getValueSync(*mVhalClient->createHalPropValue(kInvalidProp));
277
278 ASSERT_FALSE(result.ok()) << StringPrintf(
279 "Expect failure to get property for invalid prop: %" PRId32, kInvalidProp);
280}
281
Yu Shanead15a22024-01-24 16:14:21 -0800282bool VtsHalAutomotiveVehicleTargetTest::isResultOkayWithValue(
283 const VhalClientResult<std::unique_ptr<IHalPropValue>>& result, int32_t value) {
284 return result.ok() && result.value() != nullptr &&
285 result.value()->getStatus() == VehiclePropertyStatus::AVAILABLE &&
286 result.value()->getInt32Values().size() == 1 &&
287 result.value()->getInt32Values()[0] == value;
288}
289
290bool VtsHalAutomotiveVehicleTargetTest::isUnavailable(
291 const VhalClientResult<std::unique_ptr<IHalPropValue>>& result) {
Yu Shan97770cf2024-01-26 18:25:26 -0800292 if (!result.ok()) {
293 return result.error().code() == ErrorCode::NOT_AVAILABLE_FROM_VHAL;
Yu Shanead15a22024-01-24 16:14:21 -0800294 }
295 if (result.value() != nullptr &&
296 result.value()->getStatus() == VehiclePropertyStatus::UNAVAILABLE) {
297 return true;
298 }
299
300 return false;
301}
302
Yu Shan726d51a2022-02-22 17:37:21 -0800303// Test set() on read_write properties.
304TEST_P(VtsHalAutomotiveVehicleTargetTest, setProp) {
305 ALOGD("VtsHalAutomotiveVehicleTargetTest::setProp");
306
307 // skip hvac related properties
308 std::unordered_set<int32_t> hvacProps = {toInt(VehicleProperty::HVAC_DEFROSTER),
309 toInt(VehicleProperty::HVAC_AC_ON),
310 toInt(VehicleProperty::HVAC_MAX_AC_ON),
311 toInt(VehicleProperty::HVAC_MAX_DEFROST_ON),
312 toInt(VehicleProperty::HVAC_RECIRC_ON),
313 toInt(VehicleProperty::HVAC_DUAL_ON),
314 toInt(VehicleProperty::HVAC_AUTO_ON),
315 toInt(VehicleProperty::HVAC_POWER_ON),
316 toInt(VehicleProperty::HVAC_AUTO_RECIRC_ON),
317 toInt(VehicleProperty::HVAC_ELECTRIC_DEFROSTER_ON)};
318 auto result = mVhalClient->getAllPropConfigs();
319 ASSERT_TRUE(result.ok());
320
321 for (const auto& cfgPtr : result.value()) {
322 const IHalPropConfig& cfg = *cfgPtr;
323 int32_t propId = cfg.getPropId();
324 // test on boolean and writable property
325 if (cfg.getAccess() == toInt(VehiclePropertyAccess::READ_WRITE) &&
326 isBooleanGlobalProp(propId) && !hvacProps.count(propId)) {
327 auto propToGet = mVhalClient->createHalPropValue(propId);
328 auto getValueResult = mVhalClient->getValueSync(*propToGet);
329
Yu Shanead15a22024-01-24 16:14:21 -0800330 if (isUnavailable(getValueResult)) {
331 ALOGW("getProperty for %" PRId32
332 " returns NOT_AVAILABLE, "
333 "skip testing setProp",
334 propId);
335 return;
336 }
337
Yu Shan726d51a2022-02-22 17:37:21 -0800338 ASSERT_TRUE(getValueResult.ok())
339 << StringPrintf("Failed to get value for property: %" PRId32 ", error: %s",
340 propId, getValueResult.error().message().c_str());
341 ASSERT_NE(getValueResult.value(), nullptr)
342 << StringPrintf("Result value must not be null for property: %" PRId32, propId);
343
344 const IHalPropValue& value = *getValueResult.value();
345 size_t intValueSize = value.getInt32Values().size();
346 ASSERT_EQ(intValueSize, 1u) << StringPrintf(
347 "Expect exactly 1 int value for boolean property: %" PRId32 ", got %zu", propId,
348 intValueSize);
349
Yu Shanead15a22024-01-24 16:14:21 -0800350 int32_t setValue = value.getInt32Values()[0] == 1 ? 0 : 1;
Yu Shan726d51a2022-02-22 17:37:21 -0800351 auto propToSet = mVhalClient->createHalPropValue(propId);
352 propToSet->setInt32Values({setValue});
353 auto setValueResult = mVhalClient->setValueSync(*propToSet);
354
Yu Shanead15a22024-01-24 16:14:21 -0800355 if (!setValueResult.ok() &&
356 setValueResult.error().code() == ErrorCode::NOT_AVAILABLE_FROM_VHAL) {
357 ALOGW("setProperty for %" PRId32
358 " returns NOT_AVAILABLE, "
359 "skip verifying getProperty returns the same value",
360 propId);
361 return;
362 }
363
Yu Shan726d51a2022-02-22 17:37:21 -0800364 ASSERT_TRUE(setValueResult.ok())
365 << StringPrintf("Failed to set value for property: %" PRId32 ", error: %s",
366 propId, setValueResult.error().message().c_str());
Yu Shanead15a22024-01-24 16:14:21 -0800367 // Retry getting the value until we pass the timeout. getValue might not return
368 // the expected value immediately since setValue is async.
369 auto timeoutMillis = uptimeMillis() + kRetryGetPropAfterSetPropTimeoutMillis;
Yu Shan726d51a2022-02-22 17:37:21 -0800370
Yu Shanead15a22024-01-24 16:14:21 -0800371 while (true) {
372 getValueResult = mVhalClient->getValueSync(*propToGet);
373 if (isResultOkayWithValue(getValueResult, setValue)) {
374 break;
375 }
376 if (uptimeMillis() >= timeoutMillis) {
377 // Reach timeout, the following assert should fail.
378 break;
379 }
380 // Sleep for 100ms between each getValueSync retry.
381 std::this_thread::sleep_for(std::chrono::milliseconds(100));
382 }
383
384 if (isUnavailable(getValueResult)) {
385 ALOGW("getProperty for %" PRId32
386 " returns NOT_AVAILABLE, "
387 "skip verifying the return value",
388 propId);
389 return;
390 }
391
Yu Shan726d51a2022-02-22 17:37:21 -0800392 ASSERT_TRUE(getValueResult.ok())
393 << StringPrintf("Failed to get value for property: %" PRId32 ", error: %s",
394 propId, getValueResult.error().message().c_str());
395 ASSERT_NE(getValueResult.value(), nullptr)
396 << StringPrintf("Result value must not be null for property: %" PRId32, propId);
397 ASSERT_EQ(getValueResult.value()->getInt32Values(), std::vector<int32_t>({setValue}))
398 << StringPrintf("Boolean value not updated after set for property: %" PRId32,
399 propId);
400 }
401 }
402}
403
404// Test set() on an read_only property.
405TEST_P(VtsHalAutomotiveVehicleTargetTest, setNotWritableProp) {
406 ALOGD("VtsHalAutomotiveVehicleTargetTest::setNotWritableProp");
407
408 int32_t propId = toInt(VehicleProperty::PERF_VEHICLE_SPEED);
Yu Shan0ebd8762023-10-11 11:31:04 -0700409 if (!checkIsSupported(propId)) {
410 GTEST_SKIP() << "Property: " << propId << " is not supported, skip the test";
411 }
Yu Shanec5d5b02023-10-09 14:43:36 -0700412
Yu Shan726d51a2022-02-22 17:37:21 -0800413 auto getValueResult = mVhalClient->getValueSync(*mVhalClient->createHalPropValue(propId));
414 ASSERT_TRUE(getValueResult.ok())
415 << StringPrintf("Failed to get value for property: %" PRId32 ", error: %s", propId,
416 getValueResult.error().message().c_str());
417
418 auto setValueResult = mVhalClient->setValueSync(*getValueResult.value());
419
420 ASSERT_FALSE(setValueResult.ok()) << "Expect set a read-only value to fail";
Chen Chengfaf9adc2022-06-22 23:09:09 +0000421 ASSERT_EQ(setValueResult.error().code(), ErrorCode::ACCESS_DENIED_FROM_VHAL);
Yu Shan726d51a2022-02-22 17:37:21 -0800422}
423
shrikar8a140232023-03-07 16:57:59 +0000424// Test get(), set() and getAllPropConfigs() on VehicleProperty::INVALID.
425TEST_P(VtsHalAutomotiveVehicleTargetTest, getSetPropertyIdInvalid) {
426 ALOGD("VtsHalAutomotiveVehicleTargetTest::getSetPropertyIdInvalid");
427
428 int32_t propId = toInt(VehicleProperty::INVALID);
429 auto getValueResult = mVhalClient->getValueSync(*mVhalClient->createHalPropValue(propId));
430 ASSERT_FALSE(getValueResult.ok()) << "Expect get on VehicleProperty::INVALID to fail";
431 ASSERT_EQ(getValueResult.error().code(), ErrorCode::INVALID_ARG);
432
433 auto propToSet = mVhalClient->createHalPropValue(propId);
434 propToSet->setInt32Values({0});
435 auto setValueResult = mVhalClient->setValueSync(*propToSet);
436 ASSERT_FALSE(setValueResult.ok()) << "Expect set on VehicleProperty::INVALID to fail";
437 ASSERT_EQ(setValueResult.error().code(), ErrorCode::INVALID_ARG);
438
439 auto result = mVhalClient->getAllPropConfigs();
440 ASSERT_TRUE(result.ok());
441 for (const auto& cfgPtr : result.value()) {
442 const IHalPropConfig& cfg = *cfgPtr;
443 ASSERT_FALSE(cfg.getPropId() == propId) << "Expect VehicleProperty::INVALID to not be "
444 "included in propConfigs";
445 }
446}
447
Yu Shan726d51a2022-02-22 17:37:21 -0800448// Test subscribe() and unsubscribe().
449TEST_P(VtsHalAutomotiveVehicleTargetTest, subscribeAndUnsubscribe) {
450 ALOGD("VtsHalAutomotiveVehicleTargetTest::subscribeAndUnsubscribe");
451
452 int32_t propId = toInt(VehicleProperty::PERF_VEHICLE_SPEED);
Yu Shan0ebd8762023-10-11 11:31:04 -0700453 if (!checkIsSupported(propId)) {
454 GTEST_SKIP() << "Property: " << propId << " is not supported, skip the test";
455 }
Yu Shan726d51a2022-02-22 17:37:21 -0800456
Yu Shan4569ef52022-03-18 14:34:25 -0700457 auto propConfigsResult = mVhalClient->getPropConfigs({propId});
458
459 ASSERT_TRUE(propConfigsResult.ok()) << "Failed to get property config for PERF_VEHICLE_SPEED: "
460 << "error: " << propConfigsResult.error().message();
461 ASSERT_EQ(propConfigsResult.value().size(), 1u)
462 << "Expect to return 1 config for PERF_VEHICLE_SPEED";
463 auto& propConfig = propConfigsResult.value()[0];
464 float minSampleRate = propConfig->getMinSampleRate();
465 float maxSampleRate = propConfig->getMaxSampleRate();
466
467 if (minSampleRate < 1) {
468 GTEST_SKIP() << "Sample rate for vehicle speed < 1 times/sec, skip test since it would "
469 "take too long";
470 }
Yu Shan726d51a2022-02-22 17:37:21 -0800471
472 auto client = mVhalClient->getSubscriptionClient(mCallback);
473 ASSERT_NE(client, nullptr) << "Failed to get subscription client";
474
Yu Shan4569ef52022-03-18 14:34:25 -0700475 auto result = client->subscribe({{.propId = propId, .sampleRate = minSampleRate}});
Yu Shan726d51a2022-02-22 17:37:21 -0800476
477 ASSERT_TRUE(result.ok()) << StringPrintf("Failed to subscribe to property: %" PRId32
478 ", error: %s",
479 propId, result.error().message().c_str());
Yu Shan4569ef52022-03-18 14:34:25 -0700480
481 if (mVhalClient->isAidlVhal()) {
482 // Skip checking timestamp for HIDL because the behavior for sample rate and timestamp is
483 // only specified clearly for AIDL.
484
485 // Timeout is 2 seconds, which gives a 1 second buffer.
486 ASSERT_TRUE(mCallback->waitForExpectedEvents(propId, std::floor(minSampleRate),
487 std::chrono::seconds(2)))
488 << "Didn't get enough events for subscribing to minSampleRate";
489 }
490
491 result = client->subscribe({{.propId = propId, .sampleRate = maxSampleRate}});
492
493 ASSERT_TRUE(result.ok()) << StringPrintf("Failed to subscribe to property: %" PRId32
494 ", error: %s",
495 propId, result.error().message().c_str());
496
497 if (mVhalClient->isAidlVhal()) {
498 ASSERT_TRUE(mCallback->waitForExpectedEvents(propId, std::floor(maxSampleRate),
499 std::chrono::seconds(2)))
500 << "Didn't get enough events for subscribing to maxSampleRate";
501
502 std::unordered_set<int64_t> timestamps;
503 // Event event should have a different timestamp.
504 for (const int64_t& eventTimestamp : mCallback->getEventTimestamps(propId)) {
505 ASSERT_TRUE(timestamps.find(eventTimestamp) == timestamps.end())
506 << "two events for the same property must not have the same timestamp";
507 timestamps.insert(eventTimestamp);
508 }
509 }
Yu Shan726d51a2022-02-22 17:37:21 -0800510
511 result = client->unsubscribe({propId});
512 ASSERT_TRUE(result.ok()) << StringPrintf("Failed to unsubscribe to property: %" PRId32
513 ", error: %s",
514 propId, result.error().message().c_str());
515
516 mCallback->reset();
517 ASSERT_FALSE(mCallback->waitForExpectedEvents(propId, 10, std::chrono::seconds(1)))
518 << "Expect not to get events after unsubscription";
519}
520
521// Test subscribe() with an invalid property.
522TEST_P(VtsHalAutomotiveVehicleTargetTest, subscribeInvalidProp) {
523 ALOGD("VtsHalAutomotiveVehicleTargetTest::subscribeInvalidProp");
524
525 std::vector<SubscribeOptions> options = {
526 SubscribeOptions{.propId = kInvalidProp, .sampleRate = 10.0}};
527
528 auto client = mVhalClient->getSubscriptionClient(mCallback);
529 ASSERT_NE(client, nullptr) << "Failed to get subscription client";
530
531 auto result = client->subscribe(options);
532
533 ASSERT_FALSE(result.ok()) << StringPrintf("Expect subscribing to property: %" PRId32 " to fail",
534 kInvalidProp);
535}
536
Yu Shan4569ef52022-03-18 14:34:25 -0700537// Test the timestamp returned in GetValues results is the timestamp when the value is retrieved.
538TEST_P(VtsHalAutomotiveVehicleTargetTest, testGetValuesTimestampAIDL) {
539 if (!mVhalClient->isAidlVhal()) {
540 GTEST_SKIP() << "Skip checking timestamp for HIDL because the behavior is only specified "
541 "for AIDL";
542 }
543
544 int32_t propId = toInt(VehicleProperty::PARKING_BRAKE_ON);
Yu Shan0ebd8762023-10-11 11:31:04 -0700545 if (!checkIsSupported(propId)) {
546 GTEST_SKIP() << "Property: " << propId << " is not supported, skip the test";
547 }
Yu Shan4569ef52022-03-18 14:34:25 -0700548 auto prop = mVhalClient->createHalPropValue(propId);
549
550 auto result = mVhalClient->getValueSync(*prop);
551
552 ASSERT_TRUE(result.ok()) << StringPrintf("Failed to get value for property: %" PRId32
553 ", error: %s",
554 propId, result.error().message().c_str());
555 ASSERT_NE(result.value(), nullptr) << "Result value must not be null";
556 ASSERT_EQ(result.value()->getInt32Values().size(), 1u) << "Result must contain 1 int value";
557
558 bool parkBrakeOnValue1 = (result.value()->getInt32Values()[0] == 1);
559 int64_t timestampValue1 = result.value()->getTimestamp();
560
561 result = mVhalClient->getValueSync(*prop);
562
563 ASSERT_TRUE(result.ok()) << StringPrintf("Failed to get value for property: %" PRId32
564 ", error: %s",
565 propId, result.error().message().c_str());
566 ASSERT_NE(result.value(), nullptr) << "Result value must not be null";
567 ASSERT_EQ(result.value()->getInt32Values().size(), 1u) << "Result must contain 1 int value";
568
569 bool parkBarkeOnValue2 = (result.value()->getInt32Values()[0] == 1);
570 int64_t timestampValue2 = result.value()->getTimestamp();
571
572 if (parkBarkeOnValue2 == parkBrakeOnValue1) {
573 ASSERT_EQ(timestampValue2, timestampValue1)
574 << "getValue result must contain a timestamp updated when the value was updated, if"
575 "the value does not change, expect the same timestamp";
576 } else {
577 ASSERT_GT(timestampValue2, timestampValue1)
578 << "getValue result must contain a timestamp updated when the value was updated, if"
579 "the value changes, expect the newer value has a larger timestamp";
580 }
581}
582
Aaqib Ismail20486702022-10-27 16:58:50 -0700583// Helper function to compare actual vs expected property config
584void VtsHalAutomotiveVehicleTargetTest::verifyProperty(VehicleProperty propId,
585 VehiclePropertyAccess access,
586 VehiclePropertyChangeMode changeMode,
587 VehiclePropertyGroup group, VehicleArea area,
588 VehiclePropertyType propertyType) {
589 int expectedPropId = toInt(propId);
590 int expectedAccess = toInt(access);
591 int expectedChangeMode = toInt(changeMode);
592 int expectedGroup = toInt(group);
593 int expectedArea = toInt(area);
594 int expectedPropertyType = toInt(propertyType);
595
Eva Chen17bc5782023-01-06 22:59:58 -0800596 auto result = mVhalClient->getAllPropConfigs();
597 ASSERT_TRUE(result.ok()) << "Failed to get all property configs, error: "
598 << result.error().message();
599
600 // Check if property is implemented by getting all configs and looking to see if the expected
601 // property id is in that list.
602 bool isExpectedPropIdImplemented = false;
603 for (const auto& cfgPtr : result.value()) {
604 const IHalPropConfig& cfg = *cfgPtr;
605 if (expectedPropId == cfg.getPropId()) {
606 isExpectedPropIdImplemented = true;
607 break;
608 }
609 }
610
611 if (!isExpectedPropIdImplemented) {
612 GTEST_SKIP() << StringPrintf("Property %" PRId32 " has not been implemented",
613 expectedPropId);
614 }
615
616 result = mVhalClient->getPropConfigs({expectedPropId});
Aaqib Ismail20486702022-10-27 16:58:50 -0700617 ASSERT_TRUE(result.ok()) << "Failed to get required property config, error: "
618 << result.error().message();
619
Aaqib Ismail20486702022-10-27 16:58:50 -0700620 ASSERT_EQ(result.value().size(), 1u)
621 << StringPrintf("Expect to get exactly 1 config, got %zu", result.value().size());
622
623 const auto& config = result.value().at(0);
624 int actualPropId = config->getPropId();
625 int actualAccess = config->getAccess();
626 int actualChangeMode = config->getChangeMode();
627 int actualGroup = actualPropId & toInt(VehiclePropertyGroup::MASK);
628 int actualArea = actualPropId & toInt(VehicleArea::MASK);
629 int actualPropertyType = actualPropId & toInt(VehiclePropertyType::MASK);
630
631 ASSERT_EQ(actualPropId, expectedPropId)
632 << StringPrintf("Expect to get property ID: %i, got %i", expectedPropId, actualPropId);
633
634 if (expectedAccess == toInt(VehiclePropertyAccess::READ_WRITE)) {
635 ASSERT_TRUE(actualAccess == expectedAccess ||
636 actualAccess == toInt(VehiclePropertyAccess::READ))
637 << StringPrintf("Expect to get VehiclePropertyAccess: %i or %i, got %i",
638 expectedAccess, toInt(VehiclePropertyAccess::READ), actualAccess);
639 } else {
640 ASSERT_EQ(actualAccess, expectedAccess) << StringPrintf(
641 "Expect to get VehiclePropertyAccess: %i, got %i", expectedAccess, actualAccess);
642 }
643
644 ASSERT_EQ(actualChangeMode, expectedChangeMode)
645 << StringPrintf("Expect to get VehiclePropertyChangeMode: %i, got %i",
646 expectedChangeMode, actualChangeMode);
647 ASSERT_EQ(actualGroup, expectedGroup) << StringPrintf(
648 "Expect to get VehiclePropertyGroup: %i, got %i", expectedGroup, actualGroup);
649 ASSERT_EQ(actualArea, expectedArea)
650 << StringPrintf("Expect to get VehicleArea: %i, got %i", expectedArea, actualArea);
651 ASSERT_EQ(actualPropertyType, expectedPropertyType)
652 << StringPrintf("Expect to get VehiclePropertyType: %i, got %i", expectedPropertyType,
653 actualPropertyType);
654}
655
shrikar34563642023-02-14 02:57:17 +0000656TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyLocationCharacterizationConfig) {
657 verifyProperty(VehicleProperty::LOCATION_CHARACTERIZATION, VehiclePropertyAccess::READ,
658 VehiclePropertyChangeMode::STATIC, VehiclePropertyGroup::SYSTEM,
659 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
660}
661
Eva Chen544b24b2023-12-05 00:13:53 -0800662TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyUltrasonicsSensorPositionConfig) {
663 verifyProperty(VehicleProperty::ULTRASONICS_SENSOR_POSITION, VehiclePropertyAccess::READ,
664 VehiclePropertyChangeMode::STATIC, VehiclePropertyGroup::SYSTEM,
665 VehicleArea::VENDOR, VehiclePropertyType::INT32_VEC);
666}
667
Eva Chen9e226e52023-12-06 00:23:18 -0800668TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyUltrasonicsSensorOrientationConfig) {
669 verifyProperty(VehicleProperty::ULTRASONICS_SENSOR_ORIENTATION, VehiclePropertyAccess::READ,
670 VehiclePropertyChangeMode::STATIC, VehiclePropertyGroup::SYSTEM,
Eva Chen8818f192024-01-25 18:21:43 -0800671 VehicleArea::VENDOR, VehiclePropertyType::FLOAT_VEC);
Eva Chen9e226e52023-12-06 00:23:18 -0800672}
673
Eva Chen727aa3f2023-12-06 01:13:29 -0800674TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyUltrasonicsSensorFieldOfViewConfig) {
675 verifyProperty(VehicleProperty::ULTRASONICS_SENSOR_FIELD_OF_VIEW, VehiclePropertyAccess::READ,
676 VehiclePropertyChangeMode::STATIC, VehiclePropertyGroup::SYSTEM,
677 VehicleArea::VENDOR, VehiclePropertyType::INT32_VEC);
678}
679
Eva Chen968bf442023-12-06 01:21:51 -0800680TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyUltrasonicsSensorDetectionRangeConfig) {
681 verifyProperty(VehicleProperty::ULTRASONICS_SENSOR_DETECTION_RANGE, VehiclePropertyAccess::READ,
682 VehiclePropertyChangeMode::STATIC, VehiclePropertyGroup::SYSTEM,
683 VehicleArea::VENDOR, VehiclePropertyType::INT32_VEC);
684}
685
Eva Chendf05df52023-12-06 01:42:55 -0800686TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyUltrasonicsSensorSupportedRangesConfig) {
687 verifyProperty(VehicleProperty::ULTRASONICS_SENSOR_SUPPORTED_RANGES,
688 VehiclePropertyAccess::READ, VehiclePropertyChangeMode::STATIC,
689 VehiclePropertyGroup::SYSTEM, VehicleArea::VENDOR,
690 VehiclePropertyType::INT32_VEC);
691}
692
Eva Chen75661732023-12-06 01:51:40 -0800693TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyUltrasonicsSensorMeasuredDistanceConfig) {
694 verifyProperty(VehicleProperty::ULTRASONICS_SENSOR_MEASURED_DISTANCE,
695 VehiclePropertyAccess::READ, VehiclePropertyChangeMode::CONTINUOUS,
696 VehiclePropertyGroup::SYSTEM, VehicleArea::VENDOR,
697 VehiclePropertyType::INT32_VEC);
698}
699
shrikar668df362022-12-20 22:08:17 +0000700TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyEmergencyLaneKeepAssistEnabledConfig) {
701 verifyProperty(VehicleProperty::EMERGENCY_LANE_KEEP_ASSIST_ENABLED,
702 VehiclePropertyAccess::READ_WRITE, VehiclePropertyChangeMode::ON_CHANGE,
703 VehiclePropertyGroup::SYSTEM, VehicleArea::GLOBAL, VehiclePropertyType::BOOLEAN);
704}
705
shrikar80cc0c52023-01-30 16:56:53 +0000706TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyEmergencyLaneKeepAssistStateConfig) {
707 verifyProperty(VehicleProperty::EMERGENCY_LANE_KEEP_ASSIST_STATE, VehiclePropertyAccess::READ,
708 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
709 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
710}
711
shrikar5d1b8162023-01-25 19:31:23 +0000712TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyCruiseControlEnabledConfig) {
713 verifyProperty(VehicleProperty::CRUISE_CONTROL_ENABLED, VehiclePropertyAccess::READ_WRITE,
714 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
715 VehicleArea::GLOBAL, VehiclePropertyType::BOOLEAN);
shrikar808a2942022-12-21 17:07:32 +0000716}
717
shrikard440ed42023-01-31 00:25:14 +0000718TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyCruiseControlTypeConfig) {
719 verifyProperty(VehicleProperty::CRUISE_CONTROL_TYPE, VehiclePropertyAccess::READ_WRITE,
720 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
721 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
722}
723
shrikar2753b9e2023-01-31 00:25:14 +0000724TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyCruiseControlStateConfig) {
725 verifyProperty(VehicleProperty::CRUISE_CONTROL_STATE, VehiclePropertyAccess::READ,
726 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
727 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
728}
729
shrikar5df0f952023-02-02 00:15:39 +0000730TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyCruiseControlCommandConfig) {
731 verifyProperty(VehicleProperty::CRUISE_CONTROL_COMMAND, VehiclePropertyAccess::WRITE,
732 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
733 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
734}
735
shrikarfde8c242023-02-02 01:10:33 +0000736TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyCruiseControlTargetSpeedConfig) {
737 verifyProperty(VehicleProperty::CRUISE_CONTROL_TARGET_SPEED, VehiclePropertyAccess::READ,
738 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
739 VehicleArea::GLOBAL, VehiclePropertyType::FLOAT);
740}
741
shrikarb9661d32023-02-02 19:22:50 +0000742TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyAdaptiveCruiseControlTargetTimeGapConfig) {
743 verifyProperty(VehicleProperty::ADAPTIVE_CRUISE_CONTROL_TARGET_TIME_GAP,
744 VehiclePropertyAccess::READ_WRITE, VehiclePropertyChangeMode::ON_CHANGE,
745 VehiclePropertyGroup::SYSTEM, VehicleArea::GLOBAL, VehiclePropertyType::INT32);
746}
747
shrikarf62d7472023-02-03 00:20:04 +0000748TEST_P(VtsHalAutomotiveVehicleTargetTest,
749 verifyAdaptiveCruiseControlLeadVehicleMeasuredDistanceConfig) {
750 verifyProperty(VehicleProperty::ADAPTIVE_CRUISE_CONTROL_LEAD_VEHICLE_MEASURED_DISTANCE,
751 VehiclePropertyAccess::READ, VehiclePropertyChangeMode::CONTINUOUS,
752 VehiclePropertyGroup::SYSTEM, VehicleArea::GLOBAL, VehiclePropertyType::INT32);
753}
754
shrikar37833e12022-12-15 20:13:14 +0000755TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyHandsOnDetectionEnabledConfig) {
756 verifyProperty(VehicleProperty::HANDS_ON_DETECTION_ENABLED, VehiclePropertyAccess::READ_WRITE,
757 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
758 VehicleArea::GLOBAL, VehiclePropertyType::BOOLEAN);
759}
760
shrikar6d88bf52023-01-17 17:04:21 +0000761TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyHandsOnDetectionDriverStateConfig) {
762 verifyProperty(VehicleProperty::HANDS_ON_DETECTION_DRIVER_STATE, VehiclePropertyAccess::READ,
763 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
764 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
765}
766
shrikara6785992023-01-18 23:07:06 +0000767TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyHandsOnDetectionWarningConfig) {
768 verifyProperty(VehicleProperty::HANDS_ON_DETECTION_WARNING, VehiclePropertyAccess::READ,
769 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
770 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
771}
772
Eva Chenbbb7b6d2023-11-21 00:07:14 -0800773TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyDriverDrowsinessAttentionSystemEnabledConfig) {
774 verifyProperty(VehicleProperty::DRIVER_DROWSINESS_ATTENTION_SYSTEM_ENABLED,
775 VehiclePropertyAccess::READ_WRITE, VehiclePropertyChangeMode::ON_CHANGE,
776 VehiclePropertyGroup::SYSTEM, VehicleArea::GLOBAL, VehiclePropertyType::BOOLEAN);
777}
778
Eva Chen9f1d8c02023-11-28 16:50:14 -0800779TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyDriverDrowsinessAttentionStateConfig) {
780 verifyProperty(VehicleProperty::DRIVER_DROWSINESS_ATTENTION_STATE, VehiclePropertyAccess::READ,
781 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
782 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
783}
784
Eva Chen6ec790b2023-12-01 23:37:29 -0800785TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyDriverDrowsinessAttentionWarningEnabledConfig) {
786 verifyProperty(VehicleProperty::DRIVER_DROWSINESS_ATTENTION_WARNING_ENABLED,
787 VehiclePropertyAccess::READ_WRITE, VehiclePropertyChangeMode::ON_CHANGE,
788 VehiclePropertyGroup::SYSTEM, VehicleArea::GLOBAL, VehiclePropertyType::BOOLEAN);
789}
790
Eva Chen05c548c2023-12-02 01:20:10 -0800791TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyDriverDrowsinessAttentionWarningConfig) {
792 verifyProperty(VehicleProperty::DRIVER_DROWSINESS_ATTENTION_WARNING,
793 VehiclePropertyAccess::READ, VehiclePropertyChangeMode::ON_CHANGE,
794 VehiclePropertyGroup::SYSTEM, VehicleArea::GLOBAL, VehiclePropertyType::INT32);
795}
796
Eva Chen51770b02023-12-02 15:27:31 -0800797TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyDriverDistractionSystemEnabledConfig) {
798 verifyProperty(VehicleProperty::DRIVER_DISTRACTION_SYSTEM_ENABLED,
799 VehiclePropertyAccess::READ_WRITE, VehiclePropertyChangeMode::ON_CHANGE,
800 VehiclePropertyGroup::SYSTEM, VehicleArea::GLOBAL, VehiclePropertyType::BOOLEAN);
801}
802
Eva Chena342b722023-12-04 00:40:45 -0800803TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyDriverDistractionStateConfig) {
804 verifyProperty(VehicleProperty::DRIVER_DISTRACTION_STATE, VehiclePropertyAccess::READ,
805 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
806 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
807}
808
Eva Chenc62166e2023-12-04 02:17:36 -0800809TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyDriverDistractionWarningEnabledConfig) {
810 verifyProperty(VehicleProperty::DRIVER_DISTRACTION_WARNING_ENABLED,
811 VehiclePropertyAccess::READ_WRITE, VehiclePropertyChangeMode::ON_CHANGE,
812 VehiclePropertyGroup::SYSTEM, VehicleArea::GLOBAL, VehiclePropertyType::BOOLEAN);
813}
814
Eva Chen9a0925e2023-12-04 03:52:23 -0800815TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyDriverDistractionWarningConfig) {
816 verifyProperty(VehicleProperty::DRIVER_DISTRACTION_WARNING, VehiclePropertyAccess::READ,
817 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
818 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
819}
820
Aaqib Ismailc69e9682022-11-22 12:50:00 -0800821TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyEvBrakeRegenerationLevelConfig) {
822 verifyProperty(VehicleProperty::EV_BRAKE_REGENERATION_LEVEL,
823 VehiclePropertyAccess::READ_WRITE, VehiclePropertyChangeMode::ON_CHANGE,
824 VehiclePropertyGroup::SYSTEM, VehicleArea::GLOBAL, VehiclePropertyType::INT32);
825}
826
shrikar2dae80f2022-12-21 23:50:17 +0000827TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyEvStoppingModeConfig) {
828 verifyProperty(VehicleProperty::EV_STOPPING_MODE, VehiclePropertyAccess::READ_WRITE,
829 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
830 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
831}
832
Aaqib Ismailaec678a2022-12-07 16:22:42 -0800833TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyEvCurrentBatteryCapacityConfig) {
834 verifyProperty(VehicleProperty::EV_CURRENT_BATTERY_CAPACITY, VehiclePropertyAccess::READ,
835 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
836 VehicleArea::GLOBAL, VehiclePropertyType::FLOAT);
837}
838
shrikar83914472022-12-16 20:28:47 +0000839TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyEngineIdleAutoStopEnabledConfig) {
840 verifyProperty(VehicleProperty::ENGINE_IDLE_AUTO_STOP_ENABLED,
841 VehiclePropertyAccess::READ_WRITE, VehiclePropertyChangeMode::ON_CHANGE,
842 VehiclePropertyGroup::SYSTEM, VehicleArea::GLOBAL, VehiclePropertyType::BOOLEAN);
843}
844
Aaqib Ismail20486702022-10-27 16:58:50 -0700845TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyDoorChildLockEnabledConfig) {
846 verifyProperty(VehicleProperty::DOOR_CHILD_LOCK_ENABLED, VehiclePropertyAccess::READ_WRITE,
847 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
848 VehicleArea::DOOR, VehiclePropertyType::BOOLEAN);
849}
850
Aaqib Ismail63d52d12023-01-30 12:35:10 -0800851TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyWindshieldWipersPeriodConfig) {
852 verifyProperty(VehicleProperty::WINDSHIELD_WIPERS_PERIOD, VehiclePropertyAccess::READ,
853 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
854 VehicleArea::WINDOW, VehiclePropertyType::INT32);
855}
856
Aaqib Ismail732a1d72023-01-31 10:25:45 -0800857TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyWindshieldWipersStateConfig) {
858 verifyProperty(VehicleProperty::WINDSHIELD_WIPERS_STATE, VehiclePropertyAccess::READ,
859 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
860 VehicleArea::WINDOW, VehiclePropertyType::INT32);
861}
862
Aaqib Ismailc37a2112023-02-02 11:30:08 -0800863TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyWindshieldWipersSwitchConfig) {
864 verifyProperty(VehicleProperty::WINDSHIELD_WIPERS_SWITCH, VehiclePropertyAccess::READ_WRITE,
865 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
866 VehicleArea::WINDOW, VehiclePropertyType::INT32);
867}
868
Aaqib Ismail7f941b42022-11-04 14:55:13 -0700869TEST_P(VtsHalAutomotiveVehicleTargetTest, verifySteeringWheelDepthPosConfig) {
870 verifyProperty(VehicleProperty::STEERING_WHEEL_DEPTH_POS, VehiclePropertyAccess::READ_WRITE,
871 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
872 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
873}
874
Aaqib Ismail34fe92f2022-11-04 21:41:23 -0700875TEST_P(VtsHalAutomotiveVehicleTargetTest, verifySteeringWheelDepthMoveConfig) {
876 verifyProperty(VehicleProperty::STEERING_WHEEL_DEPTH_MOVE, VehiclePropertyAccess::READ_WRITE,
877 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
878 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
879}
880
Aaqib Ismail53b81c92022-11-07 17:47:04 -0800881TEST_P(VtsHalAutomotiveVehicleTargetTest, verifySteeringWheelHeightPosConfig) {
882 verifyProperty(VehicleProperty::STEERING_WHEEL_HEIGHT_POS, VehiclePropertyAccess::READ_WRITE,
883 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
884 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
885}
886
Aaqib Ismail6c4bf192022-11-08 15:00:32 -0800887TEST_P(VtsHalAutomotiveVehicleTargetTest, verifySteeringWheelHeightMoveConfig) {
888 verifyProperty(VehicleProperty::STEERING_WHEEL_HEIGHT_MOVE, VehiclePropertyAccess::READ_WRITE,
889 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
890 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
891}
892
Aaqib Ismail8d051182022-11-09 13:28:48 -0800893TEST_P(VtsHalAutomotiveVehicleTargetTest, verifySteeringWheelTheftLockEnabledConfig) {
894 verifyProperty(VehicleProperty::STEERING_WHEEL_THEFT_LOCK_ENABLED,
895 VehiclePropertyAccess::READ_WRITE, VehiclePropertyChangeMode::ON_CHANGE,
896 VehiclePropertyGroup::SYSTEM, VehicleArea::GLOBAL, VehiclePropertyType::BOOLEAN);
897}
898
Aaqib Ismail68d3f122022-11-09 14:43:32 -0800899TEST_P(VtsHalAutomotiveVehicleTargetTest, verifySteeringWheelLockedConfig) {
900 verifyProperty(VehicleProperty::STEERING_WHEEL_LOCKED, VehiclePropertyAccess::READ_WRITE,
901 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
902 VehicleArea::GLOBAL, VehiclePropertyType::BOOLEAN);
903}
904
Aaqib Ismaild4d6adf2022-11-09 16:59:47 -0800905TEST_P(VtsHalAutomotiveVehicleTargetTest, verifySteeringWheelEasyAccessEnabledConfig) {
906 verifyProperty(VehicleProperty::STEERING_WHEEL_EASY_ACCESS_ENABLED,
907 VehiclePropertyAccess::READ_WRITE, VehiclePropertyChangeMode::ON_CHANGE,
908 VehiclePropertyGroup::SYSTEM, VehicleArea::GLOBAL, VehiclePropertyType::BOOLEAN);
909}
910
Aaqib Ismail0dc7ba02022-11-10 14:28:09 -0800911TEST_P(VtsHalAutomotiveVehicleTargetTest, verifySteeringWheelLightsStateConfig) {
912 verifyProperty(VehicleProperty::STEERING_WHEEL_LIGHTS_STATE, VehiclePropertyAccess::READ,
913 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
914 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
915}
916
Aaqib Ismail4b8688f2022-11-15 15:13:35 -0800917TEST_P(VtsHalAutomotiveVehicleTargetTest, verifySteeringWheelLightsSwitchConfig) {
918 verifyProperty(VehicleProperty::STEERING_WHEEL_LIGHTS_SWITCH, VehiclePropertyAccess::READ_WRITE,
919 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
920 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
921}
922
Arati Gerdesd86c7fd2022-12-19 12:32:29 -0800923TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyGloveBoxDoorPosConfig) {
924 verifyProperty(VehicleProperty::GLOVE_BOX_DOOR_POS, VehiclePropertyAccess::READ_WRITE,
925 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
926 VehicleArea::SEAT, VehiclePropertyType::INT32);
927}
928
Aaqib Ismail57be4032023-02-02 14:15:03 -0800929TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyGloveBoxLockedConfig) {
930 verifyProperty(VehicleProperty::GLOVE_BOX_LOCKED, VehiclePropertyAccess::READ_WRITE,
931 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
932 VehicleArea::SEAT, VehiclePropertyType::BOOLEAN);
933}
934
shrikara1367212022-11-02 16:07:35 +0000935TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyMirrorAutoFoldEnabledConfig) {
936 verifyProperty(VehicleProperty::MIRROR_AUTO_FOLD_ENABLED, VehiclePropertyAccess::READ_WRITE,
937 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
938 VehicleArea::MIRROR, VehiclePropertyType::BOOLEAN);
939}
940
941TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyMirrorAutoTiltEnabledConfig) {
942 verifyProperty(VehicleProperty::MIRROR_AUTO_TILT_ENABLED, VehiclePropertyAccess::READ_WRITE,
943 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
944 VehicleArea::MIRROR, VehiclePropertyType::BOOLEAN);
945}
946
Aaqib Ismail4e6144c2022-12-15 15:32:18 -0800947TEST_P(VtsHalAutomotiveVehicleTargetTest, verifySeatHeadrestHeightPosV2Config) {
948 verifyProperty(VehicleProperty::SEAT_HEADREST_HEIGHT_POS_V2, VehiclePropertyAccess::READ_WRITE,
949 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
950 VehicleArea::SEAT, VehiclePropertyType::INT32);
951}
952
shrikar6ae79162022-12-16 03:03:25 +0000953TEST_P(VtsHalAutomotiveVehicleTargetTest, verifySeatWalkInPosConfig) {
954 verifyProperty(VehicleProperty::SEAT_WALK_IN_POS, VehiclePropertyAccess::READ_WRITE,
955 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
956 VehicleArea::SEAT, VehiclePropertyType::INT32);
957}
958
shrikarfb65ae52022-11-03 23:12:51 +0000959TEST_P(VtsHalAutomotiveVehicleTargetTest, verifySeatFootwellLightsStateConfig) {
960 verifyProperty(VehicleProperty::SEAT_FOOTWELL_LIGHTS_STATE, VehiclePropertyAccess::READ,
961 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
962 VehicleArea::SEAT, VehiclePropertyType::INT32);
963}
964
shrikar93cf1be2022-11-30 15:00:52 -0800965TEST_P(VtsHalAutomotiveVehicleTargetTest, verifySeatFootwellLightsSwitchConfig) {
966 verifyProperty(VehicleProperty::SEAT_FOOTWELL_LIGHTS_SWITCH, VehiclePropertyAccess::READ_WRITE,
967 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
968 VehicleArea::SEAT, VehiclePropertyType::INT32);
969}
970
shrikar3326de02022-11-07 23:51:20 +0000971TEST_P(VtsHalAutomotiveVehicleTargetTest, verifySeatEasyAccessEnabledConfig) {
972 verifyProperty(VehicleProperty::SEAT_EASY_ACCESS_ENABLED, VehiclePropertyAccess::READ_WRITE,
973 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
974 VehicleArea::SEAT, VehiclePropertyType::BOOLEAN);
975}
976
shrikarb96e3762022-11-08 16:49:58 -0800977TEST_P(VtsHalAutomotiveVehicleTargetTest, verifySeatAirbagEnabledConfig) {
978 verifyProperty(VehicleProperty::SEAT_AIRBAG_ENABLED, VehiclePropertyAccess::READ_WRITE,
979 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
980 VehicleArea::SEAT, VehiclePropertyType::BOOLEAN);
981}
982
shrikar802ecb52022-11-09 18:27:06 +0000983TEST_P(VtsHalAutomotiveVehicleTargetTest, verifySeatCushionSideSupportPosConfig) {
984 verifyProperty(VehicleProperty::SEAT_CUSHION_SIDE_SUPPORT_POS,
985 VehiclePropertyAccess::READ_WRITE, VehiclePropertyChangeMode::ON_CHANGE,
986 VehiclePropertyGroup::SYSTEM, VehicleArea::SEAT, VehiclePropertyType::INT32);
987}
988
shrikar1f0ce0d2022-11-11 17:46:06 +0000989TEST_P(VtsHalAutomotiveVehicleTargetTest, verifySeatCushionSideSupportMoveConfig) {
990 verifyProperty(VehicleProperty::SEAT_CUSHION_SIDE_SUPPORT_MOVE,
991 VehiclePropertyAccess::READ_WRITE, VehiclePropertyChangeMode::ON_CHANGE,
992 VehiclePropertyGroup::SYSTEM, VehicleArea::SEAT, VehiclePropertyType::INT32);
993}
994
shrikareff71b22022-11-11 11:02:43 -0800995TEST_P(VtsHalAutomotiveVehicleTargetTest, verifySeatLumbarVerticalPosConfig) {
996 verifyProperty(VehicleProperty::SEAT_LUMBAR_VERTICAL_POS, VehiclePropertyAccess::READ_WRITE,
997 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
998 VehicleArea::SEAT, VehiclePropertyType::INT32);
999}
1000
shrikar2a081c52022-11-11 16:49:58 -08001001TEST_P(VtsHalAutomotiveVehicleTargetTest, verifySeatLumbarVerticalMoveConfig) {
1002 verifyProperty(VehicleProperty::SEAT_LUMBAR_VERTICAL_MOVE, VehiclePropertyAccess::READ_WRITE,
1003 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
1004 VehicleArea::SEAT, VehiclePropertyType::INT32);
1005}
1006
Aaqib Ismail5d53aa32022-12-13 22:30:23 +00001007TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyAutomaticEmergencyBrakingEnabledConfig) {
1008 verifyProperty(VehicleProperty::AUTOMATIC_EMERGENCY_BRAKING_ENABLED,
1009 VehiclePropertyAccess::READ_WRITE, VehiclePropertyChangeMode::ON_CHANGE,
1010 VehiclePropertyGroup::SYSTEM, VehicleArea::GLOBAL, VehiclePropertyType::BOOLEAN);
1011}
1012
Aaqib Ismail28ee23c2023-01-04 23:04:46 -08001013TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyAutomaticEmergencyBrakingStateConfig) {
1014 verifyProperty(VehicleProperty::AUTOMATIC_EMERGENCY_BRAKING_STATE, VehiclePropertyAccess::READ,
1015 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
1016 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
1017}
1018
Aaqib Ismaila2513672022-12-15 00:55:27 +00001019TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyForwardCollisionWarningEnabledConfig) {
1020 verifyProperty(VehicleProperty::FORWARD_COLLISION_WARNING_ENABLED,
1021 VehiclePropertyAccess::READ_WRITE, VehiclePropertyChangeMode::ON_CHANGE,
1022 VehiclePropertyGroup::SYSTEM, VehicleArea::GLOBAL, VehiclePropertyType::BOOLEAN);
1023}
1024
Aaqib Ismail0a1ab292023-01-19 21:33:56 +00001025TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyForwardCollisionWarningStateConfig) {
1026 verifyProperty(VehicleProperty::FORWARD_COLLISION_WARNING_STATE, VehiclePropertyAccess::READ,
1027 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
1028 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
1029}
1030
Aaqib Ismail3f7177a2022-12-17 09:20:00 -08001031TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyBlindSpotWarningEnabledConfig) {
1032 verifyProperty(VehicleProperty::BLIND_SPOT_WARNING_ENABLED, VehiclePropertyAccess::READ_WRITE,
1033 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
1034 VehicleArea::GLOBAL, VehiclePropertyType::BOOLEAN);
1035}
1036
Aaqib Ismail5fc97bb2023-01-10 17:07:47 -08001037TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyBlindSpotWarningStateConfig) {
1038 verifyProperty(VehicleProperty::BLIND_SPOT_WARNING_STATE, VehiclePropertyAccess::READ,
1039 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
1040 VehicleArea::MIRROR, VehiclePropertyType::INT32);
1041}
1042
Aaqib Ismail7a46cef2022-12-17 10:00:59 -08001043TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyLaneDepartureWarningEnabledConfig) {
1044 verifyProperty(VehicleProperty::LANE_DEPARTURE_WARNING_ENABLED,
1045 VehiclePropertyAccess::READ_WRITE, VehiclePropertyChangeMode::ON_CHANGE,
1046 VehiclePropertyGroup::SYSTEM, VehicleArea::GLOBAL, VehiclePropertyType::BOOLEAN);
1047}
1048
Aaqib Ismail8462db52023-01-27 19:59:49 -08001049TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyLaneDepartureWarningStateConfig) {
1050 verifyProperty(VehicleProperty::LANE_DEPARTURE_WARNING_STATE, VehiclePropertyAccess::READ,
1051 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
1052 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
1053}
1054
Aaqib Ismail20cc66a2022-12-22 05:38:28 -08001055TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyLaneKeepAssistEnabledConfig) {
1056 verifyProperty(VehicleProperty::LANE_KEEP_ASSIST_ENABLED, VehiclePropertyAccess::READ_WRITE,
1057 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
1058 VehicleArea::GLOBAL, VehiclePropertyType::BOOLEAN);
1059}
1060
Aaqib Ismail78db2ca2023-01-10 17:34:28 -08001061TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyLaneKeepAssistStateConfig) {
1062 verifyProperty(VehicleProperty::LANE_KEEP_ASSIST_STATE, VehiclePropertyAccess::READ,
1063 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
1064 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
1065}
1066
Aaqib Ismailb1680a72022-12-14 23:28:49 +00001067TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyLaneCenteringAssistEnabledConfig) {
1068 verifyProperty(VehicleProperty::LANE_CENTERING_ASSIST_ENABLED,
1069 VehiclePropertyAccess::READ_WRITE, VehiclePropertyChangeMode::ON_CHANGE,
1070 VehiclePropertyGroup::SYSTEM, VehicleArea::GLOBAL, VehiclePropertyType::BOOLEAN);
1071}
1072
Aaqib Ismail0ffd39c2023-01-11 12:19:10 -08001073TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyLaneCenteringAssistCommandConfig) {
1074 verifyProperty(VehicleProperty::LANE_CENTERING_ASSIST_COMMAND, VehiclePropertyAccess::WRITE,
1075 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
1076 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
1077}
1078
Aaqib Ismaildb034442023-01-10 18:14:28 -08001079TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyLaneCenteringAssistStateConfig) {
1080 verifyProperty(VehicleProperty::LANE_CENTERING_ASSIST_STATE, VehiclePropertyAccess::READ,
1081 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
1082 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
1083}
1084
Yuncheol Heo8fbbfd12023-09-27 15:43:59 -07001085TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyClusterHeartbeatConfig) {
1086 verifyProperty(VehicleProperty::CLUSTER_HEARTBEAT, VehiclePropertyAccess::WRITE,
1087 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
1088 VehicleArea::GLOBAL, VehiclePropertyType::MIXED);
1089}
1090
shrikard6f9f8e2023-11-02 22:35:28 +00001091TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyVehicleDrivingAutomationCurrentLevelConfig) {
1092 verifyProperty(VehicleProperty::VEHICLE_DRIVING_AUTOMATION_CURRENT_LEVEL,
1093 VehiclePropertyAccess::READ, VehiclePropertyChangeMode::ON_CHANGE,
1094 VehiclePropertyGroup::SYSTEM, VehicleArea::GLOBAL, VehiclePropertyType::INT32);
1095}
1096
shrikar420b31d2023-11-07 16:15:35 +00001097TEST_P(VtsHalAutomotiveVehicleTargetTest, verifySeatAirbagsDeployedConfig) {
1098 verifyProperty(VehicleProperty::SEAT_AIRBAGS_DEPLOYED, VehiclePropertyAccess::READ,
1099 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
1100 VehicleArea::SEAT, VehiclePropertyType::INT32);
1101}
1102
shrikar7717aa82023-11-07 21:05:46 +00001103TEST_P(VtsHalAutomotiveVehicleTargetTest, verifySeatBeltPretensionerDeployedConfig) {
1104 verifyProperty(VehicleProperty::SEAT_BELT_PRETENSIONER_DEPLOYED, VehiclePropertyAccess::READ,
1105 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
1106 VehicleArea::SEAT, VehiclePropertyType::BOOLEAN);
1107}
1108
shrikard816e042023-11-08 20:12:55 +00001109TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyImpactDetectedConfig) {
1110 verifyProperty(VehicleProperty::IMPACT_DETECTED, VehiclePropertyAccess::READ,
1111 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
1112 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
1113}
1114
shrikara492e7d2023-11-09 00:27:54 +00001115TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyEvBatteryAverageTemperatureConfig) {
1116 verifyProperty(VehicleProperty::EV_BATTERY_AVERAGE_TEMPERATURE, VehiclePropertyAccess::READ,
1117 VehiclePropertyChangeMode::CONTINUOUS, VehiclePropertyGroup::SYSTEM,
1118 VehicleArea::GLOBAL, VehiclePropertyType::FLOAT);
1119}
1120
shrikar45df34b2023-11-10 21:14:17 +00001121TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyLowSpeedCollisionWarningEnabledConfig) {
1122 verifyProperty(VehicleProperty::LOW_SPEED_COLLISION_WARNING_ENABLED,
1123 VehiclePropertyAccess::READ_WRITE, VehiclePropertyChangeMode::ON_CHANGE,
1124 VehiclePropertyGroup::SYSTEM, VehicleArea::GLOBAL, VehiclePropertyType::BOOLEAN);
1125}
1126
shrikar858c4e12023-11-14 17:33:11 +00001127TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyLowSpeedCollisionWarningStateConfig) {
1128 verifyProperty(VehicleProperty::LOW_SPEED_COLLISION_WARNING_STATE, VehiclePropertyAccess::READ,
1129 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
1130 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
1131}
1132
shrikar84866f72023-11-27 00:30:59 +00001133TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyValetModeEnabledConfig) {
1134 verifyProperty(VehicleProperty::VALET_MODE_ENABLED, VehiclePropertyAccess::READ_WRITE,
1135 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
1136 VehicleArea::GLOBAL, VehiclePropertyType::BOOLEAN);
1137}
1138
shrikar33a33692023-11-30 01:38:01 +00001139TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyElectronicStabilityControlEnabledConfig) {
1140 verifyProperty(VehicleProperty::ELECTRONIC_STABILITY_CONTROL_ENABLED,
1141 VehiclePropertyAccess::READ_WRITE, VehiclePropertyChangeMode::ON_CHANGE,
1142 VehiclePropertyGroup::SYSTEM, VehicleArea::GLOBAL, VehiclePropertyType::BOOLEAN);
1143}
1144
shrikara45d1cf2023-11-27 17:40:46 +00001145TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyElectronicStabilityControlStateConfig) {
1146 verifyProperty(VehicleProperty::ELECTRONIC_STABILITY_CONTROL_STATE, VehiclePropertyAccess::READ,
1147 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
1148 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
1149}
1150
shrikar7fde8f52023-11-27 22:47:53 +00001151TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyCrossTrafficMonitoringEnabledConfig) {
1152 verifyProperty(VehicleProperty::CROSS_TRAFFIC_MONITORING_ENABLED,
1153 VehiclePropertyAccess::READ_WRITE, VehiclePropertyChangeMode::ON_CHANGE,
1154 VehiclePropertyGroup::SYSTEM, VehicleArea::GLOBAL, VehiclePropertyType::BOOLEAN);
1155}
1156
shrikar813ba7c2023-11-28 18:35:34 +00001157TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyCrossTrafficMonitoringWarningStateConfig) {
1158 verifyProperty(VehicleProperty::CROSS_TRAFFIC_MONITORING_WARNING_STATE,
1159 VehiclePropertyAccess::READ, VehiclePropertyChangeMode::ON_CHANGE,
1160 VehiclePropertyGroup::SYSTEM, VehicleArea::GLOBAL, VehiclePropertyType::INT32);
1161}
1162
shrikar55559892023-12-01 23:35:06 +00001163TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyHeadUpDisplayEnabledConfig) {
1164 verifyProperty(VehicleProperty::HEAD_UP_DISPLAY_ENABLED, VehiclePropertyAccess::READ_WRITE,
1165 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
1166 VehicleArea::SEAT, VehiclePropertyType::BOOLEAN);
1167}
1168
shrikard11b9f82023-12-04 17:39:28 +00001169TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyLowSpeedAutomaticEmergencyBrakingEnabledConfig) {
1170 verifyProperty(VehicleProperty::LOW_SPEED_AUTOMATIC_EMERGENCY_BRAKING_ENABLED,
1171 VehiclePropertyAccess::READ_WRITE, VehiclePropertyChangeMode::ON_CHANGE,
1172 VehiclePropertyGroup::SYSTEM, VehicleArea::GLOBAL, VehiclePropertyType::BOOLEAN);
1173}
1174
shrikarbd6ab732023-12-04 19:07:26 +00001175TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyLowSpeedAutomaticEmergencyBrakingStateConfig) {
1176 verifyProperty(VehicleProperty::LOW_SPEED_AUTOMATIC_EMERGENCY_BRAKING_STATE,
1177 VehiclePropertyAccess::READ, VehiclePropertyChangeMode::ON_CHANGE,
1178 VehiclePropertyGroup::SYSTEM, VehicleArea::GLOBAL, VehiclePropertyType::INT32);
1179}
1180
Yu Shan0ebd8762023-10-11 11:31:04 -07001181bool VtsHalAutomotiveVehicleTargetTest::checkIsSupported(int32_t propertyId) {
Yu Shanec5d5b02023-10-09 14:43:36 -07001182 auto result = mVhalClient->getPropConfigs({propertyId});
Yu Shan0ebd8762023-10-11 11:31:04 -07001183 return result.ok();
Yu Shanec5d5b02023-10-09 14:43:36 -07001184}
1185
Yu Shan726d51a2022-02-22 17:37:21 -08001186std::vector<ServiceDescriptor> getDescriptors() {
1187 std::vector<ServiceDescriptor> descriptors;
1188 for (std::string name : getAidlHalInstanceNames(IVehicle::descriptor)) {
1189 descriptors.push_back({
1190 .name = name,
1191 .isAidlService = true,
1192 });
1193 }
Yu Shanda2fa092024-01-25 17:40:41 -08001194 for (std::string name : getAllHalInstanceNames(
1195 android::hardware::automotive::vehicle::V2_0::IVehicle::descriptor)) {
Yu Shan726d51a2022-02-22 17:37:21 -08001196 descriptors.push_back({
1197 .name = name,
1198 .isAidlService = false,
1199 });
1200 }
1201 return descriptors;
1202}
1203
1204GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(VtsHalAutomotiveVehicleTargetTest);
1205
1206INSTANTIATE_TEST_SUITE_P(PerInstance, VtsHalAutomotiveVehicleTargetTest,
1207 testing::ValuesIn(getDescriptors()),
1208 [](const testing::TestParamInfo<ServiceDescriptor>& info) {
1209 std::string name = "";
1210 if (info.param.isAidlService) {
1211 name += "aidl_";
1212 } else {
1213 name += "hidl_";
1214 }
1215 name += info.param.name;
1216 return Sanitize(name);
1217 });
1218
1219int main(int argc, char** argv) {
1220 ::testing::InitGoogleTest(&argc, argv);
1221 ABinderProcess_setThreadPoolMaxThreadCount(1);
1222 return RUN_ALL_TESTS();
1223}