diff options
author | Ecco Park <eccopark@google.com> | 2018-10-24 13:01:27 -0700 |
---|---|---|
committer | Ecco Park <eccopark@google.com> | 2018-11-02 03:54:17 +0000 |
commit | 5c519d75cd477f51afc3c4c0ee3c6096e9a5131f (patch) | |
tree | 0ea08c233de95171eddfe2d23606515adda3b30b /tests | |
parent | e77a84b320e776d0e783d87b492d5f80ac6f9648 (diff) |
passpoint-r2: make the connect function of OsuServerConnection async call
1) Currently connection function in OsuServerConnection class calls
HttpsURLConnection.connect, which is blocking function.
So, if caller(PasspointProvisioner) might be blocked
until connection is established or timeout in the connection function.
It needs to be changed to non-blocking call.
2) Remove unnecessary states in ProvisioingStateMachine
Bug: 117728536
Test: ./frameworks/opt/net/wifi/tests/wifitests/runtests.sh
Test: live test with Passpoint R2 service provider AP
Change-Id: I51dc1cfdd8ec0bcaab599009a1ac68be77a4816b
Signed-off-by: Ecco Park <eccopark@google.com>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/wifitests/src/com/android/server/wifi/hotspot2/OsuServerConnectionTest.java | 58 | ||||
-rw-r--r-- | tests/wifitests/src/com/android/server/wifi/hotspot2/PasspointProvisionerTest.java | 50 |
2 files changed, 62 insertions, 46 deletions
diff --git a/tests/wifitests/src/com/android/server/wifi/hotspot2/OsuServerConnectionTest.java b/tests/wifitests/src/com/android/server/wifi/hotspot2/OsuServerConnectionTest.java index 39ef15e5d..eb08000e4 100644 --- a/tests/wifitests/src/com/android/server/wifi/hotspot2/OsuServerConnectionTest.java +++ b/tests/wifitests/src/com/android/server/wifi/hotspot2/OsuServerConnectionTest.java @@ -133,12 +133,7 @@ public class OsuServerConnectionTest { when(ServiceProviderVerifier.getProviderNames(any(X509Certificate.class))).thenReturn( mProviderIdentities); - mOsuServerConnection.init(mTlsContext, mDelegate); - mOsuServerConnection.setEventCallback(mOsuServerCallbacks); - - assertTrue(mOsuServerConnection.canValidateServer()); - assertTrue(mOsuServerConnection.connect(mValidServerUrl, mNetwork)); - verify(mTlsContext).init(isNull(), mTrustManagerCaptor.capture(), isNull()); + establishServerConnection(); TrustManager[] trustManagers = mTrustManagerCaptor.getValue(); X509TrustManager trustManager = (X509TrustManager) trustManagers[0]; @@ -187,7 +182,11 @@ public class OsuServerConnectionTest { mOsuServerConnection.setEventCallback(mOsuServerCallbacks); assertTrue(mOsuServerConnection.canValidateServer()); - assertFalse(mOsuServerConnection.connect(mValidServerUrl, mNetwork)); + assertTrue(mOsuServerConnection.connect(mValidServerUrl, mNetwork)); + + mLooper.dispatchAll(); + + verify(mOsuServerCallbacks).onServerConnectionStatus(anyInt(), eq(false)); } /** @@ -201,7 +200,11 @@ public class OsuServerConnectionTest { mOsuServerConnection.setEventCallback(mOsuServerCallbacks); assertTrue(mOsuServerConnection.canValidateServer()); - assertFalse(mOsuServerConnection.connect(mValidServerUrl, mNetwork)); + assertTrue(mOsuServerConnection.connect(mValidServerUrl, mNetwork)); + + mLooper.dispatchAll(); + + verify(mOsuServerCallbacks).onServerConnectionStatus(anyInt(), eq(false)); } /** @@ -209,13 +212,7 @@ public class OsuServerConnectionTest { */ @Test public void verifyInitAndConnectCertValidationFailure() throws Exception { - mOsuServerConnection.init(mTlsContext, mDelegate); - mOsuServerConnection.setEventCallback(mOsuServerCallbacks); - - assertTrue(mOsuServerConnection.canValidateServer()); - assertTrue(mOsuServerConnection.connect(mValidServerUrl, mNetwork)); - verify(mTlsContext).init(isNull(), mTrustManagerCaptor.capture(), isNull()); - + establishServerConnection(); TrustManager[] trustManagers = mTrustManagerCaptor.getValue(); X509TrustManager trustManager = (X509TrustManager) trustManagers[0]; doThrow(new CertificateException()).when(mDelegate) @@ -231,7 +228,7 @@ public class OsuServerConnectionTest { * Verifies initialization and connecting to the OSU server, friendly name mismatch */ @Test - public void verifyInitAndConnectInvalidProviderIdentity() throws Exception { + public void verifyInitAndConnectInvalidProviderIdentity()throws Exception { // static mocking MockitoSession session = ExtendedMockito.mockitoSession().mockStatic( ServiceProviderVerifier.class).startMocking(); @@ -239,12 +236,7 @@ public class OsuServerConnectionTest { when(ServiceProviderVerifier.getProviderNames(any(X509Certificate.class))).thenReturn( mProviderIdentities); - mOsuServerConnection.init(mTlsContext, mDelegate); - mOsuServerConnection.setEventCallback(mOsuServerCallbacks); - - assertTrue(mOsuServerConnection.canValidateServer()); - assertTrue(mOsuServerConnection.connect(mValidServerUrl, mNetwork)); - verify(mTlsContext).init(isNull(), mTrustManagerCaptor.capture(), isNull()); + establishServerConnection(); TrustManager[] trustManagers = mTrustManagerCaptor.getValue(); X509TrustManager trustManager = (X509TrustManager) trustManagers[0]; @@ -272,7 +264,7 @@ public class OsuServerConnectionTest { * {@code null} */ @Test - public void verifyExchangeSoapMessageWithInvalidArgument() { + public void verifyExchangeSoapMessageWithInvalidArgument() throws Exception { establishServerConnection(); assertFalse(mOsuServerConnection.exchangeSoapMessage(null)); } @@ -287,18 +279,17 @@ public class OsuServerConnectionTest { MockitoSession session = ExtendedMockito.mockitoSession().mockStatic( HttpsTransport.class).startMocking(); try { - mOsuServerConnection.init(mTlsContext, mDelegate); - mOsuServerConnection.setEventCallback(mOsuServerCallbacks); + establishServerConnection(); when(HttpsTransport.createInstance(any(Network.class), any(URL.class))).thenReturn( mHttpsTransport); doThrow(new IOException()).when(mHttpsTransport).call(any(String.class), any(SoapSerializationEnvelope.class)); - assertTrue(mOsuServerConnection.connect(mValidServerUrl, mNetwork)); assertTrue(mOsuServerConnection.exchangeSoapMessage( new SoapSerializationEnvelope(SoapEnvelope.VER12))); mLooper.dispatchAll(); + verify(mOsuServerCallbacks).onReceivedSoapMessage(anyInt(), isNull()); } finally { session.finishMocking(); @@ -309,7 +300,7 @@ public class OsuServerConnectionTest { * Verifies {@code ExchangeSoapMessage} should return an instance of {@link SppResponseMessage}. */ @Test - public void verifyExchangeSoapMessage() { + public void verifyExchangeSoapMessage() throws Exception { // static mocking MockitoSession session = ExtendedMockito.mockitoSession().mockStatic( HttpsTransport.class).mockStatic(SoapParser.class).startMocking(); @@ -325,6 +316,7 @@ public class OsuServerConnectionTest { assertTrue(mOsuServerConnection.exchangeSoapMessage(envelope)); mLooper.dispatchAll(); + verify(mOsuServerCallbacks).onReceivedSoapMessage(anyInt(), eq(mSppResponseMessage)); } finally { session.finishMocking(); @@ -356,7 +348,7 @@ public class OsuServerConnectionTest { * server to get root CA certificate is not HTTP OK. */ @Test - public void verifyRetrieveTrustRootCertsWithErrorInHTTPSResponse() throws IOException { + public void verifyRetrieveTrustRootCertsWithErrorInHTTPSResponse() throws Exception { // static mocking MockitoSession session = ExtendedMockito.mockitoSession().mockStatic( HttpsTransport.class).startMocking(); @@ -393,8 +385,7 @@ public class OsuServerConnectionTest { * downloading root CA certificate from each {@code URL} provided */ @Test - public void verifyRetrieveTrustRootCertsWithoutError() throws IOException, - CertificateException { + public void verifyRetrieveTrustRootCertsWithoutError() throws Exception { // static mocking MockitoSession session = ExtendedMockito.mockitoSession().mockStatic( HttpsTransport.class).mockStatic(CertificateFactory.class).mockStatic( @@ -447,10 +438,15 @@ public class OsuServerConnectionTest { } } - private void establishServerConnection() { + private void establishServerConnection() throws Exception { mOsuServerConnection.init(mTlsContext, mDelegate); mOsuServerConnection.setEventCallback(mOsuServerCallbacks); + verify(mTlsContext).init(isNull(), mTrustManagerCaptor.capture(), isNull()); + assertTrue(mOsuServerConnection.canValidateServer()); assertTrue(mOsuServerConnection.connect(mValidServerUrl, mNetwork)); + mLooper.dispatchAll(); + + verify(mOsuServerCallbacks).onServerConnectionStatus(anyInt(), eq(true)); } } diff --git a/tests/wifitests/src/com/android/server/wifi/hotspot2/PasspointProvisionerTest.java b/tests/wifitests/src/com/android/server/wifi/hotspot2/PasspointProvisionerTest.java index 3607a0326..e0f35009c 100644 --- a/tests/wifitests/src/com/android/server/wifi/hotspot2/PasspointProvisionerTest.java +++ b/tests/wifitests/src/com/android/server/wifi/hotspot2/PasspointProvisionerTest.java @@ -289,7 +289,7 @@ public class PasspointProvisionerTest { ProvisioningCallback.OSU_STATUS_AP_CONNECTED); } else if (step == STEP_SERVER_CONNECT) { verify(mCallback).onProvisioningStatus( - ProvisioningCallback.OSU_STATUS_SERVER_CONNECTED); + ProvisioningCallback.OSU_STATUS_SERVER_CONNECTING); } else if (step == STEP_WAIT_FOR_REDIRECT_RESPONSE) { // Server validation passed mOsuServerCallbacks.onServerValidationStatus(mOsuServerCallbacks.getSessionId(), @@ -298,8 +298,14 @@ public class PasspointProvisionerTest { verify(mCallback).onProvisioningStatus( ProvisioningCallback.OSU_STATUS_SERVER_VALIDATED); + + // Server connection succeeded + mOsuServerCallbacks.onServerConnectionStatus(mOsuServerCallbacks.getSessionId(), + true); + mLooper.dispatchAll(); + verify(mCallback).onProvisioningStatus( - ProvisioningCallback.OSU_STATUS_SERVICE_PROVIDER_VERIFIED); + ProvisioningCallback.OSU_STATUS_SERVER_CONNECTED); verify(mCallback).onProvisioningStatus( ProvisioningCallback.OSU_STATUS_INIT_SOAP_EXCHANGE); @@ -419,9 +425,10 @@ public class PasspointProvisionerTest { verify(mCallback).onProvisioningStatus(ProvisioningCallback.OSU_STATUS_AP_CONNECTING); // Connection to OSU AP fails mOsuNetworkCallbacks.onDisconnected(); + // Move to failed state verify(mCallback).onProvisioningFailure(ProvisioningCallback.OSU_FAILURE_AP_CONNECTION); - // Failure case, no more runnables posted + // Failure case, no more runnable posted verifyNoMoreInteractions(mCallback); } @@ -434,6 +441,7 @@ public class PasspointProvisionerTest { // Disconnect received mOsuNetworkCallbacks.onDisconnected(); + // Move to failed state verify(mCallback).onProvisioningFailure(ProvisioningCallback.OSU_FAILURE_AP_CONNECTION); // No more callbacks, Osu server validation not initiated @@ -449,6 +457,7 @@ public class PasspointProvisionerTest { // Wifi disabled notification mOsuNetworkCallbacks.onWifiDisabled(); + // Wifi Disable is processed first and move to failed state verify(mCallback).onProvisioningFailure(ProvisioningCallback.OSU_FAILURE_AP_CONNECTION); // OSU server connection event is not handled @@ -467,7 +476,7 @@ public class PasspointProvisionerTest { // Attempting to connect to OSU server fails due to invalid server URL, move to failed state verify(mCallback).onProvisioningFailure( ProvisioningCallback.OSU_FAILURE_SERVER_URL_INVALID); - // No further runnables posted + // No further runnable posted verifyNoMoreInteractions(mCallback); } @@ -482,7 +491,7 @@ public class PasspointProvisionerTest { // Connection to OSU Server fails, move to failed state verify(mCallback).onProvisioningFailure(ProvisioningCallback.OSU_FAILURE_SERVER_CONNECTION); - // No further runnables posted + // No further runnable posted verifyNoMoreInteractions(mCallback); } @@ -500,7 +509,7 @@ public class PasspointProvisionerTest { // Server validation failure, move to failed state verify(mCallback).onProvisioningFailure(ProvisioningCallback.OSU_FAILURE_SERVER_VALIDATION); - // No further runnables posted + // No further runnable posted verifyNoMoreInteractions(mCallback); } @@ -517,10 +526,11 @@ public class PasspointProvisionerTest { // Runnable posted by server callback assertTrue(mHandler.hasMessagesOrCallbacks()); mLooper.dispatchAll(); + // Server validation failure, move to failed state verify(mCallback, never()).onProvisioningFailure( ProvisioningCallback.OSU_FAILURE_SERVER_VALIDATION); - // No further runnables posted + // No further runnable posted verifyNoMoreInteractions(mCallback); } @@ -537,10 +547,11 @@ public class PasspointProvisionerTest { // Runnable posted by server callback assertTrue(mHandler.hasMessagesOrCallbacks()); mLooper.dispatchAll(); + // Ignore the validation complete event because of different session id. verify(mCallback, never()).onProvisioningStatus( ProvisioningCallback.OSU_STATUS_SERVER_VALIDATED); - // No further runnables posted + // No further runnable posted verifyNoMoreInteractions(mCallback); } @@ -561,11 +572,10 @@ public class PasspointProvisionerTest { // OSU server validation success posts another runnable to validate the provider mLooper.dispatchAll(); - verify(mCallback).onProvisioningStatus(ProvisioningCallback.OSU_STATUS_SERVER_VALIDATED); // Provider validation failure is processed next, move to failed state verify(mCallback).onProvisioningFailure( ProvisioningCallback.OSU_FAILURE_SERVICE_PROVIDER_VERIFICATION); - // No further runnables posted + // No further runnable posted verifyNoMoreInteractions(mCallback); } @@ -584,11 +594,16 @@ public class PasspointProvisionerTest { mLooper.dispatchAll(); verify(mCallback).onProvisioningStatus(ProvisioningCallback.OSU_STATUS_SERVER_VALIDATED); + + // Server connection passed + mOsuServerCallbacks.onServerConnectionStatus(mOsuServerCallbacks.getSessionId(), true); + mLooper.dispatchAll(); + verify(mCallback).onProvisioningStatus( - ProvisioningCallback.OSU_STATUS_SERVICE_PROVIDER_VERIFIED); + ProvisioningCallback.OSU_STATUS_SERVER_CONNECTED); verify(mCallback).onProvisioningFailure( ProvisioningCallback.OSU_FAILURE_SOAP_MESSAGE_EXCHANGE); - // No further runnables posted + // No further runnable posted verifyNoMoreInteractions(mCallback); } @@ -608,8 +623,13 @@ public class PasspointProvisionerTest { mLooper.dispatchAll(); verify(mCallback).onProvisioningStatus(ProvisioningCallback.OSU_STATUS_SERVER_VALIDATED); + + // Server connection passed + mOsuServerCallbacks.onServerConnectionStatus(mOsuServerCallbacks.getSessionId(), true); + mLooper.dispatchAll(); + verify(mCallback).onProvisioningStatus( - ProvisioningCallback.OSU_STATUS_SERVICE_PROVIDER_VERIFIED); + ProvisioningCallback.OSU_STATUS_SERVER_CONNECTED); verify(mCallback).onProvisioningStatus(ProvisioningCallback.OSU_STATUS_INIT_SOAP_EXCHANGE); // Received soapMessageResponse @@ -619,7 +639,7 @@ public class PasspointProvisionerTest { verify(mCallback).onProvisioningFailure( ProvisioningCallback.OSU_FAILURE_NO_OSU_ACTIVITY_FOUND); - // No further runnables posted + // No further runnable posted verifyNoMoreInteractions(mCallback); } @@ -638,7 +658,7 @@ public class PasspointProvisionerTest { verify(mRedirectListener, atLeastOnce()).stopServer(); verify(mCallback).onProvisioningFailure( ProvisioningCallback.OSU_FAILURE_TIMED_OUT_REDIRECT_LISTENER); - // No further runnables posted + // No further runnable posted verifyNoMoreInteractions(mCallback); } |