WifiVendorHalTest.java revision 70b995bed9674a30c56b7ae2585d5897900ff695
1b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plass/* 2b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plass * Copyright (C) 2017 The Android Open Source Project 3b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plass * 4b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plass * Licensed under the Apache License, Version 2.0 (the "License"); 5b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plass * you may not use this file except in compliance with the License. 6b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plass * You may obtain a copy of the License at 7b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plass * 8b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plass * http://www.apache.org/licenses/LICENSE-2.0 9b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plass * 10b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plass * Unless required by applicable law or agreed to in writing, software 11b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plass * distributed under the License is distributed on an "AS IS" BASIS, 12b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plass * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plass * See the License for the specific language governing permissions and 14b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plass * limitations under the License. 15b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plass */ 16b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plass 17b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plasspackage com.android.server.wifi; 18b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plass 19d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Piusimport android.app.test.MockAnswerUtil.AnswerWithArguments; 20d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Piusimport android.hardware.wifi.V1_0.IWifiApIface; 21d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Piusimport android.hardware.wifi.V1_0.IWifiChip; 22d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Piusimport android.hardware.wifi.V1_0.IWifiIface; 23d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Piusimport android.hardware.wifi.V1_0.IWifiRttController; 24d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Piusimport android.hardware.wifi.V1_0.IWifiStaIface; 25ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plassimport android.hardware.wifi.V1_0.StaApfPacketFilterCapabilities; 2653f278b6fed422a18d763b07216a21e96d9445f9Michael Plassimport android.hardware.wifi.V1_0.WifiDebugRingBufferFlags; 2753f278b6fed422a18d763b07216a21e96d9445f9Michael Plassimport android.hardware.wifi.V1_0.WifiDebugRingBufferStatus; 2853f278b6fed422a18d763b07216a21e96d9445f9Michael Plassimport android.hardware.wifi.V1_0.WifiDebugRingBufferVerboseLevel; 294f2049a015722cae0f0169379d499d5d4fc98e30Michael Plassimport android.hardware.wifi.V1_0.WifiStatus; 304f2049a015722cae0f0169379d499d5d4fc98e30Michael Plassimport android.hardware.wifi.V1_0.WifiStatusCode; 31ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plassimport android.net.apf.ApfCapabilities; 321dc6d8ecde4cad66dc8cb7b97926f1120e7b0d57Michael Plassimport android.net.wifi.WifiManager; 3353f278b6fed422a18d763b07216a21e96d9445f9Michael Plassimport android.os.HandlerThread; 3453f278b6fed422a18d763b07216a21e96d9445f9Michael Plassimport android.os.Looper; 3553f278b6fed422a18d763b07216a21e96d9445f9Michael Plassimport android.os.RemoteException; 361dc6d8ecde4cad66dc8cb7b97926f1120e7b0d57Michael Plass 3770b995bed9674a30c56b7ae2585d5897900ff695Michael Plassimport com.android.server.connectivity.KeepalivePacketData; 38df8568a5aaed3c82ff7ef1ecafab85abf7a99da7Michael Plassimport com.android.server.wifi.util.NativeUtil; 39d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 40d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Piusimport static org.junit.Assert.*; 41d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Piusimport static org.mockito.Mockito.*; 42d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 43b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plassimport org.junit.Before; 44b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plassimport org.junit.Test; 45d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Piusimport org.mockito.ArgumentCaptor; 46b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plassimport org.mockito.Mock; 47b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plassimport org.mockito.MockitoAnnotations; 48b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plass 4970b995bed9674a30c56b7ae2585d5897900ff695Michael Plassimport java.net.InetAddress; 50ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plassimport java.util.ArrayList; 51ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass 52b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plass/** 53b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plass * Unit tests for {@link com.android.server.wifi.WifiVendorHal}. 54b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plass */ 55b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plasspublic class WifiVendorHalTest { 56b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plass 57d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius WifiVendorHal mWifiVendorHal; 584f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass private WifiStatus mWifiStatusSuccess; 594f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass private WifiStatus mWifiStatusFailure; 604f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass @Mock 614f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass private HalDeviceManager mHalDeviceManager; 624f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass @Mock 634f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass private HandlerThread mWifiStateMachineHandlerThread; 644f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass @Mock 654f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass private WifiVendorHal.HalDeviceManagerStatusListener mHalDeviceManagerStatusCallbacks; 664f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass @Mock 674f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass private IWifiApIface mIWifiApIface; 684f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass @Mock 694f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass private IWifiChip mIWifiChip; 704f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass @Mock 714f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass private IWifiStaIface mIWifiStaIface; 724f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass @Mock 734f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass private IWifiRttController mIWifiRttController; 74b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plass 75b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plass /** 76b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plass * Sets up for unit test 77b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plass */ 78b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plass @Before 79b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plass public void setUp() throws Exception { 80b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plass MockitoAnnotations.initMocks(this); 814f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass mWifiStatusSuccess = new WifiStatus(); 824f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass mWifiStatusSuccess.code = WifiStatusCode.SUCCESS; 834f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass mWifiStatusFailure = new WifiStatus(); 844f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass mWifiStatusFailure.code = WifiStatusCode.ERROR_UNKNOWN; 854f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass mWifiStatusFailure.description = "I don't even know what a Mock Turtle is."; 864f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass when(mIWifiStaIface.enableLinkLayerStatsCollection(false)).thenReturn(mWifiStatusSuccess); 874f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass 88b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plass 89d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius // Setup the HalDeviceManager mock's start/stop behaviour. This can be overridden in 90d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius // individual tests, if needed. 91d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius doAnswer(new AnswerWithArguments() { 92d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius public boolean answer() { 93d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius when(mHalDeviceManager.isReady()).thenReturn(true); 94d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius when(mHalDeviceManager.isStarted()).thenReturn(true); 95d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius mHalDeviceManagerStatusCallbacks.onStatusChanged(); 96d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius return true; 97d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius } 98d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius }).when(mHalDeviceManager).start(); 99d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 100d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius doAnswer(new AnswerWithArguments() { 101d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius public void answer() { 102d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius when(mHalDeviceManager.isReady()).thenReturn(true); 103d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius when(mHalDeviceManager.isStarted()).thenReturn(false); 104d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius mHalDeviceManagerStatusCallbacks.onStatusChanged(); 105d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius } 106d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius }).when(mHalDeviceManager).stop(); 107d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius when(mHalDeviceManager.createStaIface(eq(null), eq(null))) 108d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius .thenReturn(mIWifiStaIface); 109d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius when(mHalDeviceManager.createApIface(eq(null), eq(null))) 110d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius .thenReturn(mIWifiApIface); 111d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius when(mHalDeviceManager.getChip(any(IWifiIface.class))) 112d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius .thenReturn(mIWifiChip); 113d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius when(mHalDeviceManager.createRttController(any(IWifiIface.class))) 114d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius .thenReturn(mIWifiRttController); 115d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 116d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius // Create the vendor HAL object under test. 117d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius mWifiVendorHal = new WifiVendorHal(mHalDeviceManager, mWifiStateMachineHandlerThread); 118d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 119d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius // Initialize the vendor HAL to capture the registered callback. 120d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius mWifiVendorHal.initialize(); 121d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius ArgumentCaptor<WifiVendorHal.HalDeviceManagerStatusListener> callbackCaptor = 122d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius ArgumentCaptor.forClass(WifiVendorHal.HalDeviceManagerStatusListener.class); 123d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).registerStatusListener( 124d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius callbackCaptor.capture(), any(Looper.class)); 125d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius mHalDeviceManagerStatusCallbacks = callbackCaptor.getValue(); 126b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plass } 127b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plass 128b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plass /** 129d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius * Tests the successful starting of HAL in STA mode using 130d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius * {@link WifiVendorHal#startVendorHal(boolean)}. 131d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius */ 132d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius @Test 133d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius public void testStartHalSuccessInStaMode() { 134d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius assertTrue(mWifiVendorHal.startVendorHal(true)); 135d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius assertTrue(mWifiVendorHal.isHalStarted()); 136d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 137d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).start(); 138d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).createStaIface(eq(null), eq(null)); 139d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).getChip(eq(mIWifiStaIface)); 140d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).createRttController(eq(mIWifiStaIface)); 141d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).isReady(); 142d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).isStarted(); 143d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 144d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager, never()).createApIface(eq(null), eq(null)); 145d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius } 146d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 147d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius /** 148d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius * Tests the successful starting of HAL in AP mode using 149d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius * {@link WifiVendorHal#startVendorHal(boolean)}. 150d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius */ 151d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius @Test 152d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius public void testStartHalSuccessInApMode() { 153d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius assertTrue(mWifiVendorHal.startVendorHal(false)); 154d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius assertTrue(mWifiVendorHal.isHalStarted()); 155d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 156d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).start(); 157d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).createApIface(eq(null), eq(null)); 158d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).getChip(eq(mIWifiApIface)); 159d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).isReady(); 160d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).isStarted(); 161d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 162d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager, never()).createStaIface(eq(null), eq(null)); 163d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager, never()).createRttController(any(IWifiIface.class)); 164d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius } 165d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 166d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius /** 167d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius * Tests the failure to start HAL in STA mode using 168d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius * {@link WifiVendorHal#startVendorHal(boolean)}. 169d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius */ 170d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius @Test 171d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius public void testStartHalFailureInStaMode() { 172d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius // No callbacks are invoked in this case since the start itself failed. So, override 173d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius // default AnswerWithArguments that we setup. 174d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius doAnswer(new AnswerWithArguments() { 175d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius public boolean answer() { 176d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius return false; 177d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius } 178d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius }).when(mHalDeviceManager).start(); 179d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius assertFalse(mWifiVendorHal.startVendorHal(true)); 180d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius assertFalse(mWifiVendorHal.isHalStarted()); 181d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 182d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).start(); 183d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 184d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager, never()).createStaIface(eq(null), eq(null)); 185d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager, never()).createApIface(eq(null), eq(null)); 186d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager, never()).getChip(any(IWifiIface.class)); 187d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager, never()).createRttController(any(IWifiIface.class)); 188d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius } 189d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 190d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius /** 191d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius * Tests the failure to start HAL in STA mode using 192d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius * {@link WifiVendorHal#startVendorHal(boolean)}. 193d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius */ 194d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius @Test 195d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius public void testStartHalFailureInIfaceCreationInStaMode() { 196d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius when(mHalDeviceManager.createStaIface(eq(null), eq(null))).thenReturn(null); 197d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius assertFalse(mWifiVendorHal.startVendorHal(true)); 198d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius assertFalse(mWifiVendorHal.isHalStarted()); 199d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 200d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).start(); 201d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).createStaIface(eq(null), eq(null)); 202d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).stop(); 203d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 204d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager, never()).createApIface(eq(null), eq(null)); 205d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager, never()).getChip(any(IWifiIface.class)); 206d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager, never()).createRttController(any(IWifiIface.class)); 207d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius } 208d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 209d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius /** 210d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius * Tests the failure to start HAL in STA mode using 211d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius * {@link WifiVendorHal#startVendorHal(boolean)}. 212d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius */ 213d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius @Test 214d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius public void testStartHalFailureInRttControllerCreationInStaMode() { 215d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius when(mHalDeviceManager.createRttController(any(IWifiIface.class))).thenReturn(null); 216d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius assertFalse(mWifiVendorHal.startVendorHal(true)); 217d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius assertFalse(mWifiVendorHal.isHalStarted()); 218d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 219d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).start(); 220d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).createStaIface(eq(null), eq(null)); 221d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).createRttController(eq(mIWifiStaIface)); 222d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).stop(); 223d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 224d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager, never()).createApIface(eq(null), eq(null)); 225d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager, never()).getChip(any(IWifiIface.class)); 226d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius } 227d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 228d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius /** 229d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius * Tests the failure to start HAL in STA mode using 230d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius * {@link WifiVendorHal#startVendorHal(boolean)}. 231d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius */ 232d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius @Test 233d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius public void testStartHalFailureInChipGetInStaMode() { 234d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius when(mHalDeviceManager.getChip(any(IWifiIface.class))).thenReturn(null); 235d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius assertFalse(mWifiVendorHal.startVendorHal(true)); 236d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius assertFalse(mWifiVendorHal.isHalStarted()); 237d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 238d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).start(); 239d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).createStaIface(eq(null), eq(null)); 240d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).createRttController(eq(mIWifiStaIface)); 241d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).getChip(any(IWifiIface.class)); 242d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).stop(); 243d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 244d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager, never()).createApIface(eq(null), eq(null)); 245d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius } 246d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 247d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius /** 248d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius * Tests the failure to start HAL in STA mode using 249d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius * {@link WifiVendorHal#startVendorHal(boolean)}. 250d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius */ 251d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius @Test 252d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius public void testStartHalFailureInApMode() { 253d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius when(mHalDeviceManager.createApIface(eq(null), eq(null))).thenReturn(null); 254d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius assertFalse(mWifiVendorHal.startVendorHal(false)); 255d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius assertFalse(mWifiVendorHal.isHalStarted()); 256d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 257d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).start(); 258d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).createApIface(eq(null), eq(null)); 259d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).stop(); 260d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 261d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager, never()).createStaIface(eq(null), eq(null)); 262d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager, never()).getChip(any(IWifiIface.class)); 263d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager, never()).createRttController(any(IWifiIface.class)); 264d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius } 265d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 266d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius /** 267d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius * Tests the stopping of HAL in STA mode using 268d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius * {@link WifiVendorHal#stopVendorHal()}. 269d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius */ 270d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius @Test 271d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius public void testStopHalInStaMode() { 272d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius assertTrue(mWifiVendorHal.startVendorHal(true)); 273d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius assertTrue(mWifiVendorHal.isHalStarted()); 274d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 275d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius mWifiVendorHal.stopVendorHal(); 276d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius assertFalse(mWifiVendorHal.isHalStarted()); 277d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 278d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).start(); 279d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).stop(); 280d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).createStaIface(eq(null), eq(null)); 281d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).getChip(eq(mIWifiStaIface)); 282d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).createRttController(eq(mIWifiStaIface)); 283d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager, times(2)).isReady(); 284d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager, times(2)).isStarted(); 285d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 286d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager, never()).createApIface(eq(null), eq(null)); 287d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius } 288d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 289d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius /** 290d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius * Tests the stopping of HAL in AP mode using 291d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius * {@link WifiVendorHal#stopVendorHal()}. 292d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius */ 293d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius @Test 294d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius public void testStopHalInApMode() { 295d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius assertTrue(mWifiVendorHal.startVendorHal(false)); 296d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius assertTrue(mWifiVendorHal.isHalStarted()); 297d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 298d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius mWifiVendorHal.stopVendorHal(); 299d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius assertFalse(mWifiVendorHal.isHalStarted()); 300d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 301d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).start(); 302d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).stop(); 303d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).createApIface(eq(null), eq(null)); 304d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).getChip(eq(mIWifiApIface)); 305d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager, times(2)).isReady(); 306d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager, times(2)).isStarted(); 307d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 308d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager, never()).createStaIface(eq(null), eq(null)); 309d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager, never()).createRttController(any(IWifiIface.class)); 310d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius } 3114f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass 3124f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass /** 3131dc6d8ecde4cad66dc8cb7b97926f1120e7b0d57Michael Plass * Test translation to WifiManager.WIFI_FEATURE_* 3141dc6d8ecde4cad66dc8cb7b97926f1120e7b0d57Michael Plass * 3151dc6d8ecde4cad66dc8cb7b97926f1120e7b0d57Michael Plass * Just do a spot-check with a few feature bits here; since the code is table- 3161dc6d8ecde4cad66dc8cb7b97926f1120e7b0d57Michael Plass * driven we don't have to work hard to exercise all of it. 3171dc6d8ecde4cad66dc8cb7b97926f1120e7b0d57Michael Plass */ 3181dc6d8ecde4cad66dc8cb7b97926f1120e7b0d57Michael Plass @Test 3191dc6d8ecde4cad66dc8cb7b97926f1120e7b0d57Michael Plass public void testFeatureMaskTranslation() { 3201dc6d8ecde4cad66dc8cb7b97926f1120e7b0d57Michael Plass int caps = ( 3211dc6d8ecde4cad66dc8cb7b97926f1120e7b0d57Michael Plass IWifiStaIface.StaIfaceCapabilityMask.BACKGROUND_SCAN 3221dc6d8ecde4cad66dc8cb7b97926f1120e7b0d57Michael Plass | IWifiStaIface.StaIfaceCapabilityMask.LINK_LAYER_STATS 3231dc6d8ecde4cad66dc8cb7b97926f1120e7b0d57Michael Plass ); 3241dc6d8ecde4cad66dc8cb7b97926f1120e7b0d57Michael Plass int expected = ( 325691806f65a5f259fd8e6b709c97d0035c418c483Michael Plass WifiManager.WIFI_FEATURE_SCANNER 3261dc6d8ecde4cad66dc8cb7b97926f1120e7b0d57Michael Plass | WifiManager.WIFI_FEATURE_LINK_LAYER_STATS); 3271dc6d8ecde4cad66dc8cb7b97926f1120e7b0d57Michael Plass assertEquals(expected, mWifiVendorHal.wifiFeatureMaskFromStaCapabilities(caps)); 3281dc6d8ecde4cad66dc8cb7b97926f1120e7b0d57Michael Plass } 3291dc6d8ecde4cad66dc8cb7b97926f1120e7b0d57Michael Plass 3301dc6d8ecde4cad66dc8cb7b97926f1120e7b0d57Michael Plass /** 3314f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass * Test enablement of link layer stats after startup 3324f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass * <p> 3334f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass * Request link layer stats before HAL start 3344f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass * - should not make it to the HAL layer 3354f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass * Start the HAL in STA mode 3364f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass * Request link layer stats twice more 3374f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass * - enable request should make it to the HAL layer 3384f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass * - HAL layer should have been called to make the requests (i.e., two calls total) 3394f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass */ 3404f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass @Test 3414f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass public void testLinkLayerStatsEnableAfterStartup() throws Exception { 3424f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass doNothing().when(mIWifiStaIface).getLinkLayerStats(any()); 3434f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass 3444f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass assertNull(mWifiVendorHal.getWifiLinkLayerStats()); 3454f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass assertTrue(mWifiVendorHal.startVendorHalSta()); 3464f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass assertTrue(mWifiVendorHal.isHalStarted()); 3474f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass 3484f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass verify(mHalDeviceManager).start(); 3494f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass mWifiVendorHal.getWifiLinkLayerStats(); 3504f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass mWifiVendorHal.getWifiLinkLayerStats(); 3514f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass verify(mIWifiStaIface).enableLinkLayerStatsCollection(false); // mLinkLayerStatsDebug 3524f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass verify(mIWifiStaIface, times(2)).getLinkLayerStats(any()); 3534f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass } 3544f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass 3554f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass /** 3564f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass * Test that link layer stats are not enabled and harmless in AP mode 3574f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass * <p> 3584f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass * Start the HAL in AP mode 3594f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass * - stats should not be enabled 3604f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass * Request link layer stats 3614f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass * - HAL layer should have been called to make the request 3624f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass */ 3634f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass @Test 3644f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass public void testLinkLayerStatsNotEnabledAndHarmlessInApMode() throws Exception { 3654f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass doNothing().when(mIWifiStaIface).getLinkLayerStats(any()); 3664f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass 3674f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass assertTrue(mWifiVendorHal.startVendorHalAp()); 3684f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass assertTrue(mWifiVendorHal.isHalStarted()); 3694f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass assertNull(mWifiVendorHal.getWifiLinkLayerStats()); 3704f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass 3714f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass verify(mHalDeviceManager).start(); 3724f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass 3734f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass verify(mIWifiStaIface, never()).enableLinkLayerStatsCollection(false); 3744f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass verify(mIWifiStaIface, never()).getLinkLayerStats(any()); 3754f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass } 3764f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass 3774f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass // TODO(b/34900534) add test for correct MOVE CORRESPONDING of fields 3784f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass 3797e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass /** 3807e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass * Test that getFirmwareVersion() and getDriverVersion() work 3817e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass * 3827e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass * Calls before the STA is started are expected to return null. 3837e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass */ 3847e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass @Test 3857e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass public void testVersionGetters() throws Exception { 3867e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass String firmwareVersion = "fuzzy"; 3877e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass String driverVersion = "dizzy"; 3887e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass IWifiChip.ChipDebugInfo chipDebugInfo = new IWifiChip.ChipDebugInfo(); 3897e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass chipDebugInfo.firmwareDescription = firmwareVersion; 3907e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass chipDebugInfo.driverDescription = driverVersion; 3917e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass 3927e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass doAnswer(new AnswerWithArguments() { 3937e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass public void answer(IWifiChip.requestChipDebugInfoCallback cb) throws RemoteException { 3947e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass cb.onValues(mWifiStatusSuccess, chipDebugInfo); 3957e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass } 3967e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass }).when(mIWifiChip).requestChipDebugInfo(any(IWifiChip.requestChipDebugInfoCallback.class)); 3977e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass 3987e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass assertNull(mWifiVendorHal.getFirmwareVersion()); 3997e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass assertNull(mWifiVendorHal.getDriverVersion()); 4007e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass 4017e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass assertTrue(mWifiVendorHal.startVendorHalSta()); 4027e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass 4037e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass assertEquals(firmwareVersion, mWifiVendorHal.getFirmwareVersion()); 4047e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass assertEquals(driverVersion, mWifiVendorHal.getDriverVersion()); 4057e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass } 406ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass 407ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass /** 408df8568a5aaed3c82ff7ef1ecafab85abf7a99da7Michael Plass * Test that setScanningMacOui is hooked up to the HAL correctly 409df8568a5aaed3c82ff7ef1ecafab85abf7a99da7Michael Plass */ 410df8568a5aaed3c82ff7ef1ecafab85abf7a99da7Michael Plass @Test 411df8568a5aaed3c82ff7ef1ecafab85abf7a99da7Michael Plass public void testSetScanningMacOui() throws Exception { 412df8568a5aaed3c82ff7ef1ecafab85abf7a99da7Michael Plass byte[] oui = NativeUtil.macAddressOuiToByteArray("DA:A1:19"); 413df8568a5aaed3c82ff7ef1ecafab85abf7a99da7Michael Plass byte[] zzz = NativeUtil.macAddressOuiToByteArray("00:00:00"); 414df8568a5aaed3c82ff7ef1ecafab85abf7a99da7Michael Plass 415df8568a5aaed3c82ff7ef1ecafab85abf7a99da7Michael Plass when(mIWifiStaIface.setScanningMacOui(any())).thenReturn(mWifiStatusSuccess); 416df8568a5aaed3c82ff7ef1ecafab85abf7a99da7Michael Plass 417df8568a5aaed3c82ff7ef1ecafab85abf7a99da7Michael Plass assertFalse(mWifiVendorHal.setScanningMacOui(oui)); // expect fail - STA not started 418df8568a5aaed3c82ff7ef1ecafab85abf7a99da7Michael Plass assertTrue(mWifiVendorHal.startVendorHalSta()); 419df8568a5aaed3c82ff7ef1ecafab85abf7a99da7Michael Plass assertFalse(mWifiVendorHal.setScanningMacOui(null)); // expect fail - null 420df8568a5aaed3c82ff7ef1ecafab85abf7a99da7Michael Plass assertFalse(mWifiVendorHal.setScanningMacOui(new byte[]{(byte) 1})); // expect fail - len 421df8568a5aaed3c82ff7ef1ecafab85abf7a99da7Michael Plass assertTrue(mWifiVendorHal.setScanningMacOui(oui)); 422df8568a5aaed3c82ff7ef1ecafab85abf7a99da7Michael Plass assertTrue(mWifiVendorHal.setScanningMacOui(zzz)); 423df8568a5aaed3c82ff7ef1ecafab85abf7a99da7Michael Plass 424df8568a5aaed3c82ff7ef1ecafab85abf7a99da7Michael Plass verify(mIWifiStaIface).setScanningMacOui(eq(oui)); 425df8568a5aaed3c82ff7ef1ecafab85abf7a99da7Michael Plass verify(mIWifiStaIface).setScanningMacOui(eq(zzz)); 426df8568a5aaed3c82ff7ef1ecafab85abf7a99da7Michael Plass } 427df8568a5aaed3c82ff7ef1ecafab85abf7a99da7Michael Plass 42870b995bed9674a30c56b7ae2585d5897900ff695Michael Plass @Test 42970b995bed9674a30c56b7ae2585d5897900ff695Michael Plass public void testStartSendingOffloadedPacket() throws Exception { 43070b995bed9674a30c56b7ae2585d5897900ff695Michael Plass byte[] srcMac = NativeUtil.macAddressToByteArray("4007b2088c81"); 43170b995bed9674a30c56b7ae2585d5897900ff695Michael Plass InetAddress src = InetAddress.parseNumericAddress("192.168.13.13"); 43270b995bed9674a30c56b7ae2585d5897900ff695Michael Plass InetAddress dst = InetAddress.parseNumericAddress("93.184.216.34"); 43370b995bed9674a30c56b7ae2585d5897900ff695Michael Plass int slot = 13; 43470b995bed9674a30c56b7ae2585d5897900ff695Michael Plass int millis = 16000; 43570b995bed9674a30c56b7ae2585d5897900ff695Michael Plass 43670b995bed9674a30c56b7ae2585d5897900ff695Michael Plass KeepalivePacketData kap = KeepalivePacketData.nattKeepalivePacket(src, 63000, dst, 4500); 43770b995bed9674a30c56b7ae2585d5897900ff695Michael Plass 43870b995bed9674a30c56b7ae2585d5897900ff695Michael Plass when(mIWifiStaIface.startSendingKeepAlivePackets( 43970b995bed9674a30c56b7ae2585d5897900ff695Michael Plass anyInt(), any(), anyShort(), any(), any(), anyInt() 44070b995bed9674a30c56b7ae2585d5897900ff695Michael Plass )).thenReturn(mWifiStatusSuccess); 44170b995bed9674a30c56b7ae2585d5897900ff695Michael Plass 44270b995bed9674a30c56b7ae2585d5897900ff695Michael Plass assertTrue(mWifiVendorHal.startVendorHalSta()); 44370b995bed9674a30c56b7ae2585d5897900ff695Michael Plass assertTrue(0 == mWifiVendorHal.startSendingOffloadedPacket(slot, srcMac, kap, millis)); 44470b995bed9674a30c56b7ae2585d5897900ff695Michael Plass 44570b995bed9674a30c56b7ae2585d5897900ff695Michael Plass verify(mIWifiStaIface).startSendingKeepAlivePackets( 44670b995bed9674a30c56b7ae2585d5897900ff695Michael Plass eq(slot), any(), anyShort(), any(), any(), eq(millis)); 44770b995bed9674a30c56b7ae2585d5897900ff695Michael Plass } 44870b995bed9674a30c56b7ae2585d5897900ff695Michael Plass 44970b995bed9674a30c56b7ae2585d5897900ff695Michael Plass @Test 45070b995bed9674a30c56b7ae2585d5897900ff695Michael Plass public void testStopSendingOffloadedPacket() throws Exception { 45170b995bed9674a30c56b7ae2585d5897900ff695Michael Plass int slot = 13; 45270b995bed9674a30c56b7ae2585d5897900ff695Michael Plass 45370b995bed9674a30c56b7ae2585d5897900ff695Michael Plass when(mIWifiStaIface.stopSendingKeepAlivePackets(anyInt())).thenReturn(mWifiStatusSuccess); 45470b995bed9674a30c56b7ae2585d5897900ff695Michael Plass 45570b995bed9674a30c56b7ae2585d5897900ff695Michael Plass assertTrue(mWifiVendorHal.startVendorHalSta()); 45670b995bed9674a30c56b7ae2585d5897900ff695Michael Plass assertTrue(0 == mWifiVendorHal.stopSendingOffloadedPacket(slot)); 45770b995bed9674a30c56b7ae2585d5897900ff695Michael Plass 45870b995bed9674a30c56b7ae2585d5897900ff695Michael Plass verify(mIWifiStaIface).stopSendingKeepAlivePackets(eq(slot)); 45970b995bed9674a30c56b7ae2585d5897900ff695Michael Plass } 46070b995bed9674a30c56b7ae2585d5897900ff695Michael Plass 461df8568a5aaed3c82ff7ef1ecafab85abf7a99da7Michael Plass /** 462ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass * Test that getApfCapabilities is hooked up to the HAL correctly 463ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass * 464ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass * A call before the vendor HAL is started should return a non-null result with version 0 465ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass * 466ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass * A call after the HAL is started should return the mocked values. 467ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass */ 468ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass @Test 469ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass public void testApfCapabilities() throws Exception { 470ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass int myVersion = 33; 471ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass int myMaxSize = 1234; 472ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass 473ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass StaApfPacketFilterCapabilities capabilities = new StaApfPacketFilterCapabilities(); 474ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass capabilities.version = myVersion; 475ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass capabilities.maxLength = myMaxSize; 476ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass 477ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass doAnswer(new AnswerWithArguments() { 478ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass public void answer(IWifiStaIface.getApfPacketFilterCapabilitiesCallback cb) 479ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass throws RemoteException { 480ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass cb.onValues(mWifiStatusSuccess, capabilities); 481ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass } 482ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass }).when(mIWifiStaIface).getApfPacketFilterCapabilities(any( 483ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass IWifiStaIface.getApfPacketFilterCapabilitiesCallback.class)); 484ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass 485ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass 486ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass assertEquals(0, mWifiVendorHal.getApfCapabilities().apfVersionSupported); 487ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass 488ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass assertTrue(mWifiVendorHal.startVendorHalSta()); 489ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass 490ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass ApfCapabilities actual = mWifiVendorHal.getApfCapabilities(); 491ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass 492ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass assertEquals(myVersion, actual.apfVersionSupported); 493ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass assertEquals(myMaxSize, actual.maximumApfProgramSize); 494ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass assertEquals(android.system.OsConstants.ARPHRD_ETHER, actual.apfPacketFormat); 495ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass assertNotEquals(0, actual.apfPacketFormat); 496ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass } 497ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass 498ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass /** 49970b995bed9674a30c56b7ae2585d5897900ff695Michael Plass * Test that an APF program can be installed. 500ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass */ 501ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass @Test 502ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass public void testInstallApf() throws Exception { 503ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass byte[] filter = new byte[] {19, 53, 10}; 504ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass 505ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass ArrayList<Byte> expected = new ArrayList<>(3); 506ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass for (byte b : filter) expected.add(b); 507ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass 508ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass when(mIWifiStaIface.installApfPacketFilter(anyInt(), any(ArrayList.class))) 509ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass .thenReturn(mWifiStatusSuccess); 510ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass 511ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass assertTrue(mWifiVendorHal.startVendorHalSta()); 512ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass assertTrue(mWifiVendorHal.installPacketFilter(filter)); 513ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass 514ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass verify(mIWifiStaIface).installApfPacketFilter(eq(0), eq(expected)); 515ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass } 516f1423f0bc5fbda5062adb0bd465b999799571f53Michael Plass 517f1423f0bc5fbda5062adb0bd465b999799571f53Michael Plass /** 518f1423f0bc5fbda5062adb0bd465b999799571f53Michael Plass * Test that the country code is set in AP mode (when it should be). 519f1423f0bc5fbda5062adb0bd465b999799571f53Michael Plass */ 520f1423f0bc5fbda5062adb0bd465b999799571f53Michael Plass @Test 521f1423f0bc5fbda5062adb0bd465b999799571f53Michael Plass public void testSetCountryCodeHal() throws Exception { 522f1423f0bc5fbda5062adb0bd465b999799571f53Michael Plass byte[] expected = new byte[]{(byte) 'C', (byte) 'A'}; 523f1423f0bc5fbda5062adb0bd465b999799571f53Michael Plass 524f1423f0bc5fbda5062adb0bd465b999799571f53Michael Plass when(mIWifiApIface.setCountryCode(any())) 525f1423f0bc5fbda5062adb0bd465b999799571f53Michael Plass .thenReturn(mWifiStatusSuccess); 526f1423f0bc5fbda5062adb0bd465b999799571f53Michael Plass 527f1423f0bc5fbda5062adb0bd465b999799571f53Michael Plass assertTrue(mWifiVendorHal.startVendorHalAp()); 528f1423f0bc5fbda5062adb0bd465b999799571f53Michael Plass 529f1423f0bc5fbda5062adb0bd465b999799571f53Michael Plass assertFalse(mWifiVendorHal.setCountryCodeHal(null)); 530f1423f0bc5fbda5062adb0bd465b999799571f53Michael Plass assertFalse(mWifiVendorHal.setCountryCodeHal("")); 531f1423f0bc5fbda5062adb0bd465b999799571f53Michael Plass assertFalse(mWifiVendorHal.setCountryCodeHal("A")); 532f1423f0bc5fbda5062adb0bd465b999799571f53Michael Plass assertTrue(mWifiVendorHal.setCountryCodeHal("CA")); // Only one expected to succeed 533f1423f0bc5fbda5062adb0bd465b999799571f53Michael Plass assertFalse(mWifiVendorHal.setCountryCodeHal("ZZZ")); 534f1423f0bc5fbda5062adb0bd465b999799571f53Michael Plass 535f1423f0bc5fbda5062adb0bd465b999799571f53Michael Plass verify(mIWifiApIface).setCountryCode(eq(expected)); 536f1423f0bc5fbda5062adb0bd465b999799571f53Michael Plass } 53753f278b6fed422a18d763b07216a21e96d9445f9Michael Plass 53853f278b6fed422a18d763b07216a21e96d9445f9Michael Plass /** 53953f278b6fed422a18d763b07216a21e96d9445f9Michael Plass * Test that startLoggingToDebugRingBuffer is plumbed to chip 54053f278b6fed422a18d763b07216a21e96d9445f9Michael Plass * 54153f278b6fed422a18d763b07216a21e96d9445f9Michael Plass * A call before the vendor hal is started should just return false. 54253f278b6fed422a18d763b07216a21e96d9445f9Michael Plass * After starting in STA mode, the call should succeed, and pass ther right things down. 54353f278b6fed422a18d763b07216a21e96d9445f9Michael Plass */ 54453f278b6fed422a18d763b07216a21e96d9445f9Michael Plass @Test 54553f278b6fed422a18d763b07216a21e96d9445f9Michael Plass public void testStartLoggingRingBuffer() throws Exception { 54653f278b6fed422a18d763b07216a21e96d9445f9Michael Plass when(mIWifiChip.startLoggingToDebugRingBuffer( 54753f278b6fed422a18d763b07216a21e96d9445f9Michael Plass any(String.class), anyInt(), anyInt(), anyInt() 54853f278b6fed422a18d763b07216a21e96d9445f9Michael Plass )).thenReturn(mWifiStatusSuccess); 54953f278b6fed422a18d763b07216a21e96d9445f9Michael Plass 55053f278b6fed422a18d763b07216a21e96d9445f9Michael Plass assertFalse(mWifiVendorHal.startLoggingRingBuffer(1, 0x42, 0, 0, "One")); 55153f278b6fed422a18d763b07216a21e96d9445f9Michael Plass assertTrue(mWifiVendorHal.startVendorHalSta()); 55253f278b6fed422a18d763b07216a21e96d9445f9Michael Plass assertTrue(mWifiVendorHal.startLoggingRingBuffer(1, 0x42, 11, 3000, "One")); 55353f278b6fed422a18d763b07216a21e96d9445f9Michael Plass 55453f278b6fed422a18d763b07216a21e96d9445f9Michael Plass verify(mIWifiChip).startLoggingToDebugRingBuffer("One", 1, 11, 3000); 55553f278b6fed422a18d763b07216a21e96d9445f9Michael Plass } 55653f278b6fed422a18d763b07216a21e96d9445f9Michael Plass 55753f278b6fed422a18d763b07216a21e96d9445f9Michael Plass /** 55853f278b6fed422a18d763b07216a21e96d9445f9Michael Plass * Same test as testStartLoggingRingBuffer, but in AP mode rather than STA. 55953f278b6fed422a18d763b07216a21e96d9445f9Michael Plass */ 56053f278b6fed422a18d763b07216a21e96d9445f9Michael Plass @Test 56153f278b6fed422a18d763b07216a21e96d9445f9Michael Plass public void testStartLoggingRingBufferOnAp() throws Exception { 56253f278b6fed422a18d763b07216a21e96d9445f9Michael Plass when(mIWifiChip.startLoggingToDebugRingBuffer( 56353f278b6fed422a18d763b07216a21e96d9445f9Michael Plass any(String.class), anyInt(), anyInt(), anyInt() 56453f278b6fed422a18d763b07216a21e96d9445f9Michael Plass )).thenReturn(mWifiStatusSuccess); 56553f278b6fed422a18d763b07216a21e96d9445f9Michael Plass 56653f278b6fed422a18d763b07216a21e96d9445f9Michael Plass assertFalse(mWifiVendorHal.startLoggingRingBuffer(1, 0x42, 0, 0, "One")); 56753f278b6fed422a18d763b07216a21e96d9445f9Michael Plass assertTrue(mWifiVendorHal.startVendorHalAp()); 56853f278b6fed422a18d763b07216a21e96d9445f9Michael Plass assertTrue(mWifiVendorHal.startLoggingRingBuffer(1, 0x42, 11, 3000, "One")); 56953f278b6fed422a18d763b07216a21e96d9445f9Michael Plass 57053f278b6fed422a18d763b07216a21e96d9445f9Michael Plass verify(mIWifiChip).startLoggingToDebugRingBuffer("One", 1, 11, 3000); 57153f278b6fed422a18d763b07216a21e96d9445f9Michael Plass } 57253f278b6fed422a18d763b07216a21e96d9445f9Michael Plass 57353f278b6fed422a18d763b07216a21e96d9445f9Michael Plass /** 57453f278b6fed422a18d763b07216a21e96d9445f9Michael Plass * Test that getRingBufferStatus gets and translates its stuff correctly 57553f278b6fed422a18d763b07216a21e96d9445f9Michael Plass */ 57653f278b6fed422a18d763b07216a21e96d9445f9Michael Plass @Test 57753f278b6fed422a18d763b07216a21e96d9445f9Michael Plass public void testRingBufferStatus() throws Exception { 57853f278b6fed422a18d763b07216a21e96d9445f9Michael Plass WifiDebugRingBufferStatus one = new WifiDebugRingBufferStatus(); 57953f278b6fed422a18d763b07216a21e96d9445f9Michael Plass one.ringName = "One"; 58053f278b6fed422a18d763b07216a21e96d9445f9Michael Plass one.flags = WifiDebugRingBufferFlags.HAS_BINARY_ENTRIES; 58153f278b6fed422a18d763b07216a21e96d9445f9Michael Plass one.ringId = 5607371; 58253f278b6fed422a18d763b07216a21e96d9445f9Michael Plass one.sizeInBytes = 54321; 58353f278b6fed422a18d763b07216a21e96d9445f9Michael Plass one.freeSizeInBytes = 42; 58453f278b6fed422a18d763b07216a21e96d9445f9Michael Plass one.verboseLevel = WifiDebugRingBufferVerboseLevel.VERBOSE; 58553f278b6fed422a18d763b07216a21e96d9445f9Michael Plass String oneExpect = "name: One flag: 1 ringBufferId: 5607371 ringBufferByteSize: 54321" 58653f278b6fed422a18d763b07216a21e96d9445f9Michael Plass + " verboseLevel: 2 writtenBytes: 0 readBytes: 0 writtenRecords: 0"; 58753f278b6fed422a18d763b07216a21e96d9445f9Michael Plass 58853f278b6fed422a18d763b07216a21e96d9445f9Michael Plass WifiDebugRingBufferStatus two = new WifiDebugRingBufferStatus(); 58953f278b6fed422a18d763b07216a21e96d9445f9Michael Plass two.ringName = "Two"; 59053f278b6fed422a18d763b07216a21e96d9445f9Michael Plass two.flags = WifiDebugRingBufferFlags.HAS_ASCII_ENTRIES 59153f278b6fed422a18d763b07216a21e96d9445f9Michael Plass | WifiDebugRingBufferFlags.HAS_PER_PACKET_ENTRIES; 59253f278b6fed422a18d763b07216a21e96d9445f9Michael Plass two.ringId = 4512470; 59353f278b6fed422a18d763b07216a21e96d9445f9Michael Plass two.sizeInBytes = 300; 59453f278b6fed422a18d763b07216a21e96d9445f9Michael Plass two.freeSizeInBytes = 42; 59553f278b6fed422a18d763b07216a21e96d9445f9Michael Plass two.verboseLevel = WifiDebugRingBufferVerboseLevel.DEFAULT; 59653f278b6fed422a18d763b07216a21e96d9445f9Michael Plass 59753f278b6fed422a18d763b07216a21e96d9445f9Michael Plass ArrayList<WifiDebugRingBufferStatus> halBufferStatus = new ArrayList<>(2); 59853f278b6fed422a18d763b07216a21e96d9445f9Michael Plass halBufferStatus.add(one); 59953f278b6fed422a18d763b07216a21e96d9445f9Michael Plass halBufferStatus.add(two); 60053f278b6fed422a18d763b07216a21e96d9445f9Michael Plass 60153f278b6fed422a18d763b07216a21e96d9445f9Michael Plass WifiNative.RingBufferStatus[] actual; 60253f278b6fed422a18d763b07216a21e96d9445f9Michael Plass 60353f278b6fed422a18d763b07216a21e96d9445f9Michael Plass doAnswer(new AnswerWithArguments() { 60453f278b6fed422a18d763b07216a21e96d9445f9Michael Plass public void answer(IWifiChip.getDebugRingBuffersStatusCallback cb) 60553f278b6fed422a18d763b07216a21e96d9445f9Michael Plass throws RemoteException { 60653f278b6fed422a18d763b07216a21e96d9445f9Michael Plass cb.onValues(mWifiStatusSuccess, halBufferStatus); 60753f278b6fed422a18d763b07216a21e96d9445f9Michael Plass } 60853f278b6fed422a18d763b07216a21e96d9445f9Michael Plass }).when(mIWifiChip).getDebugRingBuffersStatus(any( 60953f278b6fed422a18d763b07216a21e96d9445f9Michael Plass IWifiChip.getDebugRingBuffersStatusCallback.class)); 61053f278b6fed422a18d763b07216a21e96d9445f9Michael Plass 61153f278b6fed422a18d763b07216a21e96d9445f9Michael Plass assertTrue(mWifiVendorHal.startVendorHalSta()); 61253f278b6fed422a18d763b07216a21e96d9445f9Michael Plass actual = mWifiVendorHal.getRingBufferStatus(); 61353f278b6fed422a18d763b07216a21e96d9445f9Michael Plass 61453f278b6fed422a18d763b07216a21e96d9445f9Michael Plass assertEquals(halBufferStatus.size(), actual.length); 61553f278b6fed422a18d763b07216a21e96d9445f9Michael Plass assertEquals(oneExpect, actual[0].toString()); 61653f278b6fed422a18d763b07216a21e96d9445f9Michael Plass assertEquals(two.ringId, actual[1].ringBufferId); 61753f278b6fed422a18d763b07216a21e96d9445f9Michael Plass 61853f278b6fed422a18d763b07216a21e96d9445f9Michael Plass } 61953f278b6fed422a18d763b07216a21e96d9445f9Michael Plass 62053f278b6fed422a18d763b07216a21e96d9445f9Michael Plass /** 62153f278b6fed422a18d763b07216a21e96d9445f9Michael Plass * Test that getRingBufferData calls forceDumpToDebugRingBuffer 62253f278b6fed422a18d763b07216a21e96d9445f9Michael Plass * 62353f278b6fed422a18d763b07216a21e96d9445f9Michael Plass * Try once before hal start, and twice after (one success, one failure). 62453f278b6fed422a18d763b07216a21e96d9445f9Michael Plass */ 62553f278b6fed422a18d763b07216a21e96d9445f9Michael Plass @Test 62653f278b6fed422a18d763b07216a21e96d9445f9Michael Plass public void testForceRingBufferDump() throws Exception { 62753f278b6fed422a18d763b07216a21e96d9445f9Michael Plass when(mIWifiChip.forceDumpToDebugRingBuffer(eq("Gunk"))).thenReturn(mWifiStatusSuccess); 62853f278b6fed422a18d763b07216a21e96d9445f9Michael Plass when(mIWifiChip.forceDumpToDebugRingBuffer(eq("Glop"))).thenReturn(mWifiStatusFailure); 62953f278b6fed422a18d763b07216a21e96d9445f9Michael Plass 63053f278b6fed422a18d763b07216a21e96d9445f9Michael Plass assertFalse(mWifiVendorHal.getRingBufferData("Gunk")); // hal not started 63153f278b6fed422a18d763b07216a21e96d9445f9Michael Plass 63253f278b6fed422a18d763b07216a21e96d9445f9Michael Plass assertTrue(mWifiVendorHal.startVendorHalSta()); 63353f278b6fed422a18d763b07216a21e96d9445f9Michael Plass 63453f278b6fed422a18d763b07216a21e96d9445f9Michael Plass assertTrue(mWifiVendorHal.getRingBufferData("Gunk")); // mocked call succeeds 63553f278b6fed422a18d763b07216a21e96d9445f9Michael Plass assertFalse(mWifiVendorHal.getRingBufferData("Glop")); // mocked call fails 63653f278b6fed422a18d763b07216a21e96d9445f9Michael Plass 63753f278b6fed422a18d763b07216a21e96d9445f9Michael Plass verify(mIWifiChip).forceDumpToDebugRingBuffer("Gunk"); 63853f278b6fed422a18d763b07216a21e96d9445f9Michael Plass verify(mIWifiChip).forceDumpToDebugRingBuffer("Glop"); 63953f278b6fed422a18d763b07216a21e96d9445f9Michael Plass } 64053f278b6fed422a18d763b07216a21e96d9445f9Michael Plass 641b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plass} 642