Verify that the underlying network info will be cleared/sent or not
Add some checks to verify that the underlying network info will only be cleared when the underlying network is lost, or will only be sent when the category is not CATEGORY_EVENT_DEACTIVATED_BY_USER and CATEGORY_EVENT_ALWAYS_ON_STATE_CHANGED. Bug: 237050331 Test: atest FrameworksNetTests:VpnTest Change-Id: Ifc66658cf59481c4a9804e6933be1048f758b698
This commit is contained in:
@@ -1268,6 +1268,23 @@ public class VpnTest extends VpnTestBase {
|
||||
intent.getIntExtra(VpnManager.EXTRA_ERROR_CLASS, -1 /* defaultValue */));
|
||||
assertEquals(errorCode,
|
||||
intent.getIntExtra(VpnManager.EXTRA_ERROR_CODE, -1 /* defaultValue */));
|
||||
// CATEGORY_EVENT_DEACTIVATED_BY_USER & CATEGORY_EVENT_ALWAYS_ON_STATE_CHANGED won't
|
||||
// send NetworkCapabilities & LinkProperties to VPN app.
|
||||
// For ERROR_CODE_NETWORK_LOST, the NetworkCapabilities & LinkProperties of underlying
|
||||
// network will be cleared. So the VPN app will receive null for those 2 extra values.
|
||||
if (category.equals(VpnManager.CATEGORY_EVENT_DEACTIVATED_BY_USER)
|
||||
|| category.equals(VpnManager.CATEGORY_EVENT_ALWAYS_ON_STATE_CHANGED)
|
||||
|| errorCode == VpnManager.ERROR_CODE_NETWORK_LOST) {
|
||||
assertNull(intent.getParcelableExtra(
|
||||
VpnManager.EXTRA_UNDERLYING_NETWORK_CAPABILITIES));
|
||||
assertNull(intent.getParcelableExtra(VpnManager.EXTRA_UNDERLYING_LINK_PROPERTIES));
|
||||
} else {
|
||||
assertNotNull(intent.getParcelableExtra(
|
||||
VpnManager.EXTRA_UNDERLYING_NETWORK_CAPABILITIES));
|
||||
assertNotNull(intent.getParcelableExtra(
|
||||
VpnManager.EXTRA_UNDERLYING_LINK_PROPERTIES));
|
||||
}
|
||||
|
||||
if (profileState != null) {
|
||||
assertEquals(profileState[i], intent.getParcelableExtra(
|
||||
VpnManager.EXTRA_VPN_PROFILE_STATE, VpnProfileState.class));
|
||||
@@ -1470,6 +1487,12 @@ public class VpnTest extends VpnTestBase {
|
||||
when(mNetd.interfaceGetCfg(anyString())).thenReturn(config);
|
||||
final NetworkCallback cb = networkCallbackCaptor.getValue();
|
||||
cb.onAvailable(TEST_NETWORK);
|
||||
// Trigger onCapabilitiesChanged() and onLinkPropertiesChanged() so the test can verify that
|
||||
// if NetworkCapabilities and LinkProperties of underlying network will be sent/cleared or
|
||||
// not.
|
||||
// See verifyVpnManagerEvent().
|
||||
cb.onCapabilitiesChanged(TEST_NETWORK, new NetworkCapabilities());
|
||||
cb.onLinkPropertiesChanged(TEST_NETWORK, new LinkProperties());
|
||||
return cb;
|
||||
}
|
||||
|
||||
@@ -1488,6 +1511,11 @@ public class VpnTest extends VpnTestBase {
|
||||
when(mVpnProfileStore.get(vpn.getProfileNameForPackage(TEST_VPN_PKG)))
|
||||
.thenReturn(mVpnProfile.encode());
|
||||
|
||||
doReturn(new NetworkCapabilities()).when(mConnectivityManager)
|
||||
.getRedactedNetworkCapabilitiesForPackage(any(), anyInt(), anyString());
|
||||
doReturn(new LinkProperties()).when(mConnectivityManager)
|
||||
.getRedactedLinkPropertiesForPackage(any(), anyInt(), anyString());
|
||||
|
||||
final String sessionKey = vpn.startVpnProfile(TEST_VPN_PKG);
|
||||
final NetworkCallback cb = triggerOnAvailableAndGetCallback();
|
||||
|
||||
@@ -1518,18 +1546,18 @@ public class VpnTest extends VpnTestBase {
|
||||
if (errorType == VpnManager.ERROR_CLASS_NOT_RECOVERABLE) {
|
||||
verify(mConnectivityManager, timeout(TEST_TIMEOUT_MS))
|
||||
.unregisterNetworkCallback(eq(cb));
|
||||
} else if (errorType == VpnManager.ERROR_CLASS_RECOVERABLE) {
|
||||
} else if (errorType == VpnManager.ERROR_CLASS_RECOVERABLE
|
||||
// Vpn won't retry when there is no usable underlying network.
|
||||
&& errorCode != VpnManager.ERROR_CODE_NETWORK_LOST) {
|
||||
int retryIndex = 0;
|
||||
final IkeSessionCallback ikeCb2 = verifyRetryAndGetNewIkeCb(retryIndex++, errorCode);
|
||||
final IkeSessionCallback ikeCb2 = verifyRetryAndGetNewIkeCb(retryIndex++);
|
||||
|
||||
if (ikeCb2 != null) {
|
||||
ikeCb2.onClosedWithException(exception);
|
||||
verifyRetryAndGetNewIkeCb(retryIndex++, errorCode);
|
||||
}
|
||||
ikeCb2.onClosedWithException(exception);
|
||||
verifyRetryAndGetNewIkeCb(retryIndex++);
|
||||
}
|
||||
}
|
||||
|
||||
private IkeSessionCallback verifyRetryAndGetNewIkeCb(int retryIndex, int errorCode) {
|
||||
private IkeSessionCallback verifyRetryAndGetNewIkeCb(int retryIndex) {
|
||||
final ArgumentCaptor<Runnable> runnableCaptor =
|
||||
ArgumentCaptor.forClass(Runnable.class);
|
||||
final ArgumentCaptor<IkeSessionCallback> ikeCbCaptor =
|
||||
@@ -1542,21 +1570,15 @@ public class VpnTest extends VpnTestBase {
|
||||
// Mock the event of firing the retry task
|
||||
runnableCaptor.getValue().run();
|
||||
|
||||
// Vpn won't retry when there is no usable underlying network.
|
||||
if (errorCode == VpnManager.ERROR_CODE_NETWORK_LOST) {
|
||||
verify(mIkev2SessionCreator, never())
|
||||
.createIkeSession(any(), any(), any(), any(), ikeCbCaptor.capture(), any());
|
||||
} else {
|
||||
verify(mIkev2SessionCreator)
|
||||
.createIkeSession(any(), any(), any(), any(), ikeCbCaptor.capture(), any());
|
||||
}
|
||||
verify(mIkev2SessionCreator)
|
||||
.createIkeSession(any(), any(), any(), any(), ikeCbCaptor.capture(), any());
|
||||
|
||||
// Forget the mIkev2SessionCreator#createIkeSession call and mExecutor#schedule call
|
||||
// for the next retry verification
|
||||
resetIkev2SessionCreator(mIkeSessionWrapper);
|
||||
resetExecutor(mScheduledFuture);
|
||||
|
||||
return (ikeCbCaptor.getAllValues().size() == 0) ? null : ikeCbCaptor.getValue();
|
||||
return ikeCbCaptor.getValue();
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
Reference in New Issue
Block a user