summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVikram Gaur <vikramgaur@google.com>2023-08-31 00:34:32 +0000
committerVikram Gaur <vikramgaur@google.com>2023-08-31 21:07:13 +0000
commit2bb97b0fb1c43a402da58183d9b029314b19156b (patch)
tree3d2f1f653c2019fdf69ae6b4418c660b02597939
parent7148310e7e85ce4c0b033f139c4d5beb0e50484a (diff)
downloadRemoteKeyProvisioning-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
-rw-r--r--app/src/com/android/rkpdapp/interfaces/ServerInterface.java18
-rw-r--r--app/tests/e2e/src/com/android/rkpdapp/e2etest/KeystoreIntegrationTest.java11
-rw-r--r--app/tests/e2e/src/com/android/rkpdapp/e2etest/RkpdHostTestHelperTests.java6
-rw-r--r--app/tests/unit/src/com/android/rkpdapp/unittest/ServerInterfaceTest.java12
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 {