1d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski/* 2d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski * Copyright (C) 2017 The Android Open Source Project 3d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski * 4d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski * Licensed under the Apache License, Version 2.0 (the "License"); 5d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski * you may not use this file except in compliance with the License. 6d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski * You may obtain a copy of the License at 7d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski * 8d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski * http://www.apache.org/licenses/LICENSE-2.0 9d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski * 10d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski * Unless required by applicable law or agreed to in writing, software 11d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski * distributed under the License is distributed on an "AS IS" BASIS, 12d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski * See the License for the specific language governing permissions and 14d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski * limitations under the License. 15d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski */ 16163f9765f9e4c3f868b1e0d630b6adeaa115fb4aRoshan Piuspackage com.android.server.wifi.p2p; 17d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski 18d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowskiimport static org.junit.Assert.*; 19d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowskiimport static org.mockito.Matchers.*; 20d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowskiimport static org.mockito.Mockito.doAnswer; 21d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowskiimport static org.mockito.Mockito.mock; 22d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowskiimport static org.mockito.Mockito.never; 23d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowskiimport static org.mockito.Mockito.times; 24d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowskiimport static org.mockito.Mockito.verify; 25d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski 26d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowskiimport android.app.test.MockAnswerUtil.AnswerWithArguments; 27d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowskiimport android.hardware.wifi.supplicant.V1_0.ISupplicantP2pIfaceCallback; 28d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowskiimport android.hardware.wifi.supplicant.V1_0.WpsConfigMethods; 29d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowskiimport android.net.wifi.WpsInfo; 30d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowskiimport android.net.wifi.p2p.WifiP2pConfig; 31d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowskiimport android.net.wifi.p2p.WifiP2pDevice; 32d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowskiimport android.net.wifi.p2p.WifiP2pGroup; 337f7b374b3e75a929ab0d46426daf9a5e92c2d85bRoshan Piusimport android.net.wifi.p2p.WifiP2pProvDiscEvent; 34c5f4b2597df6284d35d2f3af8fb35f72e140c5a7Glen Kuhneimport android.net.wifi.p2p.nsd.WifiP2pServiceResponse; 35d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski 367e9eafab778c3920732a965ca9a0b330c6c676d6Glen Kuhneimport com.android.server.wifi.util.NativeUtil; 377e9eafab778c3920732a965ca9a0b330c6c676d6Glen Kuhne 38d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowskiimport org.junit.Assert.*; 39d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowskiimport org.junit.Before; 40d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowskiimport org.junit.Test; 417f7b374b3e75a929ab0d46426daf9a5e92c2d85bRoshan Piusimport org.mockito.ArgumentCaptor; 42d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowskiimport org.mockito.MockitoAnnotations; 43d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski 44d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowskiimport java.util.ArrayList; 45d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowskiimport java.util.HashSet; 46c5f4b2597df6284d35d2f3af8fb35f72e140c5a7Glen Kuhneimport java.util.List; 47c5f4b2597df6284d35d2f3af8fb35f72e140c5a7Glen Kuhne 48d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski 49d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski/** 50d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski * Unit tests for SupplicantP2pIfaceCallback 51d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski */ 52d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowskipublic class SupplicantP2pIfaceCallbackTest { 53d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski private static final String TAG = "SupplicantP2pIfaceCallbackTest"; 54d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski 55d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski private String mIface = "test_p2p0"; 56163f9765f9e4c3f868b1e0d630b6adeaa115fb4aRoshan Pius private WifiP2pMonitor mMonitor; 57d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski private SupplicantP2pIfaceCallback mDut; 58d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski 59d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski private byte[] mDeviceAddressInvalid1 = { 0x00 }; 60d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski private byte[] mDeviceAddressInvalid2 = { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66 }; 61d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski private byte[] mDeviceAddress1Bytes = { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55 }; 62d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski private String mDeviceAddress1String = "00:11:22:33:44:55"; 63d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski private byte[] mDeviceAddress2Bytes = { 0x01, 0x12, 0x23, 0x34, 0x45, 0x56 }; 64d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski private String mDeviceAddress2String = "01:12:23:34:45:56"; 65d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski private byte[] mDeviceInfoBytes = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05 }; 667f7b374b3e75a929ab0d46426daf9a5e92c2d85bRoshan Pius private static final byte[] DEVICE_ADDRESS = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05 }; 67d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski 68d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski private class SupplicantP2pIfaceCallbackSpy extends SupplicantP2pIfaceCallback { 69163f9765f9e4c3f868b1e0d630b6adeaa115fb4aRoshan Pius SupplicantP2pIfaceCallbackSpy(String iface, WifiP2pMonitor monitor) { 70d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski super(iface, monitor); 71d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski } 72d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski } 73d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski 74d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski @Before 75d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski public void setUp() throws Exception { 76d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski MockitoAnnotations.initMocks(this); 77163f9765f9e4c3f868b1e0d630b6adeaa115fb4aRoshan Pius mMonitor = mock(WifiP2pMonitor.class); 78d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski mDut = new SupplicantP2pIfaceCallbackSpy(mIface, mMonitor); 79d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski } 80d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski 81d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski /** 82d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski * Sunny day scenario for onDeviceFound call. 83d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski */ 84d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski @Test 85d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski public void testOnDeviceFound_success() throws Exception { 865bf1c66cfc5099801abe53fd54cef661740b24b5Glen Kuhne byte[] fakePrimaryDeviceTypeBytes = { 0x00, 0x01, 0x02, -1, 0x04, 0x05, 0x06, 0x07 }; 875bf1c66cfc5099801abe53fd54cef661740b24b5Glen Kuhne String fakePrimaryDeviceTypeString = "1-02FF0405-1543"; 88d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski String fakeDeviceName = "test device name"; 89d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski short fakeConfigMethods = 0x1234; 90d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski byte fakeCapabilities = 123; 91d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski int fakeGroupCapabilities = 456; 92d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski 93d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski doAnswer(new AnswerWithArguments() { 94d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski public void answer(String iface, WifiP2pDevice device) { 95d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski // NOTE: mDeviceAddress1Bytes seems to be ignored by 96d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski // legacy implementation of WifiP2pDevice. 97d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski assertEquals(iface, mIface); 98d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski assertEquals(device.deviceName, fakeDeviceName); 99d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski assertEquals(device.primaryDeviceType, fakePrimaryDeviceTypeString); 100d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski assertEquals(device.deviceCapability, fakeCapabilities); 101d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski assertEquals(device.groupCapability, fakeGroupCapabilities); 102d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski assertEquals(device.wpsConfigMethodsSupported, fakeConfigMethods); 103d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski assertEquals(device.deviceAddress, mDeviceAddress2String); 104d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski assertEquals(device.status, WifiP2pDevice.AVAILABLE); 105d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski } 106d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski }) 107d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski .when(mMonitor).broadcastP2pDeviceFound( 108d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski anyString(), any(WifiP2pDevice.class)); 109d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski 110d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski mDut.onDeviceFound( 111d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski mDeviceAddress1Bytes, mDeviceAddress2Bytes, 112d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski fakePrimaryDeviceTypeBytes, 113d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski fakeDeviceName, fakeConfigMethods, 114d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski fakeCapabilities, fakeGroupCapabilities, 115d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski mDeviceInfoBytes); 116d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski 117d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski mDut.onDeviceFound( 118d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski mDeviceAddress1Bytes, mDeviceAddress2Bytes, 119d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski fakePrimaryDeviceTypeBytes, 120d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski fakeDeviceName, fakeConfigMethods, 121d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski fakeCapabilities, fakeGroupCapabilities, 122d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski null); 123d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski 124d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski // Make sure we issued a broadcast each time. 125d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski verify(mMonitor, times(2)).broadcastP2pDeviceFound( 126d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski anyString(), any(WifiP2pDevice.class)); 127d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski } 128d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski 129d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski /** 130d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski * Failing scenarios for onDeviceFound call. 131d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski */ 132d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski @Test 133d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski public void testOnDeviceFound_invalidArguments() throws Exception { 1345bf1c66cfc5099801abe53fd54cef661740b24b5Glen Kuhne byte[] fakePrimaryDeviceTypeBytes = { 0x0, 0x01, 0x02, -1, 0x04, 0x05, 0x06, 0x07 }; 1355bf1c66cfc5099801abe53fd54cef661740b24b5Glen Kuhne String fakePrimaryDeviceTypeString = "1-02FF0405-1543"; 136d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski String fakeDeviceName = "test device name"; 137d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski short fakeConfigMethods = 0x1234; 138d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski byte fakeCapabilities = 123; 139d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski int fakeGroupCapabilities = 456; 140d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski 141d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski mDut.onDeviceFound( 142d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski mDeviceAddress2Bytes, null, 143d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski fakePrimaryDeviceTypeBytes, 144d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski fakeDeviceName, fakeConfigMethods, 145d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski fakeCapabilities, fakeGroupCapabilities, 146d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski mDeviceInfoBytes); 147d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski verify(mMonitor, never()).broadcastP2pDeviceFound( 148d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski anyString(), any(WifiP2pDevice.class)); 149d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski 150d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski 151d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski mDut.onDeviceFound( 152d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski mDeviceAddress1Bytes, mDeviceAddress2Bytes, 153d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski null, 154d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski fakeDeviceName, fakeConfigMethods, 155d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski fakeCapabilities, fakeGroupCapabilities, 156d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski mDeviceInfoBytes); 157d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski verify(mMonitor, never()).broadcastP2pDeviceFound( 158d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski anyString(), any(WifiP2pDevice.class)); 159d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski 160d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski 161d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski mDut.onDeviceFound( 162d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski mDeviceAddress1Bytes, mDeviceAddress2Bytes, 163d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski fakePrimaryDeviceTypeBytes, 164d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski null, fakeConfigMethods, 165d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski fakeCapabilities, fakeGroupCapabilities, 166d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski mDeviceInfoBytes); 167d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski verify(mMonitor, never()).broadcastP2pDeviceFound( 168d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski anyString(), any(WifiP2pDevice.class)); 169d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski 170d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski 171d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski mDut.onDeviceFound( 172d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski mDeviceAddress1Bytes, mDeviceAddressInvalid1, 173d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski fakePrimaryDeviceTypeBytes, 174d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski null, fakeConfigMethods, 175d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski fakeCapabilities, fakeGroupCapabilities, 176d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski mDeviceInfoBytes); 177d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski verify(mMonitor, never()).broadcastP2pDeviceFound( 178d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski anyString(), any(WifiP2pDevice.class)); 179d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski 180d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski 181d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski mDut.onDeviceFound( 182d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski mDeviceAddress1Bytes, mDeviceAddressInvalid2, 183d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski fakePrimaryDeviceTypeBytes, 184d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski null, fakeConfigMethods, 185d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski fakeCapabilities, fakeGroupCapabilities, 186d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski mDeviceInfoBytes); 187d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski verify(mMonitor, never()).broadcastP2pDeviceFound( 188d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski anyString(), any(WifiP2pDevice.class)); 189d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski } 190d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski 191d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski /** 192d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski * Sunny day scenario for onDeviceLost call. 193d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski */ 194d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski @Test 195d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski public void testOnDeviceLost_success() throws Exception { 196d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski doAnswer(new AnswerWithArguments() { 197d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski public void answer(String iface, WifiP2pDevice device) { 198d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski assertEquals(iface, mIface); 199d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski assertEquals(device.deviceAddress, mDeviceAddress1String); 200d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski assertEquals(device.status, WifiP2pDevice.UNAVAILABLE); 201d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski } 202d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski }) 203d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski .when(mMonitor).broadcastP2pDeviceLost( 204d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski anyString(), any(WifiP2pDevice.class)); 205d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski 206d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski mDut.onDeviceLost(mDeviceAddress1Bytes); 207d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski 208d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski // Make sure we issued a broadcast each time. 209d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski verify(mMonitor, times(1)).broadcastP2pDeviceLost( 210d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski anyString(), any(WifiP2pDevice.class)); 211d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski } 212d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski 213d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski /** 214d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski * Failing scenarios for onDeviceLost call. 215d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski */ 216d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski @Test 217d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski public void testOnDeviceLost_invalidArguments() throws Exception { 218d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski mDut.onDeviceLost(null); 219d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski verify(mMonitor, never()).broadcastP2pDeviceLost( 220d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski anyString(), any(WifiP2pDevice.class)); 221d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski 222d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski mDut.onDeviceLost(mDeviceAddressInvalid1); 223d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski verify(mMonitor, never()).broadcastP2pDeviceLost( 224d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski anyString(), any(WifiP2pDevice.class)); 225d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski 226d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski mDut.onDeviceLost(mDeviceAddressInvalid2); 227d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski verify(mMonitor, never()).broadcastP2pDeviceLost( 228d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski anyString(), any(WifiP2pDevice.class)); 229d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski } 230d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski 231d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski /** 232d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski * Sunny day scenario for onGoNegotiationRequest call. 233d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski */ 234d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski @Test 235d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski public void testOnGoNegotiationRequest_success() throws Exception { 236d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski HashSet<Integer> setups = new HashSet<Integer>(); 237d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski 238d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski doAnswer(new AnswerWithArguments() { 239d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski public void answer(String iface, WifiP2pConfig config) { 240d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski assertEquals(iface, mIface); 241d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski assertNotNull(config.wps); 242d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski setups.add(config.wps.setup); 243d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski assertEquals(config.deviceAddress, mDeviceAddress1String); 244d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski } 245d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski }) 246d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski .when(mMonitor).broadcastP2pGoNegotiationRequest( 247d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski anyString(), any(WifiP2pConfig.class)); 248d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski 249d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski mDut.onGoNegotiationRequest(mDeviceAddress1Bytes, 250d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski (short)ISupplicantP2pIfaceCallback.WpsDevPasswordId.USER_SPECIFIED); 251d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski assertTrue(setups.contains(WpsInfo.DISPLAY)); 252d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski 253d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski mDut.onGoNegotiationRequest(mDeviceAddress1Bytes, 254d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski (short)ISupplicantP2pIfaceCallback.WpsDevPasswordId.PUSHBUTTON); 255d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski assertTrue(setups.contains(WpsInfo.PBC)); 256d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski 257d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski mDut.onGoNegotiationRequest(mDeviceAddress1Bytes, 258d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski (short)ISupplicantP2pIfaceCallback.WpsDevPasswordId.REGISTRAR_SPECIFIED); 259d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski assertTrue(setups.contains(WpsInfo.KEYPAD)); 260d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski 261d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski // Invalid should default to PBC 262d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski setups.clear(); 263d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski mDut.onGoNegotiationRequest(mDeviceAddress1Bytes, (short)0xffff); 264d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski assertTrue(setups.contains(WpsInfo.PBC)); 265d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski } 266d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski 267d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski /** 268d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski * Failing scenarios for onGoNegotiationRequest call. 269d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski */ 270d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski @Test 271d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski public void testOnGoNegotiationRequest_invalidArguments() throws Exception { 272d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski mDut.onGoNegotiationRequest(null, (short)0); 273d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski verify(mMonitor, never()).broadcastP2pDeviceLost( 274d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski anyString(), any(WifiP2pDevice.class)); 275d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski 276d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski mDut.onGoNegotiationRequest(mDeviceAddressInvalid1, (short)0); 277d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski verify(mMonitor, never()).broadcastP2pDeviceLost( 278d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski anyString(), any(WifiP2pDevice.class)); 279d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski 280d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski mDut.onGoNegotiationRequest(mDeviceAddressInvalid2, (short)0); 281d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski verify(mMonitor, never()).broadcastP2pDeviceLost( 282d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski anyString(), any(WifiP2pDevice.class)); 283d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski } 284d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski 285d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski /** 286d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski * Sunny day scenario for onGroupStarted call. 287d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski */ 288d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski @Test 289d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski public void testOnGroupStarted_success() throws Exception { 290d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski String fakeName = "group name"; 291d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski String fakePassphrase = "secret"; 292d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski ArrayList<Byte> fakeSsidBytesList = new ArrayList<Byte>() {{ 293d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski add((byte)0x30); 294d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski add((byte)0x31); 295d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski add((byte)0x32); 296d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski add((byte)0x33); 297d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski }}; 298d5a56317c4697aab6fc8c277ba33dbce6542db79Roshan Pius String fakeSsidString = "0123"; 299d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski HashSet<String> passwords = new HashSet<String>(); 300d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski 301d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski doAnswer(new AnswerWithArguments() { 302d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski public void answer(String iface, WifiP2pGroup group) { 303d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski assertEquals(iface, mIface); 304d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski assertNotNull(group.getOwner()); 305d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski assertEquals(group.getOwner().deviceAddress, mDeviceAddress1String); 306d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski assertEquals(group.getNetworkId(), WifiP2pGroup.PERSISTENT_NET_ID); 307d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski passwords.add(group.getPassphrase()); 308d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski assertEquals(group.getInterface(), fakeName); 309d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski assertEquals(group.getNetworkName(), fakeSsidString); 310d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski } 311d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski }) 312d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski .when(mMonitor).broadcastP2pGroupStarted( 313d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski anyString(), any(WifiP2pGroup.class)); 314d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski 315d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski mDut.onGroupStarted( 316d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski fakeName, true, fakeSsidBytesList, 1, null, fakePassphrase, 317d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski mDeviceAddress1Bytes, true); 318d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski assertTrue(passwords.contains(fakePassphrase)); 319d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski 320d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski mDut.onGroupStarted( 321d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski fakeName, true, fakeSsidBytesList, 1, null, null, 322d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski mDeviceAddress1Bytes, true); 323d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski assertTrue(passwords.contains(null)); 324d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski 325d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski verify(mMonitor, times(2)).broadcastP2pGroupStarted( 326d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski anyString(), any(WifiP2pGroup.class)); 327d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski } 328d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski 329d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski /** 330d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski * Failing scenarios for onGroupStarted call. 331d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski */ 332d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski @Test 333d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski public void testOnGroupStarted_invalidArguments() throws Exception { 334d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski String fakeName = "group name"; 335d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski String fakePassphrase = "secret"; 336d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski ArrayList<Byte> fakeSsidBytesList = new ArrayList<Byte>() {{ 337d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski add((byte)0x30); 338d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski add((byte)0x31); 339d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski add((byte)0x32); 340d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski add((byte)0x33); 341d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski }}; 342d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski String fakeSsidString = "0123"; 343d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski 344d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski mDut.onGroupStarted( 345d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski null, true, fakeSsidBytesList, 1, null, fakePassphrase, 346d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski mDeviceAddress1Bytes, true); 347d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski verify(mMonitor, never()).broadcastP2pGroupStarted( 348d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski anyString(), any(WifiP2pGroup.class)); 349d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski 350d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski mDut.onGroupStarted( 351d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski fakeName, true, null, 1, null, fakePassphrase, 352d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski mDeviceAddress1Bytes, true); 353d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski verify(mMonitor, never()).broadcastP2pGroupStarted( 354d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski anyString(), any(WifiP2pGroup.class)); 355d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski 356d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski mDut.onGroupStarted( 357d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski fakeName, true, fakeSsidBytesList, 1, null, fakePassphrase, 358d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski null, true); 359d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski verify(mMonitor, never()).broadcastP2pGroupStarted( 360d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski anyString(), any(WifiP2pGroup.class)); 361d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski } 362d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski 3637f7b374b3e75a929ab0d46426daf9a5e92c2d85bRoshan Pius /** 364c5f4b2597df6284d35d2f3af8fb35f72e140c5a7Glen Kuhne * Test provision discovery callback. 3657f7b374b3e75a929ab0d46426daf9a5e92c2d85bRoshan Pius */ 3667f7b374b3e75a929ab0d46426daf9a5e92c2d85bRoshan Pius @Test 367c5f4b2597df6284d35d2f3af8fb35f72e140c5a7Glen Kuhne public void testOnProvisionDiscoveryCompleted() throws Exception { 3687f7b374b3e75a929ab0d46426daf9a5e92c2d85bRoshan Pius byte[] p2pDeviceAddr = DEVICE_ADDRESS; 3697f7b374b3e75a929ab0d46426daf9a5e92c2d85bRoshan Pius boolean isRequest = false; 3707f7b374b3e75a929ab0d46426daf9a5e92c2d85bRoshan Pius byte status = ISupplicantP2pIfaceCallback.P2pProvDiscStatusCode.SUCCESS; 3717f7b374b3e75a929ab0d46426daf9a5e92c2d85bRoshan Pius short configMethods = WpsConfigMethods.DISPLAY; 3727f7b374b3e75a929ab0d46426daf9a5e92c2d85bRoshan Pius String generatedPin = "12345678"; 3737f7b374b3e75a929ab0d46426daf9a5e92c2d85bRoshan Pius 3747f7b374b3e75a929ab0d46426daf9a5e92c2d85bRoshan Pius ArgumentCaptor<WifiP2pProvDiscEvent> discEventCaptor = 3757f7b374b3e75a929ab0d46426daf9a5e92c2d85bRoshan Pius ArgumentCaptor.forClass(WifiP2pProvDiscEvent.class); 3767f7b374b3e75a929ab0d46426daf9a5e92c2d85bRoshan Pius mDut.onProvisionDiscoveryCompleted( 3777f7b374b3e75a929ab0d46426daf9a5e92c2d85bRoshan Pius p2pDeviceAddr, isRequest, status, configMethods, generatedPin); 3785a843c0d793abf48de2c77e0b1a54fded88bb018Glen Kuhne verify(mMonitor).broadcastP2pProvisionDiscoveryEnterPin( 3795a843c0d793abf48de2c77e0b1a54fded88bb018Glen Kuhne anyString(), discEventCaptor.capture()); 3805a843c0d793abf48de2c77e0b1a54fded88bb018Glen Kuhne assertEquals(WifiP2pProvDiscEvent.ENTER_PIN, discEventCaptor.getValue().event); 3815a843c0d793abf48de2c77e0b1a54fded88bb018Glen Kuhne 3825a843c0d793abf48de2c77e0b1a54fded88bb018Glen Kuhne configMethods = WpsConfigMethods.KEYPAD; 3835a843c0d793abf48de2c77e0b1a54fded88bb018Glen Kuhne mDut.onProvisionDiscoveryCompleted( 3845a843c0d793abf48de2c77e0b1a54fded88bb018Glen Kuhne p2pDeviceAddr, isRequest, status, configMethods, generatedPin); 3857f7b374b3e75a929ab0d46426daf9a5e92c2d85bRoshan Pius verify(mMonitor).broadcastP2pProvisionDiscoveryShowPin( 3867f7b374b3e75a929ab0d46426daf9a5e92c2d85bRoshan Pius anyString(), discEventCaptor.capture()); 3877f7b374b3e75a929ab0d46426daf9a5e92c2d85bRoshan Pius assertEquals(WifiP2pProvDiscEvent.SHOW_PIN, discEventCaptor.getValue().event); 3887f7b374b3e75a929ab0d46426daf9a5e92c2d85bRoshan Pius assertEquals(generatedPin, discEventCaptor.getValue().pin); 3897f7b374b3e75a929ab0d46426daf9a5e92c2d85bRoshan Pius 3905a843c0d793abf48de2c77e0b1a54fded88bb018Glen Kuhne isRequest = true; 3917f7b374b3e75a929ab0d46426daf9a5e92c2d85bRoshan Pius configMethods = WpsConfigMethods.KEYPAD; 3927f7b374b3e75a929ab0d46426daf9a5e92c2d85bRoshan Pius mDut.onProvisionDiscoveryCompleted( 3937f7b374b3e75a929ab0d46426daf9a5e92c2d85bRoshan Pius p2pDeviceAddr, isRequest, status, configMethods, generatedPin); 3945a843c0d793abf48de2c77e0b1a54fded88bb018Glen Kuhne verify(mMonitor, times(2)).broadcastP2pProvisionDiscoveryEnterPin( 3957f7b374b3e75a929ab0d46426daf9a5e92c2d85bRoshan Pius anyString(), discEventCaptor.capture()); 3967f7b374b3e75a929ab0d46426daf9a5e92c2d85bRoshan Pius assertEquals(WifiP2pProvDiscEvent.ENTER_PIN, discEventCaptor.getValue().event); 3977f7b374b3e75a929ab0d46426daf9a5e92c2d85bRoshan Pius 3985a843c0d793abf48de2c77e0b1a54fded88bb018Glen Kuhne configMethods = WpsConfigMethods.DISPLAY; 3995a843c0d793abf48de2c77e0b1a54fded88bb018Glen Kuhne mDut.onProvisionDiscoveryCompleted( 4005a843c0d793abf48de2c77e0b1a54fded88bb018Glen Kuhne p2pDeviceAddr, isRequest, status, configMethods, generatedPin); 4015a843c0d793abf48de2c77e0b1a54fded88bb018Glen Kuhne verify(mMonitor, times(2)).broadcastP2pProvisionDiscoveryShowPin( 4025a843c0d793abf48de2c77e0b1a54fded88bb018Glen Kuhne anyString(), discEventCaptor.capture()); 4035a843c0d793abf48de2c77e0b1a54fded88bb018Glen Kuhne assertEquals(WifiP2pProvDiscEvent.SHOW_PIN, discEventCaptor.getValue().event); 4045a843c0d793abf48de2c77e0b1a54fded88bb018Glen Kuhne assertEquals(generatedPin, discEventCaptor.getValue().pin); 4055a843c0d793abf48de2c77e0b1a54fded88bb018Glen Kuhne 4065a843c0d793abf48de2c77e0b1a54fded88bb018Glen Kuhne isRequest = false; 4077f7b374b3e75a929ab0d46426daf9a5e92c2d85bRoshan Pius configMethods = WpsConfigMethods.PUSHBUTTON; 4087f7b374b3e75a929ab0d46426daf9a5e92c2d85bRoshan Pius mDut.onProvisionDiscoveryCompleted( 4097f7b374b3e75a929ab0d46426daf9a5e92c2d85bRoshan Pius p2pDeviceAddr, isRequest, status, configMethods, generatedPin); 4107f7b374b3e75a929ab0d46426daf9a5e92c2d85bRoshan Pius verify(mMonitor).broadcastP2pProvisionDiscoveryPbcResponse( 4117f7b374b3e75a929ab0d46426daf9a5e92c2d85bRoshan Pius anyString(), discEventCaptor.capture()); 4127f7b374b3e75a929ab0d46426daf9a5e92c2d85bRoshan Pius assertEquals(WifiP2pProvDiscEvent.PBC_RSP, discEventCaptor.getValue().event); 4137f7b374b3e75a929ab0d46426daf9a5e92c2d85bRoshan Pius 4147f7b374b3e75a929ab0d46426daf9a5e92c2d85bRoshan Pius isRequest = true; 4157f7b374b3e75a929ab0d46426daf9a5e92c2d85bRoshan Pius mDut.onProvisionDiscoveryCompleted( 4167f7b374b3e75a929ab0d46426daf9a5e92c2d85bRoshan Pius p2pDeviceAddr, isRequest, status, configMethods, generatedPin); 4177f7b374b3e75a929ab0d46426daf9a5e92c2d85bRoshan Pius verify(mMonitor).broadcastP2pProvisionDiscoveryPbcRequest( 4187f7b374b3e75a929ab0d46426daf9a5e92c2d85bRoshan Pius anyString(), discEventCaptor.capture()); 4197f7b374b3e75a929ab0d46426daf9a5e92c2d85bRoshan Pius assertEquals(WifiP2pProvDiscEvent.PBC_REQ, discEventCaptor.getValue().event); 4207f7b374b3e75a929ab0d46426daf9a5e92c2d85bRoshan Pius } 4217e9eafab778c3920732a965ca9a0b330c6c676d6Glen Kuhne 4227e9eafab778c3920732a965ca9a0b330c6c676d6Glen Kuhne /** 4237e9eafab778c3920732a965ca9a0b330c6c676d6Glen Kuhne * Test staAuth with device address, should trigger ApStaConnected broadcast 4247e9eafab778c3920732a965ca9a0b330c6c676d6Glen Kuhne */ 4257e9eafab778c3920732a965ca9a0b330c6c676d6Glen Kuhne @Test 4267e9eafab778c3920732a965ca9a0b330c6c676d6Glen Kuhne public void testStaAuth_success() { 4277e9eafab778c3920732a965ca9a0b330c6c676d6Glen Kuhne // Trigger onStaAuthorized callback, ensure wifimonitor broadcast is sent with WifiP2pDevice 4287e9eafab778c3920732a965ca9a0b330c6c676d6Glen Kuhne // using the p2pDeviceAddress 4297e9eafab778c3920732a965ca9a0b330c6c676d6Glen Kuhne ArgumentCaptor<WifiP2pDevice> p2pDeviceCaptor = 4307e9eafab778c3920732a965ca9a0b330c6c676d6Glen Kuhne ArgumentCaptor.forClass(WifiP2pDevice.class); 4317e9eafab778c3920732a965ca9a0b330c6c676d6Glen Kuhne mDut.onStaAuthorized(mDeviceAddress1Bytes, mDeviceAddress2Bytes); 4327e9eafab778c3920732a965ca9a0b330c6c676d6Glen Kuhne verify(mMonitor).broadcastP2pApStaConnected(any(String.class), p2pDeviceCaptor.capture()); 4337e9eafab778c3920732a965ca9a0b330c6c676d6Glen Kuhne assertEquals(mDeviceAddress2String, p2pDeviceCaptor.getValue().deviceAddress); 4347e9eafab778c3920732a965ca9a0b330c6c676d6Glen Kuhne } 4357e9eafab778c3920732a965ca9a0b330c6c676d6Glen Kuhne 4367e9eafab778c3920732a965ca9a0b330c6c676d6Glen Kuhne /** 4377e9eafab778c3920732a965ca9a0b330c6c676d6Glen Kuhne * Test staAuth without device address, should trigger ApStaConnected broadcast using srcAddress 4387e9eafab778c3920732a965ca9a0b330c6c676d6Glen Kuhne */ 4397e9eafab778c3920732a965ca9a0b330c6c676d6Glen Kuhne @Test 4407e9eafab778c3920732a965ca9a0b330c6c676d6Glen Kuhne public void testStaAuth_noDeviceAddress_success() { 4417e9eafab778c3920732a965ca9a0b330c6c676d6Glen Kuhne // Trigger onStaAuthorized callback, using a zero'd p2pDeviceAddress, ensure wifimonitor 4427e9eafab778c3920732a965ca9a0b330c6c676d6Glen Kuhne // broadcast is sent with WifiP2pDevice using the srcAddress 4437e9eafab778c3920732a965ca9a0b330c6c676d6Glen Kuhne ArgumentCaptor<WifiP2pDevice> p2pDeviceCaptor = 4447e9eafab778c3920732a965ca9a0b330c6c676d6Glen Kuhne ArgumentCaptor.forClass(WifiP2pDevice.class); 4457e9eafab778c3920732a965ca9a0b330c6c676d6Glen Kuhne mDut.onStaAuthorized(mDeviceAddress1Bytes, NativeUtil.ANY_MAC_BYTES); 4467e9eafab778c3920732a965ca9a0b330c6c676d6Glen Kuhne verify(mMonitor).broadcastP2pApStaConnected(any(String.class), p2pDeviceCaptor.capture()); 4477e9eafab778c3920732a965ca9a0b330c6c676d6Glen Kuhne assertEquals(mDeviceAddress1String, p2pDeviceCaptor.getValue().deviceAddress); 4487e9eafab778c3920732a965ca9a0b330c6c676d6Glen Kuhne } 449c5f4b2597df6284d35d2f3af8fb35f72e140c5a7Glen Kuhne 450c5f4b2597df6284d35d2f3af8fb35f72e140c5a7Glen Kuhne // TLVS hex data encoded as a hex string. 451c5f4b2597df6284d35d2f3af8fb35f72e140c5a7Glen Kuhne // Taken directly from an observed supplicant service response event 452c5f4b2597df6284d35d2f3af8fb35f72e140c5a7Glen Kuhne private static final String SERV_DISC_RESP_TLVS = "1d00010100076578616d706c650b5f6166706f766572" 453c5f4b2597df6284d35d2f3af8fb35f72e140c5a7Glen Kuhne + "746370c00c001001001e000101000b5f6166706f766572746370c00c000c01074578616d706c65c0273c" 454c5f4b2597df6284d35d2f3af8fb35f72e140c5a7Glen Kuhne + "00010100096d797072696e746572045f697070c00c00100109747874766572733d311a70646c3d617070" 455c5f4b2597df6284d35d2f3af8fb35f72e140c5a7Glen Kuhne + "6c69636174696f6e2f706f73747363726970741900010100045f697070c00c000c01094d795072696e74" 456c5f4b2597df6284d35d2f3af8fb35f72e140c5a7Glen Kuhne + "6572c0275f000201000a757569643a36383539646564652d383537342d353961622d393333322d313233" 457c5f4b2597df6284d35d2f3af8fb35f72e140c5a7Glen Kuhne + "3435363738393031313a3a75726e3a736368656d61732d75706e702d6f72673a736572766963653a436f" 458c5f4b2597df6284d35d2f3af8fb35f72e140c5a7Glen Kuhne + "6e6e656374696f6e4d616e616765723a3159000201000a757569643a36383539646564652d383537342d" 459c5f4b2597df6284d35d2f3af8fb35f72e140c5a7Glen Kuhne + "353961622d393333322d3132333435363738393031313a3a75726e3a736368656d61732d75706e702d6f" 460c5f4b2597df6284d35d2f3af8fb35f72e140c5a7Glen Kuhne + "72673a736572766963653a41565472616e73706f72743a315a000201000a757569643a36383539646564" 461c5f4b2597df6284d35d2f3af8fb35f72e140c5a7Glen Kuhne + "652d383537342d353961622d393333322d3132333435363738393031313a3a75726e3a736368656d6173" 462c5f4b2597df6284d35d2f3af8fb35f72e140c5a7Glen Kuhne + "2d75706e702d6f72673a6465766963653a4d6564696152656e64657265723a313e000201000a75756964" 463c5f4b2597df6284d35d2f3af8fb35f72e140c5a7Glen Kuhne + "3a36383539646564652d383537342d353961622d393333322d3132333435363738393031313a3a75706e" 464c5f4b2597df6284d35d2f3af8fb35f72e140c5a7Glen Kuhne + "703a726f6f746465766963652d000201000a757569643a36383539646564652d383537342d353961622d" 465c5f4b2597df6284d35d2f3af8fb35f72e140c5a7Glen Kuhne + "393333322d313233343536373839303131"; 466c5f4b2597df6284d35d2f3af8fb35f72e140c5a7Glen Kuhne 467c5f4b2597df6284d35d2f3af8fb35f72e140c5a7Glen Kuhne /** 468c5f4b2597df6284d35d2f3af8fb35f72e140c5a7Glen Kuhne * Pretty basic onServiceDiscoveryResponse callback test. 469c5f4b2597df6284d35d2f3af8fb35f72e140c5a7Glen Kuhne * Mocks the callback event, passing some observed real data to it, and ensures that it returns 470c5f4b2597df6284d35d2f3af8fb35f72e140c5a7Glen Kuhne * a non-null WifiP2pServiceResponse list. 471c5f4b2597df6284d35d2f3af8fb35f72e140c5a7Glen Kuhne */ 472c5f4b2597df6284d35d2f3af8fb35f72e140c5a7Glen Kuhne @Test 473c5f4b2597df6284d35d2f3af8fb35f72e140c5a7Glen Kuhne public void testOnServiceDiscoveryResponseCompleted_success() throws Exception { 474c5f4b2597df6284d35d2f3af8fb35f72e140c5a7Glen Kuhne ArrayList<Byte> tlvs = NativeUtil.byteArrayToArrayList(hexStr2Bin(SERV_DISC_RESP_TLVS)); 475c5f4b2597df6284d35d2f3af8fb35f72e140c5a7Glen Kuhne ArgumentCaptor<List<WifiP2pServiceResponse>> respListCaptor = 476c5f4b2597df6284d35d2f3af8fb35f72e140c5a7Glen Kuhne ArgumentCaptor.forClass(List.class); 477c5f4b2597df6284d35d2f3af8fb35f72e140c5a7Glen Kuhne mDut.onServiceDiscoveryResponse( 478c5f4b2597df6284d35d2f3af8fb35f72e140c5a7Glen Kuhne mDeviceAddress1Bytes, 479c5f4b2597df6284d35d2f3af8fb35f72e140c5a7Glen Kuhne (short) 10 /* unused updateIndicator value */, 480c5f4b2597df6284d35d2f3af8fb35f72e140c5a7Glen Kuhne tlvs); 481c5f4b2597df6284d35d2f3af8fb35f72e140c5a7Glen Kuhne verify(mMonitor).broadcastP2pServiceDiscoveryResponse(anyString(), 482c5f4b2597df6284d35d2f3af8fb35f72e140c5a7Glen Kuhne respListCaptor.capture()); 483c5f4b2597df6284d35d2f3af8fb35f72e140c5a7Glen Kuhne assertNotNull(respListCaptor.getValue()); 484c5f4b2597df6284d35d2f3af8fb35f72e140c5a7Glen Kuhne } 485c5f4b2597df6284d35d2f3af8fb35f72e140c5a7Glen Kuhne 486c5f4b2597df6284d35d2f3af8fb35f72e140c5a7Glen Kuhne /** 487c5f4b2597df6284d35d2f3af8fb35f72e140c5a7Glen Kuhne * Converts hex string to byte array. 488c5f4b2597df6284d35d2f3af8fb35f72e140c5a7Glen Kuhne * 489c5f4b2597df6284d35d2f3af8fb35f72e140c5a7Glen Kuhne * @param hex hex string. if invalid, return null. 490c5f4b2597df6284d35d2f3af8fb35f72e140c5a7Glen Kuhne * @return binary data. 491c5f4b2597df6284d35d2f3af8fb35f72e140c5a7Glen Kuhne */ 492c5f4b2597df6284d35d2f3af8fb35f72e140c5a7Glen Kuhne private static byte[] hexStr2Bin(String hex) { 493c5f4b2597df6284d35d2f3af8fb35f72e140c5a7Glen Kuhne int sz = hex.length() / 2; 494c5f4b2597df6284d35d2f3af8fb35f72e140c5a7Glen Kuhne byte[] b = new byte[hex.length() / 2]; 495c5f4b2597df6284d35d2f3af8fb35f72e140c5a7Glen Kuhne for (int i = 0; i < sz; i++) { 496c5f4b2597df6284d35d2f3af8fb35f72e140c5a7Glen Kuhne try { 497c5f4b2597df6284d35d2f3af8fb35f72e140c5a7Glen Kuhne b[i] = (byte) Integer.parseInt(hex.substring(i * 2, i * 2 + 2), 16); 498c5f4b2597df6284d35d2f3af8fb35f72e140c5a7Glen Kuhne } catch (Exception e) { 499c5f4b2597df6284d35d2f3af8fb35f72e140c5a7Glen Kuhne return null; 500c5f4b2597df6284d35d2f3af8fb35f72e140c5a7Glen Kuhne } 501c5f4b2597df6284d35d2f3af8fb35f72e140c5a7Glen Kuhne } 502c5f4b2597df6284d35d2f3af8fb35f72e140c5a7Glen Kuhne return b; 503c5f4b2597df6284d35d2f3af8fb35f72e140c5a7Glen Kuhne } 504d3c761e72a5f89c81bd74889a9fec663adcc491eTomasz Wiszkowski} 505