blob: b963d8e1dae5a76171d8dbd32ba5643f1edbe27e [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>
22#include <aidl/Gtest.h>
23#include <aidl/Vintf.h>
24#include <aidl/android/hardware/automotive/vehicle/IVehicle.h>
25#include <android-base/stringprintf.h>
26#include <android-base/thread_annotations.h>
27#include <android/binder_process.h>
28#include <gtest/gtest.h>
29#include <hidl/GtestPrinter.h>
30#include <hidl/ServiceManagement.h>
31#include <inttypes.h>
32#include <utils/Log.h>
Yu Shan4569ef52022-03-18 14:34:25 -070033#include <utils/SystemClock.h>
Yu Shan726d51a2022-02-22 17:37:21 -080034
35#include <chrono>
36#include <mutex>
37#include <unordered_map>
38#include <unordered_set>
39#include <vector>
40
41using ::aidl::android::hardware::automotive::vehicle::IVehicle;
42using ::aidl::android::hardware::automotive::vehicle::StatusCode;
43using ::aidl::android::hardware::automotive::vehicle::SubscribeOptions;
44using ::aidl::android::hardware::automotive::vehicle::VehicleArea;
45using ::aidl::android::hardware::automotive::vehicle::VehicleProperty;
46using ::aidl::android::hardware::automotive::vehicle::VehiclePropertyAccess;
Aaqib Ismail20486702022-10-27 16:58:50 -070047using ::aidl::android::hardware::automotive::vehicle::VehiclePropertyChangeMode;
48using ::aidl::android::hardware::automotive::vehicle::VehiclePropertyGroup;
Yu Shan726d51a2022-02-22 17:37:21 -080049using ::aidl::android::hardware::automotive::vehicle::VehiclePropertyType;
50using ::android::getAidlHalInstanceNames;
51using ::android::base::ScopedLockAssertion;
52using ::android::base::StringPrintf;
Chen Chengfaf9adc2022-06-22 23:09:09 +000053using ::android::frameworks::automotive::vhal::ErrorCode;
Yu Shan726d51a2022-02-22 17:37:21 -080054using ::android::frameworks::automotive::vhal::HalPropError;
55using ::android::frameworks::automotive::vhal::IHalPropConfig;
56using ::android::frameworks::automotive::vhal::IHalPropValue;
57using ::android::frameworks::automotive::vhal::ISubscriptionCallback;
58using ::android::frameworks::automotive::vhal::IVhalClient;
59using ::android::hardware::getAllHalInstanceNames;
60using ::android::hardware::Sanitize;
61using ::android::hardware::automotive::vehicle::toInt;
62
63constexpr int32_t kInvalidProp = 0x31600207;
64
65struct ServiceDescriptor {
66 std::string name;
67 bool isAidlService;
68};
69
70class VtsVehicleCallback final : public ISubscriptionCallback {
71 private:
72 std::mutex mLock;
73 std::unordered_map<int32_t, size_t> mEventsCount GUARDED_BY(mLock);
Yu Shan4569ef52022-03-18 14:34:25 -070074 std::unordered_map<int32_t, std::vector<int64_t>> mEventTimestamps GUARDED_BY(mLock);
Yu Shan726d51a2022-02-22 17:37:21 -080075 std::condition_variable mEventCond;
76
77 public:
78 void onPropertyEvent(const std::vector<std::unique_ptr<IHalPropValue>>& values) override {
79 {
80 std::lock_guard<std::mutex> lockGuard(mLock);
81 for (auto& value : values) {
Yu Shan4569ef52022-03-18 14:34:25 -070082 int32_t propId = value->getPropId();
83 mEventsCount[propId] += 1;
84 mEventTimestamps[propId].push_back(value->getTimestamp());
Yu Shan726d51a2022-02-22 17:37:21 -080085 }
86 }
87 mEventCond.notify_one();
88 }
89
90 void onPropertySetError([[maybe_unused]] const std::vector<HalPropError>& errors) override {
91 // Do nothing.
92 }
93
94 template <class Rep, class Period>
95 bool waitForExpectedEvents(int32_t propId, size_t expectedEvents,
96 const std::chrono::duration<Rep, Period>& timeout) {
97 std::unique_lock<std::mutex> uniqueLock(mLock);
98 return mEventCond.wait_for(uniqueLock, timeout, [this, propId, expectedEvents] {
99 ScopedLockAssertion lockAssertion(mLock);
100 return mEventsCount[propId] >= expectedEvents;
101 });
102 }
103
Yu Shan4569ef52022-03-18 14:34:25 -0700104 std::vector<int64_t> getEventTimestamps(int32_t propId) {
105 {
106 std::lock_guard<std::mutex> lockGuard(mLock);
107 return mEventTimestamps[propId];
108 }
109 }
110
Yu Shan726d51a2022-02-22 17:37:21 -0800111 void reset() {
112 std::lock_guard<std::mutex> lockGuard(mLock);
113 mEventsCount.clear();
114 }
115};
116
117class VtsHalAutomotiveVehicleTargetTest : public testing::TestWithParam<ServiceDescriptor> {
Yu Shanec5d5b02023-10-09 14:43:36 -0700118 protected:
Yu Shan0ebd8762023-10-11 11:31:04 -0700119 bool checkIsSupported(int32_t propertyId);
Yu Shanec5d5b02023-10-09 14:43:36 -0700120
Yu Shan726d51a2022-02-22 17:37:21 -0800121 public:
Aaqib Ismail20486702022-10-27 16:58:50 -0700122 void verifyProperty(VehicleProperty propId, VehiclePropertyAccess access,
123 VehiclePropertyChangeMode changeMode, VehiclePropertyGroup group,
124 VehicleArea area, VehiclePropertyType propertyType);
Yu Shan726d51a2022-02-22 17:37:21 -0800125 virtual void SetUp() override {
126 auto descriptor = GetParam();
127 if (descriptor.isAidlService) {
128 mVhalClient = IVhalClient::tryCreateAidlClient(descriptor.name.c_str());
129 } else {
130 mVhalClient = IVhalClient::tryCreateHidlClient(descriptor.name.c_str());
131 }
132
133 ASSERT_NE(mVhalClient, nullptr) << "Failed to connect to VHAL";
134
135 mCallback = std::make_shared<VtsVehicleCallback>();
136 }
137
138 static bool isBooleanGlobalProp(int32_t property) {
139 return (property & toInt(VehiclePropertyType::MASK)) ==
140 toInt(VehiclePropertyType::BOOLEAN) &&
141 (property & toInt(VehicleArea::MASK)) == toInt(VehicleArea::GLOBAL);
142 }
143
144 protected:
145 std::shared_ptr<IVhalClient> mVhalClient;
146 std::shared_ptr<VtsVehicleCallback> mCallback;
147};
148
149TEST_P(VtsHalAutomotiveVehicleTargetTest, useAidlBackend) {
150 if (!mVhalClient->isAidlVhal()) {
151 GTEST_SKIP() << "AIDL backend is not available, HIDL backend is used instead";
152 }
153}
154
155TEST_P(VtsHalAutomotiveVehicleTargetTest, useHidlBackend) {
156 if (mVhalClient->isAidlVhal()) {
157 GTEST_SKIP() << "AIDL backend is available, HIDL backend is not used";
158 }
159}
160
Yu Shanec5d5b02023-10-09 14:43:36 -0700161// Test getAllPropConfigs() returns at least 1 property configs.
Yu Shan726d51a2022-02-22 17:37:21 -0800162TEST_P(VtsHalAutomotiveVehicleTargetTest, getAllPropConfigs) {
163 ALOGD("VtsHalAutomotiveVehicleTargetTest::getAllPropConfigs");
164
165 auto result = mVhalClient->getAllPropConfigs();
166
167 ASSERT_TRUE(result.ok()) << "Failed to get all property configs, error: "
168 << result.error().message();
Yu Shanec5d5b02023-10-09 14:43:36 -0700169 ASSERT_GE(result.value().size(), 1u) << StringPrintf(
170 "Expect to get at least 1 property config, got %zu", result.value().size());
Yu Shan726d51a2022-02-22 17:37:21 -0800171}
172
Yu Shanec5d5b02023-10-09 14:43:36 -0700173// Test getPropConfigs() can query properties returned by getAllPropConfigs.
174TEST_P(VtsHalAutomotiveVehicleTargetTest, getPropConfigsWithValidProps) {
Yu Shan726d51a2022-02-22 17:37:21 -0800175 ALOGD("VtsHalAutomotiveVehicleTargetTest::getRequiredPropConfigs");
176
Yu Shanec5d5b02023-10-09 14:43:36 -0700177 std::vector<int32_t> properties;
178 auto result = mVhalClient->getAllPropConfigs();
Yu Shan726d51a2022-02-22 17:37:21 -0800179
Yu Shanec5d5b02023-10-09 14:43:36 -0700180 ASSERT_TRUE(result.ok()) << "Failed to get all property configs, error: "
181 << result.error().message();
182 for (const auto& cfgPtr : result.value()) {
183 properties.push_back(cfgPtr->getPropId());
184 }
185
186 result = mVhalClient->getPropConfigs(properties);
Yu Shan726d51a2022-02-22 17:37:21 -0800187
188 ASSERT_TRUE(result.ok()) << "Failed to get required property config, error: "
189 << result.error().message();
Yu Shanec5d5b02023-10-09 14:43:36 -0700190 ASSERT_EQ(result.value().size(), properties.size()) << StringPrintf(
191 "Expect to get exactly %zu configs, got %zu", properties.size(), result.value().size());
Yu Shan726d51a2022-02-22 17:37:21 -0800192}
193
194// Test getPropConfig() with an invalid propertyId returns an error code.
195TEST_P(VtsHalAutomotiveVehicleTargetTest, getPropConfigsWithInvalidProp) {
196 ALOGD("VtsHalAutomotiveVehicleTargetTest::getPropConfigsWithInvalidProp");
197
198 auto result = mVhalClient->getPropConfigs({kInvalidProp});
199
200 ASSERT_FALSE(result.ok()) << StringPrintf(
201 "Expect failure to get prop configs for invalid prop: %" PRId32, kInvalidProp);
202 ASSERT_NE(result.error().message(), "") << "Expect error message not to be empty";
203}
204
205// Test get() return current value for properties.
206TEST_P(VtsHalAutomotiveVehicleTargetTest, get) {
207 ALOGD("VtsHalAutomotiveVehicleTargetTest::get");
208
209 int32_t propId = toInt(VehicleProperty::PERF_VEHICLE_SPEED);
Yu Shan0ebd8762023-10-11 11:31:04 -0700210 if (!checkIsSupported(propId)) {
211 GTEST_SKIP() << "Property: " << propId << " is not supported, skip the test";
212 }
Yu Shan726d51a2022-02-22 17:37:21 -0800213 auto result = mVhalClient->getValueSync(*mVhalClient->createHalPropValue(propId));
214
215 ASSERT_TRUE(result.ok()) << StringPrintf("Failed to get value for property: %" PRId32
216 ", error: %s",
217 propId, result.error().message().c_str());
218 ASSERT_NE(result.value(), nullptr) << "Result value must not be null";
219}
220
221// Test get() with an invalid propertyId return an error codes.
222TEST_P(VtsHalAutomotiveVehicleTargetTest, getInvalidProp) {
223 ALOGD("VtsHalAutomotiveVehicleTargetTest::getInvalidProp");
224
225 auto result = mVhalClient->getValueSync(*mVhalClient->createHalPropValue(kInvalidProp));
226
227 ASSERT_FALSE(result.ok()) << StringPrintf(
228 "Expect failure to get property for invalid prop: %" PRId32, kInvalidProp);
229}
230
231// Test set() on read_write properties.
232TEST_P(VtsHalAutomotiveVehicleTargetTest, setProp) {
233 ALOGD("VtsHalAutomotiveVehicleTargetTest::setProp");
234
235 // skip hvac related properties
236 std::unordered_set<int32_t> hvacProps = {toInt(VehicleProperty::HVAC_DEFROSTER),
237 toInt(VehicleProperty::HVAC_AC_ON),
238 toInt(VehicleProperty::HVAC_MAX_AC_ON),
239 toInt(VehicleProperty::HVAC_MAX_DEFROST_ON),
240 toInt(VehicleProperty::HVAC_RECIRC_ON),
241 toInt(VehicleProperty::HVAC_DUAL_ON),
242 toInt(VehicleProperty::HVAC_AUTO_ON),
243 toInt(VehicleProperty::HVAC_POWER_ON),
244 toInt(VehicleProperty::HVAC_AUTO_RECIRC_ON),
245 toInt(VehicleProperty::HVAC_ELECTRIC_DEFROSTER_ON)};
246 auto result = mVhalClient->getAllPropConfigs();
247 ASSERT_TRUE(result.ok());
248
249 for (const auto& cfgPtr : result.value()) {
250 const IHalPropConfig& cfg = *cfgPtr;
251 int32_t propId = cfg.getPropId();
252 // test on boolean and writable property
253 if (cfg.getAccess() == toInt(VehiclePropertyAccess::READ_WRITE) &&
254 isBooleanGlobalProp(propId) && !hvacProps.count(propId)) {
255 auto propToGet = mVhalClient->createHalPropValue(propId);
256 auto getValueResult = mVhalClient->getValueSync(*propToGet);
257
258 ASSERT_TRUE(getValueResult.ok())
259 << StringPrintf("Failed to get value for property: %" PRId32 ", error: %s",
260 propId, getValueResult.error().message().c_str());
261 ASSERT_NE(getValueResult.value(), nullptr)
262 << StringPrintf("Result value must not be null for property: %" PRId32, propId);
263
264 const IHalPropValue& value = *getValueResult.value();
265 size_t intValueSize = value.getInt32Values().size();
266 ASSERT_EQ(intValueSize, 1u) << StringPrintf(
267 "Expect exactly 1 int value for boolean property: %" PRId32 ", got %zu", propId,
268 intValueSize);
269
270 int setValue = value.getInt32Values()[0] == 1 ? 0 : 1;
271 auto propToSet = mVhalClient->createHalPropValue(propId);
272 propToSet->setInt32Values({setValue});
273 auto setValueResult = mVhalClient->setValueSync(*propToSet);
274
275 ASSERT_TRUE(setValueResult.ok())
276 << StringPrintf("Failed to set value for property: %" PRId32 ", error: %s",
277 propId, setValueResult.error().message().c_str());
278
279 // check set success
280 getValueResult = mVhalClient->getValueSync(*propToGet);
281 ASSERT_TRUE(getValueResult.ok())
282 << StringPrintf("Failed to get value for property: %" PRId32 ", error: %s",
283 propId, getValueResult.error().message().c_str());
284 ASSERT_NE(getValueResult.value(), nullptr)
285 << StringPrintf("Result value must not be null for property: %" PRId32, propId);
286 ASSERT_EQ(getValueResult.value()->getInt32Values(), std::vector<int32_t>({setValue}))
287 << StringPrintf("Boolean value not updated after set for property: %" PRId32,
288 propId);
289 }
290 }
291}
292
293// Test set() on an read_only property.
294TEST_P(VtsHalAutomotiveVehicleTargetTest, setNotWritableProp) {
295 ALOGD("VtsHalAutomotiveVehicleTargetTest::setNotWritableProp");
296
297 int32_t propId = toInt(VehicleProperty::PERF_VEHICLE_SPEED);
Yu Shan0ebd8762023-10-11 11:31:04 -0700298 if (!checkIsSupported(propId)) {
299 GTEST_SKIP() << "Property: " << propId << " is not supported, skip the test";
300 }
Yu Shanec5d5b02023-10-09 14:43:36 -0700301
Yu Shan726d51a2022-02-22 17:37:21 -0800302 auto getValueResult = mVhalClient->getValueSync(*mVhalClient->createHalPropValue(propId));
303 ASSERT_TRUE(getValueResult.ok())
304 << StringPrintf("Failed to get value for property: %" PRId32 ", error: %s", propId,
305 getValueResult.error().message().c_str());
306
307 auto setValueResult = mVhalClient->setValueSync(*getValueResult.value());
308
309 ASSERT_FALSE(setValueResult.ok()) << "Expect set a read-only value to fail";
Chen Chengfaf9adc2022-06-22 23:09:09 +0000310 ASSERT_EQ(setValueResult.error().code(), ErrorCode::ACCESS_DENIED_FROM_VHAL);
Yu Shan726d51a2022-02-22 17:37:21 -0800311}
312
shrikar8a140232023-03-07 16:57:59 +0000313// Test get(), set() and getAllPropConfigs() on VehicleProperty::INVALID.
314TEST_P(VtsHalAutomotiveVehicleTargetTest, getSetPropertyIdInvalid) {
315 ALOGD("VtsHalAutomotiveVehicleTargetTest::getSetPropertyIdInvalid");
316
317 int32_t propId = toInt(VehicleProperty::INVALID);
318 auto getValueResult = mVhalClient->getValueSync(*mVhalClient->createHalPropValue(propId));
319 ASSERT_FALSE(getValueResult.ok()) << "Expect get on VehicleProperty::INVALID to fail";
320 ASSERT_EQ(getValueResult.error().code(), ErrorCode::INVALID_ARG);
321
322 auto propToSet = mVhalClient->createHalPropValue(propId);
323 propToSet->setInt32Values({0});
324 auto setValueResult = mVhalClient->setValueSync(*propToSet);
325 ASSERT_FALSE(setValueResult.ok()) << "Expect set on VehicleProperty::INVALID to fail";
326 ASSERT_EQ(setValueResult.error().code(), ErrorCode::INVALID_ARG);
327
328 auto result = mVhalClient->getAllPropConfigs();
329 ASSERT_TRUE(result.ok());
330 for (const auto& cfgPtr : result.value()) {
331 const IHalPropConfig& cfg = *cfgPtr;
332 ASSERT_FALSE(cfg.getPropId() == propId) << "Expect VehicleProperty::INVALID to not be "
333 "included in propConfigs";
334 }
335}
336
Yu Shan726d51a2022-02-22 17:37:21 -0800337// Test subscribe() and unsubscribe().
338TEST_P(VtsHalAutomotiveVehicleTargetTest, subscribeAndUnsubscribe) {
339 ALOGD("VtsHalAutomotiveVehicleTargetTest::subscribeAndUnsubscribe");
340
341 int32_t propId = toInt(VehicleProperty::PERF_VEHICLE_SPEED);
Yu Shan0ebd8762023-10-11 11:31:04 -0700342 if (!checkIsSupported(propId)) {
343 GTEST_SKIP() << "Property: " << propId << " is not supported, skip the test";
344 }
Yu Shan726d51a2022-02-22 17:37:21 -0800345
Yu Shan4569ef52022-03-18 14:34:25 -0700346 auto propConfigsResult = mVhalClient->getPropConfigs({propId});
347
348 ASSERT_TRUE(propConfigsResult.ok()) << "Failed to get property config for PERF_VEHICLE_SPEED: "
349 << "error: " << propConfigsResult.error().message();
350 ASSERT_EQ(propConfigsResult.value().size(), 1u)
351 << "Expect to return 1 config for PERF_VEHICLE_SPEED";
352 auto& propConfig = propConfigsResult.value()[0];
353 float minSampleRate = propConfig->getMinSampleRate();
354 float maxSampleRate = propConfig->getMaxSampleRate();
355
356 if (minSampleRate < 1) {
357 GTEST_SKIP() << "Sample rate for vehicle speed < 1 times/sec, skip test since it would "
358 "take too long";
359 }
Yu Shan726d51a2022-02-22 17:37:21 -0800360
361 auto client = mVhalClient->getSubscriptionClient(mCallback);
362 ASSERT_NE(client, nullptr) << "Failed to get subscription client";
363
Yu Shan4569ef52022-03-18 14:34:25 -0700364 auto result = client->subscribe({{.propId = propId, .sampleRate = minSampleRate}});
Yu Shan726d51a2022-02-22 17:37:21 -0800365
366 ASSERT_TRUE(result.ok()) << StringPrintf("Failed to subscribe to property: %" PRId32
367 ", error: %s",
368 propId, result.error().message().c_str());
Yu Shan4569ef52022-03-18 14:34:25 -0700369
370 if (mVhalClient->isAidlVhal()) {
371 // Skip checking timestamp for HIDL because the behavior for sample rate and timestamp is
372 // only specified clearly for AIDL.
373
374 // Timeout is 2 seconds, which gives a 1 second buffer.
375 ASSERT_TRUE(mCallback->waitForExpectedEvents(propId, std::floor(minSampleRate),
376 std::chrono::seconds(2)))
377 << "Didn't get enough events for subscribing to minSampleRate";
378 }
379
380 result = client->subscribe({{.propId = propId, .sampleRate = maxSampleRate}});
381
382 ASSERT_TRUE(result.ok()) << StringPrintf("Failed to subscribe to property: %" PRId32
383 ", error: %s",
384 propId, result.error().message().c_str());
385
386 if (mVhalClient->isAidlVhal()) {
387 ASSERT_TRUE(mCallback->waitForExpectedEvents(propId, std::floor(maxSampleRate),
388 std::chrono::seconds(2)))
389 << "Didn't get enough events for subscribing to maxSampleRate";
390
391 std::unordered_set<int64_t> timestamps;
392 // Event event should have a different timestamp.
393 for (const int64_t& eventTimestamp : mCallback->getEventTimestamps(propId)) {
394 ASSERT_TRUE(timestamps.find(eventTimestamp) == timestamps.end())
395 << "two events for the same property must not have the same timestamp";
396 timestamps.insert(eventTimestamp);
397 }
398 }
Yu Shan726d51a2022-02-22 17:37:21 -0800399
400 result = client->unsubscribe({propId});
401 ASSERT_TRUE(result.ok()) << StringPrintf("Failed to unsubscribe to property: %" PRId32
402 ", error: %s",
403 propId, result.error().message().c_str());
404
405 mCallback->reset();
406 ASSERT_FALSE(mCallback->waitForExpectedEvents(propId, 10, std::chrono::seconds(1)))
407 << "Expect not to get events after unsubscription";
408}
409
410// Test subscribe() with an invalid property.
411TEST_P(VtsHalAutomotiveVehicleTargetTest, subscribeInvalidProp) {
412 ALOGD("VtsHalAutomotiveVehicleTargetTest::subscribeInvalidProp");
413
414 std::vector<SubscribeOptions> options = {
415 SubscribeOptions{.propId = kInvalidProp, .sampleRate = 10.0}};
416
417 auto client = mVhalClient->getSubscriptionClient(mCallback);
418 ASSERT_NE(client, nullptr) << "Failed to get subscription client";
419
420 auto result = client->subscribe(options);
421
422 ASSERT_FALSE(result.ok()) << StringPrintf("Expect subscribing to property: %" PRId32 " to fail",
423 kInvalidProp);
424}
425
Yu Shan4569ef52022-03-18 14:34:25 -0700426// Test the timestamp returned in GetValues results is the timestamp when the value is retrieved.
427TEST_P(VtsHalAutomotiveVehicleTargetTest, testGetValuesTimestampAIDL) {
428 if (!mVhalClient->isAidlVhal()) {
429 GTEST_SKIP() << "Skip checking timestamp for HIDL because the behavior is only specified "
430 "for AIDL";
431 }
432
433 int32_t propId = toInt(VehicleProperty::PARKING_BRAKE_ON);
Yu Shan0ebd8762023-10-11 11:31:04 -0700434 if (!checkIsSupported(propId)) {
435 GTEST_SKIP() << "Property: " << propId << " is not supported, skip the test";
436 }
Yu Shan4569ef52022-03-18 14:34:25 -0700437 auto prop = mVhalClient->createHalPropValue(propId);
438
439 auto result = mVhalClient->getValueSync(*prop);
440
441 ASSERT_TRUE(result.ok()) << StringPrintf("Failed to get value for property: %" PRId32
442 ", error: %s",
443 propId, result.error().message().c_str());
444 ASSERT_NE(result.value(), nullptr) << "Result value must not be null";
445 ASSERT_EQ(result.value()->getInt32Values().size(), 1u) << "Result must contain 1 int value";
446
447 bool parkBrakeOnValue1 = (result.value()->getInt32Values()[0] == 1);
448 int64_t timestampValue1 = result.value()->getTimestamp();
449
450 result = mVhalClient->getValueSync(*prop);
451
452 ASSERT_TRUE(result.ok()) << StringPrintf("Failed to get value for property: %" PRId32
453 ", error: %s",
454 propId, result.error().message().c_str());
455 ASSERT_NE(result.value(), nullptr) << "Result value must not be null";
456 ASSERT_EQ(result.value()->getInt32Values().size(), 1u) << "Result must contain 1 int value";
457
458 bool parkBarkeOnValue2 = (result.value()->getInt32Values()[0] == 1);
459 int64_t timestampValue2 = result.value()->getTimestamp();
460
461 if (parkBarkeOnValue2 == parkBrakeOnValue1) {
462 ASSERT_EQ(timestampValue2, timestampValue1)
463 << "getValue result must contain a timestamp updated when the value was updated, if"
464 "the value does not change, expect the same timestamp";
465 } else {
466 ASSERT_GT(timestampValue2, timestampValue1)
467 << "getValue result must contain a timestamp updated when the value was updated, if"
468 "the value changes, expect the newer value has a larger timestamp";
469 }
470}
471
Aaqib Ismail20486702022-10-27 16:58:50 -0700472// Helper function to compare actual vs expected property config
473void VtsHalAutomotiveVehicleTargetTest::verifyProperty(VehicleProperty propId,
474 VehiclePropertyAccess access,
475 VehiclePropertyChangeMode changeMode,
476 VehiclePropertyGroup group, VehicleArea area,
477 VehiclePropertyType propertyType) {
478 int expectedPropId = toInt(propId);
479 int expectedAccess = toInt(access);
480 int expectedChangeMode = toInt(changeMode);
481 int expectedGroup = toInt(group);
482 int expectedArea = toInt(area);
483 int expectedPropertyType = toInt(propertyType);
484
Eva Chen17bc5782023-01-06 22:59:58 -0800485 auto result = mVhalClient->getAllPropConfigs();
486 ASSERT_TRUE(result.ok()) << "Failed to get all property configs, error: "
487 << result.error().message();
488
489 // Check if property is implemented by getting all configs and looking to see if the expected
490 // property id is in that list.
491 bool isExpectedPropIdImplemented = false;
492 for (const auto& cfgPtr : result.value()) {
493 const IHalPropConfig& cfg = *cfgPtr;
494 if (expectedPropId == cfg.getPropId()) {
495 isExpectedPropIdImplemented = true;
496 break;
497 }
498 }
499
500 if (!isExpectedPropIdImplemented) {
501 GTEST_SKIP() << StringPrintf("Property %" PRId32 " has not been implemented",
502 expectedPropId);
503 }
504
505 result = mVhalClient->getPropConfigs({expectedPropId});
Aaqib Ismail20486702022-10-27 16:58:50 -0700506 ASSERT_TRUE(result.ok()) << "Failed to get required property config, error: "
507 << result.error().message();
508
Aaqib Ismail20486702022-10-27 16:58:50 -0700509 ASSERT_EQ(result.value().size(), 1u)
510 << StringPrintf("Expect to get exactly 1 config, got %zu", result.value().size());
511
512 const auto& config = result.value().at(0);
513 int actualPropId = config->getPropId();
514 int actualAccess = config->getAccess();
515 int actualChangeMode = config->getChangeMode();
516 int actualGroup = actualPropId & toInt(VehiclePropertyGroup::MASK);
517 int actualArea = actualPropId & toInt(VehicleArea::MASK);
518 int actualPropertyType = actualPropId & toInt(VehiclePropertyType::MASK);
519
520 ASSERT_EQ(actualPropId, expectedPropId)
521 << StringPrintf("Expect to get property ID: %i, got %i", expectedPropId, actualPropId);
522
523 if (expectedAccess == toInt(VehiclePropertyAccess::READ_WRITE)) {
524 ASSERT_TRUE(actualAccess == expectedAccess ||
525 actualAccess == toInt(VehiclePropertyAccess::READ))
526 << StringPrintf("Expect to get VehiclePropertyAccess: %i or %i, got %i",
527 expectedAccess, toInt(VehiclePropertyAccess::READ), actualAccess);
528 } else {
529 ASSERT_EQ(actualAccess, expectedAccess) << StringPrintf(
530 "Expect to get VehiclePropertyAccess: %i, got %i", expectedAccess, actualAccess);
531 }
532
533 ASSERT_EQ(actualChangeMode, expectedChangeMode)
534 << StringPrintf("Expect to get VehiclePropertyChangeMode: %i, got %i",
535 expectedChangeMode, actualChangeMode);
536 ASSERT_EQ(actualGroup, expectedGroup) << StringPrintf(
537 "Expect to get VehiclePropertyGroup: %i, got %i", expectedGroup, actualGroup);
538 ASSERT_EQ(actualArea, expectedArea)
539 << StringPrintf("Expect to get VehicleArea: %i, got %i", expectedArea, actualArea);
540 ASSERT_EQ(actualPropertyType, expectedPropertyType)
541 << StringPrintf("Expect to get VehiclePropertyType: %i, got %i", expectedPropertyType,
542 actualPropertyType);
543}
544
shrikar34563642023-02-14 02:57:17 +0000545TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyLocationCharacterizationConfig) {
546 verifyProperty(VehicleProperty::LOCATION_CHARACTERIZATION, VehiclePropertyAccess::READ,
547 VehiclePropertyChangeMode::STATIC, VehiclePropertyGroup::SYSTEM,
548 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
549}
550
shrikar668df362022-12-20 22:08:17 +0000551TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyEmergencyLaneKeepAssistEnabledConfig) {
552 verifyProperty(VehicleProperty::EMERGENCY_LANE_KEEP_ASSIST_ENABLED,
553 VehiclePropertyAccess::READ_WRITE, VehiclePropertyChangeMode::ON_CHANGE,
554 VehiclePropertyGroup::SYSTEM, VehicleArea::GLOBAL, VehiclePropertyType::BOOLEAN);
555}
556
shrikar80cc0c52023-01-30 16:56:53 +0000557TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyEmergencyLaneKeepAssistStateConfig) {
558 verifyProperty(VehicleProperty::EMERGENCY_LANE_KEEP_ASSIST_STATE, VehiclePropertyAccess::READ,
559 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
560 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
561}
562
shrikar5d1b8162023-01-25 19:31:23 +0000563TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyCruiseControlEnabledConfig) {
564 verifyProperty(VehicleProperty::CRUISE_CONTROL_ENABLED, VehiclePropertyAccess::READ_WRITE,
565 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
566 VehicleArea::GLOBAL, VehiclePropertyType::BOOLEAN);
shrikar808a2942022-12-21 17:07:32 +0000567}
568
shrikard440ed42023-01-31 00:25:14 +0000569TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyCruiseControlTypeConfig) {
570 verifyProperty(VehicleProperty::CRUISE_CONTROL_TYPE, VehiclePropertyAccess::READ_WRITE,
571 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
572 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
573}
574
shrikar2753b9e2023-01-31 00:25:14 +0000575TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyCruiseControlStateConfig) {
576 verifyProperty(VehicleProperty::CRUISE_CONTROL_STATE, VehiclePropertyAccess::READ,
577 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
578 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
579}
580
shrikar5df0f952023-02-02 00:15:39 +0000581TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyCruiseControlCommandConfig) {
582 verifyProperty(VehicleProperty::CRUISE_CONTROL_COMMAND, VehiclePropertyAccess::WRITE,
583 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
584 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
585}
586
shrikarfde8c242023-02-02 01:10:33 +0000587TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyCruiseControlTargetSpeedConfig) {
588 verifyProperty(VehicleProperty::CRUISE_CONTROL_TARGET_SPEED, VehiclePropertyAccess::READ,
589 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
590 VehicleArea::GLOBAL, VehiclePropertyType::FLOAT);
591}
592
shrikarb9661d32023-02-02 19:22:50 +0000593TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyAdaptiveCruiseControlTargetTimeGapConfig) {
594 verifyProperty(VehicleProperty::ADAPTIVE_CRUISE_CONTROL_TARGET_TIME_GAP,
595 VehiclePropertyAccess::READ_WRITE, VehiclePropertyChangeMode::ON_CHANGE,
596 VehiclePropertyGroup::SYSTEM, VehicleArea::GLOBAL, VehiclePropertyType::INT32);
597}
598
shrikarf62d7472023-02-03 00:20:04 +0000599TEST_P(VtsHalAutomotiveVehicleTargetTest,
600 verifyAdaptiveCruiseControlLeadVehicleMeasuredDistanceConfig) {
601 verifyProperty(VehicleProperty::ADAPTIVE_CRUISE_CONTROL_LEAD_VEHICLE_MEASURED_DISTANCE,
602 VehiclePropertyAccess::READ, VehiclePropertyChangeMode::CONTINUOUS,
603 VehiclePropertyGroup::SYSTEM, VehicleArea::GLOBAL, VehiclePropertyType::INT32);
604}
605
shrikar37833e12022-12-15 20:13:14 +0000606TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyHandsOnDetectionEnabledConfig) {
607 verifyProperty(VehicleProperty::HANDS_ON_DETECTION_ENABLED, VehiclePropertyAccess::READ_WRITE,
608 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
609 VehicleArea::GLOBAL, VehiclePropertyType::BOOLEAN);
610}
611
shrikar6d88bf52023-01-17 17:04:21 +0000612TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyHandsOnDetectionDriverStateConfig) {
613 verifyProperty(VehicleProperty::HANDS_ON_DETECTION_DRIVER_STATE, VehiclePropertyAccess::READ,
614 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
615 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
616}
617
shrikara6785992023-01-18 23:07:06 +0000618TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyHandsOnDetectionWarningConfig) {
619 verifyProperty(VehicleProperty::HANDS_ON_DETECTION_WARNING, VehiclePropertyAccess::READ,
620 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
621 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
622}
623
Eva Chenbbb7b6d2023-11-21 00:07:14 -0800624TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyDriverDrowsinessAttentionSystemEnabledConfig) {
625 verifyProperty(VehicleProperty::DRIVER_DROWSINESS_ATTENTION_SYSTEM_ENABLED,
626 VehiclePropertyAccess::READ_WRITE, VehiclePropertyChangeMode::ON_CHANGE,
627 VehiclePropertyGroup::SYSTEM, VehicleArea::GLOBAL, VehiclePropertyType::BOOLEAN);
628}
629
Eva Chen9f1d8c02023-11-28 16:50:14 -0800630TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyDriverDrowsinessAttentionStateConfig) {
631 verifyProperty(VehicleProperty::DRIVER_DROWSINESS_ATTENTION_STATE, VehiclePropertyAccess::READ,
632 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
633 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
634}
635
Eva Chen6ec790b2023-12-01 23:37:29 -0800636TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyDriverDrowsinessAttentionWarningEnabledConfig) {
637 verifyProperty(VehicleProperty::DRIVER_DROWSINESS_ATTENTION_WARNING_ENABLED,
638 VehiclePropertyAccess::READ_WRITE, VehiclePropertyChangeMode::ON_CHANGE,
639 VehiclePropertyGroup::SYSTEM, VehicleArea::GLOBAL, VehiclePropertyType::BOOLEAN);
640}
641
Eva Chen05c548c2023-12-02 01:20:10 -0800642TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyDriverDrowsinessAttentionWarningConfig) {
643 verifyProperty(VehicleProperty::DRIVER_DROWSINESS_ATTENTION_WARNING,
644 VehiclePropertyAccess::READ, VehiclePropertyChangeMode::ON_CHANGE,
645 VehiclePropertyGroup::SYSTEM, VehicleArea::GLOBAL, VehiclePropertyType::INT32);
646}
647
Eva Chen51770b02023-12-02 15:27:31 -0800648TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyDriverDistractionSystemEnabledConfig) {
649 verifyProperty(VehicleProperty::DRIVER_DISTRACTION_SYSTEM_ENABLED,
650 VehiclePropertyAccess::READ_WRITE, VehiclePropertyChangeMode::ON_CHANGE,
651 VehiclePropertyGroup::SYSTEM, VehicleArea::GLOBAL, VehiclePropertyType::BOOLEAN);
652}
653
Eva Chena342b722023-12-04 00:40:45 -0800654TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyDriverDistractionStateConfig) {
655 verifyProperty(VehicleProperty::DRIVER_DISTRACTION_STATE, VehiclePropertyAccess::READ,
656 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
657 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
658}
659
Eva Chenc62166e2023-12-04 02:17:36 -0800660TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyDriverDistractionWarningEnabledConfig) {
661 verifyProperty(VehicleProperty::DRIVER_DISTRACTION_WARNING_ENABLED,
662 VehiclePropertyAccess::READ_WRITE, VehiclePropertyChangeMode::ON_CHANGE,
663 VehiclePropertyGroup::SYSTEM, VehicleArea::GLOBAL, VehiclePropertyType::BOOLEAN);
664}
665
Eva Chen9a0925e2023-12-04 03:52:23 -0800666TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyDriverDistractionWarningConfig) {
667 verifyProperty(VehicleProperty::DRIVER_DISTRACTION_WARNING, VehiclePropertyAccess::READ,
668 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
669 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
670}
671
Aaqib Ismailc69e9682022-11-22 12:50:00 -0800672TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyEvBrakeRegenerationLevelConfig) {
673 verifyProperty(VehicleProperty::EV_BRAKE_REGENERATION_LEVEL,
674 VehiclePropertyAccess::READ_WRITE, VehiclePropertyChangeMode::ON_CHANGE,
675 VehiclePropertyGroup::SYSTEM, VehicleArea::GLOBAL, VehiclePropertyType::INT32);
676}
677
shrikar2dae80f2022-12-21 23:50:17 +0000678TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyEvStoppingModeConfig) {
679 verifyProperty(VehicleProperty::EV_STOPPING_MODE, VehiclePropertyAccess::READ_WRITE,
680 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
681 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
682}
683
Aaqib Ismailaec678a2022-12-07 16:22:42 -0800684TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyEvCurrentBatteryCapacityConfig) {
685 verifyProperty(VehicleProperty::EV_CURRENT_BATTERY_CAPACITY, VehiclePropertyAccess::READ,
686 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
687 VehicleArea::GLOBAL, VehiclePropertyType::FLOAT);
688}
689
shrikar83914472022-12-16 20:28:47 +0000690TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyEngineIdleAutoStopEnabledConfig) {
691 verifyProperty(VehicleProperty::ENGINE_IDLE_AUTO_STOP_ENABLED,
692 VehiclePropertyAccess::READ_WRITE, VehiclePropertyChangeMode::ON_CHANGE,
693 VehiclePropertyGroup::SYSTEM, VehicleArea::GLOBAL, VehiclePropertyType::BOOLEAN);
694}
695
Aaqib Ismail20486702022-10-27 16:58:50 -0700696TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyDoorChildLockEnabledConfig) {
697 verifyProperty(VehicleProperty::DOOR_CHILD_LOCK_ENABLED, VehiclePropertyAccess::READ_WRITE,
698 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
699 VehicleArea::DOOR, VehiclePropertyType::BOOLEAN);
700}
701
Aaqib Ismail63d52d12023-01-30 12:35:10 -0800702TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyWindshieldWipersPeriodConfig) {
703 verifyProperty(VehicleProperty::WINDSHIELD_WIPERS_PERIOD, VehiclePropertyAccess::READ,
704 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
705 VehicleArea::WINDOW, VehiclePropertyType::INT32);
706}
707
Aaqib Ismail732a1d72023-01-31 10:25:45 -0800708TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyWindshieldWipersStateConfig) {
709 verifyProperty(VehicleProperty::WINDSHIELD_WIPERS_STATE, VehiclePropertyAccess::READ,
710 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
711 VehicleArea::WINDOW, VehiclePropertyType::INT32);
712}
713
Aaqib Ismailc37a2112023-02-02 11:30:08 -0800714TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyWindshieldWipersSwitchConfig) {
715 verifyProperty(VehicleProperty::WINDSHIELD_WIPERS_SWITCH, VehiclePropertyAccess::READ_WRITE,
716 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
717 VehicleArea::WINDOW, VehiclePropertyType::INT32);
718}
719
Aaqib Ismail7f941b42022-11-04 14:55:13 -0700720TEST_P(VtsHalAutomotiveVehicleTargetTest, verifySteeringWheelDepthPosConfig) {
721 verifyProperty(VehicleProperty::STEERING_WHEEL_DEPTH_POS, VehiclePropertyAccess::READ_WRITE,
722 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
723 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
724}
725
Aaqib Ismail34fe92f2022-11-04 21:41:23 -0700726TEST_P(VtsHalAutomotiveVehicleTargetTest, verifySteeringWheelDepthMoveConfig) {
727 verifyProperty(VehicleProperty::STEERING_WHEEL_DEPTH_MOVE, VehiclePropertyAccess::READ_WRITE,
728 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
729 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
730}
731
Aaqib Ismail53b81c92022-11-07 17:47:04 -0800732TEST_P(VtsHalAutomotiveVehicleTargetTest, verifySteeringWheelHeightPosConfig) {
733 verifyProperty(VehicleProperty::STEERING_WHEEL_HEIGHT_POS, VehiclePropertyAccess::READ_WRITE,
734 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
735 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
736}
737
Aaqib Ismail6c4bf192022-11-08 15:00:32 -0800738TEST_P(VtsHalAutomotiveVehicleTargetTest, verifySteeringWheelHeightMoveConfig) {
739 verifyProperty(VehicleProperty::STEERING_WHEEL_HEIGHT_MOVE, VehiclePropertyAccess::READ_WRITE,
740 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
741 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
742}
743
Aaqib Ismail8d051182022-11-09 13:28:48 -0800744TEST_P(VtsHalAutomotiveVehicleTargetTest, verifySteeringWheelTheftLockEnabledConfig) {
745 verifyProperty(VehicleProperty::STEERING_WHEEL_THEFT_LOCK_ENABLED,
746 VehiclePropertyAccess::READ_WRITE, VehiclePropertyChangeMode::ON_CHANGE,
747 VehiclePropertyGroup::SYSTEM, VehicleArea::GLOBAL, VehiclePropertyType::BOOLEAN);
748}
749
Aaqib Ismail68d3f122022-11-09 14:43:32 -0800750TEST_P(VtsHalAutomotiveVehicleTargetTest, verifySteeringWheelLockedConfig) {
751 verifyProperty(VehicleProperty::STEERING_WHEEL_LOCKED, VehiclePropertyAccess::READ_WRITE,
752 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
753 VehicleArea::GLOBAL, VehiclePropertyType::BOOLEAN);
754}
755
Aaqib Ismaild4d6adf2022-11-09 16:59:47 -0800756TEST_P(VtsHalAutomotiveVehicleTargetTest, verifySteeringWheelEasyAccessEnabledConfig) {
757 verifyProperty(VehicleProperty::STEERING_WHEEL_EASY_ACCESS_ENABLED,
758 VehiclePropertyAccess::READ_WRITE, VehiclePropertyChangeMode::ON_CHANGE,
759 VehiclePropertyGroup::SYSTEM, VehicleArea::GLOBAL, VehiclePropertyType::BOOLEAN);
760}
761
Aaqib Ismail0dc7ba02022-11-10 14:28:09 -0800762TEST_P(VtsHalAutomotiveVehicleTargetTest, verifySteeringWheelLightsStateConfig) {
763 verifyProperty(VehicleProperty::STEERING_WHEEL_LIGHTS_STATE, VehiclePropertyAccess::READ,
764 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
765 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
766}
767
Aaqib Ismail4b8688f2022-11-15 15:13:35 -0800768TEST_P(VtsHalAutomotiveVehicleTargetTest, verifySteeringWheelLightsSwitchConfig) {
769 verifyProperty(VehicleProperty::STEERING_WHEEL_LIGHTS_SWITCH, VehiclePropertyAccess::READ_WRITE,
770 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
771 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
772}
773
Arati Gerdesd86c7fd2022-12-19 12:32:29 -0800774TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyGloveBoxDoorPosConfig) {
775 verifyProperty(VehicleProperty::GLOVE_BOX_DOOR_POS, VehiclePropertyAccess::READ_WRITE,
776 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
777 VehicleArea::SEAT, VehiclePropertyType::INT32);
778}
779
Aaqib Ismail57be4032023-02-02 14:15:03 -0800780TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyGloveBoxLockedConfig) {
781 verifyProperty(VehicleProperty::GLOVE_BOX_LOCKED, VehiclePropertyAccess::READ_WRITE,
782 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
783 VehicleArea::SEAT, VehiclePropertyType::BOOLEAN);
784}
785
shrikara1367212022-11-02 16:07:35 +0000786TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyMirrorAutoFoldEnabledConfig) {
787 verifyProperty(VehicleProperty::MIRROR_AUTO_FOLD_ENABLED, VehiclePropertyAccess::READ_WRITE,
788 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
789 VehicleArea::MIRROR, VehiclePropertyType::BOOLEAN);
790}
791
792TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyMirrorAutoTiltEnabledConfig) {
793 verifyProperty(VehicleProperty::MIRROR_AUTO_TILT_ENABLED, VehiclePropertyAccess::READ_WRITE,
794 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
795 VehicleArea::MIRROR, VehiclePropertyType::BOOLEAN);
796}
797
Aaqib Ismail4e6144c2022-12-15 15:32:18 -0800798TEST_P(VtsHalAutomotiveVehicleTargetTest, verifySeatHeadrestHeightPosV2Config) {
799 verifyProperty(VehicleProperty::SEAT_HEADREST_HEIGHT_POS_V2, VehiclePropertyAccess::READ_WRITE,
800 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
801 VehicleArea::SEAT, VehiclePropertyType::INT32);
802}
803
shrikar6ae79162022-12-16 03:03:25 +0000804TEST_P(VtsHalAutomotiveVehicleTargetTest, verifySeatWalkInPosConfig) {
805 verifyProperty(VehicleProperty::SEAT_WALK_IN_POS, VehiclePropertyAccess::READ_WRITE,
806 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
807 VehicleArea::SEAT, VehiclePropertyType::INT32);
808}
809
shrikarfb65ae52022-11-03 23:12:51 +0000810TEST_P(VtsHalAutomotiveVehicleTargetTest, verifySeatFootwellLightsStateConfig) {
811 verifyProperty(VehicleProperty::SEAT_FOOTWELL_LIGHTS_STATE, VehiclePropertyAccess::READ,
812 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
813 VehicleArea::SEAT, VehiclePropertyType::INT32);
814}
815
shrikar93cf1be2022-11-30 15:00:52 -0800816TEST_P(VtsHalAutomotiveVehicleTargetTest, verifySeatFootwellLightsSwitchConfig) {
817 verifyProperty(VehicleProperty::SEAT_FOOTWELL_LIGHTS_SWITCH, VehiclePropertyAccess::READ_WRITE,
818 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
819 VehicleArea::SEAT, VehiclePropertyType::INT32);
820}
821
shrikar3326de02022-11-07 23:51:20 +0000822TEST_P(VtsHalAutomotiveVehicleTargetTest, verifySeatEasyAccessEnabledConfig) {
823 verifyProperty(VehicleProperty::SEAT_EASY_ACCESS_ENABLED, VehiclePropertyAccess::READ_WRITE,
824 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
825 VehicleArea::SEAT, VehiclePropertyType::BOOLEAN);
826}
827
shrikarb96e3762022-11-08 16:49:58 -0800828TEST_P(VtsHalAutomotiveVehicleTargetTest, verifySeatAirbagEnabledConfig) {
829 verifyProperty(VehicleProperty::SEAT_AIRBAG_ENABLED, VehiclePropertyAccess::READ_WRITE,
830 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
831 VehicleArea::SEAT, VehiclePropertyType::BOOLEAN);
832}
833
shrikar802ecb52022-11-09 18:27:06 +0000834TEST_P(VtsHalAutomotiveVehicleTargetTest, verifySeatCushionSideSupportPosConfig) {
835 verifyProperty(VehicleProperty::SEAT_CUSHION_SIDE_SUPPORT_POS,
836 VehiclePropertyAccess::READ_WRITE, VehiclePropertyChangeMode::ON_CHANGE,
837 VehiclePropertyGroup::SYSTEM, VehicleArea::SEAT, VehiclePropertyType::INT32);
838}
839
shrikar1f0ce0d2022-11-11 17:46:06 +0000840TEST_P(VtsHalAutomotiveVehicleTargetTest, verifySeatCushionSideSupportMoveConfig) {
841 verifyProperty(VehicleProperty::SEAT_CUSHION_SIDE_SUPPORT_MOVE,
842 VehiclePropertyAccess::READ_WRITE, VehiclePropertyChangeMode::ON_CHANGE,
843 VehiclePropertyGroup::SYSTEM, VehicleArea::SEAT, VehiclePropertyType::INT32);
844}
845
shrikareff71b22022-11-11 11:02:43 -0800846TEST_P(VtsHalAutomotiveVehicleTargetTest, verifySeatLumbarVerticalPosConfig) {
847 verifyProperty(VehicleProperty::SEAT_LUMBAR_VERTICAL_POS, VehiclePropertyAccess::READ_WRITE,
848 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
849 VehicleArea::SEAT, VehiclePropertyType::INT32);
850}
851
shrikar2a081c52022-11-11 16:49:58 -0800852TEST_P(VtsHalAutomotiveVehicleTargetTest, verifySeatLumbarVerticalMoveConfig) {
853 verifyProperty(VehicleProperty::SEAT_LUMBAR_VERTICAL_MOVE, VehiclePropertyAccess::READ_WRITE,
854 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
855 VehicleArea::SEAT, VehiclePropertyType::INT32);
856}
857
Aaqib Ismail5d53aa32022-12-13 22:30:23 +0000858TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyAutomaticEmergencyBrakingEnabledConfig) {
859 verifyProperty(VehicleProperty::AUTOMATIC_EMERGENCY_BRAKING_ENABLED,
860 VehiclePropertyAccess::READ_WRITE, VehiclePropertyChangeMode::ON_CHANGE,
861 VehiclePropertyGroup::SYSTEM, VehicleArea::GLOBAL, VehiclePropertyType::BOOLEAN);
862}
863
Aaqib Ismail28ee23c2023-01-04 23:04:46 -0800864TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyAutomaticEmergencyBrakingStateConfig) {
865 verifyProperty(VehicleProperty::AUTOMATIC_EMERGENCY_BRAKING_STATE, VehiclePropertyAccess::READ,
866 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
867 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
868}
869
Aaqib Ismaila2513672022-12-15 00:55:27 +0000870TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyForwardCollisionWarningEnabledConfig) {
871 verifyProperty(VehicleProperty::FORWARD_COLLISION_WARNING_ENABLED,
872 VehiclePropertyAccess::READ_WRITE, VehiclePropertyChangeMode::ON_CHANGE,
873 VehiclePropertyGroup::SYSTEM, VehicleArea::GLOBAL, VehiclePropertyType::BOOLEAN);
874}
875
Aaqib Ismail0a1ab292023-01-19 21:33:56 +0000876TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyForwardCollisionWarningStateConfig) {
877 verifyProperty(VehicleProperty::FORWARD_COLLISION_WARNING_STATE, VehiclePropertyAccess::READ,
878 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
879 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
880}
881
Aaqib Ismail3f7177a2022-12-17 09:20:00 -0800882TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyBlindSpotWarningEnabledConfig) {
883 verifyProperty(VehicleProperty::BLIND_SPOT_WARNING_ENABLED, VehiclePropertyAccess::READ_WRITE,
884 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
885 VehicleArea::GLOBAL, VehiclePropertyType::BOOLEAN);
886}
887
Aaqib Ismail5fc97bb2023-01-10 17:07:47 -0800888TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyBlindSpotWarningStateConfig) {
889 verifyProperty(VehicleProperty::BLIND_SPOT_WARNING_STATE, VehiclePropertyAccess::READ,
890 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
891 VehicleArea::MIRROR, VehiclePropertyType::INT32);
892}
893
Aaqib Ismail7a46cef2022-12-17 10:00:59 -0800894TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyLaneDepartureWarningEnabledConfig) {
895 verifyProperty(VehicleProperty::LANE_DEPARTURE_WARNING_ENABLED,
896 VehiclePropertyAccess::READ_WRITE, VehiclePropertyChangeMode::ON_CHANGE,
897 VehiclePropertyGroup::SYSTEM, VehicleArea::GLOBAL, VehiclePropertyType::BOOLEAN);
898}
899
Aaqib Ismail8462db52023-01-27 19:59:49 -0800900TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyLaneDepartureWarningStateConfig) {
901 verifyProperty(VehicleProperty::LANE_DEPARTURE_WARNING_STATE, VehiclePropertyAccess::READ,
902 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
903 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
904}
905
Aaqib Ismail20cc66a2022-12-22 05:38:28 -0800906TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyLaneKeepAssistEnabledConfig) {
907 verifyProperty(VehicleProperty::LANE_KEEP_ASSIST_ENABLED, VehiclePropertyAccess::READ_WRITE,
908 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
909 VehicleArea::GLOBAL, VehiclePropertyType::BOOLEAN);
910}
911
Aaqib Ismail78db2ca2023-01-10 17:34:28 -0800912TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyLaneKeepAssistStateConfig) {
913 verifyProperty(VehicleProperty::LANE_KEEP_ASSIST_STATE, VehiclePropertyAccess::READ,
914 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
915 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
916}
917
Aaqib Ismailb1680a72022-12-14 23:28:49 +0000918TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyLaneCenteringAssistEnabledConfig) {
919 verifyProperty(VehicleProperty::LANE_CENTERING_ASSIST_ENABLED,
920 VehiclePropertyAccess::READ_WRITE, VehiclePropertyChangeMode::ON_CHANGE,
921 VehiclePropertyGroup::SYSTEM, VehicleArea::GLOBAL, VehiclePropertyType::BOOLEAN);
922}
923
Aaqib Ismail0ffd39c2023-01-11 12:19:10 -0800924TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyLaneCenteringAssistCommandConfig) {
925 verifyProperty(VehicleProperty::LANE_CENTERING_ASSIST_COMMAND, VehiclePropertyAccess::WRITE,
926 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
927 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
928}
929
Aaqib Ismaildb034442023-01-10 18:14:28 -0800930TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyLaneCenteringAssistStateConfig) {
931 verifyProperty(VehicleProperty::LANE_CENTERING_ASSIST_STATE, VehiclePropertyAccess::READ,
932 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
933 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
934}
935
Yuncheol Heo8fbbfd12023-09-27 15:43:59 -0700936TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyClusterHeartbeatConfig) {
937 verifyProperty(VehicleProperty::CLUSTER_HEARTBEAT, VehiclePropertyAccess::WRITE,
938 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
939 VehicleArea::GLOBAL, VehiclePropertyType::MIXED);
940}
941
shrikard6f9f8e2023-11-02 22:35:28 +0000942TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyVehicleDrivingAutomationCurrentLevelConfig) {
943 verifyProperty(VehicleProperty::VEHICLE_DRIVING_AUTOMATION_CURRENT_LEVEL,
944 VehiclePropertyAccess::READ, VehiclePropertyChangeMode::ON_CHANGE,
945 VehiclePropertyGroup::SYSTEM, VehicleArea::GLOBAL, VehiclePropertyType::INT32);
946}
947
shrikar420b31d2023-11-07 16:15:35 +0000948TEST_P(VtsHalAutomotiveVehicleTargetTest, verifySeatAirbagsDeployedConfig) {
949 verifyProperty(VehicleProperty::SEAT_AIRBAGS_DEPLOYED, VehiclePropertyAccess::READ,
950 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
951 VehicleArea::SEAT, VehiclePropertyType::INT32);
952}
953
shrikar7717aa82023-11-07 21:05:46 +0000954TEST_P(VtsHalAutomotiveVehicleTargetTest, verifySeatBeltPretensionerDeployedConfig) {
955 verifyProperty(VehicleProperty::SEAT_BELT_PRETENSIONER_DEPLOYED, VehiclePropertyAccess::READ,
956 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
957 VehicleArea::SEAT, VehiclePropertyType::BOOLEAN);
958}
959
shrikard816e042023-11-08 20:12:55 +0000960TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyImpactDetectedConfig) {
961 verifyProperty(VehicleProperty::IMPACT_DETECTED, VehiclePropertyAccess::READ,
962 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
963 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
964}
965
shrikara492e7d2023-11-09 00:27:54 +0000966TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyEvBatteryAverageTemperatureConfig) {
967 verifyProperty(VehicleProperty::EV_BATTERY_AVERAGE_TEMPERATURE, VehiclePropertyAccess::READ,
968 VehiclePropertyChangeMode::CONTINUOUS, VehiclePropertyGroup::SYSTEM,
969 VehicleArea::GLOBAL, VehiclePropertyType::FLOAT);
970}
971
shrikar45df34b2023-11-10 21:14:17 +0000972TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyLowSpeedCollisionWarningEnabledConfig) {
973 verifyProperty(VehicleProperty::LOW_SPEED_COLLISION_WARNING_ENABLED,
974 VehiclePropertyAccess::READ_WRITE, VehiclePropertyChangeMode::ON_CHANGE,
975 VehiclePropertyGroup::SYSTEM, VehicleArea::GLOBAL, VehiclePropertyType::BOOLEAN);
976}
977
shrikar858c4e12023-11-14 17:33:11 +0000978TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyLowSpeedCollisionWarningStateConfig) {
979 verifyProperty(VehicleProperty::LOW_SPEED_COLLISION_WARNING_STATE, VehiclePropertyAccess::READ,
980 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
981 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
982}
983
shrikar84866f72023-11-27 00:30:59 +0000984TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyValetModeEnabledConfig) {
985 verifyProperty(VehicleProperty::VALET_MODE_ENABLED, VehiclePropertyAccess::READ_WRITE,
986 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
987 VehicleArea::GLOBAL, VehiclePropertyType::BOOLEAN);
988}
989
shrikar33a33692023-11-30 01:38:01 +0000990TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyElectronicStabilityControlEnabledConfig) {
991 verifyProperty(VehicleProperty::ELECTRONIC_STABILITY_CONTROL_ENABLED,
992 VehiclePropertyAccess::READ_WRITE, VehiclePropertyChangeMode::ON_CHANGE,
993 VehiclePropertyGroup::SYSTEM, VehicleArea::GLOBAL, VehiclePropertyType::BOOLEAN);
994}
995
shrikara45d1cf2023-11-27 17:40:46 +0000996TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyElectronicStabilityControlStateConfig) {
997 verifyProperty(VehicleProperty::ELECTRONIC_STABILITY_CONTROL_STATE, VehiclePropertyAccess::READ,
998 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
999 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
1000}
1001
shrikar7fde8f52023-11-27 22:47:53 +00001002TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyCrossTrafficMonitoringEnabledConfig) {
1003 verifyProperty(VehicleProperty::CROSS_TRAFFIC_MONITORING_ENABLED,
1004 VehiclePropertyAccess::READ_WRITE, VehiclePropertyChangeMode::ON_CHANGE,
1005 VehiclePropertyGroup::SYSTEM, VehicleArea::GLOBAL, VehiclePropertyType::BOOLEAN);
1006}
1007
shrikar813ba7c2023-11-28 18:35:34 +00001008TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyCrossTrafficMonitoringWarningStateConfig) {
1009 verifyProperty(VehicleProperty::CROSS_TRAFFIC_MONITORING_WARNING_STATE,
1010 VehiclePropertyAccess::READ, VehiclePropertyChangeMode::ON_CHANGE,
1011 VehiclePropertyGroup::SYSTEM, VehicleArea::GLOBAL, VehiclePropertyType::INT32);
1012}
1013
shrikar55559892023-12-01 23:35:06 +00001014TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyHeadUpDisplayEnabledConfig) {
1015 verifyProperty(VehicleProperty::HEAD_UP_DISPLAY_ENABLED, VehiclePropertyAccess::READ_WRITE,
1016 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
1017 VehicleArea::SEAT, VehiclePropertyType::BOOLEAN);
1018}
1019
shrikard11b9f82023-12-04 17:39:28 +00001020TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyLowSpeedAutomaticEmergencyBrakingEnabledConfig) {
1021 verifyProperty(VehicleProperty::LOW_SPEED_AUTOMATIC_EMERGENCY_BRAKING_ENABLED,
1022 VehiclePropertyAccess::READ_WRITE, VehiclePropertyChangeMode::ON_CHANGE,
1023 VehiclePropertyGroup::SYSTEM, VehicleArea::GLOBAL, VehiclePropertyType::BOOLEAN);
1024}
1025
Yu Shan0ebd8762023-10-11 11:31:04 -07001026bool VtsHalAutomotiveVehicleTargetTest::checkIsSupported(int32_t propertyId) {
Yu Shanec5d5b02023-10-09 14:43:36 -07001027 auto result = mVhalClient->getPropConfigs({propertyId});
Yu Shan0ebd8762023-10-11 11:31:04 -07001028 return result.ok();
Yu Shanec5d5b02023-10-09 14:43:36 -07001029}
1030
Yu Shan726d51a2022-02-22 17:37:21 -08001031std::vector<ServiceDescriptor> getDescriptors() {
1032 std::vector<ServiceDescriptor> descriptors;
1033 for (std::string name : getAidlHalInstanceNames(IVehicle::descriptor)) {
1034 descriptors.push_back({
1035 .name = name,
1036 .isAidlService = true,
1037 });
1038 }
1039 for (std::string name : getAllHalInstanceNames(IVehicle::descriptor)) {
1040 descriptors.push_back({
1041 .name = name,
1042 .isAidlService = false,
1043 });
1044 }
1045 return descriptors;
1046}
1047
1048GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(VtsHalAutomotiveVehicleTargetTest);
1049
1050INSTANTIATE_TEST_SUITE_P(PerInstance, VtsHalAutomotiveVehicleTargetTest,
1051 testing::ValuesIn(getDescriptors()),
1052 [](const testing::TestParamInfo<ServiceDescriptor>& info) {
1053 std::string name = "";
1054 if (info.param.isAidlService) {
1055 name += "aidl_";
1056 } else {
1057 name += "hidl_";
1058 }
1059 name += info.param.name;
1060 return Sanitize(name);
1061 });
1062
1063int main(int argc, char** argv) {
1064 ::testing::InitGoogleTest(&argc, argv);
1065 ABinderProcess_setThreadPoolMaxThreadCount(1);
1066 return RUN_ALL_TESTS();
1067}