diff options
author | Roshan Pius <rpius@google.com> | 2017-08-01 16:40:56 -0700 |
---|---|---|
committer | Roshan Pius <rpius@google.com> | 2017-08-01 16:57:52 -0700 |
commit | 899b14464fc6591010a5893142b470a466598f96 (patch) | |
tree | 02542e9b9f44dae85ae3c1de7098532c83af644a | |
parent | 29702d5f6bf0b83837778377f765d393bdfcf5c1 (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.java | 6 | ||||
-rw-r--r-- | tests/wifitests/src/com/android/server/wifi/HalDeviceManagerTest.java | 23 |
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)); } |