summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoshan Pius <rpius@google.com>2020-06-07 00:00:41 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2020-06-07 00:00:41 +0000
commitd16232c382a531d60f677a4c70f9c653d79a7412 (patch)
treeaac736bc69cf797e671b1b7dc4de347c856f8f78
parent826e2b4eac79767923545fc68e53bf6bcbf43b29 (diff)
parentb387b81b64717c32de2fe0f6c0a5e86abfe0de9c (diff)
ClientModeImpl: Reset mTargetNetworkId on connection failure am: b387b81b64
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/opt/net/wifi/+/11753012 Change-Id: Idc054d87c52b96a1fd8a953ac7c71a1febca33d3
-rw-r--r--service/java/com/android/server/wifi/ClientModeImpl.java2
-rw-r--r--tests/wifitests/src/com/android/server/wifi/ClientModeImplTest.java71
2 files changed, 67 insertions, 6 deletions
diff --git a/service/java/com/android/server/wifi/ClientModeImpl.java b/service/java/com/android/server/wifi/ClientModeImpl.java
index b5bd479db..e10d5367e 100644
--- a/service/java/com/android/server/wifi/ClientModeImpl.java
+++ b/service/java/com/android/server/wifi/ClientModeImpl.java
@@ -3878,6 +3878,7 @@ public class ClientModeImpl extends StateMachine {
getTargetSsid(), bssid,
WifiLastResortWatchdog.FAILURE_CODE_ASSOCIATION);
}
+ mTargetNetworkId = WifiConfiguration.INVALID_NETWORK_ID;
break;
case WifiMonitor.AUTHENTICATION_FAILURE_EVENT:
stopIpClient();
@@ -5677,6 +5678,7 @@ public class ClientModeImpl extends StateMachine {
WifiLastResortWatchdog.FAILURE_CODE_AUTHENTICATION);
}
clearNetworkCachedDataIfNeeded(getTargetWifiConfiguration(), message.arg2);
+ mTargetNetworkId = WifiConfiguration.INVALID_NETWORK_ID;
break;
case WifiMonitor.SUPPLICANT_STATE_CHANGE_EVENT:
StateChangeResult stateChangeResult = (StateChangeResult) message.obj;
diff --git a/tests/wifitests/src/com/android/server/wifi/ClientModeImplTest.java b/tests/wifitests/src/com/android/server/wifi/ClientModeImplTest.java
index bc29d34b7..20766898d 100644
--- a/tests/wifitests/src/com/android/server/wifi/ClientModeImplTest.java
+++ b/tests/wifitests/src/com/android/server/wifi/ClientModeImplTest.java
@@ -1592,6 +1592,59 @@ public class ClientModeImplTest extends WifiBaseTest {
}
/**
+ * If caller tries to connect to a network that previously failed connection, the connection
+ * request should succeed.
+ *
+ * Test: Create and trigger connect to a network, then fail the connection. Now try to reconnect
+ * to the same network. Verify that connection request returns with CONNECT_NETWORK_SUCCEEDED
+ * and did trigger a new * connection.
+ */
+ @Test
+ public void connectAfterAssociationRejection() throws Exception {
+ triggerConnect();
+
+ // fail the connection.
+ mCmi.sendMessage(WifiMonitor.ASSOCIATION_REJECTION_EVENT, 0,
+ ISupplicantStaIfaceCallback.StatusCode.AP_UNABLE_TO_HANDLE_NEW_STA, sBSSID);
+ mLooper.dispatchAll();
+
+ IActionListener connectActionListener = mock(IActionListener.class);
+ mCmi.connect(null, FRAMEWORK_NETWORK_ID, mock(Binder.class), connectActionListener, 0,
+ Binder.getCallingUid());
+ mLooper.dispatchAll();
+ verify(connectActionListener).onSuccess();
+
+ // Verify that we triggered a second connection.
+ verify(mWifiNative, times(2)).connectToNetwork(eq(WIFI_IFACE_NAME), any());
+ }
+
+ /**
+ * If caller tries to connect to a network that previously failed connection, the connection
+ * request should succeed.
+ *
+ * Test: Create and trigger connect to a network, then fail the connection. Now try to reconnect
+ * to the same network. Verify that connection request returns with CONNECT_NETWORK_SUCCEEDED
+ * and did trigger a new * connection.
+ */
+ @Test
+ public void connectAfterConnectionFailure() throws Exception {
+ triggerConnect();
+
+ // fail the connection.
+ mCmi.sendMessage(WifiMonitor.NETWORK_DISCONNECTION_EVENT, FRAMEWORK_NETWORK_ID, 0, sBSSID);
+ mLooper.dispatchAll();
+
+ IActionListener connectActionListener = mock(IActionListener.class);
+ mCmi.connect(null, FRAMEWORK_NETWORK_ID, mock(Binder.class), connectActionListener, 0,
+ Binder.getCallingUid());
+ mLooper.dispatchAll();
+ verify(connectActionListener).onSuccess();
+
+ // Verify that we triggered a second connection.
+ verify(mWifiNative, times(2)).connectToNetwork(eq(WIFI_IFACE_NAME), any());
+ }
+
+ /**
* If caller tries to connect to a new network while still provisioning the current one,
* the connection attempt should succeed.
*/
@@ -2420,18 +2473,20 @@ public class ClientModeImplTest extends WifiBaseTest {
assertEquals("DisconnectedState", getCurrentState().getName());
// Simulate an AUTHENTICATION_FAILURE_EVENT, which should clear the ExtraFailureReason
- reset(mWifiConfigManager);
+ mCmi.sendMessage(ClientModeImpl.CMD_START_CONNECT, 0, 0, sBSSID);
+ mLooper.dispatchAll();
mCmi.sendMessage(WifiMonitor.AUTHENTICATION_FAILURE_EVENT, 0, 0, null);
mLooper.dispatchAll();
- verify(mWifiConfigManager).clearRecentFailureReason(eq(0));
- verify(mWifiConfigManager, never()).setRecentFailureAssociationStatus(anyInt(), anyInt());
+ verify(mWifiConfigManager, times(1)).clearRecentFailureReason(eq(0));
+ verify(mWifiConfigManager, times(1)).setRecentFailureAssociationStatus(anyInt(), anyInt());
// Simulate a NETWORK_CONNECTION_EVENT which should clear the ExtraFailureReason
- reset(mWifiConfigManager);
+ mCmi.sendMessage(ClientModeImpl.CMD_START_CONNECT, 0, 0, sBSSID);
+ mLooper.dispatchAll();
mCmi.sendMessage(WifiMonitor.NETWORK_CONNECTION_EVENT, 0, 0, null);
mLooper.dispatchAll();
- verify(mWifiConfigManager).clearRecentFailureReason(eq(0));
- verify(mWifiConfigManager, never()).setRecentFailureAssociationStatus(anyInt(), anyInt());
+ verify(mWifiConfigManager, times(2)).clearRecentFailureReason(eq(0));
+ verify(mWifiConfigManager, times(1)).setRecentFailureAssociationStatus(anyInt(), anyInt());
}
private WifiConfiguration makeLastSelectedWifiConfiguration(int lastSelectedNetworkId,
@@ -4026,6 +4081,8 @@ public class ClientModeImplTest extends WifiBaseTest {
// Verifies that WifiLastResortWatchdog be notified
// for FOURWAY_HANDSHAKE_TIMEOUT.
+ mCmi.sendMessage(ClientModeImpl.CMD_START_CONNECT, 0, 0, sBSSID);
+ mLooper.dispatchAll();
mCmi.sendMessage(WifiMonitor.NETWORK_DISCONNECTION_EVENT, 0, 15, sBSSID);
mLooper.dispatchAll();
@@ -5121,6 +5178,8 @@ public class ClientModeImplTest extends WifiBaseTest {
verify(mWifiNative, never()).removeNetworkCachedData(anyInt());
// got 4WAY_HANDSHAKE_TIMEOUT during this connection attempt
+ mCmi.sendMessage(ClientModeImpl.CMD_START_CONNECT, 0, 0, sBSSID);
+ mLooper.dispatchAll();
mCmi.sendMessage(WifiMonitor.NETWORK_DISCONNECTION_EVENT, 0, 15, sBSSID);
mLooper.dispatchAll();