Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 35b304d2 authored by Roshan Pius's avatar Roshan Pius
Browse files

WifiScannerTest: Add unit tests

Bug: 130035791
Test: ./frameworks/base/wifi/tests/runtests.sh
Change-Id: I7ba66213363cfd43a3c7d42e000165368dadeb8d
parent aca52813
Loading
Loading
Loading
Loading
+148 −0
Original line number Diff line number Diff line
@@ -18,10 +18,14 @@ package android.net.wifi;

import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
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.Mockito.mock;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.validateMockitoUsage;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

import android.content.Context;
@@ -29,7 +33,9 @@ import android.net.wifi.WifiScanner.PnoSettings;
import android.net.wifi.WifiScanner.PnoSettings.PnoNetwork;
import android.net.wifi.WifiScanner.ScanData;
import android.net.wifi.WifiScanner.ScanSettings;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.Parcel;
import android.os.test.TestLooper;

@@ -40,6 +46,7 @@ import com.android.internal.util.test.BidirectionalAsyncChannelServer;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;

@@ -230,4 +237,145 @@ public class WifiScannerTest {
        parcel.setDataPosition(0);    // Rewind data position back to the beginning for read.
        return ScanData.CREATOR.createFromParcel(parcel);
    }


    /**
     * Test behavior of {@link WifiScanner#startScan(ScanSettings, WifiScanner.ScanListener)}
     * @throws Exception
     */
    @Test
    public void testStartScan() 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 message = messageArgumentCaptor.getValue();
        assertNotNull(message);

        assertEquals(WifiScanner.CMD_START_SINGLE_SCAN, message.what);
        assertTrue(message.obj instanceof Bundle);
        Bundle messageBundle = (Bundle) message.obj;
        assertEquals(scanSettings,
                messageBundle.getParcelable(WifiScanner.SCAN_PARAMS_SCAN_SETTINGS_KEY));
        assertNull(messageBundle.getParcelable(WifiScanner.SCAN_PARAMS_WORK_SOURCE_KEY));
        assertEquals(mContext.getOpPackageName(),
                messageBundle.getParcelable(WifiScanner.REQUEST_PACKAGE_NAME_KEY));

    }

    /**
     * Test behavior of {@link WifiScanner#stopScan(WifiScanner.ScanListener)}
     * @throws Exception
     */
    @Test
    public void testStopScan() throws Exception {
        ScanSettings scanSettings = new ScanSettings();
        WifiScanner.ScanListener scanListener = mock(WifiScanner.ScanListener.class);

        mWifiScanner.startScan(scanSettings, scanListener);
        mLooper.dispatchAll();

        mWifiScanner.stopScan(scanListener);
        mLooper.dispatchAll();

        ArgumentCaptor<Message> messageArgumentCaptor = ArgumentCaptor.forClass(Message.class);
        verify(mHandler, times(2)).handleMessage(messageArgumentCaptor.capture());
        Message message = messageArgumentCaptor.getValue();
        assertNotNull(message);

        assertEquals(WifiScanner.CMD_STOP_SINGLE_SCAN, message.what);
        assertTrue(message.obj instanceof Bundle);
        Bundle messageBundle = (Bundle) message.obj;
        assertEquals(mContext.getOpPackageName(),
                messageBundle.getParcelable(WifiScanner.REQUEST_PACKAGE_NAME_KEY));

    }

    /**
     * Test behavior of {@link WifiScanner#startDisconnectedPnoScan(ScanSettings, PnoSettings,
     * WifiScanner.PnoScanListener)}
     * @throws Exception
     */
    @Test
    public void testStartDisconnectedPnoScan() throws Exception {
        ScanSettings scanSettings = new ScanSettings();
        PnoSettings pnoSettings = new PnoSettings();
        WifiScanner.PnoScanListener pnoScanListener = mock(WifiScanner.PnoScanListener.class);

        mWifiScanner.startDisconnectedPnoScan(scanSettings, pnoSettings, pnoScanListener);
        mLooper.dispatchAll();

        ArgumentCaptor<Message> messageArgumentCaptor = ArgumentCaptor.forClass(Message.class);
        verify(mHandler).handleMessage(messageArgumentCaptor.capture());
        Message message = messageArgumentCaptor.getValue();
        assertNotNull(message);

        assertEquals(WifiScanner.CMD_START_PNO_SCAN, message.what);
        assertTrue(message.obj instanceof Bundle);
        Bundle messageBundle = (Bundle) message.obj;
        assertEquals(scanSettings,
                messageBundle.getParcelable(WifiScanner.PNO_PARAMS_SCAN_SETTINGS_KEY));
        assertTrue(scanSettings.isPnoScan);
        assertFalse(pnoSettings.isConnected);
        assertEquals(pnoSettings,
                messageBundle.getParcelable(WifiScanner.PNO_PARAMS_PNO_SETTINGS_KEY));
    }

    /**
     * Test behavior of {@link WifiScanner#startConnectedPnoScan(ScanSettings, PnoSettings,
     * WifiScanner.PnoScanListener)}
     * @throws Exception
     */
    @Test
    public void testStartConnectedPnoScan() throws Exception {
        ScanSettings scanSettings = new ScanSettings();
        PnoSettings pnoSettings = new PnoSettings();
        WifiScanner.PnoScanListener pnoScanListener = mock(WifiScanner.PnoScanListener.class);

        mWifiScanner.startConnectedPnoScan(scanSettings, pnoSettings, pnoScanListener);
        mLooper.dispatchAll();

        ArgumentCaptor<Message> messageArgumentCaptor = ArgumentCaptor.forClass(Message.class);
        verify(mHandler).handleMessage(messageArgumentCaptor.capture());
        Message message = messageArgumentCaptor.getValue();
        assertNotNull(message);

        assertEquals(WifiScanner.CMD_START_PNO_SCAN, message.what);
        assertTrue(message.obj instanceof Bundle);
        Bundle messageBundle = (Bundle) message.obj;
        assertEquals(scanSettings,
                messageBundle.getParcelable(WifiScanner.PNO_PARAMS_SCAN_SETTINGS_KEY));
        assertTrue(scanSettings.isPnoScan);
        assertTrue(pnoSettings.isConnected);
        assertEquals(pnoSettings,
                messageBundle.getParcelable(WifiScanner.PNO_PARAMS_PNO_SETTINGS_KEY));
    }

    /**
     * Test behavior of {@link WifiScanner#stopPnoScan(WifiScanner.ScanListener)}
     * WifiScanner.PnoScanListener)}
     * @throws Exception
     */
    @Test
    public void testStopPnoScan() throws Exception {
        ScanSettings scanSettings = new ScanSettings();
        PnoSettings pnoSettings = new PnoSettings();
        WifiScanner.PnoScanListener pnoScanListener = mock(WifiScanner.PnoScanListener.class);

        mWifiScanner.startDisconnectedPnoScan(scanSettings, pnoSettings, pnoScanListener);
        mLooper.dispatchAll();
        mWifiScanner.stopPnoScan(pnoScanListener);
        mLooper.dispatchAll();

        ArgumentCaptor<Message> messageArgumentCaptor = ArgumentCaptor.forClass(Message.class);
        verify(mHandler, times(2)).handleMessage(messageArgumentCaptor.capture());
        Message message = messageArgumentCaptor.getValue();
        assertNotNull(message);

        assertEquals(WifiScanner.CMD_STOP_PNO_SCAN, message.what);
    }
}