Define VcnStatusCallback register/unregister.
This CL defines VcnStatusCallbacks, which are callbacks used to register for status updates to a specific subscription group. These Callbacks may be registered with VcnManager at any time, but will only be invoked for the specifies subscription group and only if the registering app has carrier privileges for that subscription. Bug: 163433613 Test: atest FrameworksVcnTests Change-Id: Iefd284ae2d09676d195e2a12bf660be3596da59b
This commit is contained in:
@@ -26,6 +26,7 @@ import static com.android.server.vcn.VcnTestUtils.setupSystemService;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
import static org.junit.Assert.assertNull;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import static org.junit.Assert.fail;
|
||||
@@ -52,6 +53,7 @@ import android.net.LinkProperties;
|
||||
import android.net.NetworkCapabilities;
|
||||
import android.net.NetworkCapabilities.Transport;
|
||||
import android.net.TelephonyNetworkSpecifier;
|
||||
import android.net.vcn.IVcnStatusCallback;
|
||||
import android.net.vcn.IVcnUnderlyingNetworkPolicyListener;
|
||||
import android.net.vcn.VcnConfig;
|
||||
import android.net.vcn.VcnConfigTest;
|
||||
@@ -70,7 +72,8 @@ import android.telephony.TelephonyManager;
|
||||
import androidx.test.filters.SmallTest;
|
||||
import androidx.test.runner.AndroidJUnit4;
|
||||
|
||||
import com.android.server.VcnManagementService.VcnSafemodeCallback;
|
||||
import com.android.server.VcnManagementService.VcnSafeModeCallback;
|
||||
import com.android.server.VcnManagementService.VcnStatusCallbackInfo;
|
||||
import com.android.server.vcn.TelephonySubscriptionTracker;
|
||||
import com.android.server.vcn.Vcn;
|
||||
import com.android.server.vcn.VcnContext;
|
||||
@@ -148,13 +151,14 @@ public class VcnManagementServiceTest {
|
||||
private final TelephonySubscriptionTracker mSubscriptionTracker =
|
||||
mock(TelephonySubscriptionTracker.class);
|
||||
|
||||
private final ArgumentCaptor<VcnSafemodeCallback> mSafemodeCallbackCaptor =
|
||||
ArgumentCaptor.forClass(VcnSafemodeCallback.class);
|
||||
private final ArgumentCaptor<VcnSafeModeCallback> mSafeModeCallbackCaptor =
|
||||
ArgumentCaptor.forClass(VcnSafeModeCallback.class);
|
||||
|
||||
private final VcnManagementService mVcnMgmtSvc;
|
||||
|
||||
private final IVcnUnderlyingNetworkPolicyListener mMockPolicyListener =
|
||||
mock(IVcnUnderlyingNetworkPolicyListener.class);
|
||||
private final IVcnStatusCallback mMockStatusCallback = mock(IVcnStatusCallback.class);
|
||||
private final IBinder mMockIBinder = mock(IBinder.class);
|
||||
|
||||
public VcnManagementServiceTest() throws Exception {
|
||||
@@ -206,6 +210,7 @@ public class VcnManagementServiceTest {
|
||||
mVcnMgmtSvc = new VcnManagementService(mMockContext, mMockDeps);
|
||||
|
||||
doReturn(mMockIBinder).when(mMockPolicyListener).asBinder();
|
||||
doReturn(mMockIBinder).when(mMockStatusCallback).asBinder();
|
||||
|
||||
// Make sure the profiles are loaded.
|
||||
mTestLooper.dispatchAll();
|
||||
@@ -708,7 +713,7 @@ public class VcnManagementServiceTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testVcnSafemodeCallbackOnEnteredSafemode() throws Exception {
|
||||
public void testVcnSafeModeCallbackOnEnteredSafeMode() throws Exception {
|
||||
TelephonySubscriptionSnapshot snapshot =
|
||||
triggerSubscriptionTrackerCbAndGetSnapshot(Collections.singleton(TEST_UUID_1));
|
||||
verify(mMockDeps)
|
||||
@@ -717,14 +722,60 @@ public class VcnManagementServiceTest {
|
||||
eq(TEST_UUID_1),
|
||||
eq(TEST_VCN_CONFIG),
|
||||
eq(snapshot),
|
||||
mSafemodeCallbackCaptor.capture());
|
||||
mSafeModeCallbackCaptor.capture());
|
||||
|
||||
mVcnMgmtSvc.addVcnUnderlyingNetworkPolicyListener(mMockPolicyListener);
|
||||
|
||||
VcnSafemodeCallback safemodeCallback = mSafemodeCallbackCaptor.getValue();
|
||||
safemodeCallback.onEnteredSafemode();
|
||||
VcnSafeModeCallback safeModeCallback = mSafeModeCallbackCaptor.getValue();
|
||||
safeModeCallback.onEnteredSafeMode();
|
||||
|
||||
assertFalse(mVcnMgmtSvc.getAllVcns().get(TEST_UUID_1).isActive());
|
||||
verify(mMockPolicyListener).onPolicyChanged();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testRegisterVcnStatusCallback() throws Exception {
|
||||
mVcnMgmtSvc.registerVcnStatusCallback(TEST_UUID_1, mMockStatusCallback, TEST_PACKAGE_NAME);
|
||||
|
||||
Map<IBinder, VcnStatusCallbackInfo> callbacks = mVcnMgmtSvc.getAllStatusCallbacks();
|
||||
VcnStatusCallbackInfo cbInfo = callbacks.get(mMockIBinder);
|
||||
|
||||
assertNotNull(cbInfo);
|
||||
assertEquals(TEST_UUID_1, cbInfo.mSubGroup);
|
||||
assertEquals(mMockStatusCallback, cbInfo.mCallback);
|
||||
assertEquals(TEST_PACKAGE_NAME, cbInfo.mPkgName);
|
||||
assertEquals(TEST_UID, cbInfo.mUid);
|
||||
verify(mMockIBinder).linkToDeath(eq(cbInfo), anyInt());
|
||||
}
|
||||
|
||||
@Test(expected = IllegalStateException.class)
|
||||
public void testRegisterVcnStatusCallbackDuplicate() {
|
||||
mVcnMgmtSvc.registerVcnStatusCallback(TEST_UUID_1, mMockStatusCallback, TEST_PACKAGE_NAME);
|
||||
mVcnMgmtSvc.registerVcnStatusCallback(TEST_UUID_1, mMockStatusCallback, TEST_PACKAGE_NAME);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUnregisterVcnStatusCallback() {
|
||||
mVcnMgmtSvc.registerVcnStatusCallback(TEST_UUID_1, mMockStatusCallback, TEST_PACKAGE_NAME);
|
||||
Map<IBinder, VcnStatusCallbackInfo> callbacks = mVcnMgmtSvc.getAllStatusCallbacks();
|
||||
VcnStatusCallbackInfo cbInfo = callbacks.get(mMockIBinder);
|
||||
|
||||
mVcnMgmtSvc.unregisterVcnStatusCallback(mMockStatusCallback);
|
||||
assertTrue(mVcnMgmtSvc.getAllStatusCallbacks().isEmpty());
|
||||
verify(mMockIBinder).unlinkToDeath(eq(cbInfo), anyInt());
|
||||
}
|
||||
|
||||
@Test(expected = SecurityException.class)
|
||||
public void testRegisterVcnStatusCallbackInvalidPackage() {
|
||||
doThrow(new SecurityException()).when(mAppOpsMgr).checkPackage(TEST_UID, TEST_PACKAGE_NAME);
|
||||
|
||||
mVcnMgmtSvc.registerVcnStatusCallback(TEST_UUID_1, mMockStatusCallback, TEST_PACKAGE_NAME);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUnregisterVcnStatusCallbackNeverRegistered() {
|
||||
mVcnMgmtSvc.unregisterVcnStatusCallback(mMockStatusCallback);
|
||||
|
||||
assertTrue(mVcnMgmtSvc.getAllStatusCallbacks().isEmpty());
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user