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