diff options
-rw-r--r-- | service/java/com/android/server/wifi/hotspot2/PasspointProvisioner.java | 15 | ||||
-rw-r--r-- | tests/wifitests/src/com/android/server/wifi/hotspot2/PasspointProvisionerTest.java | 26 |
2 files changed, 36 insertions, 5 deletions
diff --git a/service/java/com/android/server/wifi/hotspot2/PasspointProvisioner.java b/service/java/com/android/server/wifi/hotspot2/PasspointProvisioner.java index 75c5207f6..fe3b25ddd 100644 --- a/service/java/com/android/server/wifi/hotspot2/PasspointProvisioner.java +++ b/service/java/com/android/server/wifi/hotspot2/PasspointProvisioner.java @@ -813,11 +813,18 @@ public class PasspointProvisioner { PasspointConfiguration passpointConfiguration = PpsMoParser.parseMoText(moTree); if (passpointConfiguration == null) { Log.e(TAG, "fails to parse the MoTree"); - } else { - if (mVerboseLoggingEnabled) { - Log.d(TAG, "The parsed PasspointConfiguration: " + passpointConfiguration); - } + return null; + } + + if (!passpointConfiguration.validateForR2()) { + Log.e(TAG, "PPS MO received is invalid: " + passpointConfiguration); + return null; } + + if (mVerboseLoggingEnabled) { + Log.d(TAG, "The parsed PasspointConfiguration: " + passpointConfiguration); + } + return passpointConfiguration; } 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 e0f35009c..bf346138b 100644 --- a/tests/wifitests/src/com/android/server/wifi/hotspot2/PasspointProvisionerTest.java +++ b/tests/wifitests/src/com/android/server/wifi/hotspot2/PasspointProvisionerTest.java @@ -64,6 +64,7 @@ import com.android.server.wifi.hotspot2.soap.PostDevDataResponse; import com.android.server.wifi.hotspot2.soap.RedirectListener; import com.android.server.wifi.hotspot2.soap.SppConstants; import com.android.server.wifi.hotspot2.soap.SppResponseMessage; +import com.android.server.wifi.hotspot2.soap.UpdateResponseMessage; import com.android.server.wifi.hotspot2.soap.command.BrowserUri; import com.android.server.wifi.hotspot2.soap.command.PpsMoData; import com.android.server.wifi.hotspot2.soap.command.SppCommand; @@ -158,13 +159,15 @@ public class PasspointProvisionerTest { @Mock PackageManager mPackageManager; @Mock PasspointConfiguration mPasspointConfiguration; @Mock X509Certificate mX509Certificate; + @Mock SoapSerializationEnvelope mSoapSerializationEnvelope; @Before public void setUp() throws Exception { MockitoAnnotations.initMocks(this); mTestUrl = new URL(TEST_REDIRECT_URL); mSession = ExtendedMockito.mockitoSession().mockStatic( - RedirectListener.class).mockStatic(PpsMoParser.class).startMocking(); + RedirectListener.class).mockStatic(PpsMoParser.class).mockStatic( + UpdateResponseMessage.class).startMocking(); when(RedirectListener.createInstance(mLooper.getLooper())).thenReturn( mRedirectListener); @@ -244,6 +247,10 @@ public class PasspointProvisionerTest { when(mPasspointConfiguration.getSubscriptionUpdate()).thenReturn(updateParameter); when(mOsuServerConnection.retrieveTrustRootCerts(anyMap())).thenReturn(true); lenient().when(PpsMoParser.parseMoText(isNull())).thenReturn(mPasspointConfiguration); + + when(mPasspointConfiguration.validateForR2()).thenReturn(true); + lenient().when(UpdateResponseMessage.serializeToSoapEnvelope(any(String.class), + any(Boolean.class))).thenReturn(mSoapSerializationEnvelope); } @After @@ -340,6 +347,9 @@ public class PasspointProvisionerTest { mSppResponseMessage); mLooper.dispatchAll(); } else if (step == STEP_WAIT_FOR_THIRD_SOAP_RESPONSE) { + ExtendedMockito.verify( + () -> UpdateResponseMessage.serializeToSoapEnvelope(eq(TEST_SESSION_ID), + eq(false))); verify(mCallback).onProvisioningStatus( ProvisioningCallback.OSU_STATUS_THIRD_SOAP_EXCHANGE); @@ -712,6 +722,20 @@ public class PasspointProvisionerTest { } /** + * Verifies that the {@link UpdateResponseMessage#serializeToSoapEnvelope(String, boolean)} is + * invoked with right arguments when a PPS-MO xml received from server is not valid in terms of + * schema of PPS MO. + */ + @Test + public void verifyHandlingInvalidPpsMoForSoapResponse() throws RemoteException { + when(mPasspointConfiguration.validateForR2()).thenReturn(false); + stopAfterStep(STEP_WAIT_FOR_SECOND_SOAP_RESPONSE); + + ExtendedMockito.verify( + () -> UpdateResponseMessage.serializeToSoapEnvelope(eq(TEST_SESSION_ID), eq(true))); + } + + /** * Verifies that the right provisioning callbacks are invoked when failing to call {@link * OsuServerConnection#retrieveTrustRootCerts(Map)}. */ |