blob: 65cea263aae1151a213881fae8526f02ebd2ad47 [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>
Yu Shan928062c2024-01-25 17:40:41 -080028#include <android/hardware/automotive/vehicle/2.0/IVehicle.h>
Yu Shan726d51a2022-02-22 17:37:21 -080029#include <gtest/gtest.h>
30#include <hidl/GtestPrinter.h>
31#include <hidl/ServiceManagement.h>
32#include <inttypes.h>
33#include <utils/Log.h>
Yu Shan4569ef52022-03-18 14:34:25 -070034#include <utils/SystemClock.h>
Yu Shan726d51a2022-02-22 17:37:21 -080035
36#include <chrono>
37#include <mutex>
Yu Shan1837df02024-01-24 16:14:21 -080038#include <thread>
Yu Shan726d51a2022-02-22 17:37:21 -080039#include <unordered_map>
40#include <unordered_set>
41#include <vector>
42
43using ::aidl::android::hardware::automotive::vehicle::IVehicle;
Yu Shan726d51a2022-02-22 17:37:21 -080044using ::aidl::android::hardware::automotive::vehicle::SubscribeOptions;
45using ::aidl::android::hardware::automotive::vehicle::VehicleArea;
46using ::aidl::android::hardware::automotive::vehicle::VehicleProperty;
47using ::aidl::android::hardware::automotive::vehicle::VehiclePropertyAccess;
Aaqib Ismail20486702022-10-27 16:58:50 -070048using ::aidl::android::hardware::automotive::vehicle::VehiclePropertyChangeMode;
49using ::aidl::android::hardware::automotive::vehicle::VehiclePropertyGroup;
Yu Shan1837df02024-01-24 16:14:21 -080050using ::aidl::android::hardware::automotive::vehicle::VehiclePropertyStatus;
Yu Shan726d51a2022-02-22 17:37:21 -080051using ::aidl::android::hardware::automotive::vehicle::VehiclePropertyType;
52using ::android::getAidlHalInstanceNames;
Yu Shan1837df02024-01-24 16:14:21 -080053using ::android::uptimeMillis;
Yu Shan726d51a2022-02-22 17:37:21 -080054using ::android::base::ScopedLockAssertion;
55using ::android::base::StringPrintf;
Chen Chengfaf9adc2022-06-22 23:09:09 +000056using ::android::frameworks::automotive::vhal::ErrorCode;
Yu Shan726d51a2022-02-22 17:37:21 -080057using ::android::frameworks::automotive::vhal::HalPropError;
58using ::android::frameworks::automotive::vhal::IHalPropConfig;
59using ::android::frameworks::automotive::vhal::IHalPropValue;
60using ::android::frameworks::automotive::vhal::ISubscriptionCallback;
61using ::android::frameworks::automotive::vhal::IVhalClient;
Yu Shan1837df02024-01-24 16:14:21 -080062using ::android::frameworks::automotive::vhal::VhalClientResult;
Yu Shan726d51a2022-02-22 17:37:21 -080063using ::android::hardware::getAllHalInstanceNames;
64using ::android::hardware::Sanitize;
65using ::android::hardware::automotive::vehicle::toInt;
66
67constexpr int32_t kInvalidProp = 0x31600207;
Yu Shan1837df02024-01-24 16:14:21 -080068// The timeout for retrying getting prop value after setting prop value.
69constexpr int64_t kRetryGetPropAfterSetPropTimeoutMillis = 10'000;
Yu Shan726d51a2022-02-22 17:37:21 -080070
71struct ServiceDescriptor {
72 std::string name;
73 bool isAidlService;
74};
75
76class VtsVehicleCallback final : public ISubscriptionCallback {
77 private:
78 std::mutex mLock;
79 std::unordered_map<int32_t, size_t> mEventsCount GUARDED_BY(mLock);
Yu Shan4569ef52022-03-18 14:34:25 -070080 std::unordered_map<int32_t, std::vector<int64_t>> mEventTimestamps GUARDED_BY(mLock);
Yu Shan726d51a2022-02-22 17:37:21 -080081 std::condition_variable mEventCond;
82
83 public:
84 void onPropertyEvent(const std::vector<std::unique_ptr<IHalPropValue>>& values) override {
85 {
86 std::lock_guard<std::mutex> lockGuard(mLock);
87 for (auto& value : values) {
Yu Shan4569ef52022-03-18 14:34:25 -070088 int32_t propId = value->getPropId();
89 mEventsCount[propId] += 1;
90 mEventTimestamps[propId].push_back(value->getTimestamp());
Yu Shan726d51a2022-02-22 17:37:21 -080091 }
92 }
93 mEventCond.notify_one();
94 }
95
96 void onPropertySetError([[maybe_unused]] const std::vector<HalPropError>& errors) override {
97 // Do nothing.
98 }
99
100 template <class Rep, class Period>
101 bool waitForExpectedEvents(int32_t propId, size_t expectedEvents,
102 const std::chrono::duration<Rep, Period>& timeout) {
103 std::unique_lock<std::mutex> uniqueLock(mLock);
104 return mEventCond.wait_for(uniqueLock, timeout, [this, propId, expectedEvents] {
105 ScopedLockAssertion lockAssertion(mLock);
106 return mEventsCount[propId] >= expectedEvents;
107 });
108 }
109
Yu Shan4569ef52022-03-18 14:34:25 -0700110 std::vector<int64_t> getEventTimestamps(int32_t propId) {
111 {
112 std::lock_guard<std::mutex> lockGuard(mLock);
113 return mEventTimestamps[propId];
114 }
115 }
116
Yu Shan726d51a2022-02-22 17:37:21 -0800117 void reset() {
118 std::lock_guard<std::mutex> lockGuard(mLock);
119 mEventsCount.clear();
120 }
121};
122
123class VtsHalAutomotiveVehicleTargetTest : public testing::TestWithParam<ServiceDescriptor> {
Yu Shan8a1ab872023-10-09 14:43:36 -0700124 protected:
125 bool checkIsSupported(int32_t propertyId);
Yu Shan1837df02024-01-24 16:14:21 -0800126 VehiclePropertyStatus getStatus(const IHalPropValue& halPropValue);
127 bool isUnavailable(const VhalClientResult<std::unique_ptr<IHalPropValue>>& result);
128 bool isResultOkayWithValue(const VhalClientResult<std::unique_ptr<IHalPropValue>>& result,
129 int32_t value);
Yu Shan8a1ab872023-10-09 14:43:36 -0700130
Yu Shan726d51a2022-02-22 17:37:21 -0800131 public:
Aaqib Ismail20486702022-10-27 16:58:50 -0700132 void verifyProperty(VehicleProperty propId, VehiclePropertyAccess access,
133 VehiclePropertyChangeMode changeMode, VehiclePropertyGroup group,
134 VehicleArea area, VehiclePropertyType propertyType);
Yu Shan726d51a2022-02-22 17:37:21 -0800135 virtual void SetUp() override {
136 auto descriptor = GetParam();
137 if (descriptor.isAidlService) {
138 mVhalClient = IVhalClient::tryCreateAidlClient(descriptor.name.c_str());
139 } else {
140 mVhalClient = IVhalClient::tryCreateHidlClient(descriptor.name.c_str());
141 }
142
143 ASSERT_NE(mVhalClient, nullptr) << "Failed to connect to VHAL";
144
145 mCallback = std::make_shared<VtsVehicleCallback>();
146 }
147
148 static bool isBooleanGlobalProp(int32_t property) {
149 return (property & toInt(VehiclePropertyType::MASK)) ==
150 toInt(VehiclePropertyType::BOOLEAN) &&
151 (property & toInt(VehicleArea::MASK)) == toInt(VehicleArea::GLOBAL);
152 }
153
154 protected:
155 std::shared_ptr<IVhalClient> mVhalClient;
156 std::shared_ptr<VtsVehicleCallback> mCallback;
157};
158
159TEST_P(VtsHalAutomotiveVehicleTargetTest, useAidlBackend) {
160 if (!mVhalClient->isAidlVhal()) {
161 GTEST_SKIP() << "AIDL backend is not available, HIDL backend is used instead";
162 }
163}
164
165TEST_P(VtsHalAutomotiveVehicleTargetTest, useHidlBackend) {
166 if (mVhalClient->isAidlVhal()) {
167 GTEST_SKIP() << "AIDL backend is available, HIDL backend is not used";
168 }
169}
170
Yu Shan8a1ab872023-10-09 14:43:36 -0700171// Test getAllPropConfigs() returns at least 1 property configs.
Yu Shan726d51a2022-02-22 17:37:21 -0800172TEST_P(VtsHalAutomotiveVehicleTargetTest, getAllPropConfigs) {
173 ALOGD("VtsHalAutomotiveVehicleTargetTest::getAllPropConfigs");
174
175 auto result = mVhalClient->getAllPropConfigs();
176
177 ASSERT_TRUE(result.ok()) << "Failed to get all property configs, error: "
178 << result.error().message();
Yu Shanec5d5b02023-10-09 14:43:36 -0700179 ASSERT_GE(result.value().size(), 1u) << StringPrintf(
180 "Expect to get at least 1 property config, got %zu", result.value().size());
Yu Shan726d51a2022-02-22 17:37:21 -0800181}
182
Yu Shan8a1ab872023-10-09 14:43:36 -0700183// Test getPropConfigs() can query properties returned by getAllPropConfigs.
184TEST_P(VtsHalAutomotiveVehicleTargetTest, getPropConfigsWithValidProps) {
Yu Shan726d51a2022-02-22 17:37:21 -0800185 ALOGD("VtsHalAutomotiveVehicleTargetTest::getRequiredPropConfigs");
186
Yu Shan8a1ab872023-10-09 14:43:36 -0700187 std::vector<int32_t> properties;
188 auto result = mVhalClient->getAllPropConfigs();
Yu Shan726d51a2022-02-22 17:37:21 -0800189
Yu Shan8a1ab872023-10-09 14:43:36 -0700190 ASSERT_TRUE(result.ok()) << "Failed to get all property configs, error: "
191 << result.error().message();
192 for (const auto& cfgPtr : result.value()) {
193 properties.push_back(cfgPtr->getPropId());
194 }
195
196 result = mVhalClient->getPropConfigs(properties);
Yu Shan726d51a2022-02-22 17:37:21 -0800197
198 ASSERT_TRUE(result.ok()) << "Failed to get required property config, error: "
199 << result.error().message();
Yu Shanec5d5b02023-10-09 14:43:36 -0700200 ASSERT_EQ(result.value().size(), properties.size()) << StringPrintf(
201 "Expect to get exactly %zu configs, got %zu", properties.size(), result.value().size());
Yu Shan726d51a2022-02-22 17:37:21 -0800202}
203
204// Test getPropConfig() with an invalid propertyId returns an error code.
205TEST_P(VtsHalAutomotiveVehicleTargetTest, getPropConfigsWithInvalidProp) {
206 ALOGD("VtsHalAutomotiveVehicleTargetTest::getPropConfigsWithInvalidProp");
207
208 auto result = mVhalClient->getPropConfigs({kInvalidProp});
209
210 ASSERT_FALSE(result.ok()) << StringPrintf(
211 "Expect failure to get prop configs for invalid prop: %" PRId32, kInvalidProp);
212 ASSERT_NE(result.error().message(), "") << "Expect error message not to be empty";
213}
214
215// Test get() return current value for properties.
216TEST_P(VtsHalAutomotiveVehicleTargetTest, get) {
217 ALOGD("VtsHalAutomotiveVehicleTargetTest::get");
218
219 int32_t propId = toInt(VehicleProperty::PERF_VEHICLE_SPEED);
Yu Shan8a1ab872023-10-09 14:43:36 -0700220 if (!checkIsSupported(propId)) {
221 GTEST_SKIP() << "Property: " << propId << " is not supported, skip the test";
222 }
Yu Shan726d51a2022-02-22 17:37:21 -0800223 auto result = mVhalClient->getValueSync(*mVhalClient->createHalPropValue(propId));
224
225 ASSERT_TRUE(result.ok()) << StringPrintf("Failed to get value for property: %" PRId32
226 ", error: %s",
227 propId, result.error().message().c_str());
228 ASSERT_NE(result.value(), nullptr) << "Result value must not be null";
229}
230
231// Test get() with an invalid propertyId return an error codes.
232TEST_P(VtsHalAutomotiveVehicleTargetTest, getInvalidProp) {
233 ALOGD("VtsHalAutomotiveVehicleTargetTest::getInvalidProp");
234
235 auto result = mVhalClient->getValueSync(*mVhalClient->createHalPropValue(kInvalidProp));
236
237 ASSERT_FALSE(result.ok()) << StringPrintf(
238 "Expect failure to get property for invalid prop: %" PRId32, kInvalidProp);
239}
240
Yu Shan1837df02024-01-24 16:14:21 -0800241VehiclePropertyStatus VtsHalAutomotiveVehicleTargetTest::getStatus(
242 const IHalPropValue& halPropValue) {
243 if (mVhalClient->isAidlVhal()) {
244 return reinterpret_cast<
245 const aidl::android::hardware::automotive::vehicle::VehiclePropValue*>(
246 halPropValue.toVehiclePropValue())
247 ->status;
248 }
249 return static_cast<VehiclePropertyStatus>(
250 reinterpret_cast<const android::hardware::automotive::vehicle::V2_0::VehiclePropValue*>(
251 halPropValue.toVehiclePropValue())
252 ->status);
253}
254
255bool VtsHalAutomotiveVehicleTargetTest::isResultOkayWithValue(
256 const VhalClientResult<std::unique_ptr<IHalPropValue>>& result, int32_t value) {
257 return result.ok() && result.value() != nullptr &&
258 getStatus(*(result.value())) == VehiclePropertyStatus::AVAILABLE &&
259 result.value()->getInt32Values().size() == 1 &&
260 result.value()->getInt32Values()[0] == value;
261}
262
263bool VtsHalAutomotiveVehicleTargetTest::isUnavailable(
264 const VhalClientResult<std::unique_ptr<IHalPropValue>>& result) {
265 if (!result.ok()) {
266 return result.error().code() == ErrorCode::NOT_AVAILABLE_FROM_VHAL;
267 }
268 if (result.value() != nullptr &&
269 getStatus(*(result.value())) == VehiclePropertyStatus::UNAVAILABLE) {
270 return true;
271 }
272
273 return false;
274}
275
Yu Shan726d51a2022-02-22 17:37:21 -0800276// Test set() on read_write properties.
277TEST_P(VtsHalAutomotiveVehicleTargetTest, setProp) {
278 ALOGD("VtsHalAutomotiveVehicleTargetTest::setProp");
279
280 // skip hvac related properties
281 std::unordered_set<int32_t> hvacProps = {toInt(VehicleProperty::HVAC_DEFROSTER),
282 toInt(VehicleProperty::HVAC_AC_ON),
283 toInt(VehicleProperty::HVAC_MAX_AC_ON),
284 toInt(VehicleProperty::HVAC_MAX_DEFROST_ON),
285 toInt(VehicleProperty::HVAC_RECIRC_ON),
286 toInt(VehicleProperty::HVAC_DUAL_ON),
287 toInt(VehicleProperty::HVAC_AUTO_ON),
288 toInt(VehicleProperty::HVAC_POWER_ON),
289 toInt(VehicleProperty::HVAC_AUTO_RECIRC_ON),
290 toInt(VehicleProperty::HVAC_ELECTRIC_DEFROSTER_ON)};
291 auto result = mVhalClient->getAllPropConfigs();
292 ASSERT_TRUE(result.ok());
293
294 for (const auto& cfgPtr : result.value()) {
295 const IHalPropConfig& cfg = *cfgPtr;
296 int32_t propId = cfg.getPropId();
297 // test on boolean and writable property
298 if (cfg.getAccess() == toInt(VehiclePropertyAccess::READ_WRITE) &&
299 isBooleanGlobalProp(propId) && !hvacProps.count(propId)) {
300 auto propToGet = mVhalClient->createHalPropValue(propId);
301 auto getValueResult = mVhalClient->getValueSync(*propToGet);
302
Yu Shan1837df02024-01-24 16:14:21 -0800303 if (isUnavailable(getValueResult)) {
304 ALOGW("getProperty for %" PRId32
305 " returns NOT_AVAILABLE, "
306 "skip testing setProp",
307 propId);
308 return;
309 }
310
Yu Shan726d51a2022-02-22 17:37:21 -0800311 ASSERT_TRUE(getValueResult.ok())
312 << StringPrintf("Failed to get value for property: %" PRId32 ", error: %s",
313 propId, getValueResult.error().message().c_str());
314 ASSERT_NE(getValueResult.value(), nullptr)
315 << StringPrintf("Result value must not be null for property: %" PRId32, propId);
316
317 const IHalPropValue& value = *getValueResult.value();
318 size_t intValueSize = value.getInt32Values().size();
319 ASSERT_EQ(intValueSize, 1u) << StringPrintf(
320 "Expect exactly 1 int value for boolean property: %" PRId32 ", got %zu", propId,
321 intValueSize);
322
Yu Shan1837df02024-01-24 16:14:21 -0800323 int32_t setValue = value.getInt32Values()[0] == 1 ? 0 : 1;
Yu Shan726d51a2022-02-22 17:37:21 -0800324 auto propToSet = mVhalClient->createHalPropValue(propId);
325 propToSet->setInt32Values({setValue});
326 auto setValueResult = mVhalClient->setValueSync(*propToSet);
327
Yu Shan1837df02024-01-24 16:14:21 -0800328 if (!setValueResult.ok() &&
329 setValueResult.error().code() == ErrorCode::NOT_AVAILABLE_FROM_VHAL) {
330 ALOGW("setProperty for %" PRId32
331 " returns NOT_AVAILABLE, "
332 "skip verifying getProperty returns the same value",
333 propId);
334 return;
335 }
336
Yu Shan726d51a2022-02-22 17:37:21 -0800337 ASSERT_TRUE(setValueResult.ok())
338 << StringPrintf("Failed to set value for property: %" PRId32 ", error: %s",
339 propId, setValueResult.error().message().c_str());
Yu Shan1837df02024-01-24 16:14:21 -0800340 // Retry getting the value until we pass the timeout. getValue might not return
341 // the expected value immediately since setValue is async.
342 auto timeoutMillis = uptimeMillis() + kRetryGetPropAfterSetPropTimeoutMillis;
Yu Shan726d51a2022-02-22 17:37:21 -0800343
Yu Shan1837df02024-01-24 16:14:21 -0800344 while (true) {
345 getValueResult = mVhalClient->getValueSync(*propToGet);
346 if (isResultOkayWithValue(getValueResult, setValue)) {
347 break;
348 }
349 if (uptimeMillis() >= timeoutMillis) {
350 // Reach timeout, the following assert should fail.
351 break;
352 }
353 // Sleep for 100ms between each getValueSync retry.
354 std::this_thread::sleep_for(std::chrono::milliseconds(100));
355 }
356
357 if (isUnavailable(getValueResult)) {
358 ALOGW("getProperty for %" PRId32
359 " returns NOT_AVAILABLE, "
360 "skip verifying the return value",
361 propId);
362 return;
363 }
364
Yu Shan726d51a2022-02-22 17:37:21 -0800365 ASSERT_TRUE(getValueResult.ok())
366 << StringPrintf("Failed to get value for property: %" PRId32 ", error: %s",
367 propId, getValueResult.error().message().c_str());
368 ASSERT_NE(getValueResult.value(), nullptr)
369 << StringPrintf("Result value must not be null for property: %" PRId32, propId);
370 ASSERT_EQ(getValueResult.value()->getInt32Values(), std::vector<int32_t>({setValue}))
371 << StringPrintf("Boolean value not updated after set for property: %" PRId32,
372 propId);
373 }
374 }
375}
376
377// Test set() on an read_only property.
378TEST_P(VtsHalAutomotiveVehicleTargetTest, setNotWritableProp) {
379 ALOGD("VtsHalAutomotiveVehicleTargetTest::setNotWritableProp");
380
381 int32_t propId = toInt(VehicleProperty::PERF_VEHICLE_SPEED);
Yu Shan8a1ab872023-10-09 14:43:36 -0700382 if (!checkIsSupported(propId)) {
383 GTEST_SKIP() << "Property: " << propId << " is not supported, skip the test";
384 }
385
Yu Shan726d51a2022-02-22 17:37:21 -0800386 auto getValueResult = mVhalClient->getValueSync(*mVhalClient->createHalPropValue(propId));
387 ASSERT_TRUE(getValueResult.ok())
388 << StringPrintf("Failed to get value for property: %" PRId32 ", error: %s", propId,
389 getValueResult.error().message().c_str());
390
391 auto setValueResult = mVhalClient->setValueSync(*getValueResult.value());
392
393 ASSERT_FALSE(setValueResult.ok()) << "Expect set a read-only value to fail";
Chen Chengfaf9adc2022-06-22 23:09:09 +0000394 ASSERT_EQ(setValueResult.error().code(), ErrorCode::ACCESS_DENIED_FROM_VHAL);
Yu Shan726d51a2022-02-22 17:37:21 -0800395}
396
shrikar8a140232023-03-07 16:57:59 +0000397// Test get(), set() and getAllPropConfigs() on VehicleProperty::INVALID.
398TEST_P(VtsHalAutomotiveVehicleTargetTest, getSetPropertyIdInvalid) {
399 ALOGD("VtsHalAutomotiveVehicleTargetTest::getSetPropertyIdInvalid");
400
401 int32_t propId = toInt(VehicleProperty::INVALID);
402 auto getValueResult = mVhalClient->getValueSync(*mVhalClient->createHalPropValue(propId));
403 ASSERT_FALSE(getValueResult.ok()) << "Expect get on VehicleProperty::INVALID to fail";
404 ASSERT_EQ(getValueResult.error().code(), ErrorCode::INVALID_ARG);
405
406 auto propToSet = mVhalClient->createHalPropValue(propId);
407 propToSet->setInt32Values({0});
408 auto setValueResult = mVhalClient->setValueSync(*propToSet);
409 ASSERT_FALSE(setValueResult.ok()) << "Expect set on VehicleProperty::INVALID to fail";
410 ASSERT_EQ(setValueResult.error().code(), ErrorCode::INVALID_ARG);
411
412 auto result = mVhalClient->getAllPropConfigs();
413 ASSERT_TRUE(result.ok());
414 for (const auto& cfgPtr : result.value()) {
415 const IHalPropConfig& cfg = *cfgPtr;
416 ASSERT_FALSE(cfg.getPropId() == propId) << "Expect VehicleProperty::INVALID to not be "
417 "included in propConfigs";
418 }
419}
420
Yu Shan726d51a2022-02-22 17:37:21 -0800421// Test subscribe() and unsubscribe().
422TEST_P(VtsHalAutomotiveVehicleTargetTest, subscribeAndUnsubscribe) {
423 ALOGD("VtsHalAutomotiveVehicleTargetTest::subscribeAndUnsubscribe");
424
425 int32_t propId = toInt(VehicleProperty::PERF_VEHICLE_SPEED);
Yu Shan8a1ab872023-10-09 14:43:36 -0700426 if (!checkIsSupported(propId)) {
427 GTEST_SKIP() << "Property: " << propId << " is not supported, skip the test";
428 }
Yu Shan726d51a2022-02-22 17:37:21 -0800429
Yu Shan4569ef52022-03-18 14:34:25 -0700430 auto propConfigsResult = mVhalClient->getPropConfigs({propId});
431
432 ASSERT_TRUE(propConfigsResult.ok()) << "Failed to get property config for PERF_VEHICLE_SPEED: "
433 << "error: " << propConfigsResult.error().message();
434 ASSERT_EQ(propConfigsResult.value().size(), 1u)
435 << "Expect to return 1 config for PERF_VEHICLE_SPEED";
436 auto& propConfig = propConfigsResult.value()[0];
437 float minSampleRate = propConfig->getMinSampleRate();
438 float maxSampleRate = propConfig->getMaxSampleRate();
439
440 if (minSampleRate < 1) {
441 GTEST_SKIP() << "Sample rate for vehicle speed < 1 times/sec, skip test since it would "
442 "take too long";
443 }
Yu Shan726d51a2022-02-22 17:37:21 -0800444
445 auto client = mVhalClient->getSubscriptionClient(mCallback);
446 ASSERT_NE(client, nullptr) << "Failed to get subscription client";
447
Yu Shan4569ef52022-03-18 14:34:25 -0700448 auto result = client->subscribe({{.propId = propId, .sampleRate = minSampleRate}});
Yu Shan726d51a2022-02-22 17:37:21 -0800449
450 ASSERT_TRUE(result.ok()) << StringPrintf("Failed to subscribe to property: %" PRId32
451 ", error: %s",
452 propId, result.error().message().c_str());
Yu Shan4569ef52022-03-18 14:34:25 -0700453
454 if (mVhalClient->isAidlVhal()) {
455 // Skip checking timestamp for HIDL because the behavior for sample rate and timestamp is
456 // only specified clearly for AIDL.
457
458 // Timeout is 2 seconds, which gives a 1 second buffer.
459 ASSERT_TRUE(mCallback->waitForExpectedEvents(propId, std::floor(minSampleRate),
460 std::chrono::seconds(2)))
461 << "Didn't get enough events for subscribing to minSampleRate";
462 }
463
464 result = client->subscribe({{.propId = propId, .sampleRate = maxSampleRate}});
465
466 ASSERT_TRUE(result.ok()) << StringPrintf("Failed to subscribe to property: %" PRId32
467 ", error: %s",
468 propId, result.error().message().c_str());
469
470 if (mVhalClient->isAidlVhal()) {
471 ASSERT_TRUE(mCallback->waitForExpectedEvents(propId, std::floor(maxSampleRate),
472 std::chrono::seconds(2)))
473 << "Didn't get enough events for subscribing to maxSampleRate";
474
475 std::unordered_set<int64_t> timestamps;
476 // Event event should have a different timestamp.
477 for (const int64_t& eventTimestamp : mCallback->getEventTimestamps(propId)) {
478 ASSERT_TRUE(timestamps.find(eventTimestamp) == timestamps.end())
479 << "two events for the same property must not have the same timestamp";
480 timestamps.insert(eventTimestamp);
481 }
482 }
Yu Shan726d51a2022-02-22 17:37:21 -0800483
484 result = client->unsubscribe({propId});
485 ASSERT_TRUE(result.ok()) << StringPrintf("Failed to unsubscribe to property: %" PRId32
486 ", error: %s",
487 propId, result.error().message().c_str());
488
489 mCallback->reset();
490 ASSERT_FALSE(mCallback->waitForExpectedEvents(propId, 10, std::chrono::seconds(1)))
491 << "Expect not to get events after unsubscription";
492}
493
494// Test subscribe() with an invalid property.
495TEST_P(VtsHalAutomotiveVehicleTargetTest, subscribeInvalidProp) {
496 ALOGD("VtsHalAutomotiveVehicleTargetTest::subscribeInvalidProp");
497
498 std::vector<SubscribeOptions> options = {
499 SubscribeOptions{.propId = kInvalidProp, .sampleRate = 10.0}};
500
501 auto client = mVhalClient->getSubscriptionClient(mCallback);
502 ASSERT_NE(client, nullptr) << "Failed to get subscription client";
503
504 auto result = client->subscribe(options);
505
506 ASSERT_FALSE(result.ok()) << StringPrintf("Expect subscribing to property: %" PRId32 " to fail",
507 kInvalidProp);
508}
509
Yu Shan4569ef52022-03-18 14:34:25 -0700510// Test the timestamp returned in GetValues results is the timestamp when the value is retrieved.
511TEST_P(VtsHalAutomotiveVehicleTargetTest, testGetValuesTimestampAIDL) {
512 if (!mVhalClient->isAidlVhal()) {
513 GTEST_SKIP() << "Skip checking timestamp for HIDL because the behavior is only specified "
514 "for AIDL";
515 }
516
517 int32_t propId = toInt(VehicleProperty::PARKING_BRAKE_ON);
Yu Shan8a1ab872023-10-09 14:43:36 -0700518 if (!checkIsSupported(propId)) {
519 GTEST_SKIP() << "Property: " << propId << " is not supported, skip the test";
520 }
Yu Shan4569ef52022-03-18 14:34:25 -0700521 auto prop = mVhalClient->createHalPropValue(propId);
522
523 auto result = mVhalClient->getValueSync(*prop);
524
525 ASSERT_TRUE(result.ok()) << StringPrintf("Failed to get value for property: %" PRId32
526 ", error: %s",
527 propId, result.error().message().c_str());
528 ASSERT_NE(result.value(), nullptr) << "Result value must not be null";
529 ASSERT_EQ(result.value()->getInt32Values().size(), 1u) << "Result must contain 1 int value";
530
531 bool parkBrakeOnValue1 = (result.value()->getInt32Values()[0] == 1);
532 int64_t timestampValue1 = result.value()->getTimestamp();
533
534 result = mVhalClient->getValueSync(*prop);
535
536 ASSERT_TRUE(result.ok()) << StringPrintf("Failed to get value for property: %" PRId32
537 ", error: %s",
538 propId, result.error().message().c_str());
539 ASSERT_NE(result.value(), nullptr) << "Result value must not be null";
540 ASSERT_EQ(result.value()->getInt32Values().size(), 1u) << "Result must contain 1 int value";
541
542 bool parkBarkeOnValue2 = (result.value()->getInt32Values()[0] == 1);
543 int64_t timestampValue2 = result.value()->getTimestamp();
544
545 if (parkBarkeOnValue2 == parkBrakeOnValue1) {
546 ASSERT_EQ(timestampValue2, timestampValue1)
547 << "getValue result must contain a timestamp updated when the value was updated, if"
548 "the value does not change, expect the same timestamp";
549 } else {
550 ASSERT_GT(timestampValue2, timestampValue1)
551 << "getValue result must contain a timestamp updated when the value was updated, if"
552 "the value changes, expect the newer value has a larger timestamp";
553 }
554}
555
Aaqib Ismail20486702022-10-27 16:58:50 -0700556// Helper function to compare actual vs expected property config
557void VtsHalAutomotiveVehicleTargetTest::verifyProperty(VehicleProperty propId,
558 VehiclePropertyAccess access,
559 VehiclePropertyChangeMode changeMode,
560 VehiclePropertyGroup group, VehicleArea area,
561 VehiclePropertyType propertyType) {
562 int expectedPropId = toInt(propId);
563 int expectedAccess = toInt(access);
564 int expectedChangeMode = toInt(changeMode);
565 int expectedGroup = toInt(group);
566 int expectedArea = toInt(area);
567 int expectedPropertyType = toInt(propertyType);
568
Eva Chen17bc5782023-01-06 22:59:58 -0800569 auto result = mVhalClient->getAllPropConfigs();
570 ASSERT_TRUE(result.ok()) << "Failed to get all property configs, error: "
571 << result.error().message();
572
573 // Check if property is implemented by getting all configs and looking to see if the expected
574 // property id is in that list.
575 bool isExpectedPropIdImplemented = false;
576 for (const auto& cfgPtr : result.value()) {
577 const IHalPropConfig& cfg = *cfgPtr;
578 if (expectedPropId == cfg.getPropId()) {
579 isExpectedPropIdImplemented = true;
580 break;
581 }
582 }
583
584 if (!isExpectedPropIdImplemented) {
585 GTEST_SKIP() << StringPrintf("Property %" PRId32 " has not been implemented",
586 expectedPropId);
587 }
588
589 result = mVhalClient->getPropConfigs({expectedPropId});
Aaqib Ismail20486702022-10-27 16:58:50 -0700590 ASSERT_TRUE(result.ok()) << "Failed to get required property config, error: "
591 << result.error().message();
592
Aaqib Ismail20486702022-10-27 16:58:50 -0700593 ASSERT_EQ(result.value().size(), 1u)
594 << StringPrintf("Expect to get exactly 1 config, got %zu", result.value().size());
595
596 const auto& config = result.value().at(0);
597 int actualPropId = config->getPropId();
598 int actualAccess = config->getAccess();
599 int actualChangeMode = config->getChangeMode();
600 int actualGroup = actualPropId & toInt(VehiclePropertyGroup::MASK);
601 int actualArea = actualPropId & toInt(VehicleArea::MASK);
602 int actualPropertyType = actualPropId & toInt(VehiclePropertyType::MASK);
603
604 ASSERT_EQ(actualPropId, expectedPropId)
605 << StringPrintf("Expect to get property ID: %i, got %i", expectedPropId, actualPropId);
606
607 if (expectedAccess == toInt(VehiclePropertyAccess::READ_WRITE)) {
608 ASSERT_TRUE(actualAccess == expectedAccess ||
609 actualAccess == toInt(VehiclePropertyAccess::READ))
610 << StringPrintf("Expect to get VehiclePropertyAccess: %i or %i, got %i",
611 expectedAccess, toInt(VehiclePropertyAccess::READ), actualAccess);
612 } else {
613 ASSERT_EQ(actualAccess, expectedAccess) << StringPrintf(
614 "Expect to get VehiclePropertyAccess: %i, got %i", expectedAccess, actualAccess);
615 }
616
617 ASSERT_EQ(actualChangeMode, expectedChangeMode)
618 << StringPrintf("Expect to get VehiclePropertyChangeMode: %i, got %i",
619 expectedChangeMode, actualChangeMode);
620 ASSERT_EQ(actualGroup, expectedGroup) << StringPrintf(
621 "Expect to get VehiclePropertyGroup: %i, got %i", expectedGroup, actualGroup);
622 ASSERT_EQ(actualArea, expectedArea)
623 << StringPrintf("Expect to get VehicleArea: %i, got %i", expectedArea, actualArea);
624 ASSERT_EQ(actualPropertyType, expectedPropertyType)
625 << StringPrintf("Expect to get VehiclePropertyType: %i, got %i", expectedPropertyType,
626 actualPropertyType);
627}
628
shrikar34563642023-02-14 02:57:17 +0000629TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyLocationCharacterizationConfig) {
630 verifyProperty(VehicleProperty::LOCATION_CHARACTERIZATION, VehiclePropertyAccess::READ,
631 VehiclePropertyChangeMode::STATIC, VehiclePropertyGroup::SYSTEM,
632 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
633}
634
Eva Chen544b24b2023-12-05 00:13:53 -0800635TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyUltrasonicsSensorPositionConfig) {
636 verifyProperty(VehicleProperty::ULTRASONICS_SENSOR_POSITION, VehiclePropertyAccess::READ,
637 VehiclePropertyChangeMode::STATIC, VehiclePropertyGroup::SYSTEM,
638 VehicleArea::VENDOR, VehiclePropertyType::INT32_VEC);
639}
640
Eva Chen9e226e52023-12-06 00:23:18 -0800641TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyUltrasonicsSensorOrientationConfig) {
642 verifyProperty(VehicleProperty::ULTRASONICS_SENSOR_ORIENTATION, VehiclePropertyAccess::READ,
643 VehiclePropertyChangeMode::STATIC, VehiclePropertyGroup::SYSTEM,
644 VehicleArea::VENDOR, VehiclePropertyType::INT32_VEC);
645}
646
Eva Chen727aa3f2023-12-06 01:13:29 -0800647TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyUltrasonicsSensorFieldOfViewConfig) {
648 verifyProperty(VehicleProperty::ULTRASONICS_SENSOR_FIELD_OF_VIEW, VehiclePropertyAccess::READ,
649 VehiclePropertyChangeMode::STATIC, VehiclePropertyGroup::SYSTEM,
650 VehicleArea::VENDOR, VehiclePropertyType::INT32_VEC);
651}
652
Eva Chen968bf442023-12-06 01:21:51 -0800653TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyUltrasonicsSensorDetectionRangeConfig) {
654 verifyProperty(VehicleProperty::ULTRASONICS_SENSOR_DETECTION_RANGE, VehiclePropertyAccess::READ,
655 VehiclePropertyChangeMode::STATIC, VehiclePropertyGroup::SYSTEM,
656 VehicleArea::VENDOR, VehiclePropertyType::INT32_VEC);
657}
658
Eva Chendf05df52023-12-06 01:42:55 -0800659TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyUltrasonicsSensorSupportedRangesConfig) {
660 verifyProperty(VehicleProperty::ULTRASONICS_SENSOR_SUPPORTED_RANGES,
661 VehiclePropertyAccess::READ, VehiclePropertyChangeMode::STATIC,
662 VehiclePropertyGroup::SYSTEM, VehicleArea::VENDOR,
663 VehiclePropertyType::INT32_VEC);
664}
665
shrikar668df362022-12-20 22:08:17 +0000666TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyEmergencyLaneKeepAssistEnabledConfig) {
667 verifyProperty(VehicleProperty::EMERGENCY_LANE_KEEP_ASSIST_ENABLED,
668 VehiclePropertyAccess::READ_WRITE, VehiclePropertyChangeMode::ON_CHANGE,
669 VehiclePropertyGroup::SYSTEM, VehicleArea::GLOBAL, VehiclePropertyType::BOOLEAN);
670}
671
shrikar80cc0c52023-01-30 16:56:53 +0000672TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyEmergencyLaneKeepAssistStateConfig) {
673 verifyProperty(VehicleProperty::EMERGENCY_LANE_KEEP_ASSIST_STATE, VehiclePropertyAccess::READ,
674 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
675 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
676}
677
shrikar5d1b8162023-01-25 19:31:23 +0000678TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyCruiseControlEnabledConfig) {
679 verifyProperty(VehicleProperty::CRUISE_CONTROL_ENABLED, VehiclePropertyAccess::READ_WRITE,
680 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
681 VehicleArea::GLOBAL, VehiclePropertyType::BOOLEAN);
shrikar808a2942022-12-21 17:07:32 +0000682}
683
shrikard440ed42023-01-31 00:25:14 +0000684TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyCruiseControlTypeConfig) {
685 verifyProperty(VehicleProperty::CRUISE_CONTROL_TYPE, VehiclePropertyAccess::READ_WRITE,
686 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
687 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
688}
689
shrikar2753b9e2023-01-31 00:25:14 +0000690TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyCruiseControlStateConfig) {
691 verifyProperty(VehicleProperty::CRUISE_CONTROL_STATE, VehiclePropertyAccess::READ,
692 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
693 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
694}
695
shrikar5df0f952023-02-02 00:15:39 +0000696TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyCruiseControlCommandConfig) {
697 verifyProperty(VehicleProperty::CRUISE_CONTROL_COMMAND, VehiclePropertyAccess::WRITE,
698 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
699 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
700}
701
shrikarfde8c242023-02-02 01:10:33 +0000702TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyCruiseControlTargetSpeedConfig) {
703 verifyProperty(VehicleProperty::CRUISE_CONTROL_TARGET_SPEED, VehiclePropertyAccess::READ,
704 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
705 VehicleArea::GLOBAL, VehiclePropertyType::FLOAT);
706}
707
shrikarb9661d32023-02-02 19:22:50 +0000708TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyAdaptiveCruiseControlTargetTimeGapConfig) {
709 verifyProperty(VehicleProperty::ADAPTIVE_CRUISE_CONTROL_TARGET_TIME_GAP,
710 VehiclePropertyAccess::READ_WRITE, VehiclePropertyChangeMode::ON_CHANGE,
711 VehiclePropertyGroup::SYSTEM, VehicleArea::GLOBAL, VehiclePropertyType::INT32);
712}
713
shrikarf62d7472023-02-03 00:20:04 +0000714TEST_P(VtsHalAutomotiveVehicleTargetTest,
715 verifyAdaptiveCruiseControlLeadVehicleMeasuredDistanceConfig) {
716 verifyProperty(VehicleProperty::ADAPTIVE_CRUISE_CONTROL_LEAD_VEHICLE_MEASURED_DISTANCE,
717 VehiclePropertyAccess::READ, VehiclePropertyChangeMode::CONTINUOUS,
718 VehiclePropertyGroup::SYSTEM, VehicleArea::GLOBAL, VehiclePropertyType::INT32);
719}
720
shrikar37833e12022-12-15 20:13:14 +0000721TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyHandsOnDetectionEnabledConfig) {
722 verifyProperty(VehicleProperty::HANDS_ON_DETECTION_ENABLED, VehiclePropertyAccess::READ_WRITE,
723 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
724 VehicleArea::GLOBAL, VehiclePropertyType::BOOLEAN);
725}
726
shrikar6d88bf52023-01-17 17:04:21 +0000727TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyHandsOnDetectionDriverStateConfig) {
728 verifyProperty(VehicleProperty::HANDS_ON_DETECTION_DRIVER_STATE, VehiclePropertyAccess::READ,
729 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
730 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
731}
732
shrikara6785992023-01-18 23:07:06 +0000733TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyHandsOnDetectionWarningConfig) {
734 verifyProperty(VehicleProperty::HANDS_ON_DETECTION_WARNING, VehiclePropertyAccess::READ,
735 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
736 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
737}
738
Eva Chenbbb7b6d2023-11-21 00:07:14 -0800739TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyDriverDrowsinessAttentionSystemEnabledConfig) {
740 verifyProperty(VehicleProperty::DRIVER_DROWSINESS_ATTENTION_SYSTEM_ENABLED,
741 VehiclePropertyAccess::READ_WRITE, VehiclePropertyChangeMode::ON_CHANGE,
742 VehiclePropertyGroup::SYSTEM, VehicleArea::GLOBAL, VehiclePropertyType::BOOLEAN);
743}
744
Eva Chen9f1d8c02023-11-28 16:50:14 -0800745TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyDriverDrowsinessAttentionStateConfig) {
746 verifyProperty(VehicleProperty::DRIVER_DROWSINESS_ATTENTION_STATE, VehiclePropertyAccess::READ,
747 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
748 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
749}
750
Eva Chen6ec790b2023-12-01 23:37:29 -0800751TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyDriverDrowsinessAttentionWarningEnabledConfig) {
752 verifyProperty(VehicleProperty::DRIVER_DROWSINESS_ATTENTION_WARNING_ENABLED,
753 VehiclePropertyAccess::READ_WRITE, VehiclePropertyChangeMode::ON_CHANGE,
754 VehiclePropertyGroup::SYSTEM, VehicleArea::GLOBAL, VehiclePropertyType::BOOLEAN);
755}
756
Eva Chen05c548c2023-12-02 01:20:10 -0800757TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyDriverDrowsinessAttentionWarningConfig) {
758 verifyProperty(VehicleProperty::DRIVER_DROWSINESS_ATTENTION_WARNING,
759 VehiclePropertyAccess::READ, VehiclePropertyChangeMode::ON_CHANGE,
760 VehiclePropertyGroup::SYSTEM, VehicleArea::GLOBAL, VehiclePropertyType::INT32);
761}
762
Eva Chen51770b02023-12-02 15:27:31 -0800763TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyDriverDistractionSystemEnabledConfig) {
764 verifyProperty(VehicleProperty::DRIVER_DISTRACTION_SYSTEM_ENABLED,
765 VehiclePropertyAccess::READ_WRITE, VehiclePropertyChangeMode::ON_CHANGE,
766 VehiclePropertyGroup::SYSTEM, VehicleArea::GLOBAL, VehiclePropertyType::BOOLEAN);
767}
768
Eva Chena342b722023-12-04 00:40:45 -0800769TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyDriverDistractionStateConfig) {
770 verifyProperty(VehicleProperty::DRIVER_DISTRACTION_STATE, VehiclePropertyAccess::READ,
771 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
772 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
773}
774
Eva Chenc62166e2023-12-04 02:17:36 -0800775TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyDriverDistractionWarningEnabledConfig) {
776 verifyProperty(VehicleProperty::DRIVER_DISTRACTION_WARNING_ENABLED,
777 VehiclePropertyAccess::READ_WRITE, VehiclePropertyChangeMode::ON_CHANGE,
778 VehiclePropertyGroup::SYSTEM, VehicleArea::GLOBAL, VehiclePropertyType::BOOLEAN);
779}
780
Eva Chen9a0925e2023-12-04 03:52:23 -0800781TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyDriverDistractionWarningConfig) {
782 verifyProperty(VehicleProperty::DRIVER_DISTRACTION_WARNING, VehiclePropertyAccess::READ,
783 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
784 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
785}
786
Aaqib Ismailc69e9682022-11-22 12:50:00 -0800787TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyEvBrakeRegenerationLevelConfig) {
788 verifyProperty(VehicleProperty::EV_BRAKE_REGENERATION_LEVEL,
789 VehiclePropertyAccess::READ_WRITE, VehiclePropertyChangeMode::ON_CHANGE,
790 VehiclePropertyGroup::SYSTEM, VehicleArea::GLOBAL, VehiclePropertyType::INT32);
791}
792
shrikar2dae80f2022-12-21 23:50:17 +0000793TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyEvStoppingModeConfig) {
794 verifyProperty(VehicleProperty::EV_STOPPING_MODE, VehiclePropertyAccess::READ_WRITE,
795 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
796 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
797}
798
Aaqib Ismailaec678a2022-12-07 16:22:42 -0800799TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyEvCurrentBatteryCapacityConfig) {
800 verifyProperty(VehicleProperty::EV_CURRENT_BATTERY_CAPACITY, VehiclePropertyAccess::READ,
801 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
802 VehicleArea::GLOBAL, VehiclePropertyType::FLOAT);
803}
804
shrikar83914472022-12-16 20:28:47 +0000805TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyEngineIdleAutoStopEnabledConfig) {
806 verifyProperty(VehicleProperty::ENGINE_IDLE_AUTO_STOP_ENABLED,
807 VehiclePropertyAccess::READ_WRITE, VehiclePropertyChangeMode::ON_CHANGE,
808 VehiclePropertyGroup::SYSTEM, VehicleArea::GLOBAL, VehiclePropertyType::BOOLEAN);
809}
810
Aaqib Ismail20486702022-10-27 16:58:50 -0700811TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyDoorChildLockEnabledConfig) {
812 verifyProperty(VehicleProperty::DOOR_CHILD_LOCK_ENABLED, VehiclePropertyAccess::READ_WRITE,
813 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
814 VehicleArea::DOOR, VehiclePropertyType::BOOLEAN);
815}
816
Aaqib Ismail63d52d12023-01-30 12:35:10 -0800817TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyWindshieldWipersPeriodConfig) {
818 verifyProperty(VehicleProperty::WINDSHIELD_WIPERS_PERIOD, VehiclePropertyAccess::READ,
819 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
820 VehicleArea::WINDOW, VehiclePropertyType::INT32);
821}
822
Aaqib Ismail732a1d72023-01-31 10:25:45 -0800823TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyWindshieldWipersStateConfig) {
824 verifyProperty(VehicleProperty::WINDSHIELD_WIPERS_STATE, VehiclePropertyAccess::READ,
825 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
826 VehicleArea::WINDOW, VehiclePropertyType::INT32);
827}
828
Aaqib Ismailc37a2112023-02-02 11:30:08 -0800829TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyWindshieldWipersSwitchConfig) {
830 verifyProperty(VehicleProperty::WINDSHIELD_WIPERS_SWITCH, VehiclePropertyAccess::READ_WRITE,
831 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
832 VehicleArea::WINDOW, VehiclePropertyType::INT32);
833}
834
Aaqib Ismail7f941b42022-11-04 14:55:13 -0700835TEST_P(VtsHalAutomotiveVehicleTargetTest, verifySteeringWheelDepthPosConfig) {
836 verifyProperty(VehicleProperty::STEERING_WHEEL_DEPTH_POS, VehiclePropertyAccess::READ_WRITE,
837 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
838 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
839}
840
Aaqib Ismail34fe92f2022-11-04 21:41:23 -0700841TEST_P(VtsHalAutomotiveVehicleTargetTest, verifySteeringWheelDepthMoveConfig) {
842 verifyProperty(VehicleProperty::STEERING_WHEEL_DEPTH_MOVE, VehiclePropertyAccess::READ_WRITE,
843 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
844 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
845}
846
Aaqib Ismail53b81c92022-11-07 17:47:04 -0800847TEST_P(VtsHalAutomotiveVehicleTargetTest, verifySteeringWheelHeightPosConfig) {
848 verifyProperty(VehicleProperty::STEERING_WHEEL_HEIGHT_POS, VehiclePropertyAccess::READ_WRITE,
849 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
850 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
851}
852
Aaqib Ismail6c4bf192022-11-08 15:00:32 -0800853TEST_P(VtsHalAutomotiveVehicleTargetTest, verifySteeringWheelHeightMoveConfig) {
854 verifyProperty(VehicleProperty::STEERING_WHEEL_HEIGHT_MOVE, VehiclePropertyAccess::READ_WRITE,
855 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
856 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
857}
858
Aaqib Ismail8d051182022-11-09 13:28:48 -0800859TEST_P(VtsHalAutomotiveVehicleTargetTest, verifySteeringWheelTheftLockEnabledConfig) {
860 verifyProperty(VehicleProperty::STEERING_WHEEL_THEFT_LOCK_ENABLED,
861 VehiclePropertyAccess::READ_WRITE, VehiclePropertyChangeMode::ON_CHANGE,
862 VehiclePropertyGroup::SYSTEM, VehicleArea::GLOBAL, VehiclePropertyType::BOOLEAN);
863}
864
Aaqib Ismail68d3f122022-11-09 14:43:32 -0800865TEST_P(VtsHalAutomotiveVehicleTargetTest, verifySteeringWheelLockedConfig) {
866 verifyProperty(VehicleProperty::STEERING_WHEEL_LOCKED, VehiclePropertyAccess::READ_WRITE,
867 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
868 VehicleArea::GLOBAL, VehiclePropertyType::BOOLEAN);
869}
870
Aaqib Ismaild4d6adf2022-11-09 16:59:47 -0800871TEST_P(VtsHalAutomotiveVehicleTargetTest, verifySteeringWheelEasyAccessEnabledConfig) {
872 verifyProperty(VehicleProperty::STEERING_WHEEL_EASY_ACCESS_ENABLED,
873 VehiclePropertyAccess::READ_WRITE, VehiclePropertyChangeMode::ON_CHANGE,
874 VehiclePropertyGroup::SYSTEM, VehicleArea::GLOBAL, VehiclePropertyType::BOOLEAN);
875}
876
Aaqib Ismail0dc7ba02022-11-10 14:28:09 -0800877TEST_P(VtsHalAutomotiveVehicleTargetTest, verifySteeringWheelLightsStateConfig) {
878 verifyProperty(VehicleProperty::STEERING_WHEEL_LIGHTS_STATE, VehiclePropertyAccess::READ,
879 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
880 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
881}
882
Aaqib Ismail4b8688f2022-11-15 15:13:35 -0800883TEST_P(VtsHalAutomotiveVehicleTargetTest, verifySteeringWheelLightsSwitchConfig) {
884 verifyProperty(VehicleProperty::STEERING_WHEEL_LIGHTS_SWITCH, VehiclePropertyAccess::READ_WRITE,
885 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
886 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
887}
888
Arati Gerdesd86c7fd2022-12-19 12:32:29 -0800889TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyGloveBoxDoorPosConfig) {
890 verifyProperty(VehicleProperty::GLOVE_BOX_DOOR_POS, VehiclePropertyAccess::READ_WRITE,
891 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
892 VehicleArea::SEAT, VehiclePropertyType::INT32);
893}
894
Aaqib Ismail57be4032023-02-02 14:15:03 -0800895TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyGloveBoxLockedConfig) {
896 verifyProperty(VehicleProperty::GLOVE_BOX_LOCKED, VehiclePropertyAccess::READ_WRITE,
897 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
898 VehicleArea::SEAT, VehiclePropertyType::BOOLEAN);
899}
900
shrikara1367212022-11-02 16:07:35 +0000901TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyMirrorAutoFoldEnabledConfig) {
902 verifyProperty(VehicleProperty::MIRROR_AUTO_FOLD_ENABLED, VehiclePropertyAccess::READ_WRITE,
903 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
904 VehicleArea::MIRROR, VehiclePropertyType::BOOLEAN);
905}
906
907TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyMirrorAutoTiltEnabledConfig) {
908 verifyProperty(VehicleProperty::MIRROR_AUTO_TILT_ENABLED, VehiclePropertyAccess::READ_WRITE,
909 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
910 VehicleArea::MIRROR, VehiclePropertyType::BOOLEAN);
911}
912
Aaqib Ismail4e6144c2022-12-15 15:32:18 -0800913TEST_P(VtsHalAutomotiveVehicleTargetTest, verifySeatHeadrestHeightPosV2Config) {
914 verifyProperty(VehicleProperty::SEAT_HEADREST_HEIGHT_POS_V2, VehiclePropertyAccess::READ_WRITE,
915 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
916 VehicleArea::SEAT, VehiclePropertyType::INT32);
917}
918
shrikar6ae79162022-12-16 03:03:25 +0000919TEST_P(VtsHalAutomotiveVehicleTargetTest, verifySeatWalkInPosConfig) {
920 verifyProperty(VehicleProperty::SEAT_WALK_IN_POS, VehiclePropertyAccess::READ_WRITE,
921 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
922 VehicleArea::SEAT, VehiclePropertyType::INT32);
923}
924
shrikarfb65ae52022-11-03 23:12:51 +0000925TEST_P(VtsHalAutomotiveVehicleTargetTest, verifySeatFootwellLightsStateConfig) {
926 verifyProperty(VehicleProperty::SEAT_FOOTWELL_LIGHTS_STATE, VehiclePropertyAccess::READ,
927 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
928 VehicleArea::SEAT, VehiclePropertyType::INT32);
929}
930
shrikar93cf1be2022-11-30 15:00:52 -0800931TEST_P(VtsHalAutomotiveVehicleTargetTest, verifySeatFootwellLightsSwitchConfig) {
932 verifyProperty(VehicleProperty::SEAT_FOOTWELL_LIGHTS_SWITCH, VehiclePropertyAccess::READ_WRITE,
933 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
934 VehicleArea::SEAT, VehiclePropertyType::INT32);
935}
936
shrikar3326de02022-11-07 23:51:20 +0000937TEST_P(VtsHalAutomotiveVehicleTargetTest, verifySeatEasyAccessEnabledConfig) {
938 verifyProperty(VehicleProperty::SEAT_EASY_ACCESS_ENABLED, VehiclePropertyAccess::READ_WRITE,
939 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
940 VehicleArea::SEAT, VehiclePropertyType::BOOLEAN);
941}
942
shrikarb96e3762022-11-08 16:49:58 -0800943TEST_P(VtsHalAutomotiveVehicleTargetTest, verifySeatAirbagEnabledConfig) {
944 verifyProperty(VehicleProperty::SEAT_AIRBAG_ENABLED, VehiclePropertyAccess::READ_WRITE,
945 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
946 VehicleArea::SEAT, VehiclePropertyType::BOOLEAN);
947}
948
shrikar802ecb52022-11-09 18:27:06 +0000949TEST_P(VtsHalAutomotiveVehicleTargetTest, verifySeatCushionSideSupportPosConfig) {
950 verifyProperty(VehicleProperty::SEAT_CUSHION_SIDE_SUPPORT_POS,
951 VehiclePropertyAccess::READ_WRITE, VehiclePropertyChangeMode::ON_CHANGE,
952 VehiclePropertyGroup::SYSTEM, VehicleArea::SEAT, VehiclePropertyType::INT32);
953}
954
shrikar1f0ce0d2022-11-11 17:46:06 +0000955TEST_P(VtsHalAutomotiveVehicleTargetTest, verifySeatCushionSideSupportMoveConfig) {
956 verifyProperty(VehicleProperty::SEAT_CUSHION_SIDE_SUPPORT_MOVE,
957 VehiclePropertyAccess::READ_WRITE, VehiclePropertyChangeMode::ON_CHANGE,
958 VehiclePropertyGroup::SYSTEM, VehicleArea::SEAT, VehiclePropertyType::INT32);
959}
960
shrikareff71b22022-11-11 11:02:43 -0800961TEST_P(VtsHalAutomotiveVehicleTargetTest, verifySeatLumbarVerticalPosConfig) {
962 verifyProperty(VehicleProperty::SEAT_LUMBAR_VERTICAL_POS, VehiclePropertyAccess::READ_WRITE,
963 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
964 VehicleArea::SEAT, VehiclePropertyType::INT32);
965}
966
shrikar2a081c52022-11-11 16:49:58 -0800967TEST_P(VtsHalAutomotiveVehicleTargetTest, verifySeatLumbarVerticalMoveConfig) {
968 verifyProperty(VehicleProperty::SEAT_LUMBAR_VERTICAL_MOVE, VehiclePropertyAccess::READ_WRITE,
969 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
970 VehicleArea::SEAT, VehiclePropertyType::INT32);
971}
972
Aaqib Ismail5d53aa32022-12-13 22:30:23 +0000973TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyAutomaticEmergencyBrakingEnabledConfig) {
974 verifyProperty(VehicleProperty::AUTOMATIC_EMERGENCY_BRAKING_ENABLED,
975 VehiclePropertyAccess::READ_WRITE, VehiclePropertyChangeMode::ON_CHANGE,
976 VehiclePropertyGroup::SYSTEM, VehicleArea::GLOBAL, VehiclePropertyType::BOOLEAN);
977}
978
Aaqib Ismail28ee23c2023-01-04 23:04:46 -0800979TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyAutomaticEmergencyBrakingStateConfig) {
980 verifyProperty(VehicleProperty::AUTOMATIC_EMERGENCY_BRAKING_STATE, VehiclePropertyAccess::READ,
981 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
982 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
983}
984
Aaqib Ismaila2513672022-12-15 00:55:27 +0000985TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyForwardCollisionWarningEnabledConfig) {
986 verifyProperty(VehicleProperty::FORWARD_COLLISION_WARNING_ENABLED,
987 VehiclePropertyAccess::READ_WRITE, VehiclePropertyChangeMode::ON_CHANGE,
988 VehiclePropertyGroup::SYSTEM, VehicleArea::GLOBAL, VehiclePropertyType::BOOLEAN);
989}
990
Aaqib Ismail0a1ab292023-01-19 21:33:56 +0000991TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyForwardCollisionWarningStateConfig) {
992 verifyProperty(VehicleProperty::FORWARD_COLLISION_WARNING_STATE, VehiclePropertyAccess::READ,
993 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
994 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
995}
996
Aaqib Ismail3f7177a2022-12-17 09:20:00 -0800997TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyBlindSpotWarningEnabledConfig) {
998 verifyProperty(VehicleProperty::BLIND_SPOT_WARNING_ENABLED, VehiclePropertyAccess::READ_WRITE,
999 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
1000 VehicleArea::GLOBAL, VehiclePropertyType::BOOLEAN);
1001}
1002
Aaqib Ismail5fc97bb2023-01-10 17:07:47 -08001003TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyBlindSpotWarningStateConfig) {
1004 verifyProperty(VehicleProperty::BLIND_SPOT_WARNING_STATE, VehiclePropertyAccess::READ,
1005 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
1006 VehicleArea::MIRROR, VehiclePropertyType::INT32);
1007}
1008
Aaqib Ismail7a46cef2022-12-17 10:00:59 -08001009TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyLaneDepartureWarningEnabledConfig) {
1010 verifyProperty(VehicleProperty::LANE_DEPARTURE_WARNING_ENABLED,
1011 VehiclePropertyAccess::READ_WRITE, VehiclePropertyChangeMode::ON_CHANGE,
1012 VehiclePropertyGroup::SYSTEM, VehicleArea::GLOBAL, VehiclePropertyType::BOOLEAN);
1013}
1014
Aaqib Ismail8462db52023-01-27 19:59:49 -08001015TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyLaneDepartureWarningStateConfig) {
1016 verifyProperty(VehicleProperty::LANE_DEPARTURE_WARNING_STATE, VehiclePropertyAccess::READ,
1017 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
1018 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
1019}
1020
Aaqib Ismail20cc66a2022-12-22 05:38:28 -08001021TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyLaneKeepAssistEnabledConfig) {
1022 verifyProperty(VehicleProperty::LANE_KEEP_ASSIST_ENABLED, VehiclePropertyAccess::READ_WRITE,
1023 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
1024 VehicleArea::GLOBAL, VehiclePropertyType::BOOLEAN);
1025}
1026
Aaqib Ismail78db2ca2023-01-10 17:34:28 -08001027TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyLaneKeepAssistStateConfig) {
1028 verifyProperty(VehicleProperty::LANE_KEEP_ASSIST_STATE, VehiclePropertyAccess::READ,
1029 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
1030 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
1031}
1032
Aaqib Ismailb1680a72022-12-14 23:28:49 +00001033TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyLaneCenteringAssistEnabledConfig) {
1034 verifyProperty(VehicleProperty::LANE_CENTERING_ASSIST_ENABLED,
1035 VehiclePropertyAccess::READ_WRITE, VehiclePropertyChangeMode::ON_CHANGE,
1036 VehiclePropertyGroup::SYSTEM, VehicleArea::GLOBAL, VehiclePropertyType::BOOLEAN);
1037}
1038
Aaqib Ismail0ffd39c2023-01-11 12:19:10 -08001039TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyLaneCenteringAssistCommandConfig) {
1040 verifyProperty(VehicleProperty::LANE_CENTERING_ASSIST_COMMAND, VehiclePropertyAccess::WRITE,
1041 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
1042 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
1043}
1044
Aaqib Ismaildb034442023-01-10 18:14:28 -08001045TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyLaneCenteringAssistStateConfig) {
1046 verifyProperty(VehicleProperty::LANE_CENTERING_ASSIST_STATE, VehiclePropertyAccess::READ,
1047 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
1048 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
1049}
1050
Yuncheol Heo8fbbfd12023-09-27 15:43:59 -07001051TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyClusterHeartbeatConfig) {
1052 verifyProperty(VehicleProperty::CLUSTER_HEARTBEAT, VehiclePropertyAccess::WRITE,
1053 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
1054 VehicleArea::GLOBAL, VehiclePropertyType::MIXED);
1055}
1056
shrikard6f9f8e2023-11-02 22:35:28 +00001057TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyVehicleDrivingAutomationCurrentLevelConfig) {
1058 verifyProperty(VehicleProperty::VEHICLE_DRIVING_AUTOMATION_CURRENT_LEVEL,
1059 VehiclePropertyAccess::READ, VehiclePropertyChangeMode::ON_CHANGE,
1060 VehiclePropertyGroup::SYSTEM, VehicleArea::GLOBAL, VehiclePropertyType::INT32);
1061}
1062
shrikar420b31d2023-11-07 16:15:35 +00001063TEST_P(VtsHalAutomotiveVehicleTargetTest, verifySeatAirbagsDeployedConfig) {
1064 verifyProperty(VehicleProperty::SEAT_AIRBAGS_DEPLOYED, VehiclePropertyAccess::READ,
1065 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
1066 VehicleArea::SEAT, VehiclePropertyType::INT32);
1067}
1068
shrikar7717aa82023-11-07 21:05:46 +00001069TEST_P(VtsHalAutomotiveVehicleTargetTest, verifySeatBeltPretensionerDeployedConfig) {
1070 verifyProperty(VehicleProperty::SEAT_BELT_PRETENSIONER_DEPLOYED, VehiclePropertyAccess::READ,
1071 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
1072 VehicleArea::SEAT, VehiclePropertyType::BOOLEAN);
1073}
1074
shrikard816e042023-11-08 20:12:55 +00001075TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyImpactDetectedConfig) {
1076 verifyProperty(VehicleProperty::IMPACT_DETECTED, VehiclePropertyAccess::READ,
1077 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
1078 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
1079}
1080
shrikara492e7d2023-11-09 00:27:54 +00001081TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyEvBatteryAverageTemperatureConfig) {
1082 verifyProperty(VehicleProperty::EV_BATTERY_AVERAGE_TEMPERATURE, VehiclePropertyAccess::READ,
1083 VehiclePropertyChangeMode::CONTINUOUS, VehiclePropertyGroup::SYSTEM,
1084 VehicleArea::GLOBAL, VehiclePropertyType::FLOAT);
1085}
1086
shrikar45df34b2023-11-10 21:14:17 +00001087TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyLowSpeedCollisionWarningEnabledConfig) {
1088 verifyProperty(VehicleProperty::LOW_SPEED_COLLISION_WARNING_ENABLED,
1089 VehiclePropertyAccess::READ_WRITE, VehiclePropertyChangeMode::ON_CHANGE,
1090 VehiclePropertyGroup::SYSTEM, VehicleArea::GLOBAL, VehiclePropertyType::BOOLEAN);
1091}
1092
shrikar858c4e12023-11-14 17:33:11 +00001093TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyLowSpeedCollisionWarningStateConfig) {
1094 verifyProperty(VehicleProperty::LOW_SPEED_COLLISION_WARNING_STATE, VehiclePropertyAccess::READ,
1095 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
1096 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
1097}
1098
shrikar84866f72023-11-27 00:30:59 +00001099TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyValetModeEnabledConfig) {
1100 verifyProperty(VehicleProperty::VALET_MODE_ENABLED, VehiclePropertyAccess::READ_WRITE,
1101 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
1102 VehicleArea::GLOBAL, VehiclePropertyType::BOOLEAN);
1103}
1104
shrikar33a33692023-11-30 01:38:01 +00001105TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyElectronicStabilityControlEnabledConfig) {
1106 verifyProperty(VehicleProperty::ELECTRONIC_STABILITY_CONTROL_ENABLED,
1107 VehiclePropertyAccess::READ_WRITE, VehiclePropertyChangeMode::ON_CHANGE,
1108 VehiclePropertyGroup::SYSTEM, VehicleArea::GLOBAL, VehiclePropertyType::BOOLEAN);
1109}
1110
shrikara45d1cf2023-11-27 17:40:46 +00001111TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyElectronicStabilityControlStateConfig) {
1112 verifyProperty(VehicleProperty::ELECTRONIC_STABILITY_CONTROL_STATE, VehiclePropertyAccess::READ,
1113 VehiclePropertyChangeMode::ON_CHANGE, VehiclePropertyGroup::SYSTEM,
1114 VehicleArea::GLOBAL, VehiclePropertyType::INT32);
1115}
1116
shrikar7fde8f52023-11-27 22:47:53 +00001117TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyCrossTrafficMonitoringEnabledConfig) {
1118 verifyProperty(VehicleProperty::CROSS_TRAFFIC_MONITORING_ENABLED,
1119 VehiclePropertyAccess::READ_WRITE, VehiclePropertyChangeMode::ON_CHANGE,
1120 VehiclePropertyGroup::SYSTEM, VehicleArea::GLOBAL, VehiclePropertyType::BOOLEAN);
1121}
1122
shrikar813ba7c2023-11-28 18:35:34 +00001123TEST_P(VtsHalAutomotiveVehicleTargetTest, verifyCrossTrafficMonitoringWarningStateConfig) {
1124 verifyProperty(VehicleProperty::CROSS_TRAFFIC_MONITORING_WARNING_STATE,
1125 VehiclePropertyAccess::READ, VehiclePropertyChangeMode::ON_CHANGE,
1126 VehiclePropertyGroup::SYSTEM, VehicleArea::GLOBAL, VehiclePropertyType::INT32);
1127}
1128
Yu Shan8a1ab872023-10-09 14:43:36 -07001129bool VtsHalAutomotiveVehicleTargetTest::checkIsSupported(int32_t propertyId) {
1130 auto result = mVhalClient->getPropConfigs({propertyId});
1131 return result.ok();
1132}
1133
Yu Shan726d51a2022-02-22 17:37:21 -08001134std::vector<ServiceDescriptor> getDescriptors() {
1135 std::vector<ServiceDescriptor> descriptors;
1136 for (std::string name : getAidlHalInstanceNames(IVehicle::descriptor)) {
1137 descriptors.push_back({
1138 .name = name,
1139 .isAidlService = true,
1140 });
1141 }
Yu Shan928062c2024-01-25 17:40:41 -08001142 for (std::string name : getAllHalInstanceNames(
1143 android::hardware::automotive::vehicle::V2_0::IVehicle::descriptor)) {
Yu Shan726d51a2022-02-22 17:37:21 -08001144 descriptors.push_back({
1145 .name = name,
1146 .isAidlService = false,
1147 });
1148 }
1149 return descriptors;
1150}
1151
1152GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(VtsHalAutomotiveVehicleTargetTest);
1153
1154INSTANTIATE_TEST_SUITE_P(PerInstance, VtsHalAutomotiveVehicleTargetTest,
1155 testing::ValuesIn(getDescriptors()),
1156 [](const testing::TestParamInfo<ServiceDescriptor>& info) {
1157 std::string name = "";
1158 if (info.param.isAidlService) {
1159 name += "aidl_";
1160 } else {
1161 name += "hidl_";
1162 }
1163 name += info.param.name;
1164 return Sanitize(name);
1165 });
1166
1167int main(int argc, char** argv) {
1168 ::testing::InitGoogleTest(&argc, argv);
1169 ABinderProcess_setThreadPoolMaxThreadCount(1);
1170 return RUN_ALL_TESTS();
1171}