WifiVendorHalTest.java revision d4c5eca00c9cae55561210479ed61a977923e0da
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; 22542b204c2120a9c91324ccc86c6695012ac02ab7Roshan Piusimport android.hardware.wifi.V1_0.IWifiChipEventCallback; 23d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Piusimport android.hardware.wifi.V1_0.IWifiIface; 24d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Piusimport android.hardware.wifi.V1_0.IWifiRttController; 25d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Piusimport android.hardware.wifi.V1_0.IWifiStaIface; 267e4b5bdfa88703a09f611e3ef8973ab7e286375dRoshan Piusimport android.hardware.wifi.V1_0.IWifiStaIfaceEventCallback; 27ea644ad9920420dbcf420602355f9f91a7266b14Michael Plassimport android.hardware.wifi.V1_0.RttCapabilities; 28ea644ad9920420dbcf420602355f9f91a7266b14Michael Plassimport android.hardware.wifi.V1_0.RttConfig; 29ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plassimport android.hardware.wifi.V1_0.StaApfPacketFilterCapabilities; 3056d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plassimport android.hardware.wifi.V1_0.StaBackgroundScanCapabilities; 31d4c5eca00c9cae55561210479ed61a977923e0daRoshan Piusimport android.hardware.wifi.V1_0.StaBackgroundScanParameters; 32d4c5eca00c9cae55561210479ed61a977923e0daRoshan Piusimport android.hardware.wifi.V1_0.StaScanData; 33d4c5eca00c9cae55561210479ed61a977923e0daRoshan Piusimport android.hardware.wifi.V1_0.StaScanDataFlagMask; 34d4c5eca00c9cae55561210479ed61a977923e0daRoshan Piusimport android.hardware.wifi.V1_0.StaScanResult; 35cbe44718452e93ef2b68974230231ff4fac99deeMichael Plassimport android.hardware.wifi.V1_0.WifiDebugHostWakeReasonStats; 365a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plassimport android.hardware.wifi.V1_0.WifiDebugPacketFateFrameType; 3753f278b6fed422a18d763b07216a21e96d9445f9Michael Plassimport android.hardware.wifi.V1_0.WifiDebugRingBufferFlags; 3853f278b6fed422a18d763b07216a21e96d9445f9Michael Plassimport android.hardware.wifi.V1_0.WifiDebugRingBufferStatus; 3953f278b6fed422a18d763b07216a21e96d9445f9Michael Plassimport android.hardware.wifi.V1_0.WifiDebugRingBufferVerboseLevel; 405a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plassimport android.hardware.wifi.V1_0.WifiDebugRxPacketFate; 415a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plassimport android.hardware.wifi.V1_0.WifiDebugRxPacketFateReport; 425a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plassimport android.hardware.wifi.V1_0.WifiDebugTxPacketFate; 435a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plassimport android.hardware.wifi.V1_0.WifiDebugTxPacketFateReport; 44d4c5eca00c9cae55561210479ed61a977923e0daRoshan Piusimport android.hardware.wifi.V1_0.WifiInformationElement; 454f2049a015722cae0f0169379d499d5d4fc98e30Michael Plassimport android.hardware.wifi.V1_0.WifiStatus; 464f2049a015722cae0f0169379d499d5d4fc98e30Michael Plassimport android.hardware.wifi.V1_0.WifiStatusCode; 47ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plassimport android.net.apf.ApfCapabilities; 48ea644ad9920420dbcf420602355f9f91a7266b14Michael Plassimport android.net.wifi.RttManager; 49d4c5eca00c9cae55561210479ed61a977923e0daRoshan Piusimport android.net.wifi.ScanResult; 501dc6d8ecde4cad66dc8cb7b97926f1120e7b0d57Michael Plassimport android.net.wifi.WifiManager; 51d4c5eca00c9cae55561210479ed61a977923e0daRoshan Piusimport android.net.wifi.WifiScanner; 52d4c5eca00c9cae55561210479ed61a977923e0daRoshan Piusimport android.net.wifi.WifiSsid; 53cbe44718452e93ef2b68974230231ff4fac99deeMichael Plassimport android.net.wifi.WifiWakeReasonAndCounts; 5453f278b6fed422a18d763b07216a21e96d9445f9Michael Plassimport android.os.HandlerThread; 5553f278b6fed422a18d763b07216a21e96d9445f9Michael Plassimport android.os.Looper; 5653f278b6fed422a18d763b07216a21e96d9445f9Michael Plassimport android.os.RemoteException; 57d4c5eca00c9cae55561210479ed61a977923e0daRoshan Piusimport android.util.Pair; 581dc6d8ecde4cad66dc8cb7b97926f1120e7b0d57Michael Plass 5970b995bed9674a30c56b7ae2585d5897900ff695Michael Plassimport com.android.server.connectivity.KeepalivePacketData; 60df8568a5aaed3c82ff7ef1ecafab85abf7a99da7Michael Plassimport com.android.server.wifi.util.NativeUtil; 61d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 62d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Piusimport static org.junit.Assert.*; 63d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Piusimport static org.mockito.Mockito.*; 64d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 65b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plassimport org.junit.Before; 66b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plassimport org.junit.Test; 67d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Piusimport org.mockito.ArgumentCaptor; 68b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plassimport org.mockito.Mock; 69b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plassimport org.mockito.MockitoAnnotations; 703401582e1b1defc1877c7c47c6a839611fa211c3Michael Plassimport org.mockito.stubbing.Answer; 71b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plass 7270b995bed9674a30c56b7ae2585d5897900ff695Michael Plassimport java.net.InetAddress; 73ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plassimport java.util.ArrayList; 745a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plassimport java.util.Arrays; 75d4c5eca00c9cae55561210479ed61a977923e0daRoshan Piusimport java.util.List; 765a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plassimport java.util.Random; 77ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass 78b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plass/** 79b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plass * Unit tests for {@link com.android.server.wifi.WifiVendorHal}. 80b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plass */ 81b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plasspublic class WifiVendorHalTest { 82b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plass 83d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius WifiVendorHal mWifiVendorHal; 844f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass private WifiStatus mWifiStatusSuccess; 854f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass private WifiStatus mWifiStatusFailure; 864f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass @Mock 874f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass private HalDeviceManager mHalDeviceManager; 884f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass @Mock 894f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass private HandlerThread mWifiStateMachineHandlerThread; 904f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass @Mock 914f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass private WifiVendorHal.HalDeviceManagerStatusListener mHalDeviceManagerStatusCallbacks; 924f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass @Mock 934f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass private IWifiApIface mIWifiApIface; 944f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass @Mock 954f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass private IWifiChip mIWifiChip; 964f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass @Mock 974f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass private IWifiStaIface mIWifiStaIface; 984f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass @Mock 994f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass private IWifiRttController mIWifiRttController; 1003401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass private IWifiStaIfaceEventCallback mIWifiStaIfaceEventCallback; 101d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius private IWifiChipEventCallback mIWifiChipEventCallback; 1023401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass 1033401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass /** 1043401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass * Identity function to supply a type to its argument, which is a lambda 1053401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass */ 1063401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass static Answer<WifiStatus> answerWifiStatus(Answer<WifiStatus> statusLambda) { 1073401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass return (statusLambda); 1083401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass } 109b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plass 110b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plass /** 111b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plass * Sets up for unit test 112b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plass */ 113b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plass @Before 114b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plass public void setUp() throws Exception { 115b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plass MockitoAnnotations.initMocks(this); 1164f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass mWifiStatusSuccess = new WifiStatus(); 1174f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass mWifiStatusSuccess.code = WifiStatusCode.SUCCESS; 1184f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass mWifiStatusFailure = new WifiStatus(); 1194f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass mWifiStatusFailure.code = WifiStatusCode.ERROR_UNKNOWN; 1204f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass mWifiStatusFailure.description = "I don't even know what a Mock Turtle is."; 1214f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass when(mIWifiStaIface.enableLinkLayerStatsCollection(false)).thenReturn(mWifiStatusSuccess); 1224f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass 123b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plass 124d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius // Setup the HalDeviceManager mock's start/stop behaviour. This can be overridden in 125d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius // individual tests, if needed. 126d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius doAnswer(new AnswerWithArguments() { 127d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius public boolean answer() { 128d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius when(mHalDeviceManager.isReady()).thenReturn(true); 129d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius when(mHalDeviceManager.isStarted()).thenReturn(true); 130d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius mHalDeviceManagerStatusCallbacks.onStatusChanged(); 131d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius return true; 132d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius } 133d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius }).when(mHalDeviceManager).start(); 134d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 135d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius doAnswer(new AnswerWithArguments() { 136d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius public void answer() { 137d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius when(mHalDeviceManager.isReady()).thenReturn(true); 138d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius when(mHalDeviceManager.isStarted()).thenReturn(false); 139d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius mHalDeviceManagerStatusCallbacks.onStatusChanged(); 140d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius } 141d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius }).when(mHalDeviceManager).stop(); 142d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius when(mHalDeviceManager.createStaIface(eq(null), eq(null))) 143d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius .thenReturn(mIWifiStaIface); 144d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius when(mHalDeviceManager.createApIface(eq(null), eq(null))) 145d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius .thenReturn(mIWifiApIface); 146d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius when(mHalDeviceManager.getChip(any(IWifiIface.class))) 147d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius .thenReturn(mIWifiChip); 148d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius when(mHalDeviceManager.createRttController(any(IWifiIface.class))) 149d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius .thenReturn(mIWifiRttController); 150542b204c2120a9c91324ccc86c6695012ac02ab7Roshan Pius when(mIWifiChip.registerEventCallback(any(IWifiChipEventCallback.class))) 151542b204c2120a9c91324ccc86c6695012ac02ab7Roshan Pius .thenReturn(mWifiStatusSuccess); 1523401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass mIWifiStaIfaceEventCallback = null; 1537e4b5bdfa88703a09f611e3ef8973ab7e286375dRoshan Pius when(mIWifiStaIface.registerEventCallback(any(IWifiStaIfaceEventCallback.class))) 1543401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass .thenAnswer(answerWifiStatus((invocation) -> { 1553401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass Object[] args = invocation.getArguments(); 1563401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass mIWifiStaIfaceEventCallback = (IWifiStaIfaceEventCallback) args[0]; 1573401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass return (mWifiStatusSuccess); 1583401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass })); 159d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius mIWifiChipEventCallback = null; 160d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius when(mIWifiChip.registerEventCallback(any(IWifiChipEventCallback.class))) 161d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius .thenAnswer(answerWifiStatus((invocation) -> { 162d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius Object[] args = invocation.getArguments(); 163d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius mIWifiChipEventCallback = (IWifiChipEventCallback) args[0]; 164d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius return (mWifiStatusSuccess); 165d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius })); 166d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius 167d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius // Create the vendor HAL object under test. 168d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius mWifiVendorHal = new WifiVendorHal(mHalDeviceManager, mWifiStateMachineHandlerThread); 169d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 170d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius // Initialize the vendor HAL to capture the registered callback. 171d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius mWifiVendorHal.initialize(); 172d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius ArgumentCaptor<WifiVendorHal.HalDeviceManagerStatusListener> hdmCallbackCaptor = 173d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius ArgumentCaptor.forClass(WifiVendorHal.HalDeviceManagerStatusListener.class); 174d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).registerStatusListener( 175d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius hdmCallbackCaptor.capture(), any(Looper.class)); 176d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius mHalDeviceManagerStatusCallbacks = hdmCallbackCaptor.getValue(); 177d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius 178b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plass } 179b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plass 180b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plass /** 181d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius * Tests the successful starting of HAL in STA mode using 182d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius * {@link WifiVendorHal#startVendorHal(boolean)}. 183d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius */ 184d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius @Test 1857e4b5bdfa88703a09f611e3ef8973ab7e286375dRoshan Pius public void testStartHalSuccessInStaMode() throws Exception { 186d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius assertTrue(mWifiVendorHal.startVendorHal(true)); 187d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius assertTrue(mWifiVendorHal.isHalStarted()); 188d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 189d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).start(); 190d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).createStaIface(eq(null), eq(null)); 191d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).getChip(eq(mIWifiStaIface)); 192d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).createRttController(eq(mIWifiStaIface)); 193d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).isReady(); 194d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).isStarted(); 195542b204c2120a9c91324ccc86c6695012ac02ab7Roshan Pius verify(mIWifiStaIface).registerEventCallback(any(IWifiStaIfaceEventCallback.class)); 196542b204c2120a9c91324ccc86c6695012ac02ab7Roshan Pius verify(mIWifiChip).registerEventCallback(any(IWifiChipEventCallback.class)); 197d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 198d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager, never()).createApIface(eq(null), eq(null)); 199d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius } 200d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 201d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius /** 202d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius * Tests the successful starting of HAL in AP mode using 203d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius * {@link WifiVendorHal#startVendorHal(boolean)}. 204d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius */ 205d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius @Test 2067e4b5bdfa88703a09f611e3ef8973ab7e286375dRoshan Pius public void testStartHalSuccessInApMode() throws Exception { 207d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius assertTrue(mWifiVendorHal.startVendorHal(false)); 208d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius assertTrue(mWifiVendorHal.isHalStarted()); 209d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 210d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).start(); 211d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).createApIface(eq(null), eq(null)); 212d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).getChip(eq(mIWifiApIface)); 213d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).isReady(); 214d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).isStarted(); 215d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 216d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager, never()).createStaIface(eq(null), eq(null)); 217d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager, never()).createRttController(any(IWifiIface.class)); 218d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius } 219d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 220d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius /** 221d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius * Tests the failure to start HAL in STA mode using 222d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius * {@link WifiVendorHal#startVendorHal(boolean)}. 223d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius */ 224d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius @Test 2257e4b5bdfa88703a09f611e3ef8973ab7e286375dRoshan Pius public void testStartHalFailureInStaMode() throws Exception { 226d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius // No callbacks are invoked in this case since the start itself failed. So, override 227d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius // default AnswerWithArguments that we setup. 228d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius doAnswer(new AnswerWithArguments() { 2297e4b5bdfa88703a09f611e3ef8973ab7e286375dRoshan Pius public boolean answer() throws Exception { 230d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius return false; 231d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius } 232d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius }).when(mHalDeviceManager).start(); 233d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius assertFalse(mWifiVendorHal.startVendorHal(true)); 234d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius assertFalse(mWifiVendorHal.isHalStarted()); 235d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 236d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).start(); 237d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 238d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager, never()).createStaIface(eq(null), eq(null)); 239d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager, never()).createApIface(eq(null), eq(null)); 240d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager, never()).getChip(any(IWifiIface.class)); 241d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager, never()).createRttController(any(IWifiIface.class)); 242542b204c2120a9c91324ccc86c6695012ac02ab7Roshan Pius verify(mIWifiStaIface, never()) 243542b204c2120a9c91324ccc86c6695012ac02ab7Roshan Pius .registerEventCallback(any(IWifiStaIfaceEventCallback.class)); 244d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius } 245d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 246d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius /** 247d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius * Tests the failure to start HAL in STA mode using 248d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius * {@link WifiVendorHal#startVendorHal(boolean)}. 249d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius */ 250d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius @Test 2517e4b5bdfa88703a09f611e3ef8973ab7e286375dRoshan Pius public void testStartHalFailureInIfaceCreationInStaMode() throws Exception { 252d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius when(mHalDeviceManager.createStaIface(eq(null), eq(null))).thenReturn(null); 253d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius assertFalse(mWifiVendorHal.startVendorHal(true)); 254d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius assertFalse(mWifiVendorHal.isHalStarted()); 255d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 256d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).start(); 257d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).createStaIface(eq(null), eq(null)); 258d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).stop(); 259d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 260d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager, never()).createApIface(eq(null), eq(null)); 261d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager, never()).getChip(any(IWifiIface.class)); 262d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager, never()).createRttController(any(IWifiIface.class)); 263542b204c2120a9c91324ccc86c6695012ac02ab7Roshan Pius verify(mIWifiStaIface, never()) 264542b204c2120a9c91324ccc86c6695012ac02ab7Roshan Pius .registerEventCallback(any(IWifiStaIfaceEventCallback.class)); 265d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius } 266d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 267d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius /** 268d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius * Tests the failure to start HAL in STA mode using 269d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius * {@link WifiVendorHal#startVendorHal(boolean)}. 270d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius */ 271d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius @Test 2727e4b5bdfa88703a09f611e3ef8973ab7e286375dRoshan Pius public void testStartHalFailureInRttControllerCreationInStaMode() throws Exception { 273d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius when(mHalDeviceManager.createRttController(any(IWifiIface.class))).thenReturn(null); 274d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius assertFalse(mWifiVendorHal.startVendorHal(true)); 275d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius assertFalse(mWifiVendorHal.isHalStarted()); 276d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 277d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).start(); 278d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).createStaIface(eq(null), eq(null)); 279d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).createRttController(eq(mIWifiStaIface)); 280d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).stop(); 281542b204c2120a9c91324ccc86c6695012ac02ab7Roshan Pius verify(mIWifiStaIface).registerEventCallback(any(IWifiStaIfaceEventCallback.class)); 282d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 283d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager, never()).createApIface(eq(null), eq(null)); 284d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager, never()).getChip(any(IWifiIface.class)); 285d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius } 286d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 287d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius /** 288d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius * Tests the failure to start HAL in STA mode using 289d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius * {@link WifiVendorHal#startVendorHal(boolean)}. 290d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius */ 291d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius @Test 2927e4b5bdfa88703a09f611e3ef8973ab7e286375dRoshan Pius public void testStartHalFailureInChipGetInStaMode() throws Exception { 293d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius when(mHalDeviceManager.getChip(any(IWifiIface.class))).thenReturn(null); 294d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius assertFalse(mWifiVendorHal.startVendorHal(true)); 295d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius assertFalse(mWifiVendorHal.isHalStarted()); 296d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 297d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).start(); 298d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).createStaIface(eq(null), eq(null)); 299d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).createRttController(eq(mIWifiStaIface)); 300d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).getChip(any(IWifiIface.class)); 301d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).stop(); 302542b204c2120a9c91324ccc86c6695012ac02ab7Roshan Pius verify(mIWifiStaIface).registerEventCallback(any(IWifiStaIfaceEventCallback.class)); 303d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 304d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager, never()).createApIface(eq(null), eq(null)); 305d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius } 306d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 307d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius /** 308d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius * Tests the failure to start HAL in STA mode using 309d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius * {@link WifiVendorHal#startVendorHal(boolean)}. 310d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius */ 311d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius @Test 3127e4b5bdfa88703a09f611e3ef8973ab7e286375dRoshan Pius public void testStartHalFailureInStaIfaceCallbackRegistration() throws Exception { 3137e4b5bdfa88703a09f611e3ef8973ab7e286375dRoshan Pius when(mIWifiStaIface.registerEventCallback(any(IWifiStaIfaceEventCallback.class))) 3147e4b5bdfa88703a09f611e3ef8973ab7e286375dRoshan Pius .thenReturn(mWifiStatusFailure); 3157e4b5bdfa88703a09f611e3ef8973ab7e286375dRoshan Pius assertFalse(mWifiVendorHal.startVendorHal(true)); 3167e4b5bdfa88703a09f611e3ef8973ab7e286375dRoshan Pius assertFalse(mWifiVendorHal.isHalStarted()); 3177e4b5bdfa88703a09f611e3ef8973ab7e286375dRoshan Pius 3187e4b5bdfa88703a09f611e3ef8973ab7e286375dRoshan Pius verify(mHalDeviceManager).start(); 3197e4b5bdfa88703a09f611e3ef8973ab7e286375dRoshan Pius verify(mHalDeviceManager).createStaIface(eq(null), eq(null)); 3207e4b5bdfa88703a09f611e3ef8973ab7e286375dRoshan Pius verify(mHalDeviceManager).stop(); 321542b204c2120a9c91324ccc86c6695012ac02ab7Roshan Pius verify(mIWifiStaIface).registerEventCallback(any(IWifiStaIfaceEventCallback.class)); 3227e4b5bdfa88703a09f611e3ef8973ab7e286375dRoshan Pius 3237e4b5bdfa88703a09f611e3ef8973ab7e286375dRoshan Pius verify(mHalDeviceManager, never()).createRttController(eq(mIWifiStaIface)); 3247e4b5bdfa88703a09f611e3ef8973ab7e286375dRoshan Pius verify(mHalDeviceManager, never()).getChip(any(IWifiIface.class)); 3257e4b5bdfa88703a09f611e3ef8973ab7e286375dRoshan Pius verify(mHalDeviceManager, never()).createApIface(eq(null), eq(null)); 3267e4b5bdfa88703a09f611e3ef8973ab7e286375dRoshan Pius } 3277e4b5bdfa88703a09f611e3ef8973ab7e286375dRoshan Pius 3287e4b5bdfa88703a09f611e3ef8973ab7e286375dRoshan Pius /** 3297e4b5bdfa88703a09f611e3ef8973ab7e286375dRoshan Pius * Tests the failure to start HAL in STA mode using 3307e4b5bdfa88703a09f611e3ef8973ab7e286375dRoshan Pius * {@link WifiVendorHal#startVendorHal(boolean)}. 331542b204c2120a9c91324ccc86c6695012ac02ab7Roshan Pius */ 332542b204c2120a9c91324ccc86c6695012ac02ab7Roshan Pius @Test 333542b204c2120a9c91324ccc86c6695012ac02ab7Roshan Pius public void testStartHalFailureInChipCallbackRegistration() throws Exception { 334542b204c2120a9c91324ccc86c6695012ac02ab7Roshan Pius when(mIWifiChip.registerEventCallback(any(IWifiChipEventCallback.class))) 335542b204c2120a9c91324ccc86c6695012ac02ab7Roshan Pius .thenReturn(mWifiStatusFailure); 336542b204c2120a9c91324ccc86c6695012ac02ab7Roshan Pius assertFalse(mWifiVendorHal.startVendorHal(true)); 337542b204c2120a9c91324ccc86c6695012ac02ab7Roshan Pius assertFalse(mWifiVendorHal.isHalStarted()); 338542b204c2120a9c91324ccc86c6695012ac02ab7Roshan Pius 339542b204c2120a9c91324ccc86c6695012ac02ab7Roshan Pius verify(mHalDeviceManager).start(); 340542b204c2120a9c91324ccc86c6695012ac02ab7Roshan Pius verify(mHalDeviceManager).createStaIface(eq(null), eq(null)); 341542b204c2120a9c91324ccc86c6695012ac02ab7Roshan Pius verify(mHalDeviceManager).createRttController(eq(mIWifiStaIface)); 342542b204c2120a9c91324ccc86c6695012ac02ab7Roshan Pius verify(mHalDeviceManager).getChip(any(IWifiIface.class)); 343542b204c2120a9c91324ccc86c6695012ac02ab7Roshan Pius verify(mHalDeviceManager).stop(); 344542b204c2120a9c91324ccc86c6695012ac02ab7Roshan Pius verify(mIWifiStaIface).registerEventCallback(any(IWifiStaIfaceEventCallback.class)); 345542b204c2120a9c91324ccc86c6695012ac02ab7Roshan Pius verify(mIWifiChip).registerEventCallback(any(IWifiChipEventCallback.class)); 346542b204c2120a9c91324ccc86c6695012ac02ab7Roshan Pius 347542b204c2120a9c91324ccc86c6695012ac02ab7Roshan Pius verify(mHalDeviceManager, never()).createApIface(eq(null), eq(null)); 348542b204c2120a9c91324ccc86c6695012ac02ab7Roshan Pius } 349542b204c2120a9c91324ccc86c6695012ac02ab7Roshan Pius 350542b204c2120a9c91324ccc86c6695012ac02ab7Roshan Pius /** 351542b204c2120a9c91324ccc86c6695012ac02ab7Roshan Pius * Tests the failure to start HAL in STA mode using 352542b204c2120a9c91324ccc86c6695012ac02ab7Roshan Pius * {@link WifiVendorHal#startVendorHal(boolean)}. 3537e4b5bdfa88703a09f611e3ef8973ab7e286375dRoshan Pius */ 3547e4b5bdfa88703a09f611e3ef8973ab7e286375dRoshan Pius @Test 3557e4b5bdfa88703a09f611e3ef8973ab7e286375dRoshan Pius public void testStartHalFailureInApMode() throws Exception { 356d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius when(mHalDeviceManager.createApIface(eq(null), eq(null))).thenReturn(null); 357d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius assertFalse(mWifiVendorHal.startVendorHal(false)); 358d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius assertFalse(mWifiVendorHal.isHalStarted()); 359d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 360d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).start(); 361d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).createApIface(eq(null), eq(null)); 362d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).stop(); 363d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 364d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager, never()).createStaIface(eq(null), eq(null)); 365d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager, never()).getChip(any(IWifiIface.class)); 366d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager, never()).createRttController(any(IWifiIface.class)); 367d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius } 368d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 369d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius /** 370d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius * Tests the stopping of HAL in STA mode using 371d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius * {@link WifiVendorHal#stopVendorHal()}. 372d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius */ 373d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius @Test 374d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius public void testStopHalInStaMode() { 375d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius assertTrue(mWifiVendorHal.startVendorHal(true)); 376d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius assertTrue(mWifiVendorHal.isHalStarted()); 377d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 378d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius mWifiVendorHal.stopVendorHal(); 379d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius assertFalse(mWifiVendorHal.isHalStarted()); 380d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 381d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).start(); 382d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).stop(); 383d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).createStaIface(eq(null), eq(null)); 384d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).getChip(eq(mIWifiStaIface)); 385d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).createRttController(eq(mIWifiStaIface)); 386d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager, times(2)).isReady(); 387d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager, times(2)).isStarted(); 388d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 389d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager, never()).createApIface(eq(null), eq(null)); 390d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius } 391d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 392d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius /** 393d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius * Tests the stopping of HAL in AP mode using 394d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius * {@link WifiVendorHal#stopVendorHal()}. 395d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius */ 396d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius @Test 397d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius public void testStopHalInApMode() { 398d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius assertTrue(mWifiVendorHal.startVendorHal(false)); 399d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius assertTrue(mWifiVendorHal.isHalStarted()); 400d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 401d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius mWifiVendorHal.stopVendorHal(); 402d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius assertFalse(mWifiVendorHal.isHalStarted()); 403d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 404d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).start(); 405d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).stop(); 406d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).createApIface(eq(null), eq(null)); 407d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).getChip(eq(mIWifiApIface)); 408d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager, times(2)).isReady(); 409d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager, times(2)).isStarted(); 410d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 411d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager, never()).createStaIface(eq(null), eq(null)); 412d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager, never()).createRttController(any(IWifiIface.class)); 413d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius } 4144f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass 4154f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass /** 41656d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass * Test that getApfCapabilities is hooked up to the HAL correctly 41756d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass * 41856d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass * A call before the vendor HAL is started should return a non-null result with version 0 41956d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass * 42056d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass * A call after the HAL is started should return the mocked values. 42156d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass */ 42256d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass @Test 42356d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass public void testGetScanCapabilities() throws Exception { 42456d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass StaBackgroundScanCapabilities capabilities = new StaBackgroundScanCapabilities(); 42556d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass capabilities.maxCacheSize = 12; 42656d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass capabilities.maxBuckets = 34; 42756d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass capabilities.maxApCachePerScan = 56; 42856d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass capabilities.maxReportingThreshold = 78; 42956d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass 43056d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass doAnswer(new AnswerWithArguments() { 43156d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass public void answer(IWifiStaIface.getBackgroundScanCapabilitiesCallback cb) 43256d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass throws RemoteException { 43356d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass cb.onValues(mWifiStatusSuccess, capabilities); 43456d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass } 43556d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass }).when(mIWifiStaIface).getBackgroundScanCapabilities(any( 43656d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass IWifiStaIface.getBackgroundScanCapabilitiesCallback.class)); 43756d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass 43856d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass WifiNative.ScanCapabilities result = new WifiNative.ScanCapabilities(); 43956d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass 44056d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass assertFalse(mWifiVendorHal.getScanCapabilities(result)); // should fail - not started 44156d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass assertTrue(mWifiVendorHal.startVendorHalSta()); // Start the vendor hal 44256d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass assertTrue(mWifiVendorHal.getScanCapabilities(result)); // should succeed 44356d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass 44456d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass assertEquals(12, result.max_scan_cache_size); 44556d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass assertEquals(34, result.max_scan_buckets); 44656d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass assertEquals(56, result.max_ap_cache_per_scan); 44756d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass assertEquals(78, result.max_scan_reporting_threshold); 44856d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass } 44956d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass 45056d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass private void setupValidFrequenciesForBand(ArrayList<Integer> frequencies) throws Exception { 45156d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass 45256d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass doAnswer(new AnswerWithArguments() { 45356d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass public void answer(int band, IWifiStaIface.getValidFrequenciesForBandCallback cb) 45456d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass throws RemoteException { 45556d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass cb.onValues(mWifiStatusSuccess, frequencies); 45656d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass } 45756d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass }).when(mIWifiStaIface).getValidFrequenciesForBand(anyInt(), any( 45856d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass IWifiStaIface.getValidFrequenciesForBandCallback.class)); 45956d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass 46056d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass doAnswer(new AnswerWithArguments() { 46156d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass public void answer(int band, IWifiApIface.getValidFrequenciesForBandCallback cb) 46256d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass throws RemoteException { 46356d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass cb.onValues(mWifiStatusSuccess, frequencies); 46456d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass } 46556d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass }).when(mIWifiApIface).getValidFrequenciesForBand(anyInt(), any( 46656d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass IWifiApIface.getValidFrequenciesForBandCallback.class)); 46756d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass 46856d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass } 46956d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass 47056d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass private int[] intArrayFromArrayList(ArrayList<Integer> in) { 47156d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass int[] ans = new int[in.size()]; 47256d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass int i = 0; 47356d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass for (Integer e : in) ans[i++] = e; 47456d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass return ans; 47556d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass } 47656d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass 47756d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass /** 47856d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass * Test that isGetChannelsForBandSupported works in STA mode 47956d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass */ 48056d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass @Test 48156d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass public void testGetChannelsForBandSupportedSta() throws Exception { 48256d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass ArrayList<Integer> freq = new ArrayList<>(); 48356d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass freq.add(2405); 48456d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass 48556d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass setupValidFrequenciesForBand(freq); 48656d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass 48756d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass assertFalse(mWifiVendorHal.isGetChannelsForBandSupported()); 48856d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass 48956d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass assertTrue(mWifiVendorHal.startVendorHalSta()); 49056d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass 49156d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass assertTrue(mWifiVendorHal.isGetChannelsForBandSupported()); 49256d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass } 49356d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass 49456d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass /** 49556d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass * Test that isGetChannelsForBandSupported works in AP mode 49656d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass */ 49756d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass @Test 49856d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass public void testGetChannelsForBandSupportedAp() throws Exception { 49956d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass ArrayList<Integer> freq = new ArrayList<>(); 50056d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass freq.add(2405); 50156d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass 50256d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass setupValidFrequenciesForBand(freq); 50356d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass 50456d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass assertFalse(mWifiVendorHal.isGetChannelsForBandSupported()); 50556d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass 50656d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass assertTrue(mWifiVendorHal.startVendorHalAp()); 50756d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass 50856d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass assertTrue(mWifiVendorHal.isGetChannelsForBandSupported()); 50956d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass } 51056d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass 51156d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass /** 5121dc6d8ecde4cad66dc8cb7b97926f1120e7b0d57Michael Plass * Test translation to WifiManager.WIFI_FEATURE_* 5131dc6d8ecde4cad66dc8cb7b97926f1120e7b0d57Michael Plass * 5141dc6d8ecde4cad66dc8cb7b97926f1120e7b0d57Michael Plass * Just do a spot-check with a few feature bits here; since the code is table- 5151dc6d8ecde4cad66dc8cb7b97926f1120e7b0d57Michael Plass * driven we don't have to work hard to exercise all of it. 5161dc6d8ecde4cad66dc8cb7b97926f1120e7b0d57Michael Plass */ 5171dc6d8ecde4cad66dc8cb7b97926f1120e7b0d57Michael Plass @Test 5181dc6d8ecde4cad66dc8cb7b97926f1120e7b0d57Michael Plass public void testFeatureMaskTranslation() { 5191dc6d8ecde4cad66dc8cb7b97926f1120e7b0d57Michael Plass int caps = ( 5201dc6d8ecde4cad66dc8cb7b97926f1120e7b0d57Michael Plass IWifiStaIface.StaIfaceCapabilityMask.BACKGROUND_SCAN 5211dc6d8ecde4cad66dc8cb7b97926f1120e7b0d57Michael Plass | IWifiStaIface.StaIfaceCapabilityMask.LINK_LAYER_STATS 5221dc6d8ecde4cad66dc8cb7b97926f1120e7b0d57Michael Plass ); 5231dc6d8ecde4cad66dc8cb7b97926f1120e7b0d57Michael Plass int expected = ( 524691806f65a5f259fd8e6b709c97d0035c418c483Michael Plass WifiManager.WIFI_FEATURE_SCANNER 5251dc6d8ecde4cad66dc8cb7b97926f1120e7b0d57Michael Plass | WifiManager.WIFI_FEATURE_LINK_LAYER_STATS); 5261dc6d8ecde4cad66dc8cb7b97926f1120e7b0d57Michael Plass assertEquals(expected, mWifiVendorHal.wifiFeatureMaskFromStaCapabilities(caps)); 5271dc6d8ecde4cad66dc8cb7b97926f1120e7b0d57Michael Plass } 5281dc6d8ecde4cad66dc8cb7b97926f1120e7b0d57Michael Plass 5291dc6d8ecde4cad66dc8cb7b97926f1120e7b0d57Michael Plass /** 5304f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass * Test enablement of link layer stats after startup 5314f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass * <p> 5324f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass * Request link layer stats before HAL start 5334f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass * - should not make it to the HAL layer 5344f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass * Start the HAL in STA mode 5354f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass * Request link layer stats twice more 5364f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass * - enable request should make it to the HAL layer 5374f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass * - HAL layer should have been called to make the requests (i.e., two calls total) 5384f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass */ 5394f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass @Test 5404f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass public void testLinkLayerStatsEnableAfterStartup() throws Exception { 5414f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass doNothing().when(mIWifiStaIface).getLinkLayerStats(any()); 5424f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass 5434f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass assertNull(mWifiVendorHal.getWifiLinkLayerStats()); 5444f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass assertTrue(mWifiVendorHal.startVendorHalSta()); 5454f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass assertTrue(mWifiVendorHal.isHalStarted()); 5464f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass 5474f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass verify(mHalDeviceManager).start(); 5484f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass mWifiVendorHal.getWifiLinkLayerStats(); 5494f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass mWifiVendorHal.getWifiLinkLayerStats(); 5504f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass verify(mIWifiStaIface).enableLinkLayerStatsCollection(false); // mLinkLayerStatsDebug 5514f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass verify(mIWifiStaIface, times(2)).getLinkLayerStats(any()); 5524f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass } 5534f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass 5544f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass /** 5554f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass * Test that link layer stats are not enabled and harmless in AP mode 5564f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass * <p> 5574f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass * Start the HAL in AP mode 5584f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass * - stats should not be enabled 5594f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass * Request link layer stats 5604f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass * - HAL layer should have been called to make the request 5614f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass */ 5624f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass @Test 5634f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass public void testLinkLayerStatsNotEnabledAndHarmlessInApMode() throws Exception { 5644f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass doNothing().when(mIWifiStaIface).getLinkLayerStats(any()); 5654f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass 5664f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass assertTrue(mWifiVendorHal.startVendorHalAp()); 5674f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass assertTrue(mWifiVendorHal.isHalStarted()); 5684f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass assertNull(mWifiVendorHal.getWifiLinkLayerStats()); 5694f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass 5704f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass verify(mHalDeviceManager).start(); 5714f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass 5724f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass verify(mIWifiStaIface, never()).enableLinkLayerStatsCollection(false); 5734f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass verify(mIWifiStaIface, never()).getLinkLayerStats(any()); 5744f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass } 5754f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass 5764f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass // TODO(b/34900534) add test for correct MOVE CORRESPONDING of fields 5774f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass 5787e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass /** 5797e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass * Test that getFirmwareVersion() and getDriverVersion() work 5807e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass * 5817e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass * Calls before the STA is started are expected to return null. 5827e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass */ 5837e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass @Test 5847e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass public void testVersionGetters() throws Exception { 5857e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass String firmwareVersion = "fuzzy"; 5867e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass String driverVersion = "dizzy"; 5877e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass IWifiChip.ChipDebugInfo chipDebugInfo = new IWifiChip.ChipDebugInfo(); 5887e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass chipDebugInfo.firmwareDescription = firmwareVersion; 5897e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass chipDebugInfo.driverDescription = driverVersion; 5907e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass 5917e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass doAnswer(new AnswerWithArguments() { 5927e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass public void answer(IWifiChip.requestChipDebugInfoCallback cb) throws RemoteException { 5937e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass cb.onValues(mWifiStatusSuccess, chipDebugInfo); 5947e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass } 5957e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass }).when(mIWifiChip).requestChipDebugInfo(any(IWifiChip.requestChipDebugInfoCallback.class)); 5967e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass 5977e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass assertNull(mWifiVendorHal.getFirmwareVersion()); 5987e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass assertNull(mWifiVendorHal.getDriverVersion()); 5997e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass 6007e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass assertTrue(mWifiVendorHal.startVendorHalSta()); 6017e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass 6027e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass assertEquals(firmwareVersion, mWifiVendorHal.getFirmwareVersion()); 6037e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass assertEquals(driverVersion, mWifiVendorHal.getDriverVersion()); 6047e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass } 605ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass 606ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass /** 607ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass * For checkRoundTripIntTranslation lambdas 608ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass */ 609ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass interface IntForInt { 610ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass int translate(int value); 611ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass } 612ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass 613ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass /** 614ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass * Checks that translation from x to y and back again is the identity function 615ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass * 616ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass * @param xFromY reverse translator 617ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass * @param yFromX forward translator 618ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass * @param xLimit non-inclusive upper bound on x (lower bound is zero) 619ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass */ 620ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass private void checkRoundTripIntTranslation( 621ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass IntForInt xFromY, IntForInt yFromX, int xFirst, int xLimit) throws Exception { 622ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass int ex = 0; 623ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass for (int i = xFirst; i < xLimit; i++) { 624ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass assertEquals(i, xFromY.translate(yFromX.translate(i))); 625ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass } 626ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass try { 627ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass yFromX.translate(xLimit); 628ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass assertTrue("expected an exception here", false); 629ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass } catch (IllegalArgumentException e) { 630ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass ex++; 631ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass } 632ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass try { 633ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass xFromY.translate(yFromX.translate(xLimit - 1) + 1); 634ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass assertTrue("expected an exception here", false); 635ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass } catch (IllegalArgumentException e) { 636ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass ex++; 637ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass } 638ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass assertEquals(2, ex); 639ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass } 640ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass 641ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass 642ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass /** 643ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass * Test translations of RTT type 644ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass */ 645ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass @Test 646ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass public void testRttTypeTranslation() throws Exception { 647ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass checkRoundTripIntTranslation( 648ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass (y) -> WifiVendorHal.halRttTypeFromFrameworkRttType(y), 649ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass (x) -> WifiVendorHal.frameworkRttTypeFromHalRttType(x), 650ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass 1, 3); 651ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass } 652ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass 653ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass /** 654ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass * Test translations of peer type 655ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass */ 656ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass @Test 657ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass public void testPeerTranslation() throws Exception { 658ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass checkRoundTripIntTranslation( 659ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass (y) -> WifiVendorHal.halPeerFromFrameworkPeer(y), 660ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass (x) -> WifiVendorHal.frameworkPeerFromHalPeer(x), 661ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass 1, 6); 662ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass } 663ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass 664ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass /** 665ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass * Test translations of channel width 666ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass */ 667ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass @Test 668ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass public void testChannelWidth() throws Exception { 669ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass checkRoundTripIntTranslation( 670ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass (y) -> WifiVendorHal.halChannelWidthFromFrameworkChannelWidth(y), 671ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass (x) -> WifiVendorHal.frameworkChannelWidthFromHalChannelWidth(x), 672ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass 0, 5); 673ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass } 674ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass 675ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass /** 676ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass * Test translations of preamble type mask 677ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass */ 678ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass @Test 679ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass public void testPreambleTranslation() throws Exception { 680ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass checkRoundTripIntTranslation( 681ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass (y) -> WifiVendorHal.halPreambleFromFrameworkPreamble(y), 682ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass (x) -> WifiVendorHal.frameworkPreambleFromHalPreamble(x), 683ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass 0, 8); 684ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass } 685ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass 686ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass /** 687ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass * Test translations of bandwidth mask 688ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass */ 689ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass @Test 690ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass public void testBandwidthTranslations() throws Exception { 691ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass checkRoundTripIntTranslation( 692ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass (y) -> WifiVendorHal.halBwFromFrameworkBw(y), 693ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass (x) -> WifiVendorHal.frameworkBwFromHalBw(x), 694ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass 0, 64); 695ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass } 696ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass 697ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass @Test 698ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass public void testGetRttStuff() throws Exception { 699ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass RttManager.RttParams params = new RttManager.RttParams(); 700ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass //TODO(b/34901744) populate 701ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass RttConfig config = WifiVendorHal.halRttConfigFromFrameworkRttParams(params); 702ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass //TODO(b/34901744) check 703ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass } 704ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass 705ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass @Test 706ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass public void testGetRttCapabilities() throws Exception { 707ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass RttCapabilities capabilities = new RttCapabilities(); 708ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass //TODO(b/34901744) populate 709ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass 710ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass doAnswer(new AnswerWithArguments() { 711ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass public void answer(IWifiRttController.getCapabilitiesCallback cb) 712ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass throws RemoteException { 713ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass cb.onValues(mWifiStatusSuccess, capabilities); 714ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass } 715ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass }).when(mIWifiRttController).getCapabilities(any( 716ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass IWifiRttController.getCapabilitiesCallback.class)); 717ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass 718ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass assertNull(mWifiVendorHal.getRttCapabilities()); 719ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass 720ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass assertTrue(mWifiVendorHal.startVendorHalSta()); 721ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass 722ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass RttManager.RttCapabilities actual = mWifiVendorHal.getRttCapabilities(); 723ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass //TODO(b/34901744) check 724ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass 725ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass } 726ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass 727ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass //TODO(b/34901744) negative RTT test cases as well. 728ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass // e.g. invoke RTT without putting the HAL in the correct mode. 729ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass 730ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass /** 731df8568a5aaed3c82ff7ef1ecafab85abf7a99da7Michael Plass * Test that setScanningMacOui is hooked up to the HAL correctly 732df8568a5aaed3c82ff7ef1ecafab85abf7a99da7Michael Plass */ 733df8568a5aaed3c82ff7ef1ecafab85abf7a99da7Michael Plass @Test 734df8568a5aaed3c82ff7ef1ecafab85abf7a99da7Michael Plass public void testSetScanningMacOui() throws Exception { 735df8568a5aaed3c82ff7ef1ecafab85abf7a99da7Michael Plass byte[] oui = NativeUtil.macAddressOuiToByteArray("DA:A1:19"); 736df8568a5aaed3c82ff7ef1ecafab85abf7a99da7Michael Plass byte[] zzz = NativeUtil.macAddressOuiToByteArray("00:00:00"); 737df8568a5aaed3c82ff7ef1ecafab85abf7a99da7Michael Plass 738df8568a5aaed3c82ff7ef1ecafab85abf7a99da7Michael Plass when(mIWifiStaIface.setScanningMacOui(any())).thenReturn(mWifiStatusSuccess); 739df8568a5aaed3c82ff7ef1ecafab85abf7a99da7Michael Plass 740df8568a5aaed3c82ff7ef1ecafab85abf7a99da7Michael Plass assertFalse(mWifiVendorHal.setScanningMacOui(oui)); // expect fail - STA not started 741df8568a5aaed3c82ff7ef1ecafab85abf7a99da7Michael Plass assertTrue(mWifiVendorHal.startVendorHalSta()); 742df8568a5aaed3c82ff7ef1ecafab85abf7a99da7Michael Plass assertFalse(mWifiVendorHal.setScanningMacOui(null)); // expect fail - null 743df8568a5aaed3c82ff7ef1ecafab85abf7a99da7Michael Plass assertFalse(mWifiVendorHal.setScanningMacOui(new byte[]{(byte) 1})); // expect fail - len 744df8568a5aaed3c82ff7ef1ecafab85abf7a99da7Michael Plass assertTrue(mWifiVendorHal.setScanningMacOui(oui)); 745df8568a5aaed3c82ff7ef1ecafab85abf7a99da7Michael Plass assertTrue(mWifiVendorHal.setScanningMacOui(zzz)); 746df8568a5aaed3c82ff7ef1ecafab85abf7a99da7Michael Plass 747df8568a5aaed3c82ff7ef1ecafab85abf7a99da7Michael Plass verify(mIWifiStaIface).setScanningMacOui(eq(oui)); 748df8568a5aaed3c82ff7ef1ecafab85abf7a99da7Michael Plass verify(mIWifiStaIface).setScanningMacOui(eq(zzz)); 749df8568a5aaed3c82ff7ef1ecafab85abf7a99da7Michael Plass } 750df8568a5aaed3c82ff7ef1ecafab85abf7a99da7Michael Plass 75170b995bed9674a30c56b7ae2585d5897900ff695Michael Plass @Test 75270b995bed9674a30c56b7ae2585d5897900ff695Michael Plass public void testStartSendingOffloadedPacket() throws Exception { 75370b995bed9674a30c56b7ae2585d5897900ff695Michael Plass byte[] srcMac = NativeUtil.macAddressToByteArray("4007b2088c81"); 75470b995bed9674a30c56b7ae2585d5897900ff695Michael Plass InetAddress src = InetAddress.parseNumericAddress("192.168.13.13"); 75570b995bed9674a30c56b7ae2585d5897900ff695Michael Plass InetAddress dst = InetAddress.parseNumericAddress("93.184.216.34"); 75670b995bed9674a30c56b7ae2585d5897900ff695Michael Plass int slot = 13; 75770b995bed9674a30c56b7ae2585d5897900ff695Michael Plass int millis = 16000; 75870b995bed9674a30c56b7ae2585d5897900ff695Michael Plass 75970b995bed9674a30c56b7ae2585d5897900ff695Michael Plass KeepalivePacketData kap = KeepalivePacketData.nattKeepalivePacket(src, 63000, dst, 4500); 76070b995bed9674a30c56b7ae2585d5897900ff695Michael Plass 76170b995bed9674a30c56b7ae2585d5897900ff695Michael Plass when(mIWifiStaIface.startSendingKeepAlivePackets( 76270b995bed9674a30c56b7ae2585d5897900ff695Michael Plass anyInt(), any(), anyShort(), any(), any(), anyInt() 76370b995bed9674a30c56b7ae2585d5897900ff695Michael Plass )).thenReturn(mWifiStatusSuccess); 76470b995bed9674a30c56b7ae2585d5897900ff695Michael Plass 76570b995bed9674a30c56b7ae2585d5897900ff695Michael Plass assertTrue(mWifiVendorHal.startVendorHalSta()); 76670b995bed9674a30c56b7ae2585d5897900ff695Michael Plass assertTrue(0 == mWifiVendorHal.startSendingOffloadedPacket(slot, srcMac, kap, millis)); 76770b995bed9674a30c56b7ae2585d5897900ff695Michael Plass 76870b995bed9674a30c56b7ae2585d5897900ff695Michael Plass verify(mIWifiStaIface).startSendingKeepAlivePackets( 76970b995bed9674a30c56b7ae2585d5897900ff695Michael Plass eq(slot), any(), anyShort(), any(), any(), eq(millis)); 77070b995bed9674a30c56b7ae2585d5897900ff695Michael Plass } 77170b995bed9674a30c56b7ae2585d5897900ff695Michael Plass 77270b995bed9674a30c56b7ae2585d5897900ff695Michael Plass @Test 77370b995bed9674a30c56b7ae2585d5897900ff695Michael Plass public void testStopSendingOffloadedPacket() throws Exception { 77470b995bed9674a30c56b7ae2585d5897900ff695Michael Plass int slot = 13; 77570b995bed9674a30c56b7ae2585d5897900ff695Michael Plass 77670b995bed9674a30c56b7ae2585d5897900ff695Michael Plass when(mIWifiStaIface.stopSendingKeepAlivePackets(anyInt())).thenReturn(mWifiStatusSuccess); 77770b995bed9674a30c56b7ae2585d5897900ff695Michael Plass 77870b995bed9674a30c56b7ae2585d5897900ff695Michael Plass assertTrue(mWifiVendorHal.startVendorHalSta()); 77970b995bed9674a30c56b7ae2585d5897900ff695Michael Plass assertTrue(0 == mWifiVendorHal.stopSendingOffloadedPacket(slot)); 78070b995bed9674a30c56b7ae2585d5897900ff695Michael Plass 78170b995bed9674a30c56b7ae2585d5897900ff695Michael Plass verify(mIWifiStaIface).stopSendingKeepAlivePackets(eq(slot)); 78270b995bed9674a30c56b7ae2585d5897900ff695Michael Plass } 78370b995bed9674a30c56b7ae2585d5897900ff695Michael Plass 784df8568a5aaed3c82ff7ef1ecafab85abf7a99da7Michael Plass /** 7853401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass * Test the setup, invocation, and removal of a RSSI event handler 7863401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass * 7873401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass */ 7883401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass @Test 7893401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass public void testRssiMonitoring() throws Exception { 7903401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass when(mIWifiStaIface.startRssiMonitoring(anyInt(), anyInt(), anyInt())) 7913401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass .thenReturn(mWifiStatusSuccess); 7923401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass when(mIWifiStaIface.stopRssiMonitoring(anyInt())) 7933401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass .thenReturn(mWifiStatusSuccess); 7943401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass 7953401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass ArrayList<Byte> breach = new ArrayList<>(10); 7963401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass byte hi = -21; 7973401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass byte med = -42; 7983401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass byte lo = -84; 7993401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass Byte lower = -88; 8003401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass WifiNative.WifiRssiEventHandler handler; 8013401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass handler = ((cur) -> { 8023401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass breach.add(cur); 8033401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass }); 8043401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass assertEquals(-1, mWifiVendorHal.startRssiMonitoring(hi, lo, handler)); // not started 8053401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass assertEquals(-1, mWifiVendorHal.stopRssiMonitoring()); // not started 8063401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass assertTrue(mWifiVendorHal.startVendorHalSta()); 8073401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass assertEquals(0, mWifiVendorHal.startRssiMonitoring(hi, lo, handler)); 8083401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass int theCmdId = mWifiVendorHal.sRssiMonCmdId; 8093401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass breach.clear(); 8103401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass mIWifiStaIfaceEventCallback.onRssiThresholdBreached(theCmdId, new byte[6], lower); 8113401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass assertEquals(breach.get(0), lower); 8123401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass assertEquals(0, mWifiVendorHal.stopRssiMonitoring()); 8133401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass assertEquals(0, mWifiVendorHal.startRssiMonitoring(hi, lo, handler)); 8143401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass assertEquals(0, mWifiVendorHal.startRssiMonitoring(med, lo, handler)); // replacing works 8153401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass assertEquals(-1, mWifiVendorHal.startRssiMonitoring(hi, lo, null)); // null handler fails 8163401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass assertEquals(0, mWifiVendorHal.startRssiMonitoring(hi, lo, handler)); 8173401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass assertEquals(-1, mWifiVendorHal.startRssiMonitoring(lo, hi, handler)); // empty range 8183401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass } 8193401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass 8203401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass /** 821ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass * Test that getApfCapabilities is hooked up to the HAL correctly 822ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass * 823ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass * A call before the vendor HAL is started should return a non-null result with version 0 824ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass * 825ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass * A call after the HAL is started should return the mocked values. 826ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass */ 827ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass @Test 828ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass public void testApfCapabilities() throws Exception { 829ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass int myVersion = 33; 830ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass int myMaxSize = 1234; 831ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass 832ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass StaApfPacketFilterCapabilities capabilities = new StaApfPacketFilterCapabilities(); 833ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass capabilities.version = myVersion; 834ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass capabilities.maxLength = myMaxSize; 835ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass 836ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass doAnswer(new AnswerWithArguments() { 837ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass public void answer(IWifiStaIface.getApfPacketFilterCapabilitiesCallback cb) 838ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass throws RemoteException { 839ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass cb.onValues(mWifiStatusSuccess, capabilities); 840ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass } 841ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass }).when(mIWifiStaIface).getApfPacketFilterCapabilities(any( 842ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass IWifiStaIface.getApfPacketFilterCapabilitiesCallback.class)); 843ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass 844ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass 845ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass assertEquals(0, mWifiVendorHal.getApfCapabilities().apfVersionSupported); 846ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass 847ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass assertTrue(mWifiVendorHal.startVendorHalSta()); 848ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass 849ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass ApfCapabilities actual = mWifiVendorHal.getApfCapabilities(); 850ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass 851ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass assertEquals(myVersion, actual.apfVersionSupported); 852ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass assertEquals(myMaxSize, actual.maximumApfProgramSize); 853ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass assertEquals(android.system.OsConstants.ARPHRD_ETHER, actual.apfPacketFormat); 854ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass assertNotEquals(0, actual.apfPacketFormat); 855ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass } 856ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass 857ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass /** 85870b995bed9674a30c56b7ae2585d5897900ff695Michael Plass * Test that an APF program can be installed. 859ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass */ 860ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass @Test 861ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass public void testInstallApf() throws Exception { 862ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass byte[] filter = new byte[] {19, 53, 10}; 863ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass 864ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass ArrayList<Byte> expected = new ArrayList<>(3); 865ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass for (byte b : filter) expected.add(b); 866ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass 867ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass when(mIWifiStaIface.installApfPacketFilter(anyInt(), any(ArrayList.class))) 868ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass .thenReturn(mWifiStatusSuccess); 869ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass 870ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass assertTrue(mWifiVendorHal.startVendorHalSta()); 871ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass assertTrue(mWifiVendorHal.installPacketFilter(filter)); 872ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass 873ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass verify(mIWifiStaIface).installApfPacketFilter(eq(0), eq(expected)); 874ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass } 875f1423f0bc5fbda5062adb0bd465b999799571f53Michael Plass 876f1423f0bc5fbda5062adb0bd465b999799571f53Michael Plass /** 877f1423f0bc5fbda5062adb0bd465b999799571f53Michael Plass * Test that the country code is set in AP mode (when it should be). 878f1423f0bc5fbda5062adb0bd465b999799571f53Michael Plass */ 879f1423f0bc5fbda5062adb0bd465b999799571f53Michael Plass @Test 880f1423f0bc5fbda5062adb0bd465b999799571f53Michael Plass public void testSetCountryCodeHal() throws Exception { 881f1423f0bc5fbda5062adb0bd465b999799571f53Michael Plass byte[] expected = new byte[]{(byte) 'C', (byte) 'A'}; 882f1423f0bc5fbda5062adb0bd465b999799571f53Michael Plass 883f1423f0bc5fbda5062adb0bd465b999799571f53Michael Plass when(mIWifiApIface.setCountryCode(any())) 884f1423f0bc5fbda5062adb0bd465b999799571f53Michael Plass .thenReturn(mWifiStatusSuccess); 885f1423f0bc5fbda5062adb0bd465b999799571f53Michael Plass 886f1423f0bc5fbda5062adb0bd465b999799571f53Michael Plass assertTrue(mWifiVendorHal.startVendorHalAp()); 887f1423f0bc5fbda5062adb0bd465b999799571f53Michael Plass 888f1423f0bc5fbda5062adb0bd465b999799571f53Michael Plass assertFalse(mWifiVendorHal.setCountryCodeHal(null)); 889f1423f0bc5fbda5062adb0bd465b999799571f53Michael Plass assertFalse(mWifiVendorHal.setCountryCodeHal("")); 890f1423f0bc5fbda5062adb0bd465b999799571f53Michael Plass assertFalse(mWifiVendorHal.setCountryCodeHal("A")); 891f1423f0bc5fbda5062adb0bd465b999799571f53Michael Plass assertTrue(mWifiVendorHal.setCountryCodeHal("CA")); // Only one expected to succeed 892f1423f0bc5fbda5062adb0bd465b999799571f53Michael Plass assertFalse(mWifiVendorHal.setCountryCodeHal("ZZZ")); 893f1423f0bc5fbda5062adb0bd465b999799571f53Michael Plass 894f1423f0bc5fbda5062adb0bd465b999799571f53Michael Plass verify(mIWifiApIface).setCountryCode(eq(expected)); 895f1423f0bc5fbda5062adb0bd465b999799571f53Michael Plass } 89653f278b6fed422a18d763b07216a21e96d9445f9Michael Plass 89753f278b6fed422a18d763b07216a21e96d9445f9Michael Plass /** 89853f278b6fed422a18d763b07216a21e96d9445f9Michael Plass * Test that startLoggingToDebugRingBuffer is plumbed to chip 89953f278b6fed422a18d763b07216a21e96d9445f9Michael Plass * 90053f278b6fed422a18d763b07216a21e96d9445f9Michael Plass * A call before the vendor hal is started should just return false. 90153f278b6fed422a18d763b07216a21e96d9445f9Michael Plass * After starting in STA mode, the call should succeed, and pass ther right things down. 90253f278b6fed422a18d763b07216a21e96d9445f9Michael Plass */ 90353f278b6fed422a18d763b07216a21e96d9445f9Michael Plass @Test 90453f278b6fed422a18d763b07216a21e96d9445f9Michael Plass public void testStartLoggingRingBuffer() throws Exception { 90553f278b6fed422a18d763b07216a21e96d9445f9Michael Plass when(mIWifiChip.startLoggingToDebugRingBuffer( 90653f278b6fed422a18d763b07216a21e96d9445f9Michael Plass any(String.class), anyInt(), anyInt(), anyInt() 90753f278b6fed422a18d763b07216a21e96d9445f9Michael Plass )).thenReturn(mWifiStatusSuccess); 90853f278b6fed422a18d763b07216a21e96d9445f9Michael Plass 90953f278b6fed422a18d763b07216a21e96d9445f9Michael Plass assertFalse(mWifiVendorHal.startLoggingRingBuffer(1, 0x42, 0, 0, "One")); 91053f278b6fed422a18d763b07216a21e96d9445f9Michael Plass assertTrue(mWifiVendorHal.startVendorHalSta()); 91153f278b6fed422a18d763b07216a21e96d9445f9Michael Plass assertTrue(mWifiVendorHal.startLoggingRingBuffer(1, 0x42, 11, 3000, "One")); 91253f278b6fed422a18d763b07216a21e96d9445f9Michael Plass 91353f278b6fed422a18d763b07216a21e96d9445f9Michael Plass verify(mIWifiChip).startLoggingToDebugRingBuffer("One", 1, 11, 3000); 91453f278b6fed422a18d763b07216a21e96d9445f9Michael Plass } 91553f278b6fed422a18d763b07216a21e96d9445f9Michael Plass 91653f278b6fed422a18d763b07216a21e96d9445f9Michael Plass /** 91753f278b6fed422a18d763b07216a21e96d9445f9Michael Plass * Same test as testStartLoggingRingBuffer, but in AP mode rather than STA. 91853f278b6fed422a18d763b07216a21e96d9445f9Michael Plass */ 91953f278b6fed422a18d763b07216a21e96d9445f9Michael Plass @Test 92053f278b6fed422a18d763b07216a21e96d9445f9Michael Plass public void testStartLoggingRingBufferOnAp() throws Exception { 92153f278b6fed422a18d763b07216a21e96d9445f9Michael Plass when(mIWifiChip.startLoggingToDebugRingBuffer( 92253f278b6fed422a18d763b07216a21e96d9445f9Michael Plass any(String.class), anyInt(), anyInt(), anyInt() 92353f278b6fed422a18d763b07216a21e96d9445f9Michael Plass )).thenReturn(mWifiStatusSuccess); 92453f278b6fed422a18d763b07216a21e96d9445f9Michael Plass 92553f278b6fed422a18d763b07216a21e96d9445f9Michael Plass assertFalse(mWifiVendorHal.startLoggingRingBuffer(1, 0x42, 0, 0, "One")); 92653f278b6fed422a18d763b07216a21e96d9445f9Michael Plass assertTrue(mWifiVendorHal.startVendorHalAp()); 92753f278b6fed422a18d763b07216a21e96d9445f9Michael Plass assertTrue(mWifiVendorHal.startLoggingRingBuffer(1, 0x42, 11, 3000, "One")); 92853f278b6fed422a18d763b07216a21e96d9445f9Michael Plass 92953f278b6fed422a18d763b07216a21e96d9445f9Michael Plass verify(mIWifiChip).startLoggingToDebugRingBuffer("One", 1, 11, 3000); 93053f278b6fed422a18d763b07216a21e96d9445f9Michael Plass } 93153f278b6fed422a18d763b07216a21e96d9445f9Michael Plass 93253f278b6fed422a18d763b07216a21e96d9445f9Michael Plass /** 93353f278b6fed422a18d763b07216a21e96d9445f9Michael Plass * Test that getRingBufferStatus gets and translates its stuff correctly 93453f278b6fed422a18d763b07216a21e96d9445f9Michael Plass */ 93553f278b6fed422a18d763b07216a21e96d9445f9Michael Plass @Test 93653f278b6fed422a18d763b07216a21e96d9445f9Michael Plass public void testRingBufferStatus() throws Exception { 93753f278b6fed422a18d763b07216a21e96d9445f9Michael Plass WifiDebugRingBufferStatus one = new WifiDebugRingBufferStatus(); 93853f278b6fed422a18d763b07216a21e96d9445f9Michael Plass one.ringName = "One"; 93953f278b6fed422a18d763b07216a21e96d9445f9Michael Plass one.flags = WifiDebugRingBufferFlags.HAS_BINARY_ENTRIES; 94053f278b6fed422a18d763b07216a21e96d9445f9Michael Plass one.ringId = 5607371; 94153f278b6fed422a18d763b07216a21e96d9445f9Michael Plass one.sizeInBytes = 54321; 94253f278b6fed422a18d763b07216a21e96d9445f9Michael Plass one.freeSizeInBytes = 42; 94353f278b6fed422a18d763b07216a21e96d9445f9Michael Plass one.verboseLevel = WifiDebugRingBufferVerboseLevel.VERBOSE; 94453f278b6fed422a18d763b07216a21e96d9445f9Michael Plass String oneExpect = "name: One flag: 1 ringBufferId: 5607371 ringBufferByteSize: 54321" 94553f278b6fed422a18d763b07216a21e96d9445f9Michael Plass + " verboseLevel: 2 writtenBytes: 0 readBytes: 0 writtenRecords: 0"; 94653f278b6fed422a18d763b07216a21e96d9445f9Michael Plass 94753f278b6fed422a18d763b07216a21e96d9445f9Michael Plass WifiDebugRingBufferStatus two = new WifiDebugRingBufferStatus(); 94853f278b6fed422a18d763b07216a21e96d9445f9Michael Plass two.ringName = "Two"; 94953f278b6fed422a18d763b07216a21e96d9445f9Michael Plass two.flags = WifiDebugRingBufferFlags.HAS_ASCII_ENTRIES 95053f278b6fed422a18d763b07216a21e96d9445f9Michael Plass | WifiDebugRingBufferFlags.HAS_PER_PACKET_ENTRIES; 95153f278b6fed422a18d763b07216a21e96d9445f9Michael Plass two.ringId = 4512470; 95253f278b6fed422a18d763b07216a21e96d9445f9Michael Plass two.sizeInBytes = 300; 95353f278b6fed422a18d763b07216a21e96d9445f9Michael Plass two.freeSizeInBytes = 42; 95453f278b6fed422a18d763b07216a21e96d9445f9Michael Plass two.verboseLevel = WifiDebugRingBufferVerboseLevel.DEFAULT; 95553f278b6fed422a18d763b07216a21e96d9445f9Michael Plass 95653f278b6fed422a18d763b07216a21e96d9445f9Michael Plass ArrayList<WifiDebugRingBufferStatus> halBufferStatus = new ArrayList<>(2); 95753f278b6fed422a18d763b07216a21e96d9445f9Michael Plass halBufferStatus.add(one); 95853f278b6fed422a18d763b07216a21e96d9445f9Michael Plass halBufferStatus.add(two); 95953f278b6fed422a18d763b07216a21e96d9445f9Michael Plass 96053f278b6fed422a18d763b07216a21e96d9445f9Michael Plass WifiNative.RingBufferStatus[] actual; 96153f278b6fed422a18d763b07216a21e96d9445f9Michael Plass 96253f278b6fed422a18d763b07216a21e96d9445f9Michael Plass doAnswer(new AnswerWithArguments() { 96353f278b6fed422a18d763b07216a21e96d9445f9Michael Plass public void answer(IWifiChip.getDebugRingBuffersStatusCallback cb) 96453f278b6fed422a18d763b07216a21e96d9445f9Michael Plass throws RemoteException { 96553f278b6fed422a18d763b07216a21e96d9445f9Michael Plass cb.onValues(mWifiStatusSuccess, halBufferStatus); 96653f278b6fed422a18d763b07216a21e96d9445f9Michael Plass } 96753f278b6fed422a18d763b07216a21e96d9445f9Michael Plass }).when(mIWifiChip).getDebugRingBuffersStatus(any( 96853f278b6fed422a18d763b07216a21e96d9445f9Michael Plass IWifiChip.getDebugRingBuffersStatusCallback.class)); 96953f278b6fed422a18d763b07216a21e96d9445f9Michael Plass 97053f278b6fed422a18d763b07216a21e96d9445f9Michael Plass assertTrue(mWifiVendorHal.startVendorHalSta()); 97153f278b6fed422a18d763b07216a21e96d9445f9Michael Plass actual = mWifiVendorHal.getRingBufferStatus(); 97253f278b6fed422a18d763b07216a21e96d9445f9Michael Plass 97353f278b6fed422a18d763b07216a21e96d9445f9Michael Plass assertEquals(halBufferStatus.size(), actual.length); 97453f278b6fed422a18d763b07216a21e96d9445f9Michael Plass assertEquals(oneExpect, actual[0].toString()); 97553f278b6fed422a18d763b07216a21e96d9445f9Michael Plass assertEquals(two.ringId, actual[1].ringBufferId); 97653f278b6fed422a18d763b07216a21e96d9445f9Michael Plass 97753f278b6fed422a18d763b07216a21e96d9445f9Michael Plass } 97853f278b6fed422a18d763b07216a21e96d9445f9Michael Plass 97953f278b6fed422a18d763b07216a21e96d9445f9Michael Plass /** 98053f278b6fed422a18d763b07216a21e96d9445f9Michael Plass * Test that getRingBufferData calls forceDumpToDebugRingBuffer 98153f278b6fed422a18d763b07216a21e96d9445f9Michael Plass * 98253f278b6fed422a18d763b07216a21e96d9445f9Michael Plass * Try once before hal start, and twice after (one success, one failure). 98353f278b6fed422a18d763b07216a21e96d9445f9Michael Plass */ 98453f278b6fed422a18d763b07216a21e96d9445f9Michael Plass @Test 98553f278b6fed422a18d763b07216a21e96d9445f9Michael Plass public void testForceRingBufferDump() throws Exception { 98653f278b6fed422a18d763b07216a21e96d9445f9Michael Plass when(mIWifiChip.forceDumpToDebugRingBuffer(eq("Gunk"))).thenReturn(mWifiStatusSuccess); 98753f278b6fed422a18d763b07216a21e96d9445f9Michael Plass when(mIWifiChip.forceDumpToDebugRingBuffer(eq("Glop"))).thenReturn(mWifiStatusFailure); 98853f278b6fed422a18d763b07216a21e96d9445f9Michael Plass 98953f278b6fed422a18d763b07216a21e96d9445f9Michael Plass assertFalse(mWifiVendorHal.getRingBufferData("Gunk")); // hal not started 99053f278b6fed422a18d763b07216a21e96d9445f9Michael Plass 99153f278b6fed422a18d763b07216a21e96d9445f9Michael Plass assertTrue(mWifiVendorHal.startVendorHalSta()); 99253f278b6fed422a18d763b07216a21e96d9445f9Michael Plass 99353f278b6fed422a18d763b07216a21e96d9445f9Michael Plass assertTrue(mWifiVendorHal.getRingBufferData("Gunk")); // mocked call succeeds 99453f278b6fed422a18d763b07216a21e96d9445f9Michael Plass assertFalse(mWifiVendorHal.getRingBufferData("Glop")); // mocked call fails 99553f278b6fed422a18d763b07216a21e96d9445f9Michael Plass 99653f278b6fed422a18d763b07216a21e96d9445f9Michael Plass verify(mIWifiChip).forceDumpToDebugRingBuffer("Gunk"); 99753f278b6fed422a18d763b07216a21e96d9445f9Michael Plass verify(mIWifiChip).forceDumpToDebugRingBuffer("Glop"); 99853f278b6fed422a18d763b07216a21e96d9445f9Michael Plass } 99953f278b6fed422a18d763b07216a21e96d9445f9Michael Plass 10005a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass /** 10015a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass * Tests the start of packet fate monitoring. 10025a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass * 10035a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass * Try once before hal start, and once after (one success, one failure). 10045a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass */ 10055a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass @Test 10065a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass public void testStartPktFateMonitoring() throws Exception { 10075a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass when(mIWifiStaIface.startDebugPacketFateMonitoring()).thenReturn(mWifiStatusSuccess); 10085a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass 10095a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass assertFalse(mWifiVendorHal.startPktFateMonitoring()); 10105a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass verify(mIWifiStaIface, never()).startDebugPacketFateMonitoring(); 10115a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass 10125a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass assertTrue(mWifiVendorHal.startVendorHalSta()); 10135a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass assertTrue(mWifiVendorHal.startPktFateMonitoring()); 10145a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass verify(mIWifiStaIface).startDebugPacketFateMonitoring(); 10155a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass } 10165a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass 10175a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass /** 10185a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass * Tests the retrieval of tx packet fates. 10195a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass * 10205a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass * Try once before hal start, and once after. 10215a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass */ 10225a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass @Test 10235a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass public void testGetTxPktFates() throws Exception { 10245a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass byte[] frameContentBytes = new byte[30]; 10255a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass new Random().nextBytes(frameContentBytes); 10265a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass WifiDebugTxPacketFateReport fateReport = new WifiDebugTxPacketFateReport(); 10275a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass fateReport.fate = WifiDebugTxPacketFate.DRV_QUEUED; 10285a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass fateReport.frameInfo.driverTimestampUsec = new Random().nextLong(); 10295a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass fateReport.frameInfo.frameType = WifiDebugPacketFateFrameType.ETHERNET_II; 10305a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass fateReport.frameInfo.frameContent.addAll( 10315a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass NativeUtil.byteArrayToArrayList(frameContentBytes)); 10325a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass 10335a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass doAnswer(new AnswerWithArguments() { 10345a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass public void answer(IWifiStaIface.getDebugTxPacketFatesCallback cb) { 10355a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass cb.onValues(mWifiStatusSuccess, 10365a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass new ArrayList<WifiDebugTxPacketFateReport>(Arrays.asList(fateReport))); 10375a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass } 10385a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass }).when(mIWifiStaIface) 10395a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass .getDebugTxPacketFates(any(IWifiStaIface.getDebugTxPacketFatesCallback.class)); 10405a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass 10415a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass WifiNative.TxFateReport[] retrievedFates = new WifiNative.TxFateReport[1]; 10425a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass assertFalse(mWifiVendorHal.getTxPktFates(retrievedFates)); 10435a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass verify(mIWifiStaIface, never()) 10445a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass .getDebugTxPacketFates(any(IWifiStaIface.getDebugTxPacketFatesCallback.class)); 10455a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass 10465a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass assertTrue(mWifiVendorHal.startVendorHalSta()); 10475a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass 10485a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass assertTrue(mWifiVendorHal.getTxPktFates(retrievedFates)); 10495a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass verify(mIWifiStaIface) 10505a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass .getDebugTxPacketFates(any(IWifiStaIface.getDebugTxPacketFatesCallback.class)); 10515a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass assertEquals(WifiLoggerHal.TX_PKT_FATE_DRV_QUEUED, retrievedFates[0].mFate); 10525a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass assertEquals(fateReport.frameInfo.driverTimestampUsec, 10535a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass retrievedFates[0].mDriverTimestampUSec); 10545a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass assertEquals(WifiLoggerHal.FRAME_TYPE_ETHERNET_II, retrievedFates[0].mFrameType); 10555a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass assertArrayEquals(frameContentBytes, retrievedFates[0].mFrameBytes); 10565a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass } 10575a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass 10585a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass /** 10595a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass * Tests the retrieval of tx packet fates when the number of fates retrieved exceeds the 10605a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass * input array. 10615a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass * 10625a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass * Try once before hal start, and once after. 10635a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass */ 10645a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass @Test 10655a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass public void testGetTxPktFatesExceedsInputArrayLength() throws Exception { 10665a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass byte[] frameContentBytes = new byte[30]; 10675a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass new Random().nextBytes(frameContentBytes); 10685a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass WifiDebugTxPacketFateReport fateReport = new WifiDebugTxPacketFateReport(); 10695a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass fateReport.fate = WifiDebugTxPacketFate.FW_DROP_OTHER; 10705a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass fateReport.frameInfo.driverTimestampUsec = new Random().nextLong(); 10715a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass fateReport.frameInfo.frameType = WifiDebugPacketFateFrameType.MGMT_80211; 10725a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass fateReport.frameInfo.frameContent.addAll( 10735a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass NativeUtil.byteArrayToArrayList(frameContentBytes)); 10745a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass 10755a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass doAnswer(new AnswerWithArguments() { 10765a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass public void answer(IWifiStaIface.getDebugTxPacketFatesCallback cb) { 10775a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass cb.onValues(mWifiStatusSuccess, 10785a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass new ArrayList<WifiDebugTxPacketFateReport>(Arrays.asList( 10795a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass fateReport, fateReport))); 10805a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass } 10815a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass }).when(mIWifiStaIface) 10825a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass .getDebugTxPacketFates(any(IWifiStaIface.getDebugTxPacketFatesCallback.class)); 10835a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass 10845a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass WifiNative.TxFateReport[] retrievedFates = new WifiNative.TxFateReport[1]; 10855a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass assertFalse(mWifiVendorHal.getTxPktFates(retrievedFates)); 10865a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass verify(mIWifiStaIface, never()) 10875a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass .getDebugTxPacketFates(any(IWifiStaIface.getDebugTxPacketFatesCallback.class)); 10885a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass 10895a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass assertTrue(mWifiVendorHal.startVendorHalSta()); 10905a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass 10915a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass assertTrue(mWifiVendorHal.getTxPktFates(retrievedFates)); 10925a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass verify(mIWifiStaIface) 10935a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass .getDebugTxPacketFates(any(IWifiStaIface.getDebugTxPacketFatesCallback.class)); 10945a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass assertEquals(WifiLoggerHal.TX_PKT_FATE_FW_DROP_OTHER, retrievedFates[0].mFate); 10955a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass assertEquals(fateReport.frameInfo.driverTimestampUsec, 10965a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass retrievedFates[0].mDriverTimestampUSec); 10975a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass assertEquals(WifiLoggerHal.FRAME_TYPE_80211_MGMT, retrievedFates[0].mFrameType); 10985a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass assertArrayEquals(frameContentBytes, retrievedFates[0].mFrameBytes); 10995a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass } 11005a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass 11015a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass /** 11025a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass * Tests the retrieval of rx packet fates. 11035a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass * 11045a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass * Try once before hal start, and once after. 11055a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass */ 11065a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass @Test 11075a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass public void testGetRxPktFates() throws Exception { 11085a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass byte[] frameContentBytes = new byte[30]; 11095a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass new Random().nextBytes(frameContentBytes); 11105a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass WifiDebugRxPacketFateReport fateReport = new WifiDebugRxPacketFateReport(); 11115a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass fateReport.fate = WifiDebugRxPacketFate.SUCCESS; 11125a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass fateReport.frameInfo.driverTimestampUsec = new Random().nextLong(); 11135a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass fateReport.frameInfo.frameType = WifiDebugPacketFateFrameType.ETHERNET_II; 11145a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass fateReport.frameInfo.frameContent.addAll( 11155a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass NativeUtil.byteArrayToArrayList(frameContentBytes)); 11165a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass 11175a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass doAnswer(new AnswerWithArguments() { 11185a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass public void answer(IWifiStaIface.getDebugRxPacketFatesCallback cb) { 11195a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass cb.onValues(mWifiStatusSuccess, 11205a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass new ArrayList<WifiDebugRxPacketFateReport>(Arrays.asList(fateReport))); 11215a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass } 11225a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass }).when(mIWifiStaIface) 11235a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass .getDebugRxPacketFates(any(IWifiStaIface.getDebugRxPacketFatesCallback.class)); 11245a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass 11255a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass WifiNative.RxFateReport[] retrievedFates = new WifiNative.RxFateReport[1]; 11265a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass assertFalse(mWifiVendorHal.getRxPktFates(retrievedFates)); 11275a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass verify(mIWifiStaIface, never()) 11285a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass .getDebugRxPacketFates(any(IWifiStaIface.getDebugRxPacketFatesCallback.class)); 11295a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass 11305a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass assertTrue(mWifiVendorHal.startVendorHalSta()); 11315a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass 11325a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass assertTrue(mWifiVendorHal.getRxPktFates(retrievedFates)); 11335a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass verify(mIWifiStaIface) 11345a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass .getDebugRxPacketFates(any(IWifiStaIface.getDebugRxPacketFatesCallback.class)); 11355a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass assertEquals(WifiLoggerHal.RX_PKT_FATE_SUCCESS, retrievedFates[0].mFate); 11365a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass assertEquals(fateReport.frameInfo.driverTimestampUsec, 11375a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass retrievedFates[0].mDriverTimestampUSec); 11385a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass assertEquals(WifiLoggerHal.FRAME_TYPE_ETHERNET_II, retrievedFates[0].mFrameType); 11395a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass assertArrayEquals(frameContentBytes, retrievedFates[0].mFrameBytes); 11405a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass } 11415a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass 11425a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass /** 11435a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass * Tests the retrieval of rx packet fates when the number of fates retrieved exceeds the 11445a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass * input array. 11455a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass * 11465a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass * Try once before hal start, and once after. 11475a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass */ 11485a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass @Test 11495a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass public void testGetRxPktFatesExceedsInputArrayLength() throws Exception { 11505a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass byte[] frameContentBytes = new byte[30]; 11515a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass new Random().nextBytes(frameContentBytes); 11525a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass WifiDebugRxPacketFateReport fateReport = new WifiDebugRxPacketFateReport(); 11535a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass fateReport.fate = WifiDebugRxPacketFate.FW_DROP_FILTER; 11545a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass fateReport.frameInfo.driverTimestampUsec = new Random().nextLong(); 11555a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass fateReport.frameInfo.frameType = WifiDebugPacketFateFrameType.MGMT_80211; 11565a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass fateReport.frameInfo.frameContent.addAll( 11575a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass NativeUtil.byteArrayToArrayList(frameContentBytes)); 11585a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass 11595a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass doAnswer(new AnswerWithArguments() { 11605a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass public void answer(IWifiStaIface.getDebugRxPacketFatesCallback cb) { 11615a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass cb.onValues(mWifiStatusSuccess, 11625a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass new ArrayList<WifiDebugRxPacketFateReport>(Arrays.asList( 11635a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass fateReport, fateReport))); 11645a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass } 11655a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass }).when(mIWifiStaIface) 11665a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass .getDebugRxPacketFates(any(IWifiStaIface.getDebugRxPacketFatesCallback.class)); 11675a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass 11685a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass WifiNative.RxFateReport[] retrievedFates = new WifiNative.RxFateReport[1]; 11695a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass assertFalse(mWifiVendorHal.getRxPktFates(retrievedFates)); 11705a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass verify(mIWifiStaIface, never()) 11715a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass .getDebugRxPacketFates(any(IWifiStaIface.getDebugRxPacketFatesCallback.class)); 11725a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass 11735a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass assertTrue(mWifiVendorHal.startVendorHalSta()); 11745a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass 11755a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass assertTrue(mWifiVendorHal.getRxPktFates(retrievedFates)); 11765a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass verify(mIWifiStaIface) 11775a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass .getDebugRxPacketFates(any(IWifiStaIface.getDebugRxPacketFatesCallback.class)); 11785a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass assertEquals(WifiLoggerHal.RX_PKT_FATE_FW_DROP_FILTER, retrievedFates[0].mFate); 11795a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass assertEquals(fateReport.frameInfo.driverTimestampUsec, 11805a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass retrievedFates[0].mDriverTimestampUSec); 11815a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass assertEquals(WifiLoggerHal.FRAME_TYPE_80211_MGMT, retrievedFates[0].mFrameType); 11825a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass assertArrayEquals(frameContentBytes, retrievedFates[0].mFrameBytes); 11835a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass } 11845a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass 11855a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass /** 11865a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass * Tests the failure to retrieve tx packet fates when the input array is empty. 11875a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass */ 11885a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass @Test 11895a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass public void testGetTxPktFatesEmptyInputArray() throws Exception { 11905a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass assertTrue(mWifiVendorHal.startVendorHalSta()); 11915a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass assertFalse(mWifiVendorHal.getTxPktFates(new WifiNative.TxFateReport[0])); 11925a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass verify(mIWifiStaIface, never()) 11935a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass .getDebugTxPacketFates(any(IWifiStaIface.getDebugTxPacketFatesCallback.class)); 11945a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass } 11955a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass 11965a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass /** 11975a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass * Tests the failure to retrieve rx packet fates when the input array is empty. 11985a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass */ 11995a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass @Test 12005a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass public void testGetRxPktFatesEmptyInputArray() throws Exception { 12015a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass assertTrue(mWifiVendorHal.startVendorHalSta()); 12025a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass assertFalse(mWifiVendorHal.getRxPktFates(new WifiNative.RxFateReport[0])); 12035a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass verify(mIWifiStaIface, never()) 12045a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass .getDebugRxPacketFates(any(IWifiStaIface.getDebugRxPacketFatesCallback.class)); 12055a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass } 1206135be5a123dd70bb4663396a28dda9d6c26956fcMichael Plass 1207135be5a123dd70bb4663396a28dda9d6c26956fcMichael Plass /** 1208135be5a123dd70bb4663396a28dda9d6c26956fcMichael Plass * Tests the nd offload enable/disable. 1209135be5a123dd70bb4663396a28dda9d6c26956fcMichael Plass */ 1210135be5a123dd70bb4663396a28dda9d6c26956fcMichael Plass @Test 1211135be5a123dd70bb4663396a28dda9d6c26956fcMichael Plass public void testEnableDisableNdOffload() throws Exception { 1212135be5a123dd70bb4663396a28dda9d6c26956fcMichael Plass when(mIWifiStaIface.enableNdOffload(anyBoolean())).thenReturn(mWifiStatusSuccess); 1213135be5a123dd70bb4663396a28dda9d6c26956fcMichael Plass 1214135be5a123dd70bb4663396a28dda9d6c26956fcMichael Plass assertFalse(mWifiVendorHal.configureNeighborDiscoveryOffload(true)); 1215135be5a123dd70bb4663396a28dda9d6c26956fcMichael Plass verify(mIWifiStaIface, never()).enableNdOffload(anyBoolean()); 1216135be5a123dd70bb4663396a28dda9d6c26956fcMichael Plass 1217135be5a123dd70bb4663396a28dda9d6c26956fcMichael Plass assertTrue(mWifiVendorHal.startVendorHalSta()); 1218135be5a123dd70bb4663396a28dda9d6c26956fcMichael Plass 1219135be5a123dd70bb4663396a28dda9d6c26956fcMichael Plass assertTrue(mWifiVendorHal.configureNeighborDiscoveryOffload(true)); 1220135be5a123dd70bb4663396a28dda9d6c26956fcMichael Plass verify(mIWifiStaIface).enableNdOffload(eq(true)); 1221135be5a123dd70bb4663396a28dda9d6c26956fcMichael Plass assertTrue(mWifiVendorHal.configureNeighborDiscoveryOffload(false)); 1222135be5a123dd70bb4663396a28dda9d6c26956fcMichael Plass verify(mIWifiStaIface).enableNdOffload(eq(false)); 1223135be5a123dd70bb4663396a28dda9d6c26956fcMichael Plass } 1224135be5a123dd70bb4663396a28dda9d6c26956fcMichael Plass 1225135be5a123dd70bb4663396a28dda9d6c26956fcMichael Plass /** 1226135be5a123dd70bb4663396a28dda9d6c26956fcMichael Plass * Tests the nd offload enable failure. 1227135be5a123dd70bb4663396a28dda9d6c26956fcMichael Plass */ 1228135be5a123dd70bb4663396a28dda9d6c26956fcMichael Plass @Test 1229135be5a123dd70bb4663396a28dda9d6c26956fcMichael Plass public void testEnableNdOffloadFailure() throws Exception { 1230135be5a123dd70bb4663396a28dda9d6c26956fcMichael Plass when(mIWifiStaIface.enableNdOffload(eq(true))).thenReturn(mWifiStatusFailure); 1231135be5a123dd70bb4663396a28dda9d6c26956fcMichael Plass 1232135be5a123dd70bb4663396a28dda9d6c26956fcMichael Plass assertTrue(mWifiVendorHal.startVendorHalSta()); 1233135be5a123dd70bb4663396a28dda9d6c26956fcMichael Plass 1234135be5a123dd70bb4663396a28dda9d6c26956fcMichael Plass assertFalse(mWifiVendorHal.configureNeighborDiscoveryOffload(true)); 1235135be5a123dd70bb4663396a28dda9d6c26956fcMichael Plass verify(mIWifiStaIface).enableNdOffload(eq(true)); 1236135be5a123dd70bb4663396a28dda9d6c26956fcMichael Plass } 1237cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass 1238cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass /** 1239cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass * Tests the retrieval of wlan wake reason stats. 1240cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass */ 1241cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass @Test 1242cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass public void testGetWlanWakeReasonCount() throws Exception { 1243cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass WifiDebugHostWakeReasonStats stats = new WifiDebugHostWakeReasonStats(); 1244cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass Random rand = new Random(); 1245cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass stats.totalCmdEventWakeCnt = rand.nextInt(); 1246cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass stats.totalDriverFwLocalWakeCnt = rand.nextInt(); 1247cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass stats.totalRxPacketWakeCnt = rand.nextInt(); 1248cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass stats.rxPktWakeDetails.rxUnicastCnt = rand.nextInt(); 1249cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass stats.rxPktWakeDetails.rxMulticastCnt = rand.nextInt(); 1250cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass stats.rxIcmpPkWakeDetails.icmpPkt = rand.nextInt(); 1251cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass stats.rxIcmpPkWakeDetails.icmp6Pkt = rand.nextInt(); 1252cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass stats.rxMulticastPkWakeDetails.ipv4RxMulticastAddrCnt = rand.nextInt(); 1253cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass stats.rxMulticastPkWakeDetails.ipv6RxMulticastAddrCnt = rand.nextInt(); 1254cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass 1255cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass doAnswer(new AnswerWithArguments() { 1256cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass public void answer(IWifiChip.getDebugHostWakeReasonStatsCallback cb) { 1257cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass cb.onValues(mWifiStatusSuccess, stats); 1258cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass } 1259cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass }).when(mIWifiChip).getDebugHostWakeReasonStats( 1260cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass any(IWifiChip.getDebugHostWakeReasonStatsCallback.class)); 1261cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass 1262cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass assertNull(mWifiVendorHal.getWlanWakeReasonCount()); 1263cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass verify(mIWifiChip, never()) 1264cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass .getDebugHostWakeReasonStats( 1265cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass any(IWifiChip.getDebugHostWakeReasonStatsCallback.class)); 1266cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass 1267cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass assertTrue(mWifiVendorHal.startVendorHalSta()); 1268cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass 1269cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass WifiWakeReasonAndCounts retrievedStats = mWifiVendorHal.getWlanWakeReasonCount(); 1270cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass verify(mIWifiChip).getDebugHostWakeReasonStats( 1271cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass any(IWifiChip.getDebugHostWakeReasonStatsCallback.class)); 1272cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass assertNotNull(retrievedStats); 1273cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass assertEquals(stats.totalCmdEventWakeCnt, retrievedStats.totalCmdEventWake); 1274cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass assertEquals(stats.totalDriverFwLocalWakeCnt, retrievedStats.totalDriverFwLocalWake); 1275cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass assertEquals(stats.totalRxPacketWakeCnt, retrievedStats.totalRxDataWake); 1276cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass assertEquals(stats.rxPktWakeDetails.rxUnicastCnt, retrievedStats.rxUnicast); 1277cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass assertEquals(stats.rxPktWakeDetails.rxMulticastCnt, retrievedStats.rxMulticast); 1278cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass assertEquals(stats.rxIcmpPkWakeDetails.icmpPkt, retrievedStats.icmp); 1279cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass assertEquals(stats.rxIcmpPkWakeDetails.icmp6Pkt, retrievedStats.icmp6); 1280cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass assertEquals(stats.rxMulticastPkWakeDetails.ipv4RxMulticastAddrCnt, 1281cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass retrievedStats.ipv4RxMulticast); 1282cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass assertEquals(stats.rxMulticastPkWakeDetails.ipv6RxMulticastAddrCnt, 1283cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass retrievedStats.ipv6Multicast); 1284cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass } 1285cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass 1286cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass /** 1287cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass * Tests the failure in retrieval of wlan wake reason stats. 1288cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass */ 1289cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass @Test 1290cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass public void testGetWlanWakeReasonCountFailure() throws Exception { 1291cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass doAnswer(new AnswerWithArguments() { 1292cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass public void answer(IWifiChip.getDebugHostWakeReasonStatsCallback cb) { 1293cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass cb.onValues(mWifiStatusFailure, new WifiDebugHostWakeReasonStats()); 1294cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass } 1295cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass }).when(mIWifiChip).getDebugHostWakeReasonStats( 1296cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass any(IWifiChip.getDebugHostWakeReasonStatsCallback.class)); 1297cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass 1298cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass // This should work in both AP & STA mode. 1299cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass assertTrue(mWifiVendorHal.startVendorHalAp()); 1300cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass 1301cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass assertNull(mWifiVendorHal.getWlanWakeReasonCount()); 1302cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass verify(mIWifiChip).getDebugHostWakeReasonStats( 1303cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass any(IWifiChip.getDebugHostWakeReasonStatsCallback.class)); 1304cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass } 13052f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass 13062f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass /** 13072f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass * Test that getFwMemoryDump is properly plumbed 13082f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass */ 13092f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass @Test 13102f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass public void testGetFwMemoryDump() throws Exception { 13112f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass byte [] sample = NativeUtil.hexStringToByteArray("268c7a3fbfa4661c0bdd6a36"); 13122f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass ArrayList<Byte> halBlob = NativeUtil.byteArrayToArrayList(sample); 13132f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass 13142f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass doAnswer(new AnswerWithArguments() { 13152f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass public void answer(IWifiChip.requestFirmwareDebugDumpCallback cb) 13162f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass throws RemoteException { 13172f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass cb.onValues(mWifiStatusSuccess, halBlob); 13182f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass } 13192f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass }).when(mIWifiChip).requestFirmwareDebugDump(any( 13202f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass IWifiChip.requestFirmwareDebugDumpCallback.class)); 13212f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass 13222f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass assertTrue(mWifiVendorHal.startVendorHalSta()); 13232f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass assertArrayEquals(sample, mWifiVendorHal.getFwMemoryDump()); 13242f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass } 13252f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass 13262f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass /** 13272f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass * Test that getDriverStateDump is properly plumbed 13282f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass * 13292f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass * Just for variety, use AP mode here. 13302f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass */ 13312f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass @Test 13322f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass public void testGetDriverStateDump() throws Exception { 13332f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass byte [] sample = NativeUtil.hexStringToByteArray("e83ff543cf80083e6459d20f"); 13342f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass ArrayList<Byte> halBlob = NativeUtil.byteArrayToArrayList(sample); 13352f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass 13362f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass doAnswer(new AnswerWithArguments() { 13372f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass public void answer(IWifiChip.requestDriverDebugDumpCallback cb) 13382f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass throws RemoteException { 13392f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass cb.onValues(mWifiStatusSuccess, halBlob); 13402f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass } 13412f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass }).when(mIWifiChip).requestDriverDebugDump(any( 13422f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass IWifiChip.requestDriverDebugDumpCallback.class)); 13432f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass 13442f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass assertTrue(mWifiVendorHal.startVendorHalAp()); 13452f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass assertArrayEquals(sample, mWifiVendorHal.getDriverStateDump()); 13462f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass } 1347d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius 1348d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius /** 1349d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius * Test that background scan failure is handled correctly. 1350d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius */ 1351d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius @Test 1352d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius public void testBgScanFailureCallback() throws Exception { 1353d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius assertTrue(mWifiVendorHal.startVendorHalSta()); 1354d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius assertNotNull(mIWifiStaIfaceEventCallback); 1355d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius 1356d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius WifiNative.ScanEventHandler eventHandler = mock(WifiNative.ScanEventHandler.class); 1357d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius startBgScan(eventHandler); 1358d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius 1359d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius mIWifiStaIfaceEventCallback.onBackgroundScanFailure(mWifiVendorHal.mScan.cmdId); 1360d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius verify(eventHandler).onScanStatus(WifiNative.WIFI_SCAN_FAILED); 1361d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius } 1362d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius 1363d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius /** 1364d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius * Test that background scan failure is handled correctly. 1365d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius */ 1366d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius @Test 1367d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius public void testBgScanFailureCallbackWithInvalidCmdId() throws Exception { 1368d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius assertTrue(mWifiVendorHal.startVendorHalSta()); 1369d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius assertNotNull(mIWifiStaIfaceEventCallback); 1370d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius 1371d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius WifiNative.ScanEventHandler eventHandler = mock(WifiNative.ScanEventHandler.class); 1372d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius startBgScan(eventHandler); 1373d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius 1374d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius mIWifiStaIfaceEventCallback.onBackgroundScanFailure(mWifiVendorHal.mScan.cmdId + 1); 1375d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius verify(eventHandler, never()).onScanStatus(WifiNative.WIFI_SCAN_FAILED); 1376d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius } 1377d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius 1378d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius /** 1379d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius * Test that background scan full results are handled correctly. 1380d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius */ 1381d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius @Test 1382d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius public void testBgScanFullScanResults() throws Exception { 1383d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius assertTrue(mWifiVendorHal.startVendorHalSta()); 1384d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius assertNotNull(mIWifiStaIfaceEventCallback); 1385d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius 1386d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius WifiNative.ScanEventHandler eventHandler = mock(WifiNative.ScanEventHandler.class); 1387d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius startBgScan(eventHandler); 1388d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius 1389d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius Pair<StaScanResult, ScanResult> result = createHidlAndFrameworkBgScanResult(); 1390d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius mIWifiStaIfaceEventCallback.onBackgroundFullScanResult( 1391d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius mWifiVendorHal.mScan.cmdId, result.first); 1392d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius 1393d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius ArgumentCaptor<ScanResult> scanResultCaptor = ArgumentCaptor.forClass(ScanResult.class); 1394d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius verify(eventHandler).onFullScanResult(scanResultCaptor.capture(), eq(0)); 1395d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius 1396d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius assertScanResultEqual(result.second, scanResultCaptor.getValue()); 1397d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius } 1398d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius 1399d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius /** 1400d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius * Test that background scan results are handled correctly. 1401d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius */ 1402d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius @Test 1403d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius public void testBgScanScanResults() throws Exception { 1404d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius assertTrue(mWifiVendorHal.startVendorHalSta()); 1405d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius assertNotNull(mIWifiStaIfaceEventCallback); 1406d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius 1407d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius WifiNative.ScanEventHandler eventHandler = mock(WifiNative.ScanEventHandler.class); 1408d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius startBgScan(eventHandler); 1409d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius 1410d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius Pair<ArrayList<StaScanData>, ArrayList<WifiScanner.ScanData>> data = 1411d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius createHidlAndFrameworkBgScanDatas(); 1412d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius mIWifiStaIfaceEventCallback.onBackgroundScanResults( 1413d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius mWifiVendorHal.mScan.cmdId, data.first); 1414d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius 1415d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius verify(eventHandler).onScanStatus(WifiNative.WIFI_SCAN_RESULTS_AVAILABLE); 1416d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius assertScanDatasEqual( 1417d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius data.second, Arrays.asList(mWifiVendorHal.mScan.latestScanResults)); 1418d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius } 1419d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius 1420d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius private void startBgScan(WifiNative.ScanEventHandler eventHandler) throws Exception { 1421d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius when(mIWifiStaIface.startBackgroundScan( 1422d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius anyInt(), any(StaBackgroundScanParameters.class))).thenReturn(mWifiStatusSuccess); 1423d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius assertTrue(mWifiVendorHal.startScan(new WifiNative.ScanSettings(), eventHandler)); 1424d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius } 1425d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius 1426d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius // Create a pair of HIDL scan result and its corresponding framework scan result for 1427d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius // comparison. 1428d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius private Pair<StaScanResult, ScanResult> createHidlAndFrameworkBgScanResult() { 1429d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius StaScanResult staScanResult = new StaScanResult(); 1430d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius Random random = new Random(); 1431d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius byte[] ssid = new byte[8]; 1432d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius random.nextBytes(ssid); 1433d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius staScanResult.ssid.addAll(NativeUtil.byteArrayToArrayList(ssid)); 1434d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius random.nextBytes(staScanResult.bssid); 1435d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius staScanResult.frequency = 2432; 1436d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius staScanResult.rssi = -45; 1437d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius staScanResult.timeStampInUs = 5; 1438d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius WifiInformationElement ie1 = new WifiInformationElement(); 1439d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius byte[] ie1_data = new byte[56]; 1440d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius random.nextBytes(ie1_data); 1441d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius ie1.id = 1; 1442d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius ie1.data.addAll(NativeUtil.byteArrayToArrayList(ie1_data)); 1443d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius staScanResult.informationElements.add(ie1); 1444d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius 1445d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius // Now create the corresponding Scan result structure. 1446d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius ScanResult scanResult = new ScanResult(); 1447d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius scanResult.SSID = NativeUtil.encodeSsid(staScanResult.ssid); 1448d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius scanResult.BSSID = NativeUtil.macAddressFromByteArray(staScanResult.bssid); 1449d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius scanResult.wifiSsid = WifiSsid.createFromByteArray(ssid); 1450d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius scanResult.frequency = staScanResult.frequency; 1451d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius scanResult.level = staScanResult.rssi; 1452d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius scanResult.timestamp = staScanResult.timeStampInUs; 1453d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius scanResult.bytes = new byte[57]; 1454d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius scanResult.bytes[0] = ie1.id; 1455d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius System.arraycopy(ie1_data, 0, scanResult.bytes, 1, ie1_data.length); 1456d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius 1457d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius return Pair.create(staScanResult, scanResult); 1458d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius } 1459d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius 1460d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius // Create a pair of HIDL scan datas and its corresponding framework scan datas for 1461d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius // comparison. 1462d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius private Pair<ArrayList<StaScanData>, ArrayList<WifiScanner.ScanData>> 1463d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius createHidlAndFrameworkBgScanDatas() { 1464d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius ArrayList<StaScanData> staScanDatas = new ArrayList<>(); 1465d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius StaScanData staScanData = new StaScanData(); 1466d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius 1467d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius Pair<StaScanResult, ScanResult> result = createHidlAndFrameworkBgScanResult(); 1468d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius staScanData.results.add(result.first); 1469d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius staScanData.bucketsScanned = 5; 1470d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius staScanData.flags = StaScanDataFlagMask.INTERRUPTED; 1471d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius staScanDatas.add(staScanData); 1472d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius 1473d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius ArrayList<WifiScanner.ScanData> scanDatas = new ArrayList<>(); 1474d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius ScanResult[] scanResults = new ScanResult[1]; 1475d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius scanResults[0] = result.second; 1476d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius WifiScanner.ScanData scanData = 1477d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius new WifiScanner.ScanData(mWifiVendorHal.mScan.cmdId, 1, 1478d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius staScanData.bucketsScanned, false, scanResults); 1479d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius scanDatas.add(scanData); 1480d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius return Pair.create(staScanDatas, scanDatas); 1481d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius } 1482d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius 1483d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius private void assertScanResultEqual(ScanResult expected, ScanResult actual) { 1484d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius assertEquals(expected.SSID, actual.SSID); 1485d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius assertEquals(expected.wifiSsid.getHexString(), actual.wifiSsid.getHexString()); 1486d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius assertEquals(expected.BSSID, actual.BSSID); 1487d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius assertEquals(expected.frequency, actual.frequency); 1488d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius assertEquals(expected.level, actual.level); 1489d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius assertEquals(expected.timestamp, actual.timestamp); 1490d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius assertArrayEquals(expected.bytes, actual.bytes); 1491d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius } 1492d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius 1493d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius private void assertScanResultsEqual(ScanResult[] expected, ScanResult[] actual) { 1494d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius assertEquals(expected.length, actual.length); 1495d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius for (int i = 0; i < expected.length; i++) { 1496d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius assertScanResultEqual(expected[i], actual[i]); 1497d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius } 1498d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius } 1499d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius 1500d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius private void assertScanDataEqual(WifiScanner.ScanData expected, WifiScanner.ScanData actual) { 1501d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius assertEquals(expected.getId(), actual.getId()); 1502d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius assertEquals(expected.getFlags(), actual.getFlags()); 1503d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius assertEquals(expected.getBucketsScanned(), actual.getBucketsScanned()); 1504d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius assertScanResultsEqual(expected.getResults(), actual.getResults()); 1505d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius } 1506d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius 1507d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius private void assertScanDatasEqual( 1508d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius List<WifiScanner.ScanData> expected, List<WifiScanner.ScanData> actual) { 1509d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius assertEquals(expected.size(), actual.size()); 1510d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius for (int i = 0; i < expected.size(); i++) { 1511d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius assertScanDataEqual(expected.get(i), actual.get(i)); 1512d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius } 1513d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius } 1514b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plass} 1515