Re-evaluate network when IPsec loss exceeds the threshold
Bug: 329139898 Test: atest IpSecPacketLossDetectorTest (new tests) Change-Id: Icc31fe7f1b76e7849c910b3cd1c300bcf4c1f3a3
This commit is contained in:
parent
570a0c0c3b
commit
4e057c24f0
4 changed files with 33 additions and 0 deletions
|
|
@ -24,8 +24,10 @@ import android.content.BroadcastReceiver;
|
|||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.IntentFilter;
|
||||
import android.net.ConnectivityManager;
|
||||
import android.net.IpSecTransformState;
|
||||
import android.net.Network;
|
||||
import android.net.vcn.Flags;
|
||||
import android.net.vcn.VcnManager;
|
||||
import android.os.Handler;
|
||||
import android.os.HandlerExecutor;
|
||||
|
|
@ -71,6 +73,7 @@ public class IpSecPacketLossDetector extends NetworkMetricMonitor {
|
|||
|
||||
@NonNull private final Handler mHandler;
|
||||
@NonNull private final PowerManager mPowerManager;
|
||||
@NonNull private final ConnectivityManager mConnectivityManager;
|
||||
@NonNull private final Object mCancellationToken = new Object();
|
||||
@NonNull private final PacketLossCalculator mPacketLossCalculator;
|
||||
|
||||
|
|
@ -98,6 +101,8 @@ public class IpSecPacketLossDetector extends NetworkMetricMonitor {
|
|||
mHandler = new Handler(getVcnContext().getLooper());
|
||||
|
||||
mPowerManager = getVcnContext().getContext().getSystemService(PowerManager.class);
|
||||
mConnectivityManager =
|
||||
getVcnContext().getContext().getSystemService(ConnectivityManager.class);
|
||||
|
||||
mPacketLossCalculator = deps.getPacketLossCalculator();
|
||||
|
||||
|
|
@ -313,6 +318,13 @@ public class IpSecPacketLossDetector extends NetworkMetricMonitor {
|
|||
} else {
|
||||
logInfo(logMsg);
|
||||
onValidationResultReceivedInternal(true /* isFailed */);
|
||||
|
||||
if (Flags.validateNetworkOnIpsecLoss()) {
|
||||
// Trigger re-validation of the underlying network; if it fails, the VCN will
|
||||
// attempt to migrate away.
|
||||
mConnectivityManager.reportNetworkConnectivity(
|
||||
getNetwork(), false /* hasConnectivity */);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -203,6 +203,11 @@ public abstract class NetworkMetricMonitor implements AutoCloseable {
|
|||
return mVcnContext;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
public Network getNetwork() {
|
||||
return mNetwork;
|
||||
}
|
||||
|
||||
// Override methods for AutoCloseable. Subclasses MUST call super when overriding this method
|
||||
@Override
|
||||
public void close() {
|
||||
|
|
|
|||
|
|
@ -333,6 +333,7 @@ public class IpSecPacketLossDetectorTest extends NetworkEvaluationTestBase {
|
|||
public void testHandleLossRate_validationFail() throws Exception {
|
||||
checkHandleLossRate(
|
||||
22, true /* isLastStateExpectedToUpdate */, true /* isCallbackExpected */);
|
||||
verify(mConnectivityManager).reportNetworkConnectivity(mNetwork, false);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
|
|||
|
|
@ -26,6 +26,7 @@ import static org.mockito.Mockito.spy;
|
|||
import static org.mockito.Mockito.when;
|
||||
|
||||
import android.content.Context;
|
||||
import android.net.ConnectivityManager;
|
||||
import android.net.IpSecConfig;
|
||||
import android.net.IpSecTransform;
|
||||
import android.net.LinkProperties;
|
||||
|
|
@ -33,12 +34,14 @@ import android.net.Network;
|
|||
import android.net.NetworkCapabilities;
|
||||
import android.net.TelephonyNetworkSpecifier;
|
||||
import android.net.vcn.FeatureFlags;
|
||||
import android.net.vcn.Flags;
|
||||
import android.os.Handler;
|
||||
import android.os.IPowerManager;
|
||||
import android.os.IThermalService;
|
||||
import android.os.ParcelUuid;
|
||||
import android.os.PowerManager;
|
||||
import android.os.test.TestLooper;
|
||||
import android.platform.test.flag.junit.SetFlagsRule;
|
||||
import android.telephony.TelephonyManager;
|
||||
|
||||
import com.android.server.vcn.TelephonySubscriptionTracker.TelephonySubscriptionSnapshot;
|
||||
|
|
@ -46,6 +49,7 @@ import com.android.server.vcn.VcnContext;
|
|||
import com.android.server.vcn.VcnNetworkProvider;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Rule;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.MockitoAnnotations;
|
||||
|
||||
|
|
@ -53,6 +57,8 @@ import java.util.Set;
|
|||
import java.util.UUID;
|
||||
|
||||
public abstract class NetworkEvaluationTestBase {
|
||||
@Rule public final SetFlagsRule mSetFlagsRule = new SetFlagsRule();
|
||||
|
||||
protected static final String SSID = "TestWifi";
|
||||
protected static final String SSID_OTHER = "TestWifiOther";
|
||||
protected static final String PLMN_ID = "123456";
|
||||
|
|
@ -103,6 +109,7 @@ public abstract class NetworkEvaluationTestBase {
|
|||
@Mock protected FeatureFlags mFeatureFlags;
|
||||
@Mock protected android.net.platform.flags.FeatureFlags mCoreNetFeatureFlags;
|
||||
@Mock protected TelephonySubscriptionSnapshot mSubscriptionSnapshot;
|
||||
@Mock protected ConnectivityManager mConnectivityManager;
|
||||
@Mock protected TelephonyManager mTelephonyManager;
|
||||
@Mock protected IPowerManager mPowerManagerService;
|
||||
|
||||
|
|
@ -114,6 +121,8 @@ public abstract class NetworkEvaluationTestBase {
|
|||
public void setUp() throws Exception {
|
||||
MockitoAnnotations.initMocks(this);
|
||||
|
||||
mSetFlagsRule.enableFlags(Flags.FLAG_VALIDATE_NETWORK_ON_IPSEC_LOSS);
|
||||
|
||||
when(mNetwork.getNetId()).thenReturn(-1);
|
||||
|
||||
mTestLooper = new TestLooper();
|
||||
|
|
@ -129,6 +138,12 @@ public abstract class NetworkEvaluationTestBase {
|
|||
doReturn(true).when(mVcnContext).isFlagNetworkMetricMonitorEnabled();
|
||||
doReturn(true).when(mVcnContext).isFlagIpSecTransformStateEnabled();
|
||||
|
||||
setupSystemService(
|
||||
mContext,
|
||||
mConnectivityManager,
|
||||
Context.CONNECTIVITY_SERVICE,
|
||||
ConnectivityManager.class);
|
||||
|
||||
setupSystemService(
|
||||
mContext, mTelephonyManager, Context.TELEPHONY_SERVICE, TelephonyManager.class);
|
||||
when(mTelephonyManager.createForSubscriptionId(SUB_ID)).thenReturn(mTelephonyManager);
|
||||
|
|
|
|||
Loading…
Reference in a new issue