summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLorenzo Colitti <lorenzo@google.com>2020-06-18 07:35:50 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2020-06-18 07:35:50 +0000
commitfdbc41a2226a34d74211fde60147ea4f578d5d54 (patch)
tree7ee9295607a01cc07f8fc32836a713463cf86fa7
parentf6d4760cd5df892ba146a2e761d2f9b977fdbf82 (diff)
parent2f103a71ae976320817765addc386b476be0c87a (diff)
Merge "Transition to appropriate state after all left addresses have been cleared." into rvc-dev
-rw-r--r--src/android/net/ip/IpClient.java2
-rw-r--r--tests/integration/src/android/net/ip/IpClientIntegrationTest.java24
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 */,