1/*
2 * Copyright (C) 2017 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 com.android.server.wifi.p2p;
18
19import static org.junit.Assert.assertEquals;
20import static org.mockito.Mockito.mock;
21import static org.mockito.Mockito.spy;
22import static org.mockito.Mockito.verify;
23
24import android.os.Handler;
25import android.os.Message;
26import android.os.test.TestLooper;
27import android.test.suitebuilder.annotation.SmallTest;
28
29import com.android.server.wifi.WifiInjector;
30
31import org.junit.Before;
32import org.junit.Test;
33import org.mockito.ArgumentCaptor;
34
35/**
36 * Unit tests for {@link com.android.server.wifi.WifiP2pMonitor}.
37 */
38@SmallTest
39public class WifiP2pMonitorTest {
40    private static final String P2P_IFACE_NAME = "p2p0";
41    private static final String SECOND_P2P_IFACE_NAME = "p2p1";
42    private WifiP2pMonitor mWifiP2pMonitor;
43    private TestLooper mLooper;
44    private Handler mHandlerSpy;
45    private Handler mSecondHandlerSpy;
46
47    @Before
48    public void setUp() throws Exception {
49        mWifiP2pMonitor = new WifiP2pMonitor(mock(WifiInjector.class));
50        mLooper = new TestLooper();
51        mHandlerSpy = spy(new Handler(mLooper.getLooper()));
52        mSecondHandlerSpy = spy(new Handler(mLooper.getLooper()));
53        mWifiP2pMonitor.setMonitoring(P2P_IFACE_NAME, true);
54    }
55
56    /**
57     * Broadcast message test.
58     */
59    @Test
60    public void testBroadcastSupplicantDisconnectionEvent() {
61        mWifiP2pMonitor.registerHandler(
62                P2P_IFACE_NAME, WifiP2pMonitor.SUP_DISCONNECTION_EVENT, mHandlerSpy);
63        mWifiP2pMonitor.broadcastSupplicantDisconnectionEvent(P2P_IFACE_NAME);
64        mLooper.dispatchAll();
65
66        ArgumentCaptor<Message> messageCaptor = ArgumentCaptor.forClass(Message.class);
67        verify(mHandlerSpy).handleMessage(messageCaptor.capture());
68        assertEquals(WifiP2pMonitor.SUP_DISCONNECTION_EVENT, messageCaptor.getValue().what);
69    }
70    /**
71     * Broadcast message to two handlers test.
72     */
73    @Test
74    public void testBroadcastEventToTwoHandlers() {
75        mWifiP2pMonitor.registerHandler(
76                P2P_IFACE_NAME, WifiP2pMonitor.SUP_CONNECTION_EVENT, mHandlerSpy);
77        mWifiP2pMonitor.registerHandler(
78                P2P_IFACE_NAME, WifiP2pMonitor.SUP_CONNECTION_EVENT, mSecondHandlerSpy);
79        mWifiP2pMonitor.broadcastSupplicantConnectionEvent(P2P_IFACE_NAME);
80        mLooper.dispatchAll();
81
82        ArgumentCaptor<Message> messageCaptor = ArgumentCaptor.forClass(Message.class);
83        verify(mHandlerSpy).handleMessage(messageCaptor.capture());
84        assertEquals(WifiP2pMonitor.SUP_CONNECTION_EVENT, messageCaptor.getValue().what);
85        verify(mSecondHandlerSpy).handleMessage(messageCaptor.capture());
86        assertEquals(WifiP2pMonitor.SUP_CONNECTION_EVENT, messageCaptor.getValue().what);
87    }
88    /**
89     * Broadcast message when iface is null.
90     */
91    @Test
92    public void testBroadcastEventWhenIfaceIsNull() {
93        mWifiP2pMonitor.registerHandler(
94                P2P_IFACE_NAME, WifiP2pMonitor.SUP_DISCONNECTION_EVENT, mHandlerSpy);
95        mWifiP2pMonitor.broadcastSupplicantDisconnectionEvent(null);
96        mLooper.dispatchAll();
97
98        ArgumentCaptor<Message> messageCaptor = ArgumentCaptor.forClass(Message.class);
99        verify(mHandlerSpy).handleMessage(messageCaptor.capture());
100        assertEquals(WifiP2pMonitor.SUP_DISCONNECTION_EVENT, messageCaptor.getValue().what);
101    }
102    /**
103     * Broadcast message when iface handler is null.
104     */
105    @Test
106    public void testBroadcastEventWhenIfaceHandlerIsNull() {
107        mWifiP2pMonitor.registerHandler(
108                P2P_IFACE_NAME, WifiP2pMonitor.SUP_DISCONNECTION_EVENT, mHandlerSpy);
109        mWifiP2pMonitor.broadcastSupplicantDisconnectionEvent(SECOND_P2P_IFACE_NAME);
110        mLooper.dispatchAll();
111
112        ArgumentCaptor<Message> messageCaptor = ArgumentCaptor.forClass(Message.class);
113        verify(mHandlerSpy).handleMessage(messageCaptor.capture());
114        assertEquals(WifiP2pMonitor.SUP_DISCONNECTION_EVENT, messageCaptor.getValue().what);
115    }
116}
117