aboutsummaryrefslogtreecommitdiff
path: root/tests/vehiclehal_test
diff options
context:
space:
mode:
authorIan Pedowitz <ijpedowitz@google.com>2018-06-14 05:17:30 +0000
committerIan Pedowitz <ijpedowitz@google.com>2018-06-14 05:17:30 +0000
commit720cd1635df2ebbd2c322b70c66811f3e829cc78 (patch)
tree1e8685f2f728d814fc4317f90ab2822355b34c72 /tests/vehiclehal_test
parent66c39555e4132ab5e5c568c088645e95f955c9b7 (diff)
downloadCar-720cd1635df2ebbd2c322b70c66811f3e829cc78.tar.gz
Revert "Added End-to-End tests for car property API"
This reverts commit 66c39555e4132ab5e5c568c088645e95f955c9b7. Reason for revert: Master is red Change-Id: I7f77405e13d29ddf8b530b1868591bddda1b4d3a
Diffstat (limited to 'tests/vehiclehal_test')
-rw-r--r--tests/vehiclehal_test/assets/car_info_test.json20
-rw-r--r--tests/vehiclehal_test/src/com/android/car/vehiclehal/test/CarHvacTest.java138
-rw-r--r--tests/vehiclehal_test/src/com/android/car/vehiclehal/test/CarPropertyTest.java212
-rw-r--r--tests/vehiclehal_test/src/com/android/car/vehiclehal/test/E2eCarTestBase.java4
-rw-r--r--tests/vehiclehal_test/src/com/android/car/vehiclehal/test/Utils.java55
-rw-r--r--tests/vehiclehal_test/src/com/android/car/vehiclehal/test/VhalEventVerifier.java22
-rw-r--r--tests/vehiclehal_test/src/com/android/car/vehiclehal/test/VhalJsonReader.java34
-rw-r--r--tests/vehiclehal_test/src/com/android/car/vehiclehal/test/VhalPropMaps.java73
8 files changed, 291 insertions, 267 deletions
diff --git a/tests/vehiclehal_test/assets/car_info_test.json b/tests/vehiclehal_test/assets/car_info_test.json
deleted file mode 100644
index 90c9bdc557..0000000000
--- a/tests/vehiclehal_test/assets/car_info_test.json
+++ /dev/null
@@ -1,20 +0,0 @@
-[
- {
- "timestamp": 1526063903356950016,
- "areaId": 0,
- "value": 15000,
- "prop": 291504388
- },
- {
- "timestamp": 1526063903358950016,
- "areaId": 0,
- "value": 150000,
- "prop": 291504390
- },
- {
- "timestamp": 1526063903360950016,
- "areaId": 0,
- "value": "Test Car",
- "prop": 286261505
- }
-]
diff --git a/tests/vehiclehal_test/src/com/android/car/vehiclehal/test/CarHvacTest.java b/tests/vehiclehal_test/src/com/android/car/vehiclehal/test/CarHvacTest.java
new file mode 100644
index 0000000000..08544bdb60
--- /dev/null
+++ b/tests/vehiclehal_test/src/com/android/car/vehiclehal/test/CarHvacTest.java
@@ -0,0 +1,138 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.car.vehiclehal.test;
+
+import static org.junit.Assert.assertTrue;
+
+import static java.lang.Integer.toHexString;
+
+import android.car.Car;
+import android.car.hardware.CarPropertyConfig;
+import android.car.hardware.CarPropertyValue;
+import android.car.hardware.hvac.CarHvacManager;
+import android.car.hardware.hvac.CarHvacManager.CarHvacEventCallback;
+import android.hardware.automotive.vehicle.V2_0.VehiclePropValue;
+import android.hardware.automotive.vehicle.V2_0.VehicleProperty;
+import android.support.test.filters.LargeTest;
+import android.support.test.runner.AndroidJUnit4;
+import android.util.ArraySet;
+import android.util.Log;
+
+import org.junit.Assert;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.io.File;
+import java.time.Duration;
+import java.util.Set;
+
+
+/**
+ * The test suite will execute end-to-end Car HVAC API test by generating HVAC property data from
+ * default VHAL and verify those data on the fly. The test data is coming from assets/ folder in the
+ * test APK and will be shared with VHAL to execute the test.
+ */
+@RunWith(AndroidJUnit4.class)
+@LargeTest
+public class CarHvacTest extends E2eCarTestBase {
+ private static final String TAG = Utils.concatTag(CarHvacTest.class);
+
+ // Test should be completed within 1 hour as it only covers a finite set of HVAC properties
+ private static final Duration TEST_TIME_OUT = Duration.ofHours(1);
+
+ private static final String CAR_HVAC_TEST_JSON = "car_hvac_test.json";
+
+ // Referred to hardware/interfaces/automotive/vehicle/2.0/types.hal, some of the HVAC properties
+ // are in CONTINUOUS mode. They should be omitted when testing ON_CHANGE properties.
+ private static final Set<Integer> CONTINUOUS_HVAC_PROPS;
+
+ private Integer mNumPropEventsToSkip;
+
+ static {
+ CONTINUOUS_HVAC_PROPS = new ArraySet<>();
+ CONTINUOUS_HVAC_PROPS.add(VehicleProperty.ENV_OUTSIDE_TEMPERATURE);
+ }
+
+
+ private class CarHvacOnChangeEventListener implements CarHvacEventCallback {
+ private VhalEventVerifier mVerifier;
+
+ CarHvacOnChangeEventListener(VhalEventVerifier verifier) {
+ mVerifier = verifier;
+ }
+
+ @Override
+ public void onChangeEvent(CarPropertyValue carPropertyValue) {
+ VehiclePropValue event = Utils.fromHvacPropertyValue(carPropertyValue);
+ if (!CONTINUOUS_HVAC_PROPS.contains(event.prop)) {
+ synchronized (mNumPropEventsToSkip) {
+ if (mNumPropEventsToSkip == 0) {
+ mVerifier.verify(Utils.fromHvacPropertyValue(carPropertyValue));
+ } else {
+ mNumPropEventsToSkip--;
+ }
+ }
+ }
+ }
+
+ @Override
+ public void onErrorEvent(final int propertyId, final int zone) {
+ Assert.fail("Error: propertyId=" + toHexString(propertyId) + " zone=" + zone);
+ }
+ }
+
+ private Integer calculateNumPropEventsToSkip(CarHvacManager hvacMgr) {
+ int numToSkip = 0;
+ try {
+ for (CarPropertyConfig c: hvacMgr.getPropertyList()) {
+ if (!CONTINUOUS_HVAC_PROPS.contains(c.getPropertyId())) {
+ numToSkip += c.getAreaCount();
+ }
+ }
+ } catch (Exception e) {
+ Log.d(TAG, "Unhandled exception thrown: ", e);
+ }
+ return Integer.valueOf(numToSkip);
+ }
+ @Test
+ public void testHvacOperations() throws Exception {
+ Log.d(TAG, "Prepare HVAC test data");
+ VhalEventVerifier verifier = new VhalEventVerifier(getExpectedEvents(CAR_HVAC_TEST_JSON));
+ File sharedJson = makeShareable(CAR_HVAC_TEST_JSON);
+
+ Log.d(TAG, "Start listening to the HAL");
+ CarHvacManager hvacMgr = (CarHvacManager) mCar.getCarManager(Car.HVAC_SERVICE);
+ // Calculate number of properties to skip due to registration event
+ mNumPropEventsToSkip = calculateNumPropEventsToSkip(hvacMgr);
+ CarHvacEventCallback callback = new CarHvacOnChangeEventListener(verifier);
+ hvacMgr.registerCallback(callback);
+
+ Log.d(TAG, "Send command to VHAL to start generation");
+ VhalEventGenerator hvacGenerator =
+ new JsonVhalEventGenerator(mVehicle).setJsonFile(sharedJson);
+ hvacGenerator.start();
+
+ Log.d(TAG, "Receiving and verifying VHAL events");
+ verifier.waitForEnd(TEST_TIME_OUT.toMillis());
+
+ Log.d(TAG, "Send command to VHAL to stop generation");
+ hvacGenerator.stop();
+ hvacMgr.unregisterCallback(callback);
+
+ assertTrue("Detected mismatched events: " + verifier.getResultString(),
+ verifier.getMismatchedEvents().isEmpty());
+ }
+}
diff --git a/tests/vehiclehal_test/src/com/android/car/vehiclehal/test/CarPropertyTest.java b/tests/vehiclehal_test/src/com/android/car/vehiclehal/test/CarPropertyTest.java
deleted file mode 100644
index 26f3c11310..0000000000
--- a/tests/vehiclehal_test/src/com/android/car/vehiclehal/test/CarPropertyTest.java
+++ /dev/null
@@ -1,212 +0,0 @@
-/*
- * Copyright (C) 2018 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.car.vehiclehal.test;
-
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
-import static java.lang.Integer.toHexString;
-
-import android.car.Car;
-import android.car.CarNotConnectedException;
-import android.car.hardware.CarPropertyConfig;
-import android.car.hardware.CarPropertyValue;
-import android.car.hardware.property.CarPropertyManager;
-import android.support.test.filters.LargeTest;
-import android.support.test.runner.AndroidJUnit4;
-import android.util.ArraySet;
-import android.util.Log;
-
-import org.junit.Assert;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import java.io.File;
-import java.time.Duration;
-import java.util.List;
-
-/**
- * The test suite will execute end-to-end Car Property API test by generating VHAL property data
- * from default VHAL and verify those data on the fly. The test data is coming from assets/ folder
- * in the test APK and will be shared with VHAL to execute the test.
- */
-@RunWith(AndroidJUnit4.class)
-@LargeTest
-public class CarPropertyTest extends E2eCarTestBase {
-
- private static final String TAG = Utils.concatTag(CarPropertyTest.class);
-
- // Test should be completed within 10 minutes as it only covers a finite set of properties
- private static final Duration TEST_TIME_OUT = Duration.ofMinutes(10);
-
- private static final String CAR_HVAC_TEST_JSON = "car_hvac_test.json";
- private static final String CAR_INFO_TEST_JSON = "car_info_test.json";
-
- private class CarPropertyEventReceiver implements
- CarPropertyManager.CarPropertyEventListener {
-
- private VhalEventVerifier mVerifier;
- private Integer mNumOfEventToSkip;
-
- CarPropertyEventReceiver(VhalEventVerifier verifier, int numOfEventToSkip) {
- mVerifier = verifier;
- mNumOfEventToSkip = numOfEventToSkip;
- }
-
- @Override
- public void onChangeEvent(CarPropertyValue carPropertyValue) {
- Log.d(TAG, "Received event: " + carPropertyValue);
- synchronized (mNumOfEventToSkip) {
- if (mNumOfEventToSkip > 0) {
- mNumOfEventToSkip--;
- return;
- }
- }
- mVerifier.verify(carPropertyValue);
- }
-
- @Override
- public void onErrorEvent(final int propertyId, final int zone) {
- Assert.fail("Error: propertyId=" + toHexString(propertyId) + " zone=" + zone);
- }
- }
-
- private int countNumPropEventsToSkip(CarPropertyManager propMgr, ArraySet<Integer> props) {
- int numToSkip = 0;
- try {
- for (CarPropertyConfig c : propMgr.getPropertyList(props)) {
- numToSkip += c.getAreaCount();
- }
- } catch (CarNotConnectedException e) {
- fail("Car connection failure: " + e);
- }
- return numToSkip;
- }
-
- /**
- * This test will let Default VHAL to generate HVAC data and verify on-the-fly in the test. It
- * is simulating the HVAC actions coming from hard buttons in a car.
- * @throws Exception
- */
- @Test
- public void testHvacHardButtonOperations() throws Exception {
- Log.d(TAG, "Prepare HVAC test data");
- List<CarPropertyValue> expectedEvents = getExpectedEvents(CAR_HVAC_TEST_JSON);
- VhalEventVerifier verifier = new VhalEventVerifier(expectedEvents);
-
- CarPropertyManager propMgr = (CarPropertyManager) mCar.getCarManager(Car.PROPERTY_SERVICE);
- assertNotNull("CarPropertyManager is null", propMgr);
-
- ArraySet<Integer> props = new ArraySet<>();
- for (CarPropertyValue event : expectedEvents) {
- if (!props.contains(event.getPropertyId())) {
- props.add(event.getPropertyId());
- }
- }
-
- int numToSkip = countNumPropEventsToSkip(propMgr, props);
- Log.d(TAG, String.format("Start listening to the HAL."
- + " Skipping %d events for listener registration", numToSkip));
- CarPropertyManager.CarPropertyEventListener receiver =
- new CarPropertyEventReceiver(verifier, numToSkip);
- for (Integer prop : props) {
- propMgr.registerListener(receiver, prop, 0);
- }
-
- File sharedJson = makeShareable(CAR_HVAC_TEST_JSON);
- Log.d(TAG, "Send command to VHAL to start generation");
- VhalEventGenerator hvacGenerator =
- new JsonVhalEventGenerator(mVehicle).setJsonFile(sharedJson);
- hvacGenerator.start();
-
- Log.d(TAG, "Receiving and verifying VHAL events");
- verifier.waitForEnd(TEST_TIME_OUT.toMillis());
-
- Log.d(TAG, "Send command to VHAL to stop generation");
- hvacGenerator.stop();
- propMgr.unregisterListener(receiver);
-
- assertTrue("Detected mismatched events: " + verifier.getResultString(),
- verifier.getMismatchedEvents().isEmpty());
- }
-
- /**
- * This test will exercise on "set" calls to inject HVAC data in order to test the Car Property
- * API end-to-end functionality.
- * @throws Exception
- */
- @Test
- @SuppressWarnings("unchecked")
- public void testHvacSetGetOperations() throws Exception {
- Log.d(TAG, "Prepare HVAC test data");
- List<CarPropertyValue> expectedEvents = getExpectedEvents(CAR_HVAC_TEST_JSON);
-
- CarPropertyManager propMgr = (CarPropertyManager) mCar.getCarManager(Car.PROPERTY_SERVICE);
- assertNotNull("CarPropertyManager is null", propMgr);
-
- final long waitForSetMillisecond = 2;
- for (CarPropertyValue expectedEvent : expectedEvents) {
- Class valueClass = expectedEvent.getValue().getClass();
- propMgr.setProperty(valueClass,
- expectedEvent.getPropertyId(),
- expectedEvent.getAreaId(),
- expectedEvent.getValue());
-
- Thread.sleep(waitForSetMillisecond);
- CarPropertyValue receivedEvent = propMgr.getProperty(valueClass,
- expectedEvent.getPropertyId(), expectedEvent.getAreaId());
- assertTrue("Mismatched events, expected: " + expectedEvent + ", received: "
- + receivedEvent, Utils.areCarPropertyValuesEqual(expectedEvent, receivedEvent));
- }
- }
-
- /**
- * This test will load static vehicle information from test data file and verify them through
- * get calls.
- * @throws Exception
- */
- @Test
- public void testStaticInfoOperations() throws Exception {
- Log.d(TAG, "Prepare static car information");
-
- List<CarPropertyValue> expectedEvents = getExpectedEvents(CAR_INFO_TEST_JSON);
- CarPropertyManager propMgr = (CarPropertyManager) mCar.getCarManager(Car.PROPERTY_SERVICE);
- assertNotNull("CarPropertyManager is null", propMgr);
-
- File sharedJson = makeShareable(CAR_INFO_TEST_JSON);
- Log.d(TAG, "Send command to VHAL to start generation");
- VhalEventGenerator infoGenerator =
- new JsonVhalEventGenerator(mVehicle).setJsonFile(sharedJson);
- infoGenerator.start();
-
- // Wait for some time to ensure information is all loaded
- // It is assuming the test data is not very large
- Thread.sleep(2000);
-
- Log.d(TAG, "Send command to VHAL to stop generation");
- infoGenerator.stop();
-
- for (CarPropertyValue expectedEvent : expectedEvents) {
- CarPropertyValue actualEvent = propMgr.getProperty(
- expectedEvent.getPropertyId(), expectedEvent.getAreaId());
- assertTrue(String.format(
- "Mismatched car information data, actual: %s, expected: %s",
- actualEvent, expectedEvent),
- Utils.areCarPropertyValuesEqual(actualEvent, expectedEvent));
- }
- }
-}
diff --git a/tests/vehiclehal_test/src/com/android/car/vehiclehal/test/E2eCarTestBase.java b/tests/vehiclehal_test/src/com/android/car/vehiclehal/test/E2eCarTestBase.java
index 9485d805e6..5960422bb2 100644
--- a/tests/vehiclehal_test/src/com/android/car/vehiclehal/test/E2eCarTestBase.java
+++ b/tests/vehiclehal_test/src/com/android/car/vehiclehal/test/E2eCarTestBase.java
@@ -19,12 +19,12 @@ import static org.junit.Assert.assertNotNull;
import static org.junit.Assume.assumeTrue;
import android.car.Car;
-import android.car.hardware.CarPropertyValue;
import android.content.ComponentName;
import android.content.Context;
import android.content.ServiceConnection;
import android.hardware.automotive.vehicle.V2_0.IVehicle;
import android.hardware.automotive.vehicle.V2_0.StatusCode;
+import android.hardware.automotive.vehicle.V2_0.VehiclePropValue;
import android.os.ConditionVariable;
import android.os.FileUtils;
import android.os.IBinder;
@@ -82,7 +82,7 @@ public class E2eCarTestBase {
}
}
- protected List<CarPropertyValue> getExpectedEvents(String fileName)
+ protected List<VehiclePropValue> getExpectedEvents(String fileName)
throws IOException, JSONException {
try (InputStream in = mContext.getAssets().open(fileName)) {
Log.d(TAG, "Reading golden test data" + fileName);
diff --git a/tests/vehiclehal_test/src/com/android/car/vehiclehal/test/Utils.java b/tests/vehiclehal_test/src/com/android/car/vehiclehal/test/Utils.java
index 496b504897..6a4b49689f 100644
--- a/tests/vehiclehal_test/src/com/android/car/vehiclehal/test/Utils.java
+++ b/tests/vehiclehal_test/src/com/android/car/vehiclehal/test/Utils.java
@@ -16,10 +16,13 @@
package com.android.car.vehiclehal.test;
+import static java.lang.Integer.toHexString;
+
import android.car.hardware.CarPropertyValue;
import android.hardware.automotive.vehicle.V2_0.IVehicle;
import android.hardware.automotive.vehicle.V2_0.VehiclePropConfig;
import android.hardware.automotive.vehicle.V2_0.VehiclePropValue;
+import android.os.HidlSupport;
import android.os.RemoteException;
import android.util.Log;
@@ -99,13 +102,55 @@ final class Utils {
* @param value2
* @return true if equal
*/
- static boolean areCarPropertyValuesEqual(final CarPropertyValue value1,
- final CarPropertyValue value2) {
+ static boolean areVehiclePropValuesEqual(final VehiclePropValue value1,
+ final VehiclePropValue value2) {
return value1 == value2
|| value1 != null
&& value2 != null
- && value1.getPropertyId() == value2.getPropertyId()
- && value1.getAreaId() == value2.getAreaId()
- && value1.getValue().equals(value2.getValue());
+ && value1.prop == value2.prop
+ && value1.areaId == value2.areaId
+ && HidlSupport.deepEquals(value1.value, value2.value);
+ }
+
+ /**
+ * The method will convert prop ID to hexadecimal format, and omit timestamp and status
+ *
+ * @param value
+ * @return String
+ */
+ static String vehiclePropValueToString(final VehiclePropValue value) {
+ return "{.prop = 0x" + toHexString(value.prop)
+ + ", .areaId = " + value.areaId
+ + ", .value = " + value.value + "}";
+ }
+
+ static VehiclePropValue fromHvacPropertyValue(CarPropertyValue value) {
+ VehiclePropValueBuilder builder =
+ VehiclePropValueBuilder.newBuilder(
+ VhalPropMaps.getHvacVhalProp(value.getPropertyId()));
+ return fromCarPropertyValue(value, builder);
+ }
+
+ private static VehiclePropValue fromCarPropertyValue(
+ CarPropertyValue value, VehiclePropValueBuilder builder) {
+ builder.setAreaId(value.getAreaId()).setTimestamp(value.getTimestamp());
+
+ //TODO: Consider move this conversion to VehiclePropValueBuilder
+ Object o = value.getValue();
+ if (o instanceof Boolean) {
+ builder.addIntValue((boolean) o ? 1 : 0);
+ } else if (o instanceof Integer) {
+ builder.addIntValue((int) o);
+ } else if (o instanceof Float) {
+ builder.addFloatValue((float) o);
+ } else if (o instanceof Long) {
+ builder.setInt64Value((long) o);
+ } else if (o instanceof String) {
+ builder.setStringValue((String) o);
+ } else { //TODO: Add support for MIXED type
+ throw new IllegalArgumentException("Unrecognized car property value type, "
+ + o.getClass());
+ }
+ return builder.build();
}
}
diff --git a/tests/vehiclehal_test/src/com/android/car/vehiclehal/test/VhalEventVerifier.java b/tests/vehiclehal_test/src/com/android/car/vehiclehal/test/VhalEventVerifier.java
index 62dbf5cc70..5ac92cae77 100644
--- a/tests/vehiclehal_test/src/com/android/car/vehiclehal/test/VhalEventVerifier.java
+++ b/tests/vehiclehal_test/src/com/android/car/vehiclehal/test/VhalEventVerifier.java
@@ -15,7 +15,7 @@
*/
package com.android.car.vehiclehal.test;
-import android.car.hardware.CarPropertyValue;
+import android.hardware.automotive.vehicle.V2_0.VehiclePropValue;
import android.os.ConditionVariable;
import java.util.ArrayList;
@@ -28,7 +28,7 @@ import java.util.List;
* The verifier will provide formatted result for all mismatched events in sequence.
*/
class VhalEventVerifier {
- private List<CarPropertyValue> mExpectedEvents;
+ private List<VehiclePropValue> mExpectedEvents;
// A pointer to keep track of the next expected event in the list
private int mIdx;
private List<MismatchedEventPair> mMismatchedEvents;
@@ -37,10 +37,10 @@ class VhalEventVerifier {
static class MismatchedEventPair {
public final int idx;
- public final CarPropertyValue expectedEvent;
- public final CarPropertyValue mismatchedEvent;
+ public final VehiclePropValue expectedEvent;
+ public final VehiclePropValue mismatchedEvent;
- MismatchedEventPair(CarPropertyValue expectedEvent, CarPropertyValue mismatchedEvent,
+ MismatchedEventPair(VehiclePropValue expectedEvent, VehiclePropValue mismatchedEvent,
int idx) {
this.idx = idx;
this.expectedEvent = expectedEvent;
@@ -48,7 +48,7 @@ class VhalEventVerifier {
}
}
- VhalEventVerifier(List<CarPropertyValue> expectedEvents) {
+ VhalEventVerifier(List<VehiclePropValue> expectedEvents) {
mExpectedEvents = expectedEvents;
mIdx = 0;
mMismatchedEvents = new ArrayList<>();
@@ -62,12 +62,12 @@ class VhalEventVerifier {
*
* @param nextEvent to be verified
*/
- public void verify(CarPropertyValue nextEvent) {
+ public void verify(VehiclePropValue nextEvent) {
if (mIdx >= mExpectedEvents.size()) {
return;
}
- CarPropertyValue expectedEvent = mExpectedEvents.get(mIdx);
- if (!Utils.areCarPropertyValuesEqual(expectedEvent, nextEvent)) {
+ VehiclePropValue expectedEvent = mExpectedEvents.get(mIdx);
+ if (!Utils.areVehiclePropValuesEqual(expectedEvent, nextEvent)) {
mMismatchedEvents.add(new MismatchedEventPair(expectedEvent, nextEvent, mIdx));
}
if (++mIdx == mExpectedEvents.size()) {
@@ -87,8 +87,8 @@ class VhalEventVerifier {
StringBuilder resultBuilder = new StringBuilder();
for (MismatchedEventPair pair : mMismatchedEvents) {
resultBuilder.append("Index " + pair.idx + ": Expected "
- + pair.expectedEvent + ", Received "
- + pair.mismatchedEvent + "\n");
+ + Utils.vehiclePropValueToString(pair.expectedEvent) + ", Received "
+ + Utils.vehiclePropValueToString(pair.mismatchedEvent) + "\n");
}
return resultBuilder.toString();
}
diff --git a/tests/vehiclehal_test/src/com/android/car/vehiclehal/test/VhalJsonReader.java b/tests/vehiclehal_test/src/com/android/car/vehiclehal/test/VhalJsonReader.java
index 01a62fc070..bf4e32fa59 100644
--- a/tests/vehiclehal_test/src/com/android/car/vehiclehal/test/VhalJsonReader.java
+++ b/tests/vehiclehal_test/src/com/android/car/vehiclehal/test/VhalJsonReader.java
@@ -17,9 +17,10 @@ package com.android.car.vehiclehal.test;
import static java.lang.Integer.toHexString;
-import android.car.hardware.CarPropertyValue;
+import android.hardware.automotive.vehicle.V2_0.VehiclePropValue;
import android.hardware.automotive.vehicle.V2_0.VehiclePropertyType;
+import com.android.car.vehiclehal.VehiclePropValueBuilder;
import org.json.JSONArray;
import org.json.JSONException;
@@ -44,10 +45,10 @@ class VhalJsonReader {
private static final String JSON_FIELD_TIMESTAMP = "timestamp";
private static final String JSON_FIELD_VALUE = "value";
- public static List<CarPropertyValue> readFromJson(InputStream in)
+ public static List<VehiclePropValue> readFromJson(InputStream in)
throws IOException, JSONException {
JSONArray rawEvents = new JSONArray(readJsonString(in));
- List<CarPropertyValue> events = new ArrayList<>();
+ List<VehiclePropValue> events = new ArrayList<>();
for (int i = 0; i < rawEvents.length(); i++) {
events.add(getEvent(rawEvents.getJSONObject(i)));
}
@@ -63,33 +64,32 @@ class VhalJsonReader {
return builder.toString();
}
- private static CarPropertyValue<?> getEvent(JSONObject rawEvent) throws JSONException {
+ private static VehiclePropValue getEvent(JSONObject rawEvent) throws JSONException {
int prop = rawEvent.getInt(JSON_FIELD_PROP);
- int areaId = rawEvent.getInt(JSON_FIELD_AREA_ID);
- long timestamp = rawEvent.getLong(JSON_FIELD_TIMESTAMP);
+ VehiclePropValueBuilder builder = VehiclePropValueBuilder.newBuilder(prop)
+ .setAreaId(rawEvent.getInt(JSON_FIELD_AREA_ID))
+ .setTimestamp(rawEvent.getLong(JSON_FIELD_TIMESTAMP));
switch (prop & VehiclePropertyType.MASK) {
case VehiclePropertyType.BOOLEAN:
- return new CarPropertyValue<>(prop, areaId, CarPropertyValue.STATUS_AVAILABLE,
- timestamp, rawEvent.getInt(JSON_FIELD_VALUE) != 0);
case VehiclePropertyType.INT32:
- return new CarPropertyValue<>(prop, areaId, CarPropertyValue.STATUS_AVAILABLE,
- timestamp, rawEvent.getInt(JSON_FIELD_VALUE));
+ builder.addIntValue(rawEvent.getInt(JSON_FIELD_VALUE));
+ break;
case VehiclePropertyType.INT64:
- return new CarPropertyValue<>(prop, areaId, CarPropertyValue.STATUS_AVAILABLE,
- timestamp, rawEvent.getLong(JSON_FIELD_VALUE));
+ builder.setInt64Value(rawEvent.getLong(JSON_FIELD_VALUE));
+ break;
case VehiclePropertyType.FLOAT:
- return new CarPropertyValue<>(prop, areaId,
- CarPropertyValue.STATUS_AVAILABLE, timestamp,
- (float) rawEvent.getDouble(JSON_FIELD_VALUE));
+ builder.addFloatValue((float) rawEvent.getDouble(JSON_FIELD_VALUE));
+ break;
case VehiclePropertyType.STRING:
- return new CarPropertyValue<>(prop, areaId, CarPropertyValue.STATUS_AVAILABLE,
- timestamp, rawEvent.getString(JSON_FIELD_VALUE));
+ builder.setStringValue(rawEvent.getString(JSON_FIELD_VALUE));
+ break;
//TODO: Add VehiclePropertyType.MIXED type support
default:
throw new IllegalArgumentException("Property type 0x"
+ toHexString(prop & VehiclePropertyType.MASK)
+ " is not supported in the test.");
}
+ return builder.build();
}
}
diff --git a/tests/vehiclehal_test/src/com/android/car/vehiclehal/test/VhalPropMaps.java b/tests/vehiclehal_test/src/com/android/car/vehiclehal/test/VhalPropMaps.java
new file mode 100644
index 0000000000..f24cad68d8
--- /dev/null
+++ b/tests/vehiclehal_test/src/com/android/car/vehiclehal/test/VhalPropMaps.java
@@ -0,0 +1,73 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.car.vehiclehal.test;
+
+import android.car.hardware.hvac.CarHvacManager;
+import android.hardware.automotive.vehicle.V2_0.VehicleProperty;
+import android.util.SparseIntArray;
+
+class VhalPropMaps {
+
+ private static final SparseIntArray HVAC_PROP_MAP;
+
+ static {
+ HVAC_PROP_MAP = new SparseIntArray();
+ HVAC_PROP_MAP.put(CarHvacManager.ID_MIRROR_DEFROSTER_ON,
+ VehicleProperty.HVAC_SIDE_MIRROR_HEAT);
+ HVAC_PROP_MAP.put(CarHvacManager.ID_STEERING_WHEEL_HEAT,
+ VehicleProperty.HVAC_STEERING_WHEEL_HEAT);
+ HVAC_PROP_MAP.put(CarHvacManager.ID_OUTSIDE_AIR_TEMP,
+ VehicleProperty.ENV_OUTSIDE_TEMPERATURE);
+ HVAC_PROP_MAP.put(CarHvacManager.ID_TEMPERATURE_DISPLAY_UNITS,
+ VehicleProperty.HVAC_TEMPERATURE_DISPLAY_UNITS);
+ HVAC_PROP_MAP.put(CarHvacManager.ID_ZONED_TEMP_SETPOINT,
+ VehicleProperty.HVAC_TEMPERATURE_SET);
+ HVAC_PROP_MAP.put(CarHvacManager.ID_ZONED_TEMP_ACTUAL,
+ VehicleProperty.HVAC_TEMPERATURE_CURRENT);
+ HVAC_PROP_MAP.put(CarHvacManager.ID_ZONED_FAN_SPEED_SETPOINT,
+ VehicleProperty.HVAC_FAN_SPEED);
+ HVAC_PROP_MAP.put(CarHvacManager.ID_ZONED_FAN_SPEED_RPM,
+ VehicleProperty.HVAC_ACTUAL_FAN_SPEED_RPM);
+ HVAC_PROP_MAP.put(CarHvacManager.ID_ZONED_FAN_DIRECTION_AVAILABLE,
+ VehicleProperty.HVAC_FAN_DIRECTION_AVAILABLE);
+ HVAC_PROP_MAP.put(CarHvacManager.ID_ZONED_FAN_DIRECTION,
+ VehicleProperty.HVAC_FAN_DIRECTION);
+ HVAC_PROP_MAP.put(CarHvacManager.ID_ZONED_SEAT_TEMP,
+ VehicleProperty.HVAC_SEAT_TEMPERATURE);
+ HVAC_PROP_MAP.put(CarHvacManager.ID_ZONED_AC_ON,
+ VehicleProperty.HVAC_AC_ON);
+ HVAC_PROP_MAP.put(CarHvacManager.ID_ZONED_AUTOMATIC_MODE_ON,
+ VehicleProperty.HVAC_AUTO_ON);
+ HVAC_PROP_MAP.put(CarHvacManager.ID_ZONED_AIR_RECIRCULATION_ON,
+ VehicleProperty.HVAC_RECIRC_ON);
+ HVAC_PROP_MAP.put(CarHvacManager.ID_ZONED_MAX_AC_ON,
+ VehicleProperty.HVAC_MAX_AC_ON);
+ HVAC_PROP_MAP.put(CarHvacManager.ID_ZONED_DUAL_ZONE_ON,
+ VehicleProperty.HVAC_DUAL_ON);
+ HVAC_PROP_MAP.put(CarHvacManager.ID_ZONED_MAX_DEFROST_ON,
+ VehicleProperty.HVAC_MAX_DEFROST_ON);
+ HVAC_PROP_MAP.put(CarHvacManager.ID_ZONED_HVAC_POWER_ON,
+ VehicleProperty.HVAC_POWER_ON);
+ HVAC_PROP_MAP.put(CarHvacManager.ID_ZONED_HVAC_AUTO_RECIRC_ON,
+ VehicleProperty.HVAC_AUTO_RECIRC_ON);
+ HVAC_PROP_MAP.put(CarHvacManager.ID_WINDOW_DEFROSTER_ON,
+ VehicleProperty.HVAC_DEFROSTER);
+ }
+
+ static int getHvacVhalProp(final int hvacProp) {
+ return HVAC_PROP_MAP.get(hvacProp);
+ }
+}