WifiMonitorTest.java revision 65d8ba5dd551cd132789e8feb270dfc7998dfbdc
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;
18
19import static org.junit.Assert.assertEquals;
20import static org.junit.Assert.assertNull;
21import static org.mockito.Mockito.spy;
22import static org.mockito.Mockito.verify;
23
24import android.hardware.wifi.supplicant.V1_0.ISupplicantStaIfaceCallback.WpsConfigError;
25import android.hardware.wifi.supplicant.V1_0.ISupplicantStaIfaceCallback.WpsErrorIndication;
26import android.net.wifi.WifiManager;
27import android.os.Handler;
28import android.os.Message;
29import android.os.test.TestLooper;
30import android.test.suitebuilder.annotation.SmallTest;
31
32import com.android.server.wifi.hotspot2.AnqpEvent;
33
34import org.junit.Before;
35import org.junit.Test;
36import org.mockito.ArgumentCaptor;
37
38import java.lang.reflect.Constructor;
39
40/**
41 * Unit tests for {@link com.android.server.wifi.WifiMonitor}.
42 */
43@SmallTest
44public class WifiMonitorTest {
45    private static final String WLAN_IFACE_NAME = "wlan0";
46    private WifiMonitor mWifiMonitor;
47    private TestLooper mLooper;
48    private Handler mHandlerSpy;
49
50    @Before
51    public void setUp() throws Exception {
52        final Constructor<WifiMonitor> wifiMonitorConstructor =
53                WifiMonitor.class.getDeclaredConstructor();
54        wifiMonitorConstructor.setAccessible(true);
55        mWifiMonitor = spy(wifiMonitorConstructor.newInstance());
56        mLooper = new TestLooper();
57        mHandlerSpy = spy(new Handler(mLooper.getLooper()));
58        mWifiMonitor.setMonitoring(WLAN_IFACE_NAME, true);
59    }
60
61    /**
62     * Broadcast WPS failure event test.
63     */
64    @Test
65    public void testBroadcastWpsEventFailDueToErrorTkipOnlyProhibhited() {
66        mWifiMonitor.registerHandler(
67                WLAN_IFACE_NAME, WifiMonitor.WPS_FAIL_EVENT, mHandlerSpy);
68        mWifiMonitor.broadcastWpsFailEvent(
69                WLAN_IFACE_NAME, WpsConfigError.NO_ERROR,
70                WpsErrorIndication.SECURITY_TKIP_ONLY_PROHIBITED);
71        mLooper.dispatchAll();
72
73        ArgumentCaptor<Message> messageCaptor = ArgumentCaptor.forClass(Message.class);
74        verify(mHandlerSpy).handleMessage(messageCaptor.capture());
75        assertEquals(WifiMonitor.WPS_FAIL_EVENT, messageCaptor.getValue().what);
76        assertEquals(WifiManager.WPS_TKIP_ONLY_PROHIBITED, messageCaptor.getValue().arg1);
77    }
78
79    /**
80     * Broadcast WPS failure event test.
81     */
82    @Test
83    public void testBroadcastWpsEventFailDueToErrorWepProhibhited() {
84        mWifiMonitor.registerHandler(
85                WLAN_IFACE_NAME, WifiMonitor.WPS_FAIL_EVENT, mHandlerSpy);
86        mWifiMonitor.broadcastWpsFailEvent(
87                WLAN_IFACE_NAME, WpsConfigError.NO_ERROR,
88                WpsErrorIndication.SECURITY_WEP_PROHIBITED);
89        mLooper.dispatchAll();
90
91        ArgumentCaptor<Message> messageCaptor = ArgumentCaptor.forClass(Message.class);
92        verify(mHandlerSpy).handleMessage(messageCaptor.capture());
93        assertEquals(WifiMonitor.WPS_FAIL_EVENT, messageCaptor.getValue().what);
94        assertEquals(WifiManager.WPS_WEP_PROHIBITED, messageCaptor.getValue().arg1);
95    }
96
97    /**
98     * Broadcast WPS failure event test.
99     */
100    @Test
101    public void testBroadcastWpsEventFailDueToConfigAuthError() {
102        mWifiMonitor.registerHandler(
103                WLAN_IFACE_NAME, WifiMonitor.WPS_FAIL_EVENT, mHandlerSpy);
104        mWifiMonitor.broadcastWpsFailEvent(
105                WLAN_IFACE_NAME, WpsConfigError.DEV_PASSWORD_AUTH_FAILURE,
106                WpsErrorIndication.NO_ERROR);
107
108        mLooper.dispatchAll();
109        ArgumentCaptor<Message> messageCaptor = ArgumentCaptor.forClass(Message.class);
110        verify(mHandlerSpy).handleMessage(messageCaptor.capture());
111        assertEquals(WifiMonitor.WPS_FAIL_EVENT, messageCaptor.getValue().what);
112        assertEquals(WifiManager.WPS_AUTH_FAILURE, messageCaptor.getValue().arg1);
113    }
114
115    /**
116     * Broadcast WPS failure event test.
117     */
118    @Test
119    public void testBroadcastWpsEventFailDueToConfigPbcOverlapError() {
120        mWifiMonitor.registerHandler(
121                WLAN_IFACE_NAME, WifiMonitor.WPS_FAIL_EVENT, mHandlerSpy);
122        mWifiMonitor.broadcastWpsFailEvent(
123                WLAN_IFACE_NAME, WpsConfigError.MULTIPLE_PBC_DETECTED,
124                WpsErrorIndication.NO_ERROR);
125        mLooper.dispatchAll();
126
127        ArgumentCaptor<Message> messageCaptor = ArgumentCaptor.forClass(Message.class);
128        verify(mHandlerSpy).handleMessage(messageCaptor.capture());
129        assertEquals(WifiMonitor.WPS_FAIL_EVENT, messageCaptor.getValue().what);
130        assertEquals(WifiManager.WPS_OVERLAP_ERROR, messageCaptor.getValue().arg1);
131    }
132
133    /**
134     * Broadcast WPS failure event test.
135     */
136    @Test
137    public void testBroadcastWpsEventFailDueToConfigError() {
138        mWifiMonitor.registerHandler(
139                WLAN_IFACE_NAME, WifiMonitor.WPS_FAIL_EVENT, mHandlerSpy);
140        mWifiMonitor.broadcastWpsFailEvent(
141                WLAN_IFACE_NAME, WpsConfigError.MSG_TIMEOUT,
142                WpsErrorIndication.NO_ERROR);
143        mLooper.dispatchAll();
144
145        ArgumentCaptor<Message> messageCaptor = ArgumentCaptor.forClass(Message.class);
146        verify(mHandlerSpy).handleMessage(messageCaptor.capture());
147        assertEquals(WifiMonitor.WPS_FAIL_EVENT, messageCaptor.getValue().what);
148        assertEquals(WifiManager.ERROR, messageCaptor.getValue().arg1);
149        assertEquals(WpsConfigError.MSG_TIMEOUT, messageCaptor.getValue().arg2);
150    }
151
152    /**
153     * Broadcast WPS success event test.
154     */
155    @Test
156    public void testBroadcastWpsEventSuccess() {
157        mWifiMonitor.registerHandler(
158                WLAN_IFACE_NAME, WifiMonitor.WPS_SUCCESS_EVENT, mHandlerSpy);
159        mWifiMonitor.broadcastWpsSuccessEvent(WLAN_IFACE_NAME);
160        mLooper.dispatchAll();
161
162        ArgumentCaptor<Message> messageCaptor = ArgumentCaptor.forClass(Message.class);
163        verify(mHandlerSpy).handleMessage(messageCaptor.capture());
164        assertEquals(WifiMonitor.WPS_SUCCESS_EVENT, messageCaptor.getValue().what);
165    }
166
167    /**
168     * Broadcast WPS overlap event test.
169     */
170    @Test
171    public void testBroadcastWpsEventOverlap() {
172        mWifiMonitor.registerHandler(
173                WLAN_IFACE_NAME, WifiMonitor.WPS_OVERLAP_EVENT, mHandlerSpy);
174        mWifiMonitor.broadcastWpsOverlapEvent(WLAN_IFACE_NAME);
175        mLooper.dispatchAll();
176
177        ArgumentCaptor<Message> messageCaptor = ArgumentCaptor.forClass(Message.class);
178        verify(mHandlerSpy).handleMessage(messageCaptor.capture());
179        assertEquals(WifiMonitor.WPS_OVERLAP_EVENT, messageCaptor.getValue().what);
180    }
181
182    /**
183     * Broadcast WPS timeout event test.
184     */
185    @Test
186    public void testBroadcastWpsEventTimeout() {
187        mWifiMonitor.registerHandler(
188                WLAN_IFACE_NAME, WifiMonitor.WPS_TIMEOUT_EVENT, mHandlerSpy);
189        mWifiMonitor.broadcastWpsTimeoutEvent(WLAN_IFACE_NAME);
190        mLooper.dispatchAll();
191
192        ArgumentCaptor<Message> messageCaptor = ArgumentCaptor.forClass(Message.class);
193        verify(mHandlerSpy).handleMessage(messageCaptor.capture());
194        assertEquals(WifiMonitor.WPS_TIMEOUT_EVENT, messageCaptor.getValue().what);
195    }
196
197    /**
198     * Broadcast ANQP done event test.
199     */
200    @Test
201    public void testBroadcastAnqpDoneEvent() {
202        mWifiMonitor.registerHandler(
203                WLAN_IFACE_NAME, WifiMonitor.ANQP_DONE_EVENT, mHandlerSpy);
204        long bssid = 5;
205        mWifiMonitor.broadcastAnqpDoneEvent(WLAN_IFACE_NAME, new AnqpEvent(bssid, null));
206        mLooper.dispatchAll();
207
208        ArgumentCaptor<Message> messageCaptor = ArgumentCaptor.forClass(Message.class);
209        verify(mHandlerSpy).handleMessage(messageCaptor.capture());
210        assertEquals(WifiMonitor.ANQP_DONE_EVENT, messageCaptor.getValue().what);
211        assertEquals(bssid, ((AnqpEvent) messageCaptor.getValue().obj).getBssid());
212        assertNull(((AnqpEvent) messageCaptor.getValue().obj).getElements());
213    }
214}
215