summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoshan Pius <rpius@google.com>2017-08-01 16:40:56 -0700
committerRoshan Pius <rpius@google.com>2017-08-01 16:57:52 -0700
commit899b14464fc6591010a5893142b470a466598f96 (patch)
tree02542e9b9f44dae85ae3c1de7098532c83af644a
parent29702d5f6bf0b83837778377f765d393bdfcf5c1 (diff)
HalDeviceManager: Get IWifi proxy immediately
Try to get IWifi proxy as a part of HalDeviceManager.initialize() directly instead of waiting for the IServiceMAnager callback. When HalDeviceManager.initialize() is invoked: a) If the wifi service is up at that point, we will get the proxy immediately and IServiceManager callback will be ignored. b) If the wifi service is not up at that point, we will get the proxy as a part of the IServiceManager callback. Bug: 64226605 Test: Unit tests Test: TBD: Regression test request. Change-Id: I9160af8ef0479ec1fefddb03ec81172c94d583bb
-rw-r--r--service/java/com/android/server/wifi/HalDeviceManager.java6
-rw-r--r--tests/wifitests/src/com/android/server/wifi/HalDeviceManagerTest.java23
2 files changed, 23 insertions, 6 deletions
diff --git a/service/java/com/android/server/wifi/HalDeviceManager.java b/service/java/com/android/server/wifi/HalDeviceManager.java
index 4382c8126..bcc0348a8 100644
--- a/service/java/com/android/server/wifi/HalDeviceManager.java
+++ b/service/java/com/android/server/wifi/HalDeviceManager.java
@@ -532,6 +532,7 @@ public class HalDeviceManager {
private void initializeInternal() {
initIServiceManagerIfNecessary();
+ initIWifiIfNecessary();
}
private void teardownInternal() {
@@ -561,9 +562,7 @@ public class HalDeviceManager {
Log.d(TAG, "IWifi registration notification: fqName=" + fqName
+ ", name=" + name + ", preexisting=" + preexisting);
synchronized (mLock) {
- mWifi = null; // get rid of old copy!
initIWifiIfNecessary();
- stopWifi(); // just in case
}
}
};
@@ -673,7 +672,8 @@ public class HalDeviceManager {
mWifi = null;
return;
}
- managerStatusListenerDispatch();
+ // Stopping wifi just in case. This would also trigger the status callback.
+ stopWifi();
} catch (RemoteException e) {
Log.e(TAG, "Exception while operating on IWifi: " + e);
}
diff --git a/tests/wifitests/src/com/android/server/wifi/HalDeviceManagerTest.java b/tests/wifitests/src/com/android/server/wifi/HalDeviceManagerTest.java
index 3e203a666..54c67b222 100644
--- a/tests/wifitests/src/com/android/server/wifi/HalDeviceManagerTest.java
+++ b/tests/wifitests/src/com/android/server/wifi/HalDeviceManagerTest.java
@@ -164,6 +164,22 @@ public class HalDeviceManagerTest {
}
/**
+ * Test the service manager notification coming in after
+ * {@link HalDeviceManager#initIWifiIfNecessary()} is already invoked as a part of
+ * {@link HalDeviceManager#initialize()}.
+ */
+ @Test
+ public void testServiceRegisterationAfterInitialize() throws Exception {
+ mInOrder = inOrder(mServiceManagerMock, mWifiMock, mManagerStatusListenerMock);
+ executeAndValidateInitializationSequence();
+
+ // This should now be ignored since IWifi is already non-null.
+ mServiceNotificationCaptor.getValue().onRegistration(IWifi.kInterfaceName, "", true);
+
+ verifyNoMoreInteractions(mManagerStatusListenerMock, mWifiMock, mServiceManagerMock);
+ }
+
+ /**
* Validate that multiple callback registrations are called and that duplicate ones are
* only called once.
*/
@@ -221,7 +237,7 @@ public class HalDeviceManagerTest {
// verify: service and callback calls
mInOrder.verify(mWifiMock).start();
- mInOrder.verify(mManagerStatusListenerMock, times(3)).onStatusChanged();
+ mInOrder.verify(mManagerStatusListenerMock, times(2)).onStatusChanged();
verifyNoMoreInteractions(mManagerStatusListenerMock);
}
@@ -1097,12 +1113,13 @@ public class HalDeviceManagerTest {
mInOrder.verify(mServiceManagerMock).registerForNotifications(eq(IWifi.kInterfaceName),
eq(""), mServiceNotificationCaptor.capture());
- // act: get the service started (which happens even when service was already up)
- mServiceNotificationCaptor.getValue().onRegistration(IWifi.kInterfaceName, "", true);
+ // The service should already be up at this point.
// verify: wifi initialization sequence
mInOrder.verify(mWifiMock).linkToDeath(mDeathRecipientCaptor.capture(), anyLong());
mInOrder.verify(mWifiMock).registerEventCallback(mWifiEventCallbackCaptor.capture());
+ // verify: onStop called as a part of initialize.
+ mInOrder.verify(mWifiMock).stop();
collector.checkThat("isReady is true", mDut.isReady(), equalTo(true));
}