diff options
author | Vikram Gaur <vikramgaur@google.com> | 2023-08-31 00:34:32 +0000 |
---|---|---|
committer | Vikram Gaur <vikramgaur@google.com> | 2023-08-31 21:07:13 +0000 |
commit | 2bb97b0fb1c43a402da58183d9b029314b19156b (patch) | |
tree | 3d2f1f653c2019fdf69ae6b4418c660b02597939 | |
parent | 7148310e7e85ce4c0b033f139c4d5beb0e50484a (diff) | |
download | RemoteKeyProvisioning-2bb97b0fb1c43a402da58183d9b029314b19156b.tar.gz |
Add network availability assumption to Integration tests.
RKP integration tests depend on network availability. Adding an
assumption so that unavailable network testing does not throw false
alarms.
Bug: 283308608
Test: atest RkpdAppIntegrationTests
Change-Id: I531ff8aaf0638ef0a734042d999eca3ab9bd6200
4 files changed, 36 insertions, 11 deletions
diff --git a/app/src/com/android/rkpdapp/interfaces/ServerInterface.java b/app/src/com/android/rkpdapp/interfaces/ServerInterface.java index c5a77b6..173a2a8 100644 --- a/app/src/com/android/rkpdapp/interfaces/ServerInterface.java +++ b/app/src/com/android/rkpdapp/interfaces/ServerInterface.java @@ -18,7 +18,7 @@ package com.android.rkpdapp.interfaces; import android.content.Context; import android.net.ConnectivityManager; -import android.net.NetworkInfo; +import android.net.NetworkCapabilities; import android.net.TrafficStats; import android.net.Uri; import android.util.Base64; @@ -227,9 +227,7 @@ public class ServerInterface { private RkpdException makeNetworkError(String message, ProvisioningAttempt metrics) { - ConnectivityManager cm = mContext.getSystemService(ConnectivityManager.class); - NetworkInfo networkInfo = cm.getActiveNetworkInfo(); - if (networkInfo != null && networkInfo.isConnected()) { + if (isNetworkConnected(mContext)) { return new RkpdException( RkpdException.ErrorCode.NETWORK_COMMUNICATION_ERROR, message); } @@ -239,6 +237,18 @@ public class ServerInterface { } /** + * Checks whether network is connected. + * @return true if connected else false. + */ + public static boolean isNetworkConnected(Context context) { + ConnectivityManager cm = context.getSystemService(ConnectivityManager.class); + NetworkCapabilities capabilities = cm.getNetworkCapabilities(cm.getActiveNetwork()); + return capabilities != null + && capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) + && capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED); + } + + /** * Fetch a GEEK from the server and update SettingsManager appropriately with the return * values. This will also delete all keys in the attestation key pool if the server has * indicated that RKP should be turned off. diff --git a/app/tests/e2e/src/com/android/rkpdapp/e2etest/KeystoreIntegrationTest.java b/app/tests/e2e/src/com/android/rkpdapp/e2etest/KeystoreIntegrationTest.java index 33187da..46bd879 100644 --- a/app/tests/e2e/src/com/android/rkpdapp/e2etest/KeystoreIntegrationTest.java +++ b/app/tests/e2e/src/com/android/rkpdapp/e2etest/KeystoreIntegrationTest.java @@ -41,6 +41,7 @@ import androidx.work.testing.TestWorkerBuilder; import com.android.rkpdapp.database.ProvisionedKey; import com.android.rkpdapp.database.ProvisionedKeyDao; import com.android.rkpdapp.database.RkpdDatabase; +import com.android.rkpdapp.interfaces.ServerInterface; import com.android.rkpdapp.interfaces.ServiceManagerInterface; import com.android.rkpdapp.interfaces.SystemInterface; import com.android.rkpdapp.provisioner.PeriodicProvisioner; @@ -116,6 +117,11 @@ public class KeystoreIntegrationTest { .that(SystemProperties.get("remote_provisioning.hostname")) .isNotEmpty(); + assume() + .withMessage("RKP Integration tests rely on network availability.") + .that(ServerInterface.isNetworkConnected(sContext)) + .isTrue(); + Settings.clearPreferences(sContext); mKeyDao = RkpdDatabase.getDatabase(sContext).provisionedKeyDao(); @@ -230,9 +236,8 @@ public class KeystoreIntegrationTest { assertWithMessage("Should have gotten a KeyStoreException").fail(); } catch (ProviderException e) { assertThat(e.getCause()).isInstanceOf(KeyStoreException.class); - assertThat(((KeyStoreException) e.getCause()).getErrorCode()).isAnyOf( - ResponseCode.OUT_OF_KEYS_TRANSIENT_ERROR, - ResponseCode.OUT_OF_KEYS_PENDING_INTERNET_CONNECTIVITY); + assertThat(((KeyStoreException) e.getCause()).getErrorCode()) + .isEqualTo(ResponseCode.OUT_OF_KEYS_TRANSIENT_ERROR); } } diff --git a/app/tests/e2e/src/com/android/rkpdapp/e2etest/RkpdHostTestHelperTests.java b/app/tests/e2e/src/com/android/rkpdapp/e2etest/RkpdHostTestHelperTests.java index daea225..0eb76be 100644 --- a/app/tests/e2e/src/com/android/rkpdapp/e2etest/RkpdHostTestHelperTests.java +++ b/app/tests/e2e/src/com/android/rkpdapp/e2etest/RkpdHostTestHelperTests.java @@ -38,6 +38,7 @@ import androidx.work.testing.TestWorkerBuilder; import com.android.rkpdapp.database.ProvisionedKey; import com.android.rkpdapp.database.ProvisionedKeyDao; import com.android.rkpdapp.database.RkpdDatabase; +import com.android.rkpdapp.interfaces.ServerInterface; import com.android.rkpdapp.interfaces.ServiceManagerInterface; import com.android.rkpdapp.interfaces.SystemInterface; import com.android.rkpdapp.provisioner.PeriodicProvisioner; @@ -97,6 +98,11 @@ public class RkpdHostTestHelperTests { .that(SystemProperties.get("remote_provisioning.hostname")) .isNotEmpty(); + assume() + .withMessage("RKP Integration tests rely on network availability.") + .that(ServerInterface.isNetworkConnected(sContext)) + .isTrue(); + Settings.clearPreferences(sContext); mRealDao = RkpdDatabase.getDatabase(sContext).provisionedKeyDao(); mRealDao.deleteAllKeys(); diff --git a/app/tests/unit/src/com/android/rkpdapp/unittest/ServerInterfaceTest.java b/app/tests/unit/src/com/android/rkpdapp/unittest/ServerInterfaceTest.java index 5f32975..725b1a6 100644 --- a/app/tests/unit/src/com/android/rkpdapp/unittest/ServerInterfaceTest.java +++ b/app/tests/unit/src/com/android/rkpdapp/unittest/ServerInterfaceTest.java @@ -21,7 +21,7 @@ import static com.google.common.truth.Truth.assertWithMessage; import android.content.Context; import android.net.ConnectivityManager; -import android.net.NetworkInfo; +import android.net.NetworkCapabilities; import android.util.Base64; import androidx.test.core.app.ApplicationProvider; @@ -391,12 +391,16 @@ public class ServerInterfaceTest { private void mockConnectivityFailure(ConnectivityState state) { ConnectivityManager mockedConnectivityManager = Mockito.mock(ConnectivityManager.class); - NetworkInfo mockedNetwork = Mockito.mock(NetworkInfo.class); Mockito.when(sContext.getSystemService(ConnectivityManager.class)) .thenReturn(mockedConnectivityManager); - Mockito.when(mockedConnectivityManager.getActiveNetworkInfo()).thenReturn(mockedNetwork); - Mockito.when(mockedNetwork.isConnected()).thenReturn(state == ConnectivityState.CONNECTED); + NetworkCapabilities.Builder builder = new NetworkCapabilities.Builder(); + builder.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET); + if (state == ConnectivityState.CONNECTED) { + builder.addCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED); + } + Mockito.when(mockedConnectivityManager.getNetworkCapabilities(Mockito.any())) + .thenReturn(builder.build()); } private enum ConnectivityState { |