diff options
author | Yu Shan <shanyu@google.com> | 2021-06-10 16:30:16 -0700 |
---|---|---|
committer | Yu Shan <shanyu@google.com> | 2021-06-16 13:35:54 -0700 |
commit | be686b1b77842408654719188aab29d4c19c8e26 (patch) | |
tree | 8a1007ce0ecd5a57417acce1dfe13396825457ec | |
parent | 1cafde08459594766099c954abc66695f16817a2 (diff) | |
download | Car-be686b1b77842408654719188aab29d4c19c8e26.tar.gz |
Improve VmsHalServiceTest.
Add test cases to test unexpected return value from VHAL.
Test: atest
Bug: 190231228
Change-Id: I947861687ee61434247058d218822bf1b59b7715
-rw-r--r-- | service/src/com/android/car/hal/VmsHalService.java | 16 | ||||
-rw-r--r-- | tests/carservice_unit_test/src/com/android/car/hal/VmsHalServiceTest.java | 42 |
2 files changed, 57 insertions, 1 deletions
diff --git a/service/src/com/android/car/hal/VmsHalService.java b/service/src/com/android/car/hal/VmsHalService.java index de030bfb79..820a86631d 100644 --- a/service/src/com/android/car/hal/VmsHalService.java +++ b/service/src/com/android/car/hal/VmsHalService.java @@ -279,7 +279,13 @@ public class VmsHalService extends HalServiceBase { if (DBG) Slog.d(TAG, "Handling a VMS property change"); for (VehiclePropValue v : values) { ArrayList<Integer> vec = v.value.int32Values; - int messageType = vec.get(VmsBaseMessageIntegerValuesIndex.MESSAGE_TYPE); + int messageType; + try { + messageType = vec.get(VmsBaseMessageIntegerValuesIndex.MESSAGE_TYPE); + } catch (IndexOutOfBoundsException e) { + Slog.e(TAG, "Invalid event, no message type", e); + continue; + } if (DBG) Slog.d(TAG, "Received " + VmsMessageType.toString(messageType) + " message"); try { @@ -412,6 +418,10 @@ public class VmsHalService extends HalServiceBase { Slog.d(TAG, "Handling a data event for Layer: " + vmsLayer + " Publisher: " + publisherId); } + if (payload.length == 0) { + Slog.e(TAG, "Get 0 length payload while handling data event"); + return; + } getVmsClient().publishPacket(publisherId, vmsLayer, payload); } @@ -506,6 +516,10 @@ public class VmsHalService extends HalServiceBase { if (DBG) { Slog.d(TAG, "Handling a publisher id request event"); } + if (payload.length == 0) { + Slog.e(TAG, "Get 0 length payload while handling data event"); + return; + } VehiclePropValue vehicleProp = createVmsMessage(VmsMessageType.PUBLISHER_ID_RESPONSE); diff --git a/tests/carservice_unit_test/src/com/android/car/hal/VmsHalServiceTest.java b/tests/carservice_unit_test/src/com/android/car/hal/VmsHalServiceTest.java index dadcbadf76..8b47814ed4 100644 --- a/tests/carservice_unit_test/src/com/android/car/hal/VmsHalServiceTest.java +++ b/tests/carservice_unit_test/src/com/android/car/hal/VmsHalServiceTest.java @@ -204,6 +204,48 @@ public class VmsHalServiceTest { } @Test + public void testHandleInvalidEvent() { + VehiclePropValue message = new VehiclePropValue(); + // Invalid message with no message type. + message.prop = VehicleProperty.VEHICLE_MAP_SERVICE; + message.value.stringValue = "1234"; + + sendHalMessage(message); + verify(mVmsClient, Mockito.never()).publishPacket( + Mockito.anyInt(), Mockito.any(), Mockito.any()); + + // Incomplete VmsLayer. + message.value.int32Values.add(VmsMessageType.DATA); + message.value.int32Values.add(LAYER_TYPE); + message.value.int32Values.add(LAYER_SUBTYPE); + + sendHalMessage(message); + verify(mVmsClient, Mockito.never()).publishPacket( + Mockito.anyInt(), Mockito.any(), Mockito.any()); + + // No publisher ID. + message.value.int32Values.add(LAYER_VERSION); + + sendHalMessage(message); + verify(mVmsClient, Mockito.never()).publishPacket( + Mockito.anyInt(), Mockito.any(), Mockito.any()); + + // No payload. + message.value.int32Values.add(PUBLISHER_ID); + + sendHalMessage(message); + verify(mVmsClient, Mockito.never()).publishPacket( + Mockito.anyInt(), Mockito.any(), Mockito.any()); + + // No payload for publisherID event. + message.value.int32Values.set(0, VmsMessageType.PUBLISHER_ID_REQUEST); + + sendHalMessage(message); + verify(mVmsClient, Mockito.never()).publishPacket( + Mockito.anyInt(), Mockito.any(), Mockito.any()); + } + + @Test public void testOnPacketReceivedEvent() throws Exception { VehiclePropValue message = createHalMessage( VmsMessageType.DATA, // Message type |