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