1601964b92795860610262cabfc920765d174fd93Peter Qiu/*
2601964b92795860610262cabfc920765d174fd93Peter Qiu * Copyright (C) 2016 The Android Open Source Project
3601964b92795860610262cabfc920765d174fd93Peter Qiu *
4601964b92795860610262cabfc920765d174fd93Peter Qiu * Licensed under the Apache License, Version 2.0 (the "License");
5601964b92795860610262cabfc920765d174fd93Peter Qiu * you may not use this file except in compliance with the License.
6601964b92795860610262cabfc920765d174fd93Peter Qiu * You may obtain a copy of the License at
7601964b92795860610262cabfc920765d174fd93Peter Qiu *
8601964b92795860610262cabfc920765d174fd93Peter Qiu *      http://www.apache.org/licenses/LICENSE-2.0
9601964b92795860610262cabfc920765d174fd93Peter Qiu *
10601964b92795860610262cabfc920765d174fd93Peter Qiu * Unless required by applicable law or agreed to in writing, software
11601964b92795860610262cabfc920765d174fd93Peter Qiu * distributed under the License is distributed on an "AS IS" BASIS,
12601964b92795860610262cabfc920765d174fd93Peter Qiu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13601964b92795860610262cabfc920765d174fd93Peter Qiu * See the License for the specific language governing permissions and
14601964b92795860610262cabfc920765d174fd93Peter Qiu * limitations under the License.
15601964b92795860610262cabfc920765d174fd93Peter Qiu */
16601964b92795860610262cabfc920765d174fd93Peter Qiu
17601964b92795860610262cabfc920765d174fd93Peter Qiupackage android.net.wifi;
18601964b92795860610262cabfc920765d174fd93Peter Qiu
1900bbf34e3e0b12918181afc8dd6450c6d6a00004Roshan Piusimport static org.junit.Assert.assertEquals;
20601964b92795860610262cabfc920765d174fd93Peter Qiuimport static org.mockito.Mockito.mock;
21601964b92795860610262cabfc920765d174fd93Peter Qiuimport static org.mockito.Mockito.validateMockitoUsage;
22601964b92795860610262cabfc920765d174fd93Peter Qiuimport static org.mockito.Mockito.when;
23601964b92795860610262cabfc920765d174fd93Peter Qiu
24601964b92795860610262cabfc920765d174fd93Peter Qiuimport android.content.Context;
25601964b92795860610262cabfc920765d174fd93Peter Qiuimport android.os.Handler;
2600bbf34e3e0b12918181afc8dd6450c6d6a00004Roshan Piusimport android.os.Parcel;
27601964b92795860610262cabfc920765d174fd93Peter Qiuimport android.os.test.TestLooper;
28caf9b531f7a78353be575dcaa8bb7fe83c9988adEtan Cohenimport android.support.test.filters.SmallTest;
2900bbf34e3e0b12918181afc8dd6450c6d6a00004Roshan Piusimport android.net.wifi.WifiScanner.ScanSettings;
30601964b92795860610262cabfc920765d174fd93Peter Qiu
31601964b92795860610262cabfc920765d174fd93Peter Qiuimport com.android.internal.util.test.BidirectionalAsyncChannelServer;
32601964b92795860610262cabfc920765d174fd93Peter Qiu
33601964b92795860610262cabfc920765d174fd93Peter Qiuimport org.junit.After;
34601964b92795860610262cabfc920765d174fd93Peter Qiuimport org.junit.Before;
3500bbf34e3e0b12918181afc8dd6450c6d6a00004Roshan Piusimport org.junit.Test;
36601964b92795860610262cabfc920765d174fd93Peter Qiuimport org.mockito.Mock;
37601964b92795860610262cabfc920765d174fd93Peter Qiuimport org.mockito.MockitoAnnotations;
38601964b92795860610262cabfc920765d174fd93Peter Qiu
3931225c466e5146bc37a7846f67462c1bdf5b60baMichael Plass
40601964b92795860610262cabfc920765d174fd93Peter Qiu/**
41601964b92795860610262cabfc920765d174fd93Peter Qiu * Unit tests for {@link android.net.wifi.WifiScanner}.
42601964b92795860610262cabfc920765d174fd93Peter Qiu */
43601964b92795860610262cabfc920765d174fd93Peter Qiu@SmallTest
44601964b92795860610262cabfc920765d174fd93Peter Qiupublic class WifiScannerTest {
45601964b92795860610262cabfc920765d174fd93Peter Qiu    @Mock
46601964b92795860610262cabfc920765d174fd93Peter Qiu    private Context mContext;
47601964b92795860610262cabfc920765d174fd93Peter Qiu    @Mock
48601964b92795860610262cabfc920765d174fd93Peter Qiu    private IWifiScanner mService;
49601964b92795860610262cabfc920765d174fd93Peter Qiu
50601964b92795860610262cabfc920765d174fd93Peter Qiu    private WifiScanner mWifiScanner;
51601964b92795860610262cabfc920765d174fd93Peter Qiu    private TestLooper mLooper;
52601964b92795860610262cabfc920765d174fd93Peter Qiu    private Handler mHandler;
53601964b92795860610262cabfc920765d174fd93Peter Qiu
54601964b92795860610262cabfc920765d174fd93Peter Qiu    /**
55601964b92795860610262cabfc920765d174fd93Peter Qiu     * Setup before tests.
56601964b92795860610262cabfc920765d174fd93Peter Qiu     */
57601964b92795860610262cabfc920765d174fd93Peter Qiu    @Before
58601964b92795860610262cabfc920765d174fd93Peter Qiu    public void setUp() throws Exception {
59601964b92795860610262cabfc920765d174fd93Peter Qiu        MockitoAnnotations.initMocks(this);
60601964b92795860610262cabfc920765d174fd93Peter Qiu        mLooper = new TestLooper();
61601964b92795860610262cabfc920765d174fd93Peter Qiu        mHandler = mock(Handler.class);
62601964b92795860610262cabfc920765d174fd93Peter Qiu        BidirectionalAsyncChannelServer server = new BidirectionalAsyncChannelServer(
63601964b92795860610262cabfc920765d174fd93Peter Qiu                mContext, mLooper.getLooper(), mHandler);
64601964b92795860610262cabfc920765d174fd93Peter Qiu        when(mService.getMessenger()).thenReturn(server.getMessenger());
65601964b92795860610262cabfc920765d174fd93Peter Qiu        mWifiScanner = new WifiScanner(mContext, mService, mLooper.getLooper());
66601964b92795860610262cabfc920765d174fd93Peter Qiu        mLooper.dispatchAll();
67601964b92795860610262cabfc920765d174fd93Peter Qiu    }
68601964b92795860610262cabfc920765d174fd93Peter Qiu
69601964b92795860610262cabfc920765d174fd93Peter Qiu    /**
70601964b92795860610262cabfc920765d174fd93Peter Qiu     * Clean up after tests.
71601964b92795860610262cabfc920765d174fd93Peter Qiu     */
72601964b92795860610262cabfc920765d174fd93Peter Qiu    @After
73601964b92795860610262cabfc920765d174fd93Peter Qiu    public void cleanup() {
74601964b92795860610262cabfc920765d174fd93Peter Qiu        validateMockitoUsage();
75601964b92795860610262cabfc920765d174fd93Peter Qiu    }
76601964b92795860610262cabfc920765d174fd93Peter Qiu
7700bbf34e3e0b12918181afc8dd6450c6d6a00004Roshan Pius    /**
7800bbf34e3e0b12918181afc8dd6450c6d6a00004Roshan Pius     * Verify parcel read/write for ScanSettings.
7900bbf34e3e0b12918181afc8dd6450c6d6a00004Roshan Pius     */
8000bbf34e3e0b12918181afc8dd6450c6d6a00004Roshan Pius    @Test
8100bbf34e3e0b12918181afc8dd6450c6d6a00004Roshan Pius    public void verifyScanSettingsParcelWithBand() throws Exception {
8200bbf34e3e0b12918181afc8dd6450c6d6a00004Roshan Pius        ScanSettings writeSettings = new ScanSettings();
8300bbf34e3e0b12918181afc8dd6450c6d6a00004Roshan Pius        writeSettings.type = WifiScanner.TYPE_LOW_POWER;
8400bbf34e3e0b12918181afc8dd6450c6d6a00004Roshan Pius        writeSettings.band = WifiScanner.WIFI_BAND_BOTH_WITH_DFS;
8500bbf34e3e0b12918181afc8dd6450c6d6a00004Roshan Pius
8600bbf34e3e0b12918181afc8dd6450c6d6a00004Roshan Pius        ScanSettings readSettings = parcelWriteRead(writeSettings);
8700bbf34e3e0b12918181afc8dd6450c6d6a00004Roshan Pius        assertEquals(readSettings.type, writeSettings.type);
8800bbf34e3e0b12918181afc8dd6450c6d6a00004Roshan Pius        assertEquals(readSettings.band, writeSettings.band);
8900bbf34e3e0b12918181afc8dd6450c6d6a00004Roshan Pius        assertEquals(0, readSettings.channels.length);
9000bbf34e3e0b12918181afc8dd6450c6d6a00004Roshan Pius    }
9100bbf34e3e0b12918181afc8dd6450c6d6a00004Roshan Pius
9200bbf34e3e0b12918181afc8dd6450c6d6a00004Roshan Pius    /**
9300bbf34e3e0b12918181afc8dd6450c6d6a00004Roshan Pius     * Verify parcel read/write for ScanSettings.
9400bbf34e3e0b12918181afc8dd6450c6d6a00004Roshan Pius     */
9500bbf34e3e0b12918181afc8dd6450c6d6a00004Roshan Pius    @Test
9600bbf34e3e0b12918181afc8dd6450c6d6a00004Roshan Pius    public void verifyScanSettingsParcelWithChannels() throws Exception {
9700bbf34e3e0b12918181afc8dd6450c6d6a00004Roshan Pius        ScanSettings writeSettings = new ScanSettings();
9800bbf34e3e0b12918181afc8dd6450c6d6a00004Roshan Pius        writeSettings.type = WifiScanner.TYPE_HIGH_ACCURACY;
9900bbf34e3e0b12918181afc8dd6450c6d6a00004Roshan Pius        writeSettings.band = WifiScanner.WIFI_BAND_UNSPECIFIED;
10000bbf34e3e0b12918181afc8dd6450c6d6a00004Roshan Pius        writeSettings.channels = new WifiScanner.ChannelSpec[] {
10100bbf34e3e0b12918181afc8dd6450c6d6a00004Roshan Pius                new WifiScanner.ChannelSpec(5),
10200bbf34e3e0b12918181afc8dd6450c6d6a00004Roshan Pius                new WifiScanner.ChannelSpec(7)
10300bbf34e3e0b12918181afc8dd6450c6d6a00004Roshan Pius        };
10400bbf34e3e0b12918181afc8dd6450c6d6a00004Roshan Pius
10500bbf34e3e0b12918181afc8dd6450c6d6a00004Roshan Pius        ScanSettings readSettings = parcelWriteRead(writeSettings);
10600bbf34e3e0b12918181afc8dd6450c6d6a00004Roshan Pius        assertEquals(writeSettings.type, readSettings.type);
10700bbf34e3e0b12918181afc8dd6450c6d6a00004Roshan Pius        assertEquals(writeSettings.band, readSettings.band);
10800bbf34e3e0b12918181afc8dd6450c6d6a00004Roshan Pius        assertEquals(2, readSettings.channels.length);
10900bbf34e3e0b12918181afc8dd6450c6d6a00004Roshan Pius        assertEquals(5, readSettings.channels[0].frequency);
11000bbf34e3e0b12918181afc8dd6450c6d6a00004Roshan Pius        assertEquals(7, readSettings.channels[1].frequency);
11100bbf34e3e0b12918181afc8dd6450c6d6a00004Roshan Pius    }
11200bbf34e3e0b12918181afc8dd6450c6d6a00004Roshan Pius
11300bbf34e3e0b12918181afc8dd6450c6d6a00004Roshan Pius    /**
11400bbf34e3e0b12918181afc8dd6450c6d6a00004Roshan Pius     * Write the provided {@link ScanSettings} to a parcel and deserialize it.
11500bbf34e3e0b12918181afc8dd6450c6d6a00004Roshan Pius     */
11600bbf34e3e0b12918181afc8dd6450c6d6a00004Roshan Pius    private static ScanSettings parcelWriteRead(ScanSettings writeSettings) throws Exception {
11700bbf34e3e0b12918181afc8dd6450c6d6a00004Roshan Pius        Parcel parcel = Parcel.obtain();
11800bbf34e3e0b12918181afc8dd6450c6d6a00004Roshan Pius        writeSettings.writeToParcel(parcel, 0);
11900bbf34e3e0b12918181afc8dd6450c6d6a00004Roshan Pius        parcel.setDataPosition(0);    // Rewind data position back to the beginning for read.
12000bbf34e3e0b12918181afc8dd6450c6d6a00004Roshan Pius        return ScanSettings.CREATOR.createFromParcel(parcel);
12100bbf34e3e0b12918181afc8dd6450c6d6a00004Roshan Pius    }
12200bbf34e3e0b12918181afc8dd6450c6d6a00004Roshan Pius
123601964b92795860610262cabfc920765d174fd93Peter Qiu}
124