diff options
author | Lorenzo Colitti <lorenzo@google.com> | 2020-06-18 07:35:50 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2020-06-18 07:35:50 +0000 |
commit | fdbc41a2226a34d74211fde60147ea4f578d5d54 (patch) | |
tree | 7ee9295607a01cc07f8fc32836a713463cf86fa7 | |
parent | f6d4760cd5df892ba146a2e761d2f9b977fdbf82 (diff) | |
parent | 2f103a71ae976320817765addc386b476be0c87a (diff) |
Merge "Transition to appropriate state after all left addresses have been cleared." into rvc-dev
-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 */, |