summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Benedict Wong <benedictwong@google.com> 2021-04-28 02:18:02 +0000
committer Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> 2021-04-28 02:18:02 +0000
commit5bf42637a8adbc73effab59c7475b36095c0a2d8 (patch)
tree27062836b77df7cdc800d6497e7ab0559694ec40
parent3e633b78221e1e5e135fc0cad14f24453157ba78 (diff)
parent19be41cb30d2365f275826073a45451d470dc9a4 (diff)
Merge "Set safe mode alarm when validation reports NOT_VALID" am: 19be41cb30
Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1689285 Change-Id: Iea21381ebcda5f4cf1487374fd43b0cc4f64b1c4
-rw-r--r--services/core/java/com/android/server/vcn/VcnGatewayConnection.java18
-rw-r--r--tests/vcn/java/com/android/server/vcn/VcnGatewayConnectionConnectedStateTest.java25
2 files changed, 41 insertions, 2 deletions
diff --git a/services/core/java/com/android/server/vcn/VcnGatewayConnection.java b/services/core/java/com/android/server/vcn/VcnGatewayConnection.java
index 8f60b09c588a..08a1b7ebabae 100644
--- a/services/core/java/com/android/server/vcn/VcnGatewayConnection.java
+++ b/services/core/java/com/android/server/vcn/VcnGatewayConnection.java
@@ -1558,8 +1558,22 @@ public class VcnGatewayConnection extends StateMachine {
teardownAsynchronously();
} /* networkUnwantedCallback */,
(status) -> {
- if (status == NetworkAgent.VALIDATION_STATUS_VALID) {
- clearFailedAttemptCounterAndSafeModeAlarm();
+ switch (status) {
+ case NetworkAgent.VALIDATION_STATUS_VALID:
+ clearFailedAttemptCounterAndSafeModeAlarm();
+ break;
+ case NetworkAgent.VALIDATION_STATUS_NOT_VALID:
+ // Will only set a new alarm if no safe mode alarm is
+ // currently scheduled.
+ setSafeModeAlarm();
+ break;
+ default:
+ Slog.wtf(
+ TAG,
+ "Unknown validation status "
+ + status
+ + "; ignoring");
+ break;
}
} /* validationStatusCallback */);
diff --git a/tests/vcn/java/com/android/server/vcn/VcnGatewayConnectionConnectedStateTest.java b/tests/vcn/java/com/android/server/vcn/VcnGatewayConnectionConnectedStateTest.java
index 90ee73866b7f..eedaac48293c 100644
--- a/tests/vcn/java/com/android/server/vcn/VcnGatewayConnectionConnectedStateTest.java
+++ b/tests/vcn/java/com/android/server/vcn/VcnGatewayConnectionConnectedStateTest.java
@@ -343,6 +343,31 @@ public class VcnGatewayConnectionConnectedStateTest extends VcnGatewayConnection
assertFalse(mGatewayConnection.isInSafeMode());
}
+ @Test
+ public void testSubsequentFailedValidationTriggersSafeMode() throws Exception {
+ triggerChildOpened();
+ mTestLooper.dispatchAll();
+
+ triggerValidation(NetworkAgent.VALIDATION_STATUS_VALID);
+ assertFalse(mGatewayConnection.isInSafeMode());
+
+ // Trigger a failed validation, and the subsequent safemode timeout.
+ triggerValidation(NetworkAgent.VALIDATION_STATUS_NOT_VALID);
+ mTestLooper.dispatchAll();
+
+ final ArgumentCaptor<Runnable> runnableCaptor = ArgumentCaptor.forClass(Runnable.class);
+ verify(mDeps, times(2))
+ .newWakeupMessage(
+ eq(mVcnContext),
+ any(),
+ eq(VcnGatewayConnection.SAFEMODE_TIMEOUT_ALARM),
+ runnableCaptor.capture());
+ runnableCaptor.getValue().run();
+ mTestLooper.dispatchAll();
+
+ assertTrue(mGatewayConnection.isInSafeMode());
+ }
+
private Consumer<VcnNetworkAgent> setupNetworkAndGetUnwantedCallback() {
triggerChildOpened();
mTestLooper.dispatchAll();