OSDN Git Service

WifiScannerTest: More unit tests
authorRoshan Pius <rpius@google.com>
Fri, 5 Apr 2019 20:11:28 +0000 (13:11 -0700)
committerRoshan Pius <rpius@google.com>
Fri, 5 Apr 2019 22:16:56 +0000 (15:16 -0700)
Bug: 130035791
Test: ./frameworks/base/wifi/tests/runtests.sh
Change-Id: Ic4eb56fc3ba6bffd3df529432d17af0ba35b6333

tests/utils/testutils/java/com/android/internal/util/test/BidirectionalAsyncChannelServer.java
wifi/tests/src/android/net/wifi/WifiManagerTest.java
wifi/tests/src/android/net/wifi/WifiScannerTest.java

index 49c8332..ecf2716 100644 (file)
@@ -27,6 +27,7 @@ import com.android.internal.util.AsyncChannel;
 
 import java.util.HashMap;
 import java.util.Map;
+import java.util.Set;
 
 /**
  * Provides an interface for the server side implementation of a bidirectional channel as described
@@ -83,4 +84,8 @@ public class BidirectionalAsyncChannelServer {
         return mMessenger;
     }
 
+    public Set<Messenger> getClientMessengers() {
+        return mClients.keySet();
+    }
+
 }
index 37b7386..b75a1ac 100644 (file)
@@ -1593,7 +1593,7 @@ i     * Verify that a call to cancel WPS immediately returns a failure.
     }
 
     /**
-     * Test behavior of {@link WifiManager#isDualModeSupported()}
+     * Test behavior of {@link WifiManager#isDualModeSupported()} ()}
      * @throws Exception
      */
     @Test
index 949a757..dd05b47 100644 (file)
@@ -22,7 +22,9 @@ import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
+import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.validateMockitoUsage;
 import static org.mockito.Mockito.verify;
@@ -36,6 +38,7 @@ import android.net.wifi.WifiScanner.ScanSettings;
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.Message;
+import android.os.Messenger;
 import android.os.Parcel;
 import android.os.test.TestLooper;
 
@@ -78,6 +81,7 @@ public class WifiScannerTest {
     private WifiScanner mWifiScanner;
     private TestLooper mLooper;
     private Handler mHandler;
+    private BidirectionalAsyncChannelServer mBidirectionalAsyncChannelServer;
 
     /**
      * Setup before tests.
@@ -86,10 +90,10 @@ public class WifiScannerTest {
     public void setUp() throws Exception {
         MockitoAnnotations.initMocks(this);
         mLooper = new TestLooper();
-        mHandler = mock(Handler.class);
-        BidirectionalAsyncChannelServer server = new BidirectionalAsyncChannelServer(
+        mHandler = spy(new Handler(mLooper.getLooper()));
+        mBidirectionalAsyncChannelServer = new BidirectionalAsyncChannelServer(
                 mContext, mLooper.getLooper(), mHandler);
-        when(mService.getMessenger()).thenReturn(server.getMessenger());
+        when(mService.getMessenger()).thenReturn(mBidirectionalAsyncChannelServer.getMessenger());
         mWifiScanner = new WifiScanner(mContext, mService, mLooper.getLooper());
         mLooper.dispatchAll();
     }
@@ -296,6 +300,69 @@ public class WifiScannerTest {
     }
 
     /**
+     * Test behavior of {@link WifiScanner#startScan(ScanSettings, WifiScanner.ScanListener)}
+     * @throws Exception
+     */
+    @Test
+    public void testStartScanListenerOnSuccess() throws Exception {
+        ScanSettings scanSettings = new ScanSettings();
+        WifiScanner.ScanListener scanListener = mock(WifiScanner.ScanListener.class);
+
+        mWifiScanner.startScan(scanSettings, scanListener);
+        mLooper.dispatchAll();
+
+        ArgumentCaptor<Message> messageArgumentCaptor = ArgumentCaptor.forClass(Message.class);
+        verify(mHandler).handleMessage(messageArgumentCaptor.capture());
+        Message sentMessage = messageArgumentCaptor.getValue();
+        assertNotNull(sentMessage);
+
+        assertEquals(1, mBidirectionalAsyncChannelServer.getClientMessengers().size());
+        Messenger scannerMessenger =
+                mBidirectionalAsyncChannelServer.getClientMessengers().iterator().next();
+
+        Message responseMessage = Message.obtain();
+        responseMessage.what = WifiScanner.CMD_OP_SUCCEEDED;
+        responseMessage.arg2 = sentMessage.arg2;
+        scannerMessenger.send(responseMessage);
+        mLooper.dispatchAll();
+
+        verify(scanListener).onSuccess();
+    }
+
+    /**
+     * Test behavior of {@link WifiScanner#startScan(ScanSettings, WifiScanner.ScanListener)}
+     * @throws Exception
+     */
+    @Test
+    public void testStartScanListenerOnResults() throws Exception {
+        ScanSettings scanSettings = new ScanSettings();
+        WifiScanner.ScanListener scanListener = mock(WifiScanner.ScanListener.class);
+
+        mWifiScanner.startScan(scanSettings, scanListener);
+        mLooper.dispatchAll();
+
+        ArgumentCaptor<Message> messageArgumentCaptor = ArgumentCaptor.forClass(Message.class);
+        verify(mHandler).handleMessage(messageArgumentCaptor.capture());
+        Message sentMessage = messageArgumentCaptor.getValue();
+        assertNotNull(sentMessage);
+
+        assertEquals(1, mBidirectionalAsyncChannelServer.getClientMessengers().size());
+        Messenger scannerMessenger =
+                mBidirectionalAsyncChannelServer.getClientMessengers().iterator().next();
+
+        ScanResult scanResult = new ScanResult();
+        ScanData scanDatas[] = new ScanData[]{new ScanData(0, 0 , new ScanResult[] {scanResult})};
+        Message responseMessage = Message.obtain();
+        responseMessage.what = WifiScanner.CMD_SCAN_RESULT;
+        responseMessage.arg2 = sentMessage.arg2;
+        responseMessage.obj = new WifiScanner.ParcelableScanData(scanDatas);
+        scannerMessenger.send(responseMessage);
+        mLooper.dispatchAll();
+
+        verify(scanListener).onResults(scanDatas);
+    }
+
+    /**
      * Test behavior of {@link WifiScanner#startDisconnectedPnoScan(ScanSettings, PnoSettings,
      * WifiScanner.PnoScanListener)}
      * @throws Exception