Evaluation delay = 8 secs for explicitly selected networks

When a network was explicitly selected, the user just tapped it and
is likely waiting for it to connect. A shorter timeout is therefore
more appropriate for these.

Bug: 281970908
Test: New test in ConnectivityServiceTest
Change-Id: I99a263960cbc9292868fc4bb46a4f3b2f3c71541
This commit is contained in:
Chalard Jean
2023-06-05 19:26:17 +09:00
parent dc8df135cb
commit 0f1413395d
2 changed files with 39 additions and 15 deletions

View File

@@ -2274,12 +2274,12 @@ public class ConnectivityServiceTest {
mDestroySocketsWrapper.destroyLiveTcpSocketsByOwnerUids(ownerUids);
}
final ArrayTrackRecord<Long>.ReadHead mScheduledEvaluationTimeouts =
new ArrayTrackRecord<Long>().newReadHead();
final ArrayTrackRecord<Pair<Integer, Long>>.ReadHead mScheduledEvaluationTimeouts =
new ArrayTrackRecord<Pair<Integer, Long>>().newReadHead();
@Override
public void scheduleEvaluationTimeout(@NonNull Handler handler,
@NonNull final Network network, final long delayMs) {
mScheduledEvaluationTimeouts.add(delayMs);
mScheduledEvaluationTimeouts.add(new Pair<>(network.netId, delayMs));
super.scheduleEvaluationTimeout(handler, network, delayMs);
}
}
@@ -6153,7 +6153,7 @@ public class ConnectivityServiceTest {
}
public void doTestPreferBadWifi(final boolean avoidBadWifi,
final boolean preferBadWifi,
final boolean preferBadWifi, final boolean explicitlySelected,
@NonNull Predicate<Long> checkUnvalidationTimeout) throws Exception {
// Pretend we're on a carrier that restricts switching away from bad wifi, and
// depending on the parameter one that may indeed prefer bad wifi.
@@ -6177,10 +6177,13 @@ public class ConnectivityServiceTest {
mDefaultNetworkCallback.expectAvailableThenValidatedCallbacks(mCellAgent);
mWiFiAgent = new TestNetworkAgentWrapper(TRANSPORT_WIFI);
mWiFiAgent.explicitlySelected(explicitlySelected, false /* acceptUnvalidated */);
mWiFiAgent.connect(false);
wifiCallback.expectAvailableCallbacksUnvalidated(mWiFiAgent);
mDeps.mScheduledEvaluationTimeouts.poll(TIMEOUT_MS, t -> checkUnvalidationTimeout.test(t));
assertNotNull(mDeps.mScheduledEvaluationTimeouts.poll(TIMEOUT_MS,
t -> t.first == mWiFiAgent.getNetwork().netId
&& checkUnvalidationTimeout.test(t.second)));
if (!avoidBadWifi && preferBadWifi) {
expectUnvalidationCheckWillNotify(mWiFiAgent, NotificationType.LOST_INTERNET);
@@ -6196,27 +6199,33 @@ public class ConnectivityServiceTest {
// Starting with U this mode is no longer supported and can't actually be tested
assumeFalse(mDeps.isAtLeastU());
doTestPreferBadWifi(false /* avoidBadWifi */, false /* preferBadWifi */,
timeout -> timeout < 14_000);
false /* explicitlySelected */, timeout -> timeout < 14_000);
}
@Test
public void testPreferBadWifi_doNotAvoid_doPrefer() throws Exception {
public void testPreferBadWifi_doNotAvoid_doPrefer_notExplicit() throws Exception {
doTestPreferBadWifi(false /* avoidBadWifi */, true /* preferBadWifi */,
timeout -> timeout > 14_000);
false /* explicitlySelected */, timeout -> timeout > 14_000);
}
@Test
public void testPreferBadWifi_doNotAvoid_doPrefer_explicitlySelected() throws Exception {
doTestPreferBadWifi(false /* avoidBadWifi */, true /* preferBadWifi */,
true /* explicitlySelected */, timeout -> timeout < 14_000);
}
@Test
public void testPreferBadWifi_doAvoid_doNotPrefer() throws Exception {
// If avoidBadWifi=true, then preferBadWifi should be irrelevant. Test anyway.
doTestPreferBadWifi(true /* avoidBadWifi */, false /* preferBadWifi */,
timeout -> timeout < 14_000);
false /* explicitlySelected */, timeout -> timeout < 14_000);
}
@Test
public void testPreferBadWifi_doAvoid_doPrefer() throws Exception {
// If avoidBadWifi=true, then preferBadWifi should be irrelevant. Test anyway.
doTestPreferBadWifi(true /* avoidBadWifi */, true /* preferBadWifi */,
timeout -> timeout < 14_000);
false /* explicitlySelected */, timeout -> timeout < 14_000);
}
@Test