1098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan/* 2098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan * Copyright (C) 2017 The Android Open Source Project 3098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan * 4098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan * Licensed under the Apache License, Version 2.0 (the "License"); 5098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan * you may not use this file except in compliance with the License. 6098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan * You may obtain a copy of the License at 7098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan * 8098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan * http://www.apache.org/licenses/LICENSE-2.0 9098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan * 10098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan * Unless required by applicable law or agreed to in writing, software 11098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan * distributed under the License is distributed on an "AS IS" BASIS, 12098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan * See the License for the specific language governing permissions and 14098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan * limitations under the License. 15098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan */ 16098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan 17098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Panpackage com.android.server.wifi.p2p; 18098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan 19098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Panimport static org.junit.Assert.assertEquals; 20098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Panimport static org.mockito.Mockito.mock; 21098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Panimport static org.mockito.Mockito.spy; 22098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Panimport static org.mockito.Mockito.verify; 23098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan 24098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Panimport android.os.Handler; 25098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Panimport android.os.Message; 26098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Panimport android.os.test.TestLooper; 27098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Panimport android.test.suitebuilder.annotation.SmallTest; 28098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan 29098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Panimport com.android.server.wifi.WifiInjector; 30098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan 31098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Panimport org.junit.Before; 32098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Panimport org.junit.Test; 33098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Panimport org.mockito.ArgumentCaptor; 34098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan 35098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan/** 36098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan * Unit tests for {@link com.android.server.wifi.WifiP2pMonitor}. 37098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan */ 38098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan@SmallTest 39098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Panpublic class WifiP2pMonitorTest { 40098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan private static final String P2P_IFACE_NAME = "p2p0"; 41098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan private static final String SECOND_P2P_IFACE_NAME = "p2p1"; 42098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan private WifiP2pMonitor mWifiP2pMonitor; 43098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan private TestLooper mLooper; 44098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan private Handler mHandlerSpy; 45098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan private Handler mSecondHandlerSpy; 46098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan 47098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan @Before 48098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan public void setUp() throws Exception { 49098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan mWifiP2pMonitor = new WifiP2pMonitor(mock(WifiInjector.class)); 50098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan mLooper = new TestLooper(); 51098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan mHandlerSpy = spy(new Handler(mLooper.getLooper())); 52098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan mSecondHandlerSpy = spy(new Handler(mLooper.getLooper())); 53098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan mWifiP2pMonitor.setMonitoring(P2P_IFACE_NAME, true); 54098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan } 55098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan 56098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan /** 57098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan * Broadcast message test. 58098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan */ 59098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan @Test 60098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan public void testBroadcastSupplicantDisconnectionEvent() { 61098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan mWifiP2pMonitor.registerHandler( 62098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan P2P_IFACE_NAME, WifiP2pMonitor.SUP_DISCONNECTION_EVENT, mHandlerSpy); 63098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan mWifiP2pMonitor.broadcastSupplicantDisconnectionEvent(P2P_IFACE_NAME); 64098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan mLooper.dispatchAll(); 65098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan 66098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan ArgumentCaptor<Message> messageCaptor = ArgumentCaptor.forClass(Message.class); 67098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan verify(mHandlerSpy).handleMessage(messageCaptor.capture()); 68098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan assertEquals(WifiP2pMonitor.SUP_DISCONNECTION_EVENT, messageCaptor.getValue().what); 69098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan } 70098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan /** 71098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan * Broadcast message to two handlers test. 72098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan */ 73098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan @Test 74098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan public void testBroadcastEventToTwoHandlers() { 75098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan mWifiP2pMonitor.registerHandler( 76098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan P2P_IFACE_NAME, WifiP2pMonitor.SUP_CONNECTION_EVENT, mHandlerSpy); 77098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan mWifiP2pMonitor.registerHandler( 78098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan P2P_IFACE_NAME, WifiP2pMonitor.SUP_CONNECTION_EVENT, mSecondHandlerSpy); 79098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan mWifiP2pMonitor.broadcastSupplicantConnectionEvent(P2P_IFACE_NAME); 80098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan mLooper.dispatchAll(); 81098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan 82098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan ArgumentCaptor<Message> messageCaptor = ArgumentCaptor.forClass(Message.class); 83098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan verify(mHandlerSpy).handleMessage(messageCaptor.capture()); 84098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan assertEquals(WifiP2pMonitor.SUP_CONNECTION_EVENT, messageCaptor.getValue().what); 85098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan verify(mSecondHandlerSpy).handleMessage(messageCaptor.capture()); 86098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan assertEquals(WifiP2pMonitor.SUP_CONNECTION_EVENT, messageCaptor.getValue().what); 87098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan } 88098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan /** 89098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan * Broadcast message when iface is null. 90098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan */ 91098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan @Test 92098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan public void testBroadcastEventWhenIfaceIsNull() { 93098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan mWifiP2pMonitor.registerHandler( 94098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan P2P_IFACE_NAME, WifiP2pMonitor.SUP_DISCONNECTION_EVENT, mHandlerSpy); 95098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan mWifiP2pMonitor.broadcastSupplicantDisconnectionEvent(null); 96098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan mLooper.dispatchAll(); 97098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan 98098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan ArgumentCaptor<Message> messageCaptor = ArgumentCaptor.forClass(Message.class); 99098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan verify(mHandlerSpy).handleMessage(messageCaptor.capture()); 100098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan assertEquals(WifiP2pMonitor.SUP_DISCONNECTION_EVENT, messageCaptor.getValue().what); 101098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan } 102098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan /** 103098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan * Broadcast message when iface handler is null. 104098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan */ 105098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan @Test 106098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan public void testBroadcastEventWhenIfaceHandlerIsNull() { 107098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan mWifiP2pMonitor.registerHandler( 108098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan P2P_IFACE_NAME, WifiP2pMonitor.SUP_DISCONNECTION_EVENT, mHandlerSpy); 109098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan mWifiP2pMonitor.broadcastSupplicantDisconnectionEvent(SECOND_P2P_IFACE_NAME); 110098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan mLooper.dispatchAll(); 111098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan 112098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan ArgumentCaptor<Message> messageCaptor = ArgumentCaptor.forClass(Message.class); 113098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan verify(mHandlerSpy).handleMessage(messageCaptor.capture()); 114098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan assertEquals(WifiP2pMonitor.SUP_DISCONNECTION_EVENT, messageCaptor.getValue().what); 115098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan } 116098640f533f3fc04cb49cb860f9dc45ad8a19e69Randy Pan} 117