Loading services/core/java/com/android/server/location/contexthub/ContextHubEndpointManager.java +23 −0 Original line number Diff line number Diff line Loading @@ -19,12 +19,14 @@ package com.android.server.location.contexthub; import android.content.Context; import android.hardware.contexthub.ContextHubInfo; import android.hardware.contexthub.EndpointInfo; import android.hardware.contexthub.ErrorCode; import android.hardware.contexthub.HubEndpointInfo; import android.hardware.contexthub.HubInfo; import android.hardware.contexthub.HubMessage; import android.hardware.contexthub.IContextHubEndpoint; import android.hardware.contexthub.IContextHubEndpointCallback; import android.hardware.contexthub.IEndpointCommunication; import android.hardware.contexthub.MessageDeliveryStatus; import android.os.RemoteException; import android.os.ServiceSpecificException; import android.util.Log; Loading Loading @@ -339,6 +341,12 @@ import java.util.function.Consumer; sessionId, (broker) -> broker.onMessageReceived(sessionId, message)); if (!callbackInvoked) { Log.w(TAG, "onMessageReceived: unknown session ID " + sessionId); if (message.isResponseRequired()) { sendMessageDeliveryStatus( sessionId, message.getMessageSequenceNumber(), ErrorCode.DESTINATION_NOT_FOUND); } } } Loading Loading @@ -402,6 +410,21 @@ import java.util.function.Consumer; return (minId <= maxId) && (minId >= 0) && (maxId >= 0); } private void sendMessageDeliveryStatus( int sessionId, int messageSequenceNumber, byte errorCode) { MessageDeliveryStatus status = new MessageDeliveryStatus(); status.messageSequenceNumber = messageSequenceNumber; status.errorCode = errorCode; try { mHubInterface.sendMessageDeliveryStatusToEndpoint(sessionId, status); } catch (RemoteException e) { Log.w( TAG, "Exception while sending message delivery status on session " + sessionId, e); } } @VisibleForTesting /* package */ int getNumAvailableSessions() { synchronized (mSessionIdLock) { Loading services/tests/servicestests/src/com/android/server/location/contexthub/ContextHubEndpointTest.java +26 −0 Original line number Diff line number Diff line Loading @@ -19,14 +19,19 @@ package com.android.server.location.contexthub; import static com.google.common.truth.Truth.assertThat; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.content.Context; import android.hardware.contexthub.ErrorCode; import android.hardware.contexthub.HubEndpointInfo; import android.hardware.contexthub.HubEndpointInfo.HubEndpointIdentifier; import android.hardware.contexthub.HubMessage; import android.hardware.contexthub.IContextHubEndpoint; import android.hardware.contexthub.IContextHubEndpointCallback; import android.hardware.contexthub.IEndpointCommunication; import android.hardware.contexthub.MessageDeliveryStatus; import android.os.Binder; import android.os.RemoteException; import android.platform.test.annotations.Postsubmit; Loading @@ -38,6 +43,7 @@ import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; import org.mockito.Mock; import org.mockito.junit.MockitoJUnit; import org.mockito.junit.MockitoRule; Loading Loading @@ -121,4 +127,24 @@ public class ContextHubEndpointTest { mEndpointManager.returnSessionId(sessionId); assertThat(mEndpointManager.getNumAvailableSessions()).isEqualTo(SESSION_ID_RANGE); } @Test public void testInvalidMessageReceivedCallback() throws RemoteException { // Send an invalid call to onMessageReceived (no sessions created) final int messageType = 1234; final int sessionId = 4321; final int sequenceNumber = 5678; HubMessage message = new HubMessage.Builder(messageType, new byte[0]).setResponseRequired(true).build(); message.setMessageSequenceNumber(sequenceNumber); mEndpointManager.onMessageReceived(sessionId, message); // Confirm that we can get a delivery status with DESTINATION_NOT_FOUND error ArgumentCaptor<MessageDeliveryStatus> statusCaptor = ArgumentCaptor.forClass(MessageDeliveryStatus.class); verify(mMockEndpointCommunications) .sendMessageDeliveryStatusToEndpoint(eq(sessionId), statusCaptor.capture()); assertThat(statusCaptor.getValue().messageSequenceNumber).isEqualTo(sequenceNumber); assertThat(statusCaptor.getValue().errorCode).isEqualTo(ErrorCode.DESTINATION_NOT_FOUND); } } Loading
services/core/java/com/android/server/location/contexthub/ContextHubEndpointManager.java +23 −0 Original line number Diff line number Diff line Loading @@ -19,12 +19,14 @@ package com.android.server.location.contexthub; import android.content.Context; import android.hardware.contexthub.ContextHubInfo; import android.hardware.contexthub.EndpointInfo; import android.hardware.contexthub.ErrorCode; import android.hardware.contexthub.HubEndpointInfo; import android.hardware.contexthub.HubInfo; import android.hardware.contexthub.HubMessage; import android.hardware.contexthub.IContextHubEndpoint; import android.hardware.contexthub.IContextHubEndpointCallback; import android.hardware.contexthub.IEndpointCommunication; import android.hardware.contexthub.MessageDeliveryStatus; import android.os.RemoteException; import android.os.ServiceSpecificException; import android.util.Log; Loading Loading @@ -339,6 +341,12 @@ import java.util.function.Consumer; sessionId, (broker) -> broker.onMessageReceived(sessionId, message)); if (!callbackInvoked) { Log.w(TAG, "onMessageReceived: unknown session ID " + sessionId); if (message.isResponseRequired()) { sendMessageDeliveryStatus( sessionId, message.getMessageSequenceNumber(), ErrorCode.DESTINATION_NOT_FOUND); } } } Loading Loading @@ -402,6 +410,21 @@ import java.util.function.Consumer; return (minId <= maxId) && (minId >= 0) && (maxId >= 0); } private void sendMessageDeliveryStatus( int sessionId, int messageSequenceNumber, byte errorCode) { MessageDeliveryStatus status = new MessageDeliveryStatus(); status.messageSequenceNumber = messageSequenceNumber; status.errorCode = errorCode; try { mHubInterface.sendMessageDeliveryStatusToEndpoint(sessionId, status); } catch (RemoteException e) { Log.w( TAG, "Exception while sending message delivery status on session " + sessionId, e); } } @VisibleForTesting /* package */ int getNumAvailableSessions() { synchronized (mSessionIdLock) { Loading
services/tests/servicestests/src/com/android/server/location/contexthub/ContextHubEndpointTest.java +26 −0 Original line number Diff line number Diff line Loading @@ -19,14 +19,19 @@ package com.android.server.location.contexthub; import static com.google.common.truth.Truth.assertThat; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.content.Context; import android.hardware.contexthub.ErrorCode; import android.hardware.contexthub.HubEndpointInfo; import android.hardware.contexthub.HubEndpointInfo.HubEndpointIdentifier; import android.hardware.contexthub.HubMessage; import android.hardware.contexthub.IContextHubEndpoint; import android.hardware.contexthub.IContextHubEndpointCallback; import android.hardware.contexthub.IEndpointCommunication; import android.hardware.contexthub.MessageDeliveryStatus; import android.os.Binder; import android.os.RemoteException; import android.platform.test.annotations.Postsubmit; Loading @@ -38,6 +43,7 @@ import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; import org.mockito.Mock; import org.mockito.junit.MockitoJUnit; import org.mockito.junit.MockitoRule; Loading Loading @@ -121,4 +127,24 @@ public class ContextHubEndpointTest { mEndpointManager.returnSessionId(sessionId); assertThat(mEndpointManager.getNumAvailableSessions()).isEqualTo(SESSION_ID_RANGE); } @Test public void testInvalidMessageReceivedCallback() throws RemoteException { // Send an invalid call to onMessageReceived (no sessions created) final int messageType = 1234; final int sessionId = 4321; final int sequenceNumber = 5678; HubMessage message = new HubMessage.Builder(messageType, new byte[0]).setResponseRequired(true).build(); message.setMessageSequenceNumber(sequenceNumber); mEndpointManager.onMessageReceived(sessionId, message); // Confirm that we can get a delivery status with DESTINATION_NOT_FOUND error ArgumentCaptor<MessageDeliveryStatus> statusCaptor = ArgumentCaptor.forClass(MessageDeliveryStatus.class); verify(mMockEndpointCommunications) .sendMessageDeliveryStatusToEndpoint(eq(sessionId), statusCaptor.capture()); assertThat(statusCaptor.getValue().messageSequenceNumber).isEqualTo(sequenceNumber); assertThat(statusCaptor.getValue().errorCode).isEqualTo(ErrorCode.DESTINATION_NOT_FOUND); } }