CTS: Add test for WifiManager#getCurrentNetwork()

Bug: 150236894
Test: atest android.net.wifi.cts.WifiManagerTest#testGetCurrentNetwork
Change-Id: If31d9937ec49d8a3ba648156675dc8ae0fd1c1f5
diff --git a/tests/cts/net/src/android/net/wifi/cts/WifiManagerTest.java b/tests/cts/net/src/android/net/wifi/cts/WifiManagerTest.java
index c62d3cb..9d36493 100644
--- a/tests/cts/net/src/android/net/wifi/cts/WifiManagerTest.java
+++ b/tests/cts/net/src/android/net/wifi/cts/WifiManagerTest.java
@@ -16,7 +16,7 @@
 
 package android.net.wifi.cts;
 
-import static android.net.NetworkCapabilitiesProto.TRANSPORT_WIFI;
+import static android.net.NetworkCapabilities.TRANSPORT_WIFI;
 import static android.net.wifi.WifiConfiguration.INVALID_NETWORK_ID;
 import static android.net.wifi.WifiManager.TrafficStateCallback.DATA_ACTIVITY_INOUT;
 
@@ -85,7 +85,7 @@
     private static MySync mMySync;
     private List<ScanResult> mScanResults = null;
     private NetworkInfo mNetworkInfo;
-    private Object mLock = new Object();
+    private final Object mLock = new Object();
     private UiDevice mUiDevice;
     private boolean mWasVerboseLoggingEnabled;
 
@@ -207,8 +207,8 @@
             mMySync.expectedState = STATE_NULL;
         }
 
-        List<WifiConfiguration> savedNetworks = ShellIdentityUtils.invokeMethodWithShellPermissions(
-                mWifiManager, (wm) -> wm.getConfiguredNetworks());
+        List<WifiConfiguration> savedNetworks = ShellIdentityUtils.invokeWithShellPermissions(
+                mWifiManager::getConfiguredNetworks);
         assertFalse("Need at least one saved network", savedNetworks.isEmpty());
     }
 
@@ -1195,6 +1195,7 @@
     private static class TestNetworkCallback extends ConnectivityManager.NetworkCallback {
         private final Object mLock;
         public boolean onAvailableCalled = false;
+        public Network network;
         public NetworkCapabilities networkCapabilities;
 
         TestNetworkCallback(Object lock) {
@@ -1206,6 +1207,7 @@
                 LinkProperties linkProperties, boolean blocked) {
             synchronized (mLock) {
                 onAvailableCalled = true;
+                this.network = network;
                 this.networkCapabilities = networkCapabilities;
                 mLock.notify();
             }
@@ -1580,4 +1582,53 @@
                 .getNetworkCountryIso();
         assertEquals(telephonyCountryCode, wifiCountryCode.toLowerCase(Locale.US));
     }
+
+    /**
+     * Test that {@link WifiManager#getCurrentNetwork()} returns a Network obeject consistent
+     * with {@link ConnectivityManager#registerNetworkCallback} when connected to a Wifi network,
+     * and returns null when not connected.
+     */
+    public void testGetCurrentNetwork() throws Exception {
+        if (!WifiFeature.isWifiSupported(getContext())) {
+            // skip the test if WiFi is not supported
+            return;
+        }
+
+        // wait for Wifi to be connected
+        PollingCheck.check(
+                "Wifi not connected - Please ensure there is a saved network in range of this "
+                        + "device",
+                20000,
+                () -> mWifiManager.getConnectionInfo().getNetworkId() != -1);
+
+        Network wifiCurrentNetwork = ShellIdentityUtils.invokeWithShellPermissions(
+                mWifiManager::getCurrentNetwork);
+        assertNotNull(wifiCurrentNetwork);
+
+        TestNetworkCallback networkCallbackListener = new TestNetworkCallback(mLock);
+        synchronized (mLock) {
+            try {
+                // File a request for wifi network.
+                mConnectivityManager.registerNetworkCallback(
+                        new NetworkRequest.Builder()
+                                .addTransportType(TRANSPORT_WIFI)
+                                .build(),
+                        networkCallbackListener);
+                // now wait for callback
+                mLock.wait(DURATION);
+            } catch (InterruptedException e) {
+            }
+        }
+        assertTrue(networkCallbackListener.onAvailableCalled);
+        Network connectivityCurrentNetwork = networkCallbackListener.network;
+        assertEquals(connectivityCurrentNetwork, wifiCurrentNetwork);
+
+        setWifiEnabled(false);
+        PollingCheck.check(
+                "Wifi not disconnected!",
+                20000,
+                () -> mWifiManager.getConnectionInfo().getNetworkId() == -1);
+
+        assertNull(ShellIdentityUtils.invokeWithShellPermissions(mWifiManager::getCurrentNetwork));
+    }
 }