summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorEtan Cohen <etancohen@google.com>2016-05-04 12:39:21 -0700
committerEtan Cohen <etancohen@google.com>2016-05-23 12:52:21 -0700
commit1bf97ad103217a2e18370c382fe30abd88716d53 (patch)
tree399ce8ba011e453f112a01ee0d765590cbe73bc0 /tests
parent62f63a972ac410750d5de10424ebc9030118365d (diff)
[NAN] Update send message flow to be (more) asynchronous
Bug: 27916698 Change-Id: Ie9741b73190e733e42dae63386557e6feb01eb54
Diffstat (limited to 'tests')
-rw-r--r--tests/wifitests/jni/wifi_nan_hal_mock.cpp27
-rw-r--r--tests/wifitests/src/com/android/server/wifi/nan/WifiNanHalMock.java2
-rw-r--r--tests/wifitests/src/com/android/server/wifi/nan/WifiNanHalTest.java33
-rw-r--r--tests/wifitests/src/com/android/server/wifi/nan/WifiNanStateManagerTest.java119
4 files changed, 163 insertions, 18 deletions
diff --git a/tests/wifitests/jni/wifi_nan_hal_mock.cpp b/tests/wifitests/jni/wifi_nan_hal_mock.cpp
index 75e04e82d..4c0c41c7f 100644
--- a/tests/wifitests/jni/wifi_nan_hal_mock.cpp
+++ b/tests/wifitests/jni/wifi_nan_hal_mock.cpp
@@ -578,10 +578,35 @@ extern "C" void Java_com_android_server_wifi_nan_WifiNanHalMock_callDisabled(
mCallbackHandlers.EventDisabled(&msg);
}
+extern "C" void Java_com_android_server_wifi_nan_WifiNanHalMock_callTransmitFollowup(
+ JNIEnv* env, jclass clazz, jstring json_args_jstring) {
+ ScopedUtfChars chars(env, json_args_jstring);
+ HalMockJsonReader jsonR(chars.c_str());
+ bool error = false;
+
+ ALOGD("Java_com_android_server_wifi_nan_WifiNanHalMock_callTransmitFollowup: '%s'",
+ chars.c_str());
+
+ NanTransmitFollowupInd msg;
+ msg.id = (transaction_id) jsonR.get_int("id", &error);
+ msg.reason = (NanStatusType) jsonR.get_int("reason", &error);
+
+ if (error) {
+ ALOGE("Java_com_android_server_wifi_nan_WifiNanHalMock_callTransmitFollowup: "
+ "error parsing args");
+ return;
+ }
+
+ mCallbackHandlers.EventTransmitFollowup(&msg);
+}
+
// TODO: Not currently used: add as needed
-//void (*EventUnMatch) (NanUnmatchInd* event);
+//void (*EventMatchExpired) (NanUnmatchInd* event);
//void (*EventTca) (NanTCAInd* event);
//void (*EventBeaconSdfPayload) (NanBeaconSdfPayloadInd* event);
+//void (*EventDataRequest)(NanDataPathRequestInd* event);
+//void (*EventDataConfirm)(NanDataPathConfirmInd* event);
+//void (*EventDataEnd)(NanDataPathEndInd* event);
int init_wifi_nan_hal_func_table_mock(wifi_hal_fn *hal_fn) {
if (hal_fn == NULL) {
diff --git a/tests/wifitests/src/com/android/server/wifi/nan/WifiNanHalMock.java b/tests/wifitests/src/com/android/server/wifi/nan/WifiNanHalMock.java
index 2285de7bf..60fdd1e57 100644
--- a/tests/wifitests/src/com/android/server/wifi/nan/WifiNanHalMock.java
+++ b/tests/wifitests/src/com/android/server/wifi/nan/WifiNanHalMock.java
@@ -86,6 +86,8 @@ public class WifiNanHalMock {
public static native void callDisabled(String jsonArgs);
+ public static native void callTransmitFollowup(String jsonArgs);
+
/**
* initialize NAN mock
*/
diff --git a/tests/wifitests/src/com/android/server/wifi/nan/WifiNanHalTest.java b/tests/wifitests/src/com/android/server/wifi/nan/WifiNanHalTest.java
index 5f2a2b6b1..465bc14e2 100644
--- a/tests/wifitests/src/com/android/server/wifi/nan/WifiNanHalTest.java
+++ b/tests/wifitests/src/com/android/server/wifi/nan/WifiNanHalTest.java
@@ -483,7 +483,7 @@ public class WifiNanHalTest {
WifiNanHalMock.callNotifyResponse(transactionId,
HalMockUtils.convertBundleToJson(args).toString());
- verify(mNanStateManager).onMessageSendSuccessResponse(transactionId);
+ verify(mNanStateManager).onMessageSendQueuedSuccessResponse(transactionId);
verifyNoMoreInteractions(mNanStateManager);
}
@@ -499,7 +499,7 @@ public class WifiNanHalTest {
WifiNanHalMock.callNotifyResponse(transactionId,
HalMockUtils.convertBundleToJson(args).toString());
- verify(mNanStateManager).onMessageSendFailResponse(transactionId,
+ verify(mNanStateManager).onMessageSendQueuedFailResponse(transactionId,
WifiNanSessionCallback.REASON_OTHER);
verifyNoMoreInteractions(mNanStateManager);
}
@@ -651,6 +651,35 @@ public class WifiNanHalTest {
verifyNoMoreInteractions(mNanStateManager);
}
+ @Test
+ public void testTransmitFollowupSuccess() throws JSONException {
+ final short transactionId = 123;
+
+ Bundle args = new Bundle();
+ args.putInt("id", transactionId);
+ args.putInt("reason", WifiNanNative.NAN_STATUS_SUCCESS);
+
+ WifiNanHalMock.callTransmitFollowup(HalMockUtils.convertBundleToJson(args).toString());
+
+ verify(mNanStateManager).onMessageSendSuccessNotification(transactionId);
+ verifyNoMoreInteractions(mNanStateManager);
+ }
+
+ @Test
+ public void testTransmitFollowupFail() throws JSONException {
+ final short transactionId = 5689;
+
+ Bundle args = new Bundle();
+ args.putInt("id", transactionId);
+ args.putInt("reason", WifiNanNative.NAN_STATUS_TX_FAIL);
+
+ WifiNanHalMock.callTransmitFollowup(HalMockUtils.convertBundleToJson(args).toString());
+
+ verify(mNanStateManager).onMessageSendFailNotification(transactionId,
+ WifiNanSessionCallback.REASON_TX_FAIL);
+ verifyNoMoreInteractions(mNanStateManager);
+ }
+
/*
* Utilities
*/
diff --git a/tests/wifitests/src/com/android/server/wifi/nan/WifiNanStateManagerTest.java b/tests/wifitests/src/com/android/server/wifi/nan/WifiNanStateManagerTest.java
index 65d36807d..e76038f6d 100644
--- a/tests/wifitests/src/com/android/server/wifi/nan/WifiNanStateManagerTest.java
+++ b/tests/wifitests/src/com/android/server/wifi/nan/WifiNanStateManagerTest.java
@@ -137,7 +137,7 @@ public class WifiNanStateManagerTest {
mDut.connect(clientId, mockCallback, configRequest);
mMockLooper.dispatchAll();
- verifyNoMoreInteractions(mMockContext, mMockNative, mockCallback);
+ verifyNoMoreInteractions(mMockNative, mockCallback);
}
/**
@@ -744,9 +744,9 @@ public class WifiNanStateManagerTest {
}
/**
- * Validate (1) subscribe (success), (2) match (i.e. discovery), (3) message
- * reception, (4) message transmission failed, (5) message transmission
- * success.
+ * Validate (1) subscribe (success), (2) match (i.e. discovery), (3) message reception, (4)
+ * message queuing failed, (5) message transmission failed (after ok queuing), (6) message
+ * transmission success.
*/
@Test
public void testMatchAndMessages() throws Exception {
@@ -762,6 +762,7 @@ public class WifiNanStateManagerTest {
final String peerMatchFilter = "filter binary array represented as string";
final String peerMsg = "some message from peer";
final int messageId = 6948;
+ final int messageId2 = 6949;
ConfigRequest configRequest = new ConfigRequest.Builder().build();
SubscribeConfig subscribeConfig = new SubscribeConfig.Builder().setServiceName(serviceName)
@@ -806,25 +807,42 @@ public class WifiNanStateManagerTest {
inOrder.verify(mockSessionCallback).onMessageReceived(requestorId, peerMsg.getBytes(),
peerMsg.length());
- // (4) message Tx fail
+ // (4) message Tx queuing fail
mDut.sendMessage(clientId, sessionId.getValue(), requestorId, ssi.getBytes(), ssi.length(),
messageId);
mMockLooper.dispatchAll();
inOrder.verify(mMockNative).sendMessage(transactionId.capture(), eq(subscribeId),
eq(requestorId), eq(peerMac), eq(ssi.getBytes()), eq(ssi.length()));
- mDut.onMessageSendFailResponse(transactionId.getValue(), reasonFail);
+ mDut.onMessageSendQueuedFailResponse(transactionId.getValue(), reasonFail);
mMockLooper.dispatchAll();
inOrder.verify(mockSessionCallback).onMessageSendFail(messageId, reasonFail);
- // (5) message Tx success
+ // (5) message Tx successful queuing
mDut.sendMessage(clientId, sessionId.getValue(), requestorId, ssi.getBytes(), ssi.length(),
messageId);
mMockLooper.dispatchAll();
inOrder.verify(mMockNative).sendMessage(transactionId.capture(), eq(subscribeId),
eq(requestorId), eq(peerMac), eq(ssi.getBytes()), eq(ssi.length()));
- mDut.onMessageSendSuccessResponse(transactionId.getValue());
+ short tid1 = transactionId.getValue();
+ mDut.onMessageSendQueuedSuccessResponse(tid1);
mMockLooper.dispatchAll();
- inOrder.verify(mockSessionCallback).onMessageSendSuccess(messageId);
+
+ // (6) message Tx successful queuing
+ mDut.sendMessage(clientId, sessionId.getValue(), requestorId, ssi.getBytes(), ssi.length(),
+ messageId2);
+ mMockLooper.dispatchAll();
+ inOrder.verify(mMockNative).sendMessage(transactionId.capture(), eq(subscribeId),
+ eq(requestorId), eq(peerMac), eq(ssi.getBytes()), eq(ssi.length()));
+ short tid2 = transactionId.getValue();
+ mDut.onMessageSendQueuedSuccessResponse(tid2);
+ mMockLooper.dispatchAll();
+
+ // (5) and (6) final Tx results (on-air results)
+ mDut.onMessageSendFailNotification(tid1, reasonFail);
+ mDut.onMessageSendSuccessNotification(tid2);
+ mMockLooper.dispatchAll();
+ inOrder.verify(mockSessionCallback).onMessageSendFail(messageId, reasonFail);
+ inOrder.verify(mockSessionCallback).onMessageSendSuccess(messageId2);
verifyNoMoreInteractions(mockCallback, mockSessionCallback, mMockNative);
}
@@ -900,7 +918,8 @@ public class WifiNanStateManagerTest {
inOrder.verify(mMockNative).sendMessage(transactionId.capture(), eq(publishId), eq(peerId2),
eq(peerMac2), eq(msgToPeer2.getBytes()), eq(msgToPeer2.length()));
short transactionIdVal = transactionId.getValue();
- mDut.onMessageSendSuccessResponse(transactionIdVal);
+ mDut.onMessageSendQueuedSuccessResponse(transactionIdVal);
+ mDut.onMessageSendSuccessNotification(transactionIdVal);
mDut.sendMessage(clientId, sessionId.getValue(), peerId1, msgToPeer1.getBytes(),
msgToPeer1.length(), msgToPeerId1);
@@ -909,7 +928,8 @@ public class WifiNanStateManagerTest {
inOrder.verify(mMockNative).sendMessage(transactionId.capture(), eq(publishId), eq(peerId1),
eq(peerMac1), eq(msgToPeer1.getBytes()), eq(msgToPeer1.length()));
transactionIdVal = transactionId.getValue();
- mDut.onMessageSendFailResponse(transactionIdVal, reason);
+ mDut.onMessageSendQueuedSuccessResponse(transactionIdVal);
+ mDut.onMessageSendFailNotification(transactionIdVal, reason);
mMockLooper.dispatchAll();
inOrder.verify(mockSessionCallback).onMessageSendFail(msgToPeerId1, reason);
@@ -976,7 +996,8 @@ public class WifiNanStateManagerTest {
msgFromPeer1.length());
inOrder.verify(mMockNative).sendMessage(transactionId.capture(), eq(publishId), eq(peerId),
eq(peerMacOrig), eq(msgToPeer1.getBytes()), eq(msgToPeer1.length()));
- mDut.onMessageSendSuccessResponse(transactionId.getValue());
+ mDut.onMessageSendQueuedSuccessResponse(transactionId.getValue());
+ mDut.onMessageSendSuccessNotification(transactionId.getValue());
mMockLooper.dispatchAll();
inOrder.verify(mockSessionCallback).onMessageSendSuccess(msgToPeerId1);
@@ -990,7 +1011,8 @@ public class WifiNanStateManagerTest {
msgFromPeer2.length());
inOrder.verify(mMockNative).sendMessage(transactionId.capture(), eq(publishId), eq(peerId),
eq(peerMacLater), eq(msgToPeer2.getBytes()), eq(msgToPeer2.length()));
- mDut.onMessageSendSuccessResponse(transactionId.getValue());
+ mDut.onMessageSendQueuedSuccessResponse(transactionId.getValue());
+ mDut.onMessageSendSuccessNotification(transactionId.getValue());
mMockLooper.dispatchAll();
inOrder.verify(mockSessionCallback).onMessageSendSuccess(msgToPeerId2);
@@ -1053,6 +1075,73 @@ public class WifiNanStateManagerTest {
}
/**
+ * Validate that on send message timeout correct callback is dispatched and that a later
+ * firmware notification is ignored.
+ */
+ @Test
+ public void testSendMessageTimeout() throws Exception {
+ final int clientId = 1005;
+ final String ssi = "some much longer and more arbitrary data";
+ final int subscribeId = 15;
+ final int requestorId = 22;
+ final byte[] peerMac = HexEncoding.decode("060708090A0B".toCharArray(), false);
+ final String peerSsi = "some peer ssi data";
+ final String peerMatchFilter = "filter binary array represented as string";
+ final int messageId = 6948;
+
+ ConfigRequest configRequest = new ConfigRequest.Builder().build();
+ SubscribeConfig subscribeConfig = new SubscribeConfig.Builder().build();
+
+ IWifiNanEventCallback mockCallback = mock(IWifiNanEventCallback.class);
+ IWifiNanSessionCallback mockSessionCallback = mock(IWifiNanSessionCallback.class);
+ ArgumentCaptor<Short> transactionId = ArgumentCaptor.forClass(Short.class);
+ ArgumentCaptor<Integer> sessionId = ArgumentCaptor.forClass(Integer.class);
+ InOrder inOrder = inOrder(mockCallback, mockSessionCallback, mMockNative);
+
+ // (1) connect
+ mDut.connect(clientId, mockCallback, configRequest);
+ mMockLooper.dispatchAll();
+ inOrder.verify(mMockNative).enableAndConfigure(transactionId.capture(), eq(configRequest),
+ eq(true));
+ mDut.onConfigSuccessResponse(transactionId.getValue());
+ mMockLooper.dispatchAll();
+ inOrder.verify(mockCallback).onConnectSuccess();
+
+ // (2) subscribe & match
+ mDut.subscribe(clientId, subscribeConfig, mockSessionCallback);
+ mMockLooper.dispatchAll();
+ inOrder.verify(mMockNative).subscribe(transactionId.capture(), eq(0), eq(subscribeConfig));
+ mDut.onSessionConfigSuccessResponse(transactionId.getValue(), false, subscribeId);
+ mDut.onMatchNotification(subscribeId, requestorId, peerMac, peerSsi.getBytes(),
+ peerSsi.length(), peerMatchFilter.getBytes(), peerMatchFilter.length());
+ mMockLooper.dispatchAll();
+ inOrder.verify(mockSessionCallback).onSessionStarted(sessionId.capture());
+ inOrder.verify(mockSessionCallback).onMatch(requestorId, peerSsi.getBytes(),
+ peerSsi.length(), peerMatchFilter.getBytes(), peerMatchFilter.length());
+
+ // (3) send message and enqueue successfully
+ mDut.sendMessage(clientId, sessionId.getValue(), requestorId, ssi.getBytes(),
+ ssi.length(), messageId);
+ mMockLooper.dispatchAll();
+ inOrder.verify(mMockNative).sendMessage(transactionId.capture(), eq(subscribeId),
+ eq(requestorId), eq(peerMac), eq(ssi.getBytes()), eq(ssi.length()));
+ mDut.onMessageSendQueuedSuccessResponse(transactionId.getValue());
+ mMockLooper.dispatchAll();
+
+ // (4) message send timeout
+ assertTrue(mAlarmManager.dispatch(WifiNanStateManager.HAL_SEND_MESSAGE_TIMEOUT_TAG));
+ mMockLooper.dispatchAll();
+ inOrder.verify(mockSessionCallback).onMessageSendFail(messageId,
+ WifiNanSessionCallback.REASON_TX_FAIL);
+
+ // (5) firmware response (unlikely - but good to check)
+ mDut.onMessageSendSuccessNotification(transactionId.getValue());
+ mMockLooper.dispatchAll();
+
+ verifyNoMoreInteractions(mockCallback, mockSessionCallback, mMockNative);
+ }
+
+ /**
* Validate that start ranging function fills-in correct MAC addresses for peer IDs and
* passed along to RTT module.
*/
@@ -1381,8 +1470,8 @@ public class WifiNanStateManagerTest {
mDut.onConfigSuccessResponse(transactionIdConfig);
mDut.onConfigFailedResponse(transactionIdConfig, -1);
mDut.onSessionConfigFailResponse(transactionIdConfig, true, -1);
- mDut.onMessageSendSuccessResponse(transactionIdConfig);
- mDut.onMessageSendFailResponse(transactionIdConfig, -1);
+ mDut.onMessageSendQueuedSuccessResponse(transactionIdConfig);
+ mDut.onMessageSendQueuedFailResponse(transactionIdConfig, -1);
mDut.onSessionConfigFailResponse(transactionIdConfig, false, -1);
mDut.onMatchNotification(-1, -1, new byte[0], new byte[0], 0, new byte[0], 0);
mDut.onSessionTerminatedNotification(-1, -1, true);