1c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wang/* 2c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wang * Copyright (C) 2016 The Android Open Source Project 3c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wang * 4c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wang * Licensed under the Apache License, Version 2.0 (the "License"); 5c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wang * you may not use this file except in compliance with the License. 6c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wang * You may obtain a copy of the License at 7c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wang * 8c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wang * http://www.apache.org/licenses/LICENSE-2.0 9c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wang * 10c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wang * Unless required by applicable law or agreed to in writing, software 11c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wang * distributed under the License is distributed on an "AS IS" BASIS, 12c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wang * See the License for the specific language governing permissions and 14c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wang * limitations under the License. 15c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wang */ 16c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wang 17a8367288377cbaed6371256ca837b7aa22280706Mitchell Willspackage android.net.wifi; 18c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wang 19c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wangimport static org.junit.Assert.assertEquals; 20c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wangimport static org.mockito.Matchers.anyString; 21c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wangimport static org.mockito.Matchers.eq; 22c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wangimport static org.mockito.Mockito.atLeastOnce; 23c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wangimport static org.mockito.Mockito.mock; 24c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wangimport static org.mockito.Mockito.validateMockitoUsage; 25c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wangimport static org.mockito.Mockito.verify; 26c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wangimport static org.mockito.Mockito.when; 27c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wang 28c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wangimport android.content.Context; 29c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wangimport android.net.wifi.WifiScanner.BssidInfo; 30c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wangimport android.net.wifi.WifiScanner.BssidListener; 31c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wangimport android.os.Handler; 32c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wangimport android.os.Message; 33c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wangimport android.test.suitebuilder.annotation.SmallTest; 34c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wang 35a8367288377cbaed6371256ca837b7aa22280706Mitchell Willsimport com.android.server.wifi.BidirectionalAsyncChannelServer; 36a8367288377cbaed6371256ca837b7aa22280706Mitchell Willsimport com.android.server.wifi.MockLooper; 37a8367288377cbaed6371256ca837b7aa22280706Mitchell Wills 38c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wangimport org.junit.After; 39c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wangimport org.junit.Before; 40c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wangimport org.junit.Test; 41c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wangimport org.mockito.ArgumentCaptor; 42c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wangimport org.mockito.Mock; 43c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wangimport org.mockito.MockitoAnnotations; 44c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wang 45c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wang/** 46a8367288377cbaed6371256ca837b7aa22280706Mitchell Wills * Unit tests for {@link android.net.wifi.WifiScanner}. 47c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wang */ 48c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wang@SmallTest 49c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wangpublic class WifiScannerTest { 50c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wang @Mock 51c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wang private Context mContext; 52c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wang @Mock 53c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wang private IWifiScanner mService; 54c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wang @Mock 55c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wang private BssidListener mBssidListener; 56c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wang 57c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wang private WifiScanner mWifiScanner; 58c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wang private MockLooper mLooper; 59c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wang private Handler mHandler; 60c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wang 61c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wang /** 62c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wang * Setup before tests. 63c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wang */ 64c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wang @Before 65c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wang public void setUp() throws Exception { 66c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wang MockitoAnnotations.initMocks(this); 67c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wang mLooper = new MockLooper(); 68c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wang mHandler = mock(Handler.class); 69c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wang BidirectionalAsyncChannelServer server = new BidirectionalAsyncChannelServer( 70c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wang mContext, mLooper.getLooper(), mHandler); 71c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wang when(mService.getMessenger()).thenReturn(server.getMessenger()); 725ccc0a429dfea8ef452f8f63454b013983eb87feMitchell Wills mWifiScanner = new WifiScanner(mContext, mService, mLooper.getLooper()); 73c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wang mLooper.dispatchAll(); 74c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wang } 75c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wang 76c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wang /** 77c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wang * Clean up after tests. 78c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wang */ 79c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wang @After 80c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wang public void cleanup() { 81c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wang validateMockitoUsage(); 82c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wang } 83c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wang 84c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wang private void verifySetHotlistMessage(Handler handler) { 85c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wang ArgumentCaptor<Message> messageCaptor = ArgumentCaptor.forClass(Message.class); 86c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wang verify(handler, atLeastOnce()).handleMessage(messageCaptor.capture()); 87c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wang assertEquals("message.what is not CMD_SET_HOTLIST", 88c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wang WifiScanner.CMD_SET_HOTLIST, 89c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wang messageCaptor.getValue().what); 90c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wang } 91c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wang 92c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wang /** 93c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wang * Test duplicate listeners for bssid tracking. 94c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wang */ 95c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wang @Test 96c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wang public void testStartTrackingBssidsDuplicateListeners() throws Exception { 97c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wang BssidInfo[] bssids = new BssidInfo[] { 98c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wang new BssidInfo() 99c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wang }; 100c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wang 101c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wang // First start tracking succeeds. 102c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wang mWifiScanner.startTrackingBssids(bssids, -100, mBssidListener); 103c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wang mLooper.dispatchAll(); 104c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wang verifySetHotlistMessage(mHandler); 105c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wang 106c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wang // Second start tracking should fail. 107c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wang mWifiScanner.startTrackingBssids(bssids, -100, mBssidListener); 108c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wang mLooper.dispatchAll(); 109c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wang verify(mBssidListener).onFailure(eq(WifiScanner.REASON_DUPLICATE_REQEUST), anyString()); 110c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wang } 111c3b22ef2e6bbccd048e1012160b75d14353ab894Wei Wang} 112