[NAN] Refactor WifiNanManager to create separate sessions per connect.
Separate session enables separate namespace for functions which depend
on a connection to exist.
(cherry-pick of commit 471025fa5ecbb3eaedd22e249f16e91fecaf3494)
Bug: 31470256
Test: unit tests
Change-Id: I9d043f53adbba4044db4ffb1f7045ae78d75fb8b
diff --git a/service/java/com/android/server/wifi/nan/WifiNanServiceImpl.java b/service/java/com/android/server/wifi/nan/WifiNanServiceImpl.java
index e7738db..e21e41c 100644
--- a/service/java/com/android/server/wifi/nan/WifiNanServiceImpl.java
+++ b/service/java/com/android/server/wifi/nan/WifiNanServiceImpl.java
@@ -130,7 +130,7 @@
}
@Override
- public int connect(final IBinder binder, String callingPackage, IWifiNanEventCallback callback,
+ public void connect(final IBinder binder, String callingPackage, IWifiNanEventCallback callback,
ConfigRequest configRequest) {
enforceAccessPermission();
enforceChangePermission();
@@ -187,7 +187,7 @@
} catch (RemoteException e1) {
Log.e(TAG, "Error on onConnectFail()");
}
- return 0;
+ return;
}
synchronized (mLock) {
@@ -196,8 +196,6 @@
}
mStateManager.connect(clientId, uid, pid, callingPackage, callback, configRequest);
-
- return clientId;
}
@Override
diff --git a/service/java/com/android/server/wifi/nan/WifiNanStateManager.java b/service/java/com/android/server/wifi/nan/WifiNanStateManager.java
index 0b09c13..950adab 100644
--- a/service/java/com/android/server/wifi/nan/WifiNanStateManager.java
+++ b/service/java/com/android/server/wifi/nan/WifiNanStateManager.java
@@ -1772,7 +1772,7 @@
ConfigRequest merged = mergeConfigRequests(configRequest);
if (mCurrentNanConfiguration != null && mCurrentNanConfiguration.equals(merged)) {
try {
- callback.onConnectSuccess();
+ callback.onConnectSuccess(clientId);
} catch (RemoteException e) {
Log.w(TAG, "connectLocal onConnectSuccess(): RemoteException (FYI): " + e);
}
@@ -2069,7 +2069,7 @@
callingPackage, callback, configRequest);
mClients.put(clientId, client);
try {
- callback.onConnectSuccess();
+ callback.onConnectSuccess(clientId);
} catch (RemoteException e) {
Log.w(TAG,
"onConfigCompletedLocal onConnectSuccess(): RemoteException (FYI): " + e);
diff --git a/service/tests/wifitests/src/com/android/server/wifi/nan/WifiNanDataPathStateManagerTest.java b/service/tests/wifitests/src/com/android/server/wifi/nan/WifiNanDataPathStateManagerTest.java
index 20b9103..31c5024 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/nan/WifiNanDataPathStateManagerTest.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/nan/WifiNanDataPathStateManagerTest.java
@@ -50,6 +50,7 @@
import android.net.wifi.nan.WifiNanEventCallback;
import android.net.wifi.nan.WifiNanManager;
import android.net.wifi.nan.WifiNanPublishDiscoverySession;
+import android.net.wifi.nan.WifiNanSession;
import android.net.wifi.nan.WifiNanSubscribeDiscoverySession;
import android.os.Handler;
import android.os.IBinder;
@@ -597,6 +598,8 @@
final ConfigRequest configRequest = new ConfigRequest.Builder().build();
final PublishConfig publishConfig = new PublishConfig.Builder().build();
+ ArgumentCaptor<WifiNanSession> sessionCaptor = ArgumentCaptor.forClass(
+ WifiNanSession.class);
ArgumentCaptor<IWifiNanEventCallback> clientProxyCallback = ArgumentCaptor
.forClass(IWifiNanEventCallback.class);
ArgumentCaptor<IWifiNanDiscoverySessionCallback> sessionProxyCallback = ArgumentCaptor
@@ -608,15 +611,13 @@
WifiNanDiscoverySessionCallback mockSessionCallback = mock(
WifiNanDiscoverySessionCallback.class);
- when(mMockNanService.connect(any(IBinder.class), anyString(),
- any(IWifiNanEventCallback.class), any(ConfigRequest.class))).thenReturn(clientId);
-
mgr.connect(mMockLooperHandler, configRequest, mockCallback);
verify(mMockNanService).connect(any(IBinder.class), anyString(),
clientProxyCallback.capture(), eq(configRequest));
- clientProxyCallback.getValue().onConnectSuccess();
+ clientProxyCallback.getValue().onConnectSuccess(clientId);
mMockLooper.dispatchAll();
- mgr.publish(publishConfig, mockSessionCallback);
+ verify(mockCallback).onConnectSuccess(sessionCaptor.capture());
+ sessionCaptor.getValue().publish(publishConfig, mockSessionCallback);
verify(mMockNanService).publish(eq(clientId), eq(publishConfig),
sessionProxyCallback.capture());
sessionProxyCallback.getValue().onSessionStarted(sessionId);
@@ -644,21 +645,21 @@
final ConfigRequest configRequest = new ConfigRequest.Builder().build();
final WifiNanManager mgr = new WifiNanManager(mMockContext, mMockNanService);
+ ArgumentCaptor<WifiNanSession> sessionCaptor = ArgumentCaptor.forClass(
+ WifiNanSession.class);
ArgumentCaptor<IWifiNanEventCallback> clientProxyCallback = ArgumentCaptor
.forClass(IWifiNanEventCallback.class);
WifiNanEventCallback mockCallback = mock(WifiNanEventCallback.class);
- when(mMockNanService.connect(any(IBinder.class), anyString(),
- any(IWifiNanEventCallback.class), any(ConfigRequest.class))).thenReturn(clientId);
-
mgr.connect(mMockLooperHandler, configRequest, mockCallback);
verify(mMockNanService).connect(any(IBinder.class), anyString(),
clientProxyCallback.capture(), eq(configRequest));
- clientProxyCallback.getValue().onConnectSuccess();
+ clientProxyCallback.getValue().onConnectSuccess(clientId);
mMockLooper.dispatchAll();
+ verify(mockCallback).onConnectSuccess(sessionCaptor.capture());
- String ns = mgr.createNetworkSpecifier(role, peer,
+ String ns = sessionCaptor.getValue().createNetworkSpecifier(role, peer,
(token == null) ? null : token.getBytes());
NetworkCapabilities nc = new NetworkCapabilities();
nc.clearAll();
@@ -720,7 +721,7 @@
eq(configRequest), eq(true));
mDut.onConfigSuccessResponse(transactionId.getValue());
mMockLooper.dispatchAll();
- inOrder.verify(mMockCallback).onConnectSuccess();
+ inOrder.verify(mMockCallback).onConnectSuccess(clientId);
mDut.publish(clientId, publishConfig, mMockSessionCallback);
mMockLooper.dispatchAll();
inOrder.verify(mMockNative).publish(transactionId.capture(), eq(0), eq(publishConfig));
diff --git a/service/tests/wifitests/src/com/android/server/wifi/nan/WifiNanManagerTest.java b/service/tests/wifitests/src/com/android/server/wifi/nan/WifiNanManagerTest.java
index fd29ba6..137975b 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/nan/WifiNanManagerTest.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/nan/WifiNanManagerTest.java
@@ -40,6 +40,7 @@
import android.net.wifi.nan.WifiNanEventCallback;
import android.net.wifi.nan.WifiNanManager;
import android.net.wifi.nan.WifiNanPublishDiscoverySession;
+import android.net.wifi.nan.WifiNanSession;
import android.net.wifi.nan.WifiNanSubscribeDiscoverySession;
import android.os.Handler;
import android.os.IBinder;
@@ -141,46 +142,43 @@
*/
/**
- * Validate the successful connect flow: (1) try subscribing (2) connect +
- * success (3) publish, (4) disconnect (5) try publishing (6) connect again
+ * Validate the successful connect flow: (1) connect + success (2) publish, (3) disconnect
+ * (4) try publishing on old session (5) connect again
*/
@Test
public void testConnectFlow() throws Exception {
final int clientId = 4565;
- when(mockNanService.connect(any(IBinder.class), anyString(),
- any(IWifiNanEventCallback.class), any(ConfigRequest.class))).thenReturn(clientId);
-
InOrder inOrder = inOrder(mockCallback, mockSessionCallback, mockNanService);
ArgumentCaptor<IWifiNanEventCallback> clientProxyCallback = ArgumentCaptor
.forClass(IWifiNanEventCallback.class);
+ ArgumentCaptor<WifiNanSession> sessionCaptor = ArgumentCaptor.forClass(
+ WifiNanSession.class);
ArgumentCaptor<IBinder> binder = ArgumentCaptor.forClass(IBinder.class);
- // (1) try subscribing on an unconnected manager: fails silently
- mDut.subscribe(new SubscribeConfig.Builder().build(), mockSessionCallback);
-
- // (2) connect + success
+ // (1) connect + success
mDut.connect(mMockLooperHandler, mockCallback);
inOrder.verify(mockNanService).connect(binder.capture(), anyString(),
clientProxyCallback.capture(), (ConfigRequest) isNull());
- clientProxyCallback.getValue().onConnectSuccess();
+ clientProxyCallback.getValue().onConnectSuccess(clientId);
mMockLooper.dispatchAll();
- inOrder.verify(mockCallback).onConnectSuccess();
+ inOrder.verify(mockCallback).onConnectSuccess(sessionCaptor.capture());
+ WifiNanSession session = sessionCaptor.getValue();
- // (3) publish - should succeed
+ // (2) publish - should succeed
PublishConfig publishConfig = new PublishConfig.Builder().build();
- mDut.publish(publishConfig, mockSessionCallback);
+ session.publish(publishConfig, mockSessionCallback);
inOrder.verify(mockNanService).publish(eq(clientId), eq(publishConfig),
any(IWifiNanDiscoverySessionCallback.class));
- // (4) disconnect
- mDut.disconnect();
+ // (3) disconnect
+ session.disconnect();
inOrder.verify(mockNanService).disconnect(eq(clientId), eq(binder.getValue()));
- // (5) try publishing again - fails silently
- mDut.publish(new PublishConfig.Builder().build(), mockSessionCallback);
+ // (4) try publishing again - fails silently
+ session.publish(new PublishConfig.Builder().build(), mockSessionCallback);
- // (6) connect
+ // (5) connect
mDut.connect(mMockLooperHandler, mockCallback);
inOrder.verify(mockNanService).connect(binder.capture(), anyString(),
any(IWifiNanEventCallback.class), (ConfigRequest) isNull());
@@ -189,18 +187,16 @@
}
/**
- * Validate the failed connect flow: (1) connect + failure, (2) try
- * publishing (3) connect + success (4) subscribe
+ * Validate the failed connect flow: (1) connect + failure, (2) connect + success (3) subscribe
*/
@Test
public void testConnectFailure() throws Exception {
final int clientId = 4565;
final int reason = WifiNanEventCallback.REASON_OTHER;
- when(mockNanService.connect(any(IBinder.class), anyString(),
- any(IWifiNanEventCallback.class), any(ConfigRequest.class))).thenReturn(clientId);
-
InOrder inOrder = inOrder(mockCallback, mockSessionCallback, mockNanService);
+ ArgumentCaptor<WifiNanSession> sessionCaptor = ArgumentCaptor.forClass(
+ WifiNanSession.class);
ArgumentCaptor<IWifiNanEventCallback> clientProxyCallback = ArgumentCaptor
.forClass(IWifiNanEventCallback.class);
@@ -212,21 +208,18 @@
mMockLooper.dispatchAll();
inOrder.verify(mockCallback).onConnectFail(reason);
- // (2) try publishing - silent failure (since already know that no
- // connection)
- mDut.publish(new PublishConfig.Builder().build(), mockSessionCallback);
-
- // (3) connect + success
+ // (2) connect + success
mDut.connect(mMockLooperHandler, mockCallback);
inOrder.verify(mockNanService).connect(any(IBinder.class), anyString(),
clientProxyCallback.capture(), (ConfigRequest) isNull());
- clientProxyCallback.getValue().onConnectSuccess();
+ clientProxyCallback.getValue().onConnectSuccess(clientId);
mMockLooper.dispatchAll();
- inOrder.verify(mockCallback).onConnectSuccess();
+ inOrder.verify(mockCallback).onConnectSuccess(sessionCaptor.capture());
+ WifiNanSession session = sessionCaptor.getValue();
// (4) subscribe: should succeed
SubscribeConfig subscribeConfig = new SubscribeConfig.Builder().build();
- mDut.subscribe(subscribeConfig, mockSessionCallback);
+ session.subscribe(subscribeConfig, mockSessionCallback);
inOrder.verify(mockNanService).subscribe(eq(clientId), eq(subscribeConfig),
any(IWifiNanDiscoverySessionCallback.class));
@@ -234,16 +227,13 @@
}
/**
- * Validate that cannot call connect on an existing connection: (1) connect
+ * Validate that can call connect to create multiple sessions: (1) connect
* + success, (2) try connect again
*/
@Test
public void testInvalidConnectSequence() throws Exception {
final int clientId = 4565;
- when(mockNanService.connect(any(IBinder.class), anyString(),
- any(IWifiNanEventCallback.class), any(ConfigRequest.class))).thenReturn(clientId);
-
InOrder inOrder = inOrder(mockCallback, mockSessionCallback, mockNanService);
ArgumentCaptor<IWifiNanEventCallback> clientProxyCallback = ArgumentCaptor
.forClass(IWifiNanEventCallback.class);
@@ -252,14 +242,17 @@
mDut.connect(mMockLooperHandler, mockCallback);
inOrder.verify(mockNanService).connect(any(IBinder.class), anyString(),
clientProxyCallback.capture(), (ConfigRequest) isNull());
- clientProxyCallback.getValue().onConnectSuccess();
+ clientProxyCallback.getValue().onConnectSuccess(clientId);
mMockLooper.dispatchAll();
- inOrder.verify(mockCallback).onConnectSuccess();
+ inOrder.verify(mockCallback).onConnectSuccess(any(WifiNanSession.class));
- // (2) connect - forward to service (though will fail silently)
+ // (2) connect + success
mDut.connect(mMockLooperHandler, mockCallback);
inOrder.verify(mockNanService).connect(any(IBinder.class), anyString(),
clientProxyCallback.capture(), (ConfigRequest) isNull());
+ clientProxyCallback.getValue().onConnectSuccess(clientId + 1);
+ mMockLooper.dispatchAll();
+ inOrder.verify(mockCallback).onConnectSuccess(any(WifiNanSession.class));
verifyNoMoreInteractions(mockCallback, mockSessionCallback, mockNanService);
}
@@ -286,11 +279,10 @@
final int messageId = 2123;
final int reason = WifiNanDiscoverySessionCallback.REASON_OTHER;
- when(mockNanService.connect(any(IBinder.class), anyString(),
- any(IWifiNanEventCallback.class), eq(configRequest))).thenReturn(clientId);
-
InOrder inOrder = inOrder(mockCallback, mockSessionCallback, mockNanService,
mockPublishSession);
+ ArgumentCaptor<WifiNanSession> sessionCaptor = ArgumentCaptor.forClass(
+ WifiNanSession.class);
ArgumentCaptor<IWifiNanEventCallback> clientProxyCallback = ArgumentCaptor
.forClass(IWifiNanEventCallback.class);
ArgumentCaptor<IWifiNanDiscoverySessionCallback> sessionProxyCallback = ArgumentCaptor
@@ -302,12 +294,13 @@
mDut.connect(mMockLooperHandler, configRequest, mockCallback);
inOrder.verify(mockNanService).connect(any(IBinder.class), anyString(),
clientProxyCallback.capture(), eq(configRequest));
- clientProxyCallback.getValue().onConnectSuccess();
+ clientProxyCallback.getValue().onConnectSuccess(clientId);
mMockLooper.dispatchAll();
- inOrder.verify(mockCallback).onConnectSuccess();
+ inOrder.verify(mockCallback).onConnectSuccess(sessionCaptor.capture());
+ WifiNanSession session = sessionCaptor.getValue();
// (1) publish
- mDut.publish(publishConfig, mockSessionCallback);
+ session.publish(publishConfig, mockSessionCallback);
inOrder.verify(mockNanService).publish(eq(clientId), eq(publishConfig),
sessionProxyCallback.capture());
@@ -365,11 +358,10 @@
final PublishConfig publishConfig = new PublishConfig.Builder().build();
final int reason = WifiNanDiscoverySessionCallback.TERMINATE_REASON_DONE;
- when(mockNanService.connect(any(IBinder.class), anyString(),
- any(IWifiNanEventCallback.class), eq(configRequest))).thenReturn(clientId);
-
InOrder inOrder = inOrder(mockCallback, mockSessionCallback, mockNanService,
mockPublishSession);
+ ArgumentCaptor<WifiNanSession> sessionCaptor = ArgumentCaptor.forClass(
+ WifiNanSession.class);
ArgumentCaptor<IWifiNanEventCallback> clientProxyCallback = ArgumentCaptor
.forClass(IWifiNanEventCallback.class);
ArgumentCaptor<IWifiNanDiscoverySessionCallback> sessionProxyCallback = ArgumentCaptor
@@ -381,12 +373,13 @@
mDut.connect(mMockLooperHandler, configRequest, mockCallback);
inOrder.verify(mockNanService).connect(any(IBinder.class), anyString(),
clientProxyCallback.capture(), eq(configRequest));
- clientProxyCallback.getValue().onConnectSuccess();
+ clientProxyCallback.getValue().onConnectSuccess(clientId);
mMockLooper.dispatchAll();
- inOrder.verify(mockCallback).onConnectSuccess();
+ inOrder.verify(mockCallback).onConnectSuccess(sessionCaptor.capture());
+ WifiNanSession session = sessionCaptor.getValue();
// (2) publish: successfully - then terminated
- mDut.publish(publishConfig, mockSessionCallback);
+ session.publish(publishConfig, mockSessionCallback);
inOrder.verify(mockNanService).publish(eq(clientId), eq(publishConfig),
sessionProxyCallback.capture());
sessionProxyCallback.getValue().onSessionStarted(sessionId);
@@ -420,11 +413,10 @@
final int messageId = 2123;
final int reason = WifiNanDiscoverySessionCallback.REASON_OTHER;
- when(mockNanService.connect(any(IBinder.class), anyString(),
- any(IWifiNanEventCallback.class), eq(configRequest))).thenReturn(clientId);
-
InOrder inOrder = inOrder(mockCallback, mockSessionCallback, mockNanService,
mockSubscribeSession);
+ ArgumentCaptor<WifiNanSession> sessionCaptor = ArgumentCaptor.forClass(
+ WifiNanSession.class);
ArgumentCaptor<IWifiNanEventCallback> clientProxyCallback = ArgumentCaptor
.forClass(IWifiNanEventCallback.class);
ArgumentCaptor<IWifiNanDiscoverySessionCallback> sessionProxyCallback = ArgumentCaptor
@@ -436,12 +428,13 @@
mDut.connect(mMockLooperHandler, configRequest, mockCallback);
inOrder.verify(mockNanService).connect(any(IBinder.class), anyString(),
clientProxyCallback.capture(), eq(configRequest));
- clientProxyCallback.getValue().onConnectSuccess();
+ clientProxyCallback.getValue().onConnectSuccess(clientId);
mMockLooper.dispatchAll();
- inOrder.verify(mockCallback).onConnectSuccess();
+ inOrder.verify(mockCallback).onConnectSuccess(sessionCaptor.capture());
+ WifiNanSession session = sessionCaptor.getValue();
// (1) subscribe
- mDut.subscribe(subscribeConfig, mockSessionCallback);
+ session.subscribe(subscribeConfig, mockSessionCallback);
inOrder.verify(mockNanService).subscribe(eq(clientId), eq(subscribeConfig),
sessionProxyCallback.capture());
@@ -499,11 +492,10 @@
final SubscribeConfig subscribeConfig = new SubscribeConfig.Builder().build();
final int reason = WifiNanDiscoverySessionCallback.TERMINATE_REASON_DONE;
- when(mockNanService.connect(any(IBinder.class), anyString(),
- any(IWifiNanEventCallback.class), eq(configRequest))).thenReturn(clientId);
-
InOrder inOrder = inOrder(mockCallback, mockSessionCallback, mockNanService,
mockSubscribeSession);
+ ArgumentCaptor<WifiNanSession> sessionCaptor = ArgumentCaptor.forClass(
+ WifiNanSession.class);
ArgumentCaptor<IWifiNanEventCallback> clientProxyCallback = ArgumentCaptor
.forClass(IWifiNanEventCallback.class);
ArgumentCaptor<IWifiNanDiscoverySessionCallback> sessionProxyCallback = ArgumentCaptor
@@ -515,12 +507,13 @@
mDut.connect(mMockLooperHandler, configRequest, mockCallback);
inOrder.verify(mockNanService).connect(any(IBinder.class), anyString(),
clientProxyCallback.capture(), eq(configRequest));
- clientProxyCallback.getValue().onConnectSuccess();
+ clientProxyCallback.getValue().onConnectSuccess(clientId);
mMockLooper.dispatchAll();
- inOrder.verify(mockCallback).onConnectSuccess();
+ inOrder.verify(mockCallback).onConnectSuccess(sessionCaptor.capture());
+ WifiNanSession session = sessionCaptor.getValue();
// (2) subscribe: successfully - then terminated
- mDut.subscribe(subscribeConfig, mockSessionCallback);
+ session.subscribe(subscribeConfig, mockSessionCallback);
inOrder.verify(mockNanService).subscribe(eq(clientId), eq(subscribeConfig),
sessionProxyCallback.capture());
sessionProxyCallback.getValue().onSessionStarted(sessionId);
@@ -868,13 +861,13 @@
final RttManager.RttResult rttResults = new RttManager.RttResult();
rttResults.distance = 10;
- when(mockNanService.connect(any(IBinder.class), anyString(),
- any(IWifiNanEventCallback.class), eq(configRequest))).thenReturn(clientId);
when(mockNanService.startRanging(anyInt(), anyInt(),
any(RttManager.ParcelableRttParams.class))).thenReturn(rangingId);
InOrder inOrder = inOrder(mockCallback, mockSessionCallback, mockNanService,
mockPublishSession, mockRttListener);
+ ArgumentCaptor<WifiNanSession> sessionCaptor = ArgumentCaptor.forClass(
+ WifiNanSession.class);
ArgumentCaptor<IWifiNanEventCallback> clientProxyCallback = ArgumentCaptor
.forClass(IWifiNanEventCallback.class);
ArgumentCaptor<IWifiNanDiscoverySessionCallback> sessionProxyCallback = ArgumentCaptor
@@ -890,12 +883,13 @@
mDut.connect(mMockLooperHandler, configRequest, mockCallback);
inOrder.verify(mockNanService).connect(any(IBinder.class), anyString(),
clientProxyCallback.capture(), eq(configRequest));
- clientProxyCallback.getValue().onConnectSuccess();
+ clientProxyCallback.getValue().onConnectSuccess(clientId);
mMockLooper.dispatchAll();
- inOrder.verify(mockCallback).onConnectSuccess();
+ inOrder.verify(mockCallback).onConnectSuccess(sessionCaptor.capture());
+ WifiNanSession session = sessionCaptor.getValue();
// (2) publish successfully
- mDut.publish(publishConfig, mockSessionCallback);
+ session.publish(publishConfig, mockSessionCallback);
inOrder.verify(mockNanService).publish(eq(clientId), eq(publishConfig),
sessionProxyCallback.capture());
sessionProxyCallback.getValue().onSessionStarted(sessionId);
@@ -947,6 +941,8 @@
String tokenB64 = Base64.encodeToString(token.getBytes(), Base64.DEFAULT);
+ ArgumentCaptor<WifiNanSession> sessionCaptor = ArgumentCaptor.forClass(
+ WifiNanSession.class);
ArgumentCaptor<IWifiNanEventCallback> clientProxyCallback = ArgumentCaptor
.forClass(IWifiNanEventCallback.class);
ArgumentCaptor<IWifiNanDiscoverySessionCallback> sessionProxyCallback = ArgumentCaptor
@@ -954,9 +950,6 @@
ArgumentCaptor<WifiNanPublishDiscoverySession> publishSession = ArgumentCaptor
.forClass(WifiNanPublishDiscoverySession.class);
- when(mockNanService.connect(any(IBinder.class), anyString(),
- any(IWifiNanEventCallback.class), any(ConfigRequest.class))).thenReturn(clientId);
-
InOrder inOrder = inOrder(mockCallback, mockSessionCallback, mockNanService,
mockPublishSession, mockRttListener);
@@ -964,12 +957,13 @@
mDut.connect(mMockLooperHandler, configRequest, mockCallback);
inOrder.verify(mockNanService).connect(any(IBinder.class), anyString(),
clientProxyCallback.capture(), eq(configRequest));
- clientProxyCallback.getValue().onConnectSuccess();
+ clientProxyCallback.getValue().onConnectSuccess(clientId);
mMockLooper.dispatchAll();
- inOrder.verify(mockCallback).onConnectSuccess();
+ inOrder.verify(mockCallback).onConnectSuccess(sessionCaptor.capture());
+ WifiNanSession session = sessionCaptor.getValue();
// (2) publish successfully
- mDut.publish(publishConfig, mockSessionCallback);
+ session.publish(publishConfig, mockSessionCallback);
inOrder.verify(mockNanService).publish(eq(clientId), eq(publishConfig),
sessionProxyCallback.capture());
sessionProxyCallback.getValue().onSessionStarted(sessionId);
@@ -1011,12 +1005,11 @@
String tokenB64 = Base64.encodeToString(token.getBytes(), Base64.DEFAULT);
+ ArgumentCaptor<WifiNanSession> sessionCaptor = ArgumentCaptor.forClass(
+ WifiNanSession.class);
ArgumentCaptor<IWifiNanEventCallback> clientProxyCallback = ArgumentCaptor
.forClass(IWifiNanEventCallback.class);
- when(mockNanService.connect(any(IBinder.class), anyString(),
- any(IWifiNanEventCallback.class), any(ConfigRequest.class))).thenReturn(clientId);
-
InOrder inOrder = inOrder(mockCallback, mockSessionCallback, mockNanService,
mockPublishSession, mockRttListener);
@@ -1024,12 +1017,13 @@
mDut.connect(mMockLooperHandler, configRequest, mockCallback);
inOrder.verify(mockNanService).connect(any(IBinder.class), anyString(),
clientProxyCallback.capture(), eq(configRequest));
- clientProxyCallback.getValue().onConnectSuccess();
+ clientProxyCallback.getValue().onConnectSuccess(clientId);
mMockLooper.dispatchAll();
- inOrder.verify(mockCallback).onConnectSuccess();
+ inOrder.verify(mockCallback).onConnectSuccess(sessionCaptor.capture());
+ WifiNanSession session = sessionCaptor.getValue();
/* (2) request a direct network specifier*/
- String networkSpecifier = mDut.createNetworkSpecifier(role, someMac, token.getBytes());
+ String networkSpecifier = session.createNetworkSpecifier(role, someMac, token.getBytes());
/* validate format*/
JSONObject jsonObject = new JSONObject(networkSpecifier);
diff --git a/service/tests/wifitests/src/com/android/server/wifi/nan/WifiNanServiceImplTest.java b/service/tests/wifitests/src/com/android/server/wifi/nan/WifiNanServiceImplTest.java
index 891d1fc..f7077af 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/nan/WifiNanServiceImplTest.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/nan/WifiNanServiceImplTest.java
@@ -21,7 +21,9 @@
import static org.junit.Assert.assertTrue;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyInt;
+import static org.mockito.Matchers.anyString;
import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.inOrder;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@@ -43,6 +45,7 @@
import org.junit.Before;
import org.junit.Test;
import org.mockito.ArgumentCaptor;
+import org.mockito.InOrder;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
@@ -167,13 +170,11 @@
ConfigRequest configRequest = new ConfigRequest.Builder().setMasterPreference(55).build();
String callingPackage = "com.google.somePackage";
- int returnedClientId = mDut.connect(mBinderMock, callingPackage, mCallbackMock,
+ mDut.connect(mBinderMock, callingPackage, mCallbackMock,
configRequest);
- ArgumentCaptor<Integer> clientId = ArgumentCaptor.forClass(Integer.class);
- verify(mNanStateManagerMock).connect(clientId.capture(), anyInt(), anyInt(),
+ verify(mNanStateManagerMock).connect(anyInt(), anyInt(), anyInt(),
eq(callingPackage), eq(mCallbackMock), eq(configRequest));
- assertEquals(returnedClientId, (int) clientId.getValue());
}
/**
@@ -272,9 +273,15 @@
public void testClientIdIncrementing() {
int loopCount = 100;
+ InOrder inOrder = inOrder(mNanStateManagerMock);
+ ArgumentCaptor<Integer> clientIdCaptor = ArgumentCaptor.forClass(Integer.class);
+
int prevId = 0;
for (int i = 0; i < loopCount; ++i) {
- int id = mDut.connect(mBinderMock, "", mCallbackMock, null);
+ mDut.connect(mBinderMock, "", mCallbackMock, null);
+ inOrder.verify(mNanStateManagerMock).connect(clientIdCaptor.capture(), anyInt(),
+ anyInt(), anyString(), eq(mCallbackMock), any(ConfigRequest.class));
+ int id = clientIdCaptor.getValue();
if (i != 0) {
assertTrue("Client ID incrementing", id > prevId);
}
@@ -488,14 +495,13 @@
private int doConnect() {
String callingPackage = "com.google.somePackage";
- int returnedClientId = mDut.connect(mBinderMock, callingPackage, mCallbackMock, null);
+ mDut.connect(mBinderMock, callingPackage, mCallbackMock, null);
ArgumentCaptor<Integer> clientId = ArgumentCaptor.forClass(Integer.class);
verify(mNanStateManagerMock).connect(clientId.capture(), anyInt(), anyInt(),
eq(callingPackage), eq(mCallbackMock), eq(new ConfigRequest.Builder().build()));
- assertEquals(returnedClientId, (int) clientId.getValue());
- return returnedClientId;
+ return clientId.getValue();
}
private void installMockNanStateManager()
diff --git a/service/tests/wifitests/src/com/android/server/wifi/nan/WifiNanStateManagerTest.java b/service/tests/wifitests/src/com/android/server/wifi/nan/WifiNanStateManagerTest.java
index 435a6ac..cb78f72 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/nan/WifiNanStateManagerTest.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/nan/WifiNanStateManagerTest.java
@@ -33,10 +33,10 @@
import static org.mockito.Mockito.verifyNoMoreInteractions;
import static org.mockito.Mockito.when;
-import android.app.test.MockAnswerUtil;
-import android.app.test.TestAlarmManager;
import android.Manifest;
import android.app.AppOpsManager;
+import android.app.test.MockAnswerUtil;
+import android.app.test.TestAlarmManager;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
@@ -248,7 +248,7 @@
eq(true));
mDut.onConfigSuccessResponse(transactionId.getValue());
mMockLooper.dispatchAll();
- inOrder.verify(mockCallback).onConnectSuccess();
+ inOrder.verify(mockCallback).onConnectSuccess(clientId);
// (3) disable usage & verify callbacks
mDut.disableUsage();
@@ -282,7 +282,7 @@
eq(true));
mDut.onConfigSuccessResponse(transactionId.getValue());
mMockLooper.dispatchAll();
- inOrder.verify(mockCallback).onConnectSuccess();
+ inOrder.verify(mockCallback).onConnectSuccess(clientId);
verifyNoMoreInteractions(mMockNative, mockCallback);
}
@@ -334,7 +334,7 @@
short transactionId = transactionIdCapture.getValue();
mDut.onConfigSuccessResponse(transactionId);
mMockLooper.dispatchAll();
- inOrder.verify(mockCallback1).onConnectSuccess();
+ inOrder.verify(mockCallback1).onConnectSuccess(clientId1);
// (2) finish connection of 2nd client
inOrder.verify(mMockNative).enableAndConfigure(transactionIdCapture.capture(),
@@ -343,7 +343,7 @@
mDut.onConfigSuccessResponse(transactionId);
mMockLooper.dispatchAll();
- inOrder.verify(mockCallback2).onConnectSuccess();
+ inOrder.verify(mockCallback2).onConnectSuccess(clientId2);
// (3) deliver NAN events - without LOCATIONING permission
mDut.onClusterChangeNotification(WifiNanClientState.CLUSTER_CHANGE_EVENT_STARTED, someMac);
@@ -418,7 +418,7 @@
eq(true));
mDut.onConfigSuccessResponse(transactionId.getValue());
mMockLooper.dispatchAll();
- inOrder.verify(mockCallback).onConnectSuccess();
+ inOrder.verify(mockCallback).onConnectSuccess(clientId);
// (2) publish + timeout
mDut.publish(clientId, publishConfig, mockSessionCallback);
@@ -476,7 +476,7 @@
eq(configRequest), eq(true));
mDut.onConfigSuccessResponse(transactionId.getValue());
mMockLooper.dispatchAll();
- inOrder.verify(mockCallback).onConnectSuccess();
+ inOrder.verify(mockCallback).onConnectSuccess(clientId);
// (1) initial publish
mDut.publish(clientId, publishConfig, mockSessionCallback);
@@ -531,7 +531,7 @@
eq(configRequest), eq(true));
mDut.onConfigSuccessResponse(transactionId.getValue());
mMockLooper.dispatchAll();
- inOrder.verify(mockCallback).onConnectSuccess();
+ inOrder.verify(mockCallback).onConnectSuccess(clientId);
// (1) initial publish
mDut.publish(clientId, publishConfig, mockSessionCallback);
@@ -605,7 +605,7 @@
eq(true));
mDut.onConfigSuccessResponse(transactionId.getValue());
mMockLooper.dispatchAll();
- inOrder.verify(mockCallback).onConnectSuccess();
+ inOrder.verify(mockCallback).onConnectSuccess(clientId);
// (1) initial publish
mDut.publish(clientId, publishConfig, mockSessionCallback);
@@ -679,7 +679,7 @@
eq(true));
mDut.onConfigSuccessResponse(transactionId.getValue());
mMockLooper.dispatchAll();
- inOrder.verify(mockCallback).onConnectSuccess();
+ inOrder.verify(mockCallback).onConnectSuccess(clientId);
// (1) initial publish
mDut.publish(clientId, publishConfig, mockSessionCallback);
@@ -738,7 +738,7 @@
eq(true));
mDut.onConfigSuccessResponse(transactionId.getValue());
mMockLooper.dispatchAll();
- inOrder.verify(mockCallback).onConnectSuccess();
+ inOrder.verify(mockCallback).onConnectSuccess(clientId);
// (1) initial subscribe
mDut.subscribe(clientId, subscribeConfig, mockSessionCallback);
@@ -793,7 +793,7 @@
eq(true));
mDut.onConfigSuccessResponse(transactionId.getValue());
mMockLooper.dispatchAll();
- inOrder.verify(mockCallback).onConnectSuccess();
+ inOrder.verify(mockCallback).onConnectSuccess(clientId);
// (1) initial subscribe
mDut.subscribe(clientId, subscribeConfig, mockSessionCallback);
@@ -866,7 +866,7 @@
eq(true));
mDut.onConfigSuccessResponse(transactionId.getValue());
mMockLooper.dispatchAll();
- inOrder.verify(mockCallback).onConnectSuccess();
+ inOrder.verify(mockCallback).onConnectSuccess(clientId);
// (1) initial subscribe
mDut.subscribe(clientId, subscribeConfig, mockSessionCallback);
@@ -940,7 +940,7 @@
eq(true));
mDut.onConfigSuccessResponse(transactionId.getValue());
mMockLooper.dispatchAll();
- inOrder.verify(mockCallback).onConnectSuccess();
+ inOrder.verify(mockCallback).onConnectSuccess(clientId);
// (1) initial subscribe
mDut.subscribe(clientId, subscribeConfig, mockSessionCallback);
@@ -1014,7 +1014,7 @@
eq(configRequest), eq(true));
mDut.onConfigSuccessResponse(transactionId.getValue());
mMockLooper.dispatchAll();
- inOrder.verify(mockCallback).onConnectSuccess();
+ inOrder.verify(mockCallback).onConnectSuccess(clientId);
// (1) subscribe
mDut.subscribe(clientId, subscribeConfig, mockSessionCallback);
@@ -1121,7 +1121,7 @@
eq(true));
mDut.onConfigSuccessResponse(transactionId.getValue());
mMockLooper.dispatchAll();
- inOrder.verify(mockCallback).onConnectSuccess();
+ inOrder.verify(mockCallback).onConnectSuccess(clientId);
// (2) publish
mDut.publish(clientId, publishConfig, mockSessionCallback);
@@ -1216,7 +1216,7 @@
eq(true));
mDut.onConfigSuccessResponse(transactionId.getValue());
mMockLooper.dispatchAll();
- inOrder.verify(mockCallback).onConnectSuccess();
+ inOrder.verify(mockCallback).onConnectSuccess(clientId);
// (2) publish
mDut.publish(clientId, publishConfig, mockSessionCallback);
@@ -1300,7 +1300,7 @@
eq(true));
mDut.onConfigSuccessResponse(transactionId.getValue());
mMockLooper.dispatchAll();
- inOrder.verify(mockCallback).onConnectSuccess();
+ inOrder.verify(mockCallback).onConnectSuccess(clientId);
// (2) subscribe & match
mDut.subscribe(clientId, subscribeConfig, mockSessionCallback);
@@ -1367,7 +1367,7 @@
eq(true));
mDut.onConfigSuccessResponse(transactionId.getValue());
mMockLooper.dispatchAll();
- inOrder.verify(mockCallback).onConnectSuccess();
+ inOrder.verify(mockCallback).onConnectSuccess(clientId);
// (2) subscribe & match
mDut.subscribe(clientId, subscribeConfig, mockSessionCallback);
@@ -1461,7 +1461,7 @@
eq(true));
mDut.onConfigSuccessResponse(transactionId.getValue());
mMockLooper.dispatchAll();
- inOrder.verify(mockCallback).onConnectSuccess();
+ inOrder.verify(mockCallback).onConnectSuccess(clientId);
// (2) subscribe & match
mDut.subscribe(clientId, subscribeConfig, mockSessionCallback);
@@ -1548,7 +1548,7 @@
eq(true));
mDut.onConfigSuccessResponse(transactionId.getValue());
mMockLooper.dispatchAll();
- inOrder.verify(mockCallback).onConnectSuccess();
+ inOrder.verify(mockCallback).onConnectSuccess(clientId);
// (2) subscribe & match
mDut.subscribe(clientId, subscribeConfig, mockSessionCallback);
@@ -1639,7 +1639,7 @@
eq(configRequest), eq(true));
mDut.onConfigSuccessResponse(transactionId.getValue());
mMockLooper.dispatchAll();
- inOrder.verify(mockCallback).onConnectSuccess();
+ inOrder.verify(mockCallback).onConnectSuccess(clientId);
// (1) subscribe
mDut.subscribe(clientId, subscribeConfig, mockSessionCallback);
@@ -1755,7 +1755,7 @@
eq(true));
mDut.onConfigSuccessResponse(transactionId.getValue());
mMockLooper.dispatchAll();
- verify(mockCallback).onConnectSuccess();
+ verify(mockCallback).onConnectSuccess(clientId);
// (2) subscribe & match
mDut.subscribe(clientId, subscribeConfig, mockSessionCallback);
@@ -1923,7 +1923,7 @@
eq(true));
mDut.onConfigSuccessResponse(transactionId.getValue());
mMockLooper.dispatchAll();
- inOrder.verify(mockCallback).onConnectSuccess();
+ inOrder.verify(mockCallback).onConnectSuccess(clientId);
// (2) subscribe & match
mDut.subscribe(clientId, subscribeConfig, mockSessionCallback);
@@ -2008,7 +2008,7 @@
collector.checkThat("merge: stage 1", crCapture.getValue(), equalTo(configRequest1));
mDut.onConfigSuccessResponse(transactionId.getValue());
mMockLooper.dispatchAll();
- inOrder.verify(mockCallback1).onConnectSuccess();
+ inOrder.verify(mockCallback1).onConnectSuccess(clientId1);
// (2) config2 (incompatible with config1)
mDut.connect(clientId2, uid, pid, callingPackage, mockCallback2, configRequest2);
@@ -2035,7 +2035,7 @@
crCapture.getValue().mEnableIdentityChangeCallback, equalTo(true));
mDut.onConfigSuccessResponse(transactionId.getValue());
mMockLooper.dispatchAll();
- inOrder.verify(mockCallback3).onConnectSuccess();
+ inOrder.verify(mockCallback3).onConnectSuccess(clientId3);
// (4) disconnect config3: want a downgrade
mDut.disconnect(clientId3);
@@ -2101,7 +2101,7 @@
eq(true));
mDut.onConfigSuccessResponse(transactionId.getValue());
mMockLooper.dispatchAll();
- inOrder.verify(mockCallback).onConnectSuccess();
+ inOrder.verify(mockCallback).onConnectSuccess(clientId);
// (2) publish (no response yet)
mDut.publish(clientId, publishConfig, mockSessionCallback);
@@ -2177,7 +2177,7 @@
eq(true));
mDut.onConfigSuccessResponse(transactionId.getValue());
mMockLooper.dispatchAll();
- inOrder.verify(mockCallback).onConnectSuccess();
+ inOrder.verify(mockCallback).onConnectSuccess(clientId);
// (2) publish - no response
mDut.publish(clientId, publishConfig, mockPublishSessionCallback);
@@ -2257,7 +2257,7 @@
short transactionIdConfig = transactionId.getValue();
mDut.onConfigSuccessResponse(transactionIdConfig);
mMockLooper.dispatchAll();
- inOrder.verify(mockCallback).onConnectSuccess();
+ inOrder.verify(mockCallback).onConnectSuccess(clientId);
// (2) use the same transaction ID to send a bunch of other responses
mDut.onConfigSuccessResponse(transactionIdConfig);
@@ -2313,7 +2313,7 @@
eq(true));
mDut.onConfigSuccessResponse(transactionId.getValue());
mMockLooper.dispatchAll();
- inOrder.verify(mockCallback).onConnectSuccess();
+ inOrder.verify(mockCallback).onConnectSuccess(clientId);
// (2) publish
mDut.publish(clientId, publishConfig, mockSessionCallback);
@@ -2369,7 +2369,7 @@
eq(configRequest), eq(true));
mDut.onConfigSuccessResponse(transactionId.getValue());
mMockLooper.dispatchAll();
- inOrder.verify(mockCallback).onConnectSuccess();
+ inOrder.verify(mockCallback).onConnectSuccess(clientId);
// (2) subscribe
mDut.subscribe(clientId, subscribeConfig, mockSessionCallback);
@@ -2423,7 +2423,7 @@
eq(configRequest), eq(true));
mDut.onConfigSuccessResponse(transactionId.getValue());
mMockLooper.dispatchAll();
- inOrder.verify(mockCallback).onConnectSuccess();
+ inOrder.verify(mockCallback).onConnectSuccess(clientId);
int prevId = 0;
for (int i = 0; i < loopCount; ++i) {