diff options
author | Treehugger Robot <treehugger-gerrit@google.com> | 2020-06-18 05:11:11 +0000 |
---|---|---|
committer | Xiao Ma <xiaom@google.com> | 2020-06-18 05:50:46 +0000 |
commit | 2f103a71ae976320817765addc386b476be0c87a (patch) | |
tree | 1dffd29f6f2ab5ab7edcfd1f93bc18a485bc77e9 | |
parent | e213e2236fb567cbac73d92e501d428e598d9948 (diff) |
Transition to appropriate state after all left addresses have been cleared.
State machine will transit to RunningState directly after clearing all
left addresses even if the preconnection flag is enabled, that seems
incorrect to skip PreconnectingState. Rely on the preconnection flag
to determine which correct state should transit to.
Bug: 159109671
Test: atest NetworkStackIntegrationTests NetworkStackTests
Merged-In: I3d520a50f26ba7fac804c85c968013b2cb7cab91
Change-Id: I3d520a50f26ba7fac804c85c968013b2cb7cab91
-rw-r--r-- | src/android/net/ip/IpClient.java | 2 | ||||
-rw-r--r-- | tests/integration/src/android/net/ip/IpClientIntegrationTest.java | 24 |
2 files changed, 23 insertions, 3 deletions
diff --git a/src/android/net/ip/IpClient.java b/src/android/net/ip/IpClient.java index 28effd3..5d5b025 100644 --- a/src/android/net/ip/IpClient.java +++ b/src/android/net/ip/IpClient.java @@ -1772,7 +1772,7 @@ public class IpClient extends StateMachine { case EVENT_NETLINK_LINKPROPERTIES_CHANGED: handleLinkPropertiesUpdate(NO_CALLBACKS); if (readyToProceed()) { - transitionTo(mRunningState); + transitionTo(isUsingPreconnection() ? mPreconnectingState : mRunningState); } break; diff --git a/tests/integration/src/android/net/ip/IpClientIntegrationTest.java b/tests/integration/src/android/net/ip/IpClientIntegrationTest.java index 8a58fcd..f2cc2c6 100644 --- a/tests/integration/src/android/net/ip/IpClientIntegrationTest.java +++ b/tests/integration/src/android/net/ip/IpClientIntegrationTest.java @@ -1658,8 +1658,7 @@ public class IpClientIntegrationTest { HandlerUtilsKt.waitForIdle(mIpc.getHandler(), TEST_TIMEOUT_MS); } - @Test - public void testIpClientClearingIpAddressState() throws Exception { + private void doIPv4OnlyProvisioningAndExitWithLeftAddress() throws Exception { final long currentTime = System.currentTimeMillis(); performDhcpHandshake(true /* isSuccessLease */, TEST_LEASE_DURATION_S, true /* isDhcpLeaseCacheEnabled */, false /* shouldReplyRapidCommitAck */, @@ -1684,6 +1683,11 @@ public class IpClientIntegrationTest { // TODO: once IpClient gets IP addresses directly from netlink instead of from netd, it // may be sufficient to call waitForIdle to see if IpClient has seen the address. addIpAddressAndWaitForIt(mIfaceName); + } + + @Test + public void testIpClientClearingIpAddressState() throws Exception { + doIPv4OnlyProvisioningAndExitWithLeftAddress(); ProvisioningConfiguration config = new ProvisioningConfiguration.Builder() .withoutIpReachabilityMonitor() @@ -1703,6 +1707,22 @@ public class IpClientIntegrationTest { } @Test + public void testIpClientClearingIpAddressState_enablePreconnection() throws Exception { + doIPv4OnlyProvisioningAndExitWithLeftAddress(); + + // Enter ClearingIpAddressesState to clear the remaining IPv4 addresses and transition to + // PreconnectionState instead of RunningState. + startIpClientProvisioning(false /* isDhcpLeaseCacheEnabled */, + false /* shouldReplyRapidCommitAck */, true /* isDhcpPreConnectionEnabled */, + false /* isDhcpIpConflictDetectEnabled */); + assertDiscoverPacketOnPreconnectionStart(); + + // Force to enter RunningState. + mIpc.notifyPreconnectionComplete(false /* abort */); + HandlerUtilsKt.waitForIdle(mIpc.getHandler(), TEST_TIMEOUT_MS); + } + + @Test public void testDhcpClientPreconnection_success() throws Exception { doIpClientProvisioningWithPreconnectionTest(true /* shouldReplyRapidCommitAck */, false /* shouldAbortPreconnection */, false /* shouldFirePreconnectionTimeout */, |