summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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 */,