Check continuous prop send updates for all areaIds
Test: atest CarPropertyManagerTest
Fix: 236395411
Change-Id: Ic1719ca9f18d853921c7f28060df9f3c2eb84abe
diff --git a/tests/tests/car/src/android/car/cts/utils/VehiclePropertyVerifier.java b/tests/tests/car/src/android/car/cts/utils/VehiclePropertyVerifier.java
index 2ec5a22..43bb312 100644
--- a/tests/tests/car/src/android/car/cts/utils/VehiclePropertyVerifier.java
+++ b/tests/tests/car/src/android/car/cts/utils/VehiclePropertyVerifier.java
@@ -171,11 +171,18 @@
Collectors.toList()));
} else if (mChangeMode == CarPropertyConfig.VEHICLE_PROPERTY_CHANGE_MODE_CONTINUOUS) {
- CarPropertyValueCallback carPropertyValueCallback =
- new CarPropertyValueCallback(mPropertyName, 1);
+ int updatesPerAreaId = 2;
+ int minimumTotalUpdates = updatesPerAreaId * carPropertyConfig.getAreaIds().length;
+ float secondsToMillis = 1_000;
+ long bufferMillis = 1_000; // 1 second
+ long timeoutMillis =
+ ((long) ((1.0f / carPropertyConfig.getMinSampleRate()) * secondsToMillis
+ * minimumTotalUpdates)) + bufferMillis;
+ CarPropertyValueCallback carPropertyValueCallback = new CarPropertyValueCallback(
+ mPropertyName, minimumTotalUpdates, timeoutMillis);
assertWithMessage("Failed to register callback for " + mPropertyName).that(
carPropertyManager.registerCallback(carPropertyValueCallback, mPropertyId,
- CarPropertyManager.SENSOR_RATE_FASTEST)).isTrue();
+ carPropertyConfig.getMaxSampleRate())).isTrue();
List<CarPropertyValue<?>> carPropertyValues =
carPropertyValueCallback.getCarPropertyValues();
carPropertyManager.unregisterCallback(carPropertyValueCallback, mPropertyId);
@@ -184,6 +191,15 @@
verifyCarPropertyValue(carPropertyConfig, carPropertyValue,
carPropertyValue.getAreaId(), CAR_PROPERTY_VALUE_SOURCE_CALLBACK);
}
+
+ for (int areaId : carPropertyConfig.getAreaIds()) {
+ assertWithMessage(
+ mPropertyName + " callback values did not receive " + updatesPerAreaId
+ + " updates for area ID: " + areaId).that(
+ carPropertyValues.stream().filter(
+ carPropertyValue -> carPropertyValue.getAreaId()
+ == areaId).count()).isAtLeast(updatesPerAreaId);
+ }
}
}
@@ -324,6 +340,10 @@
+ areaId)
.that(carPropertyValue.getAreaId())
.isEqualTo(areaId);
+ assertWithMessage(mPropertyName + " - areaId: " + areaId + " - source: " + source
+ + " area ID must be in carPropertyConfig#getAreaIds()").that(Arrays.stream(
+ carPropertyConfig.getAreaIds()).boxed().collect(Collectors.toList()).contains(
+ carPropertyValue.getAreaId())).isTrue();
assertWithMessage(
mPropertyName + " - areaId: " + areaId + " - source: " + source
+ " value's status must be valid")
@@ -461,19 +481,27 @@
private final int mTotalOnChangeEvents;
private final CountDownLatch mCountDownLatch;
private final List<CarPropertyValue<?>> mCarPropertyValues = new ArrayList<>();
+ private final long mTimeoutMillis;
- public CarPropertyValueCallback(String propertyName, int totalOnChangeEvents) {
+ CarPropertyValueCallback(String propertyName, int totalOnChangeEvents) {
+ this(propertyName, totalOnChangeEvents, 1500);
+ }
+
+ CarPropertyValueCallback(String propertyName, int totalOnChangeEvents,
+ long timeoutMillis) {
mPropertyName = propertyName;
mTotalOnChangeEvents = totalOnChangeEvents;
mCountDownLatch = new CountDownLatch(totalOnChangeEvents);
+ mTimeoutMillis = timeoutMillis;
}
public List<CarPropertyValue<?>> getCarPropertyValues() {
try {
assertWithMessage(
"Never received " + mTotalOnChangeEvents + " onChangeEvent(s) for "
- + mPropertyName + " callback before 1500ms timeout").that(
- mCountDownLatch.await(1500, TimeUnit.MILLISECONDS)).isTrue();
+ + mPropertyName + " callback before " + mTimeoutMillis
+ + " ms timeout").that(
+ mCountDownLatch.await(mTimeoutMillis, TimeUnit.MILLISECONDS)).isTrue();
} catch (InterruptedException e) {
assertWithMessage("Waiting for onChangeEvent callback(s) for " + mPropertyName
+ " threw an exception: " + e).fail();