Support Safemode for VCNs.
This CL updates VcnManagementService to support Safemode for VCN instances. Specifically, VcnGatewayConnections will notify their Vcn instance when they enter Safemode. Vcn instances will in-turn notify VcnManagementService, which notifies all registered UnderlyingNetworkPolicyListeners to update their policies. Bug: 178140973 Test: atest FrameworksVcnTests Change-Id: I3336c150e9406b3eb2330d2e86cae2ed835730bb
This commit is contained in:
@@ -66,6 +66,7 @@ import android.telephony.TelephonyManager;
|
||||
import androidx.test.filters.SmallTest;
|
||||
import androidx.test.runner.AndroidJUnit4;
|
||||
|
||||
import com.android.server.VcnManagementService.VcnSafemodeCallback;
|
||||
import com.android.server.vcn.TelephonySubscriptionTracker;
|
||||
import com.android.server.vcn.Vcn;
|
||||
import com.android.server.vcn.VcnContext;
|
||||
@@ -142,6 +143,9 @@ public class VcnManagementServiceTest {
|
||||
private final TelephonySubscriptionTracker mSubscriptionTracker =
|
||||
mock(TelephonySubscriptionTracker.class);
|
||||
|
||||
private final ArgumentCaptor<VcnSafemodeCallback> mSafemodeCallbackCaptor =
|
||||
ArgumentCaptor.forClass(VcnSafemodeCallback.class);
|
||||
|
||||
private final VcnManagementService mVcnMgmtSvc;
|
||||
|
||||
private final IVcnUnderlyingNetworkPolicyListener mMockPolicyListener =
|
||||
@@ -184,7 +188,7 @@ public class VcnManagementServiceTest {
|
||||
doAnswer((invocation) -> {
|
||||
// Mock-within a doAnswer is safe, because it doesn't actually run nested.
|
||||
return mock(Vcn.class);
|
||||
}).when(mMockDeps).newVcn(any(), any(), any(), any());
|
||||
}).when(mMockDeps).newVcn(any(), any(), any(), any(), any());
|
||||
|
||||
final PersistableBundle bundle =
|
||||
PersistableBundleUtils.fromMap(
|
||||
@@ -307,7 +311,7 @@ public class VcnManagementServiceTest {
|
||||
TelephonySubscriptionSnapshot snapshot =
|
||||
triggerSubscriptionTrackerCbAndGetSnapshot(Collections.singleton(TEST_UUID_1));
|
||||
verify(mMockDeps)
|
||||
.newVcn(eq(mVcnContext), eq(TEST_UUID_1), eq(TEST_VCN_CONFIG), eq(snapshot));
|
||||
.newVcn(eq(mVcnContext), eq(TEST_UUID_1), eq(TEST_VCN_CONFIG), eq(snapshot), any());
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -485,7 +489,8 @@ public class VcnManagementServiceTest {
|
||||
eq(mVcnContext),
|
||||
eq(TEST_UUID_2),
|
||||
eq(TEST_VCN_CONFIG),
|
||||
eq(TelephonySubscriptionSnapshot.EMPTY_SNAPSHOT));
|
||||
eq(TelephonySubscriptionSnapshot.EMPTY_SNAPSHOT),
|
||||
any());
|
||||
|
||||
// Verify Vcn is updated if it was previously started
|
||||
mVcnMgmtSvc.setVcnConfig(TEST_UUID_2, TEST_VCN_CONFIG, TEST_PACKAGE_NAME);
|
||||
@@ -634,4 +639,25 @@ public class VcnManagementServiceTest {
|
||||
|
||||
verify(mMockPolicyListener).onPolicyChanged();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testVcnSafemodeCallbackOnEnteredSafemode() throws Exception {
|
||||
TelephonySubscriptionSnapshot snapshot =
|
||||
triggerSubscriptionTrackerCbAndGetSnapshot(Collections.singleton(TEST_UUID_1));
|
||||
verify(mMockDeps)
|
||||
.newVcn(
|
||||
eq(mVcnContext),
|
||||
eq(TEST_UUID_1),
|
||||
eq(TEST_VCN_CONFIG),
|
||||
eq(snapshot),
|
||||
mSafemodeCallbackCaptor.capture());
|
||||
|
||||
mVcnMgmtSvc.addVcnUnderlyingNetworkPolicyListener(mMockPolicyListener);
|
||||
|
||||
VcnSafemodeCallback safemodeCallback = mSafemodeCallbackCaptor.getValue();
|
||||
safemodeCallback.onEnteredSafemode();
|
||||
|
||||
assertFalse(mVcnMgmtSvc.getAllVcns().get(TEST_UUID_1).isActive());
|
||||
verify(mMockPolicyListener).onPolicyChanged();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user