WifiVendorHalTest.java revision e1d5fa72eb35fb8f936e19d0830548593de6a6ff
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; 32699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plassimport android.hardware.wifi.V1_0.StaLinkLayerIfacePacketStats; 33699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plassimport android.hardware.wifi.V1_0.StaLinkLayerRadioStats; 34699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plassimport android.hardware.wifi.V1_0.StaLinkLayerStats; 35d4c5eca00c9cae55561210479ed61a977923e0daRoshan Piusimport android.hardware.wifi.V1_0.StaScanData; 36d4c5eca00c9cae55561210479ed61a977923e0daRoshan Piusimport android.hardware.wifi.V1_0.StaScanDataFlagMask; 37d4c5eca00c9cae55561210479ed61a977923e0daRoshan Piusimport android.hardware.wifi.V1_0.StaScanResult; 38cbe44718452e93ef2b68974230231ff4fac99deeMichael Plassimport android.hardware.wifi.V1_0.WifiDebugHostWakeReasonStats; 395a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plassimport android.hardware.wifi.V1_0.WifiDebugPacketFateFrameType; 4053f278b6fed422a18d763b07216a21e96d9445f9Michael Plassimport android.hardware.wifi.V1_0.WifiDebugRingBufferFlags; 4153f278b6fed422a18d763b07216a21e96d9445f9Michael Plassimport android.hardware.wifi.V1_0.WifiDebugRingBufferStatus; 4253f278b6fed422a18d763b07216a21e96d9445f9Michael Plassimport android.hardware.wifi.V1_0.WifiDebugRingBufferVerboseLevel; 435a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plassimport android.hardware.wifi.V1_0.WifiDebugRxPacketFate; 445a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plassimport android.hardware.wifi.V1_0.WifiDebugRxPacketFateReport; 455a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plassimport android.hardware.wifi.V1_0.WifiDebugTxPacketFate; 465a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plassimport android.hardware.wifi.V1_0.WifiDebugTxPacketFateReport; 47d4c5eca00c9cae55561210479ed61a977923e0daRoshan Piusimport android.hardware.wifi.V1_0.WifiInformationElement; 484f2049a015722cae0f0169379d499d5d4fc98e30Michael Plassimport android.hardware.wifi.V1_0.WifiStatus; 494f2049a015722cae0f0169379d499d5d4fc98e30Michael Plassimport android.hardware.wifi.V1_0.WifiStatusCode; 50ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plassimport android.net.apf.ApfCapabilities; 51ea644ad9920420dbcf420602355f9f91a7266b14Michael Plassimport android.net.wifi.RttManager; 52d4c5eca00c9cae55561210479ed61a977923e0daRoshan Piusimport android.net.wifi.ScanResult; 53699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plassimport android.net.wifi.WifiLinkLayerStats; 541dc6d8ecde4cad66dc8cb7b97926f1120e7b0d57Michael Plassimport android.net.wifi.WifiManager; 55d4c5eca00c9cae55561210479ed61a977923e0daRoshan Piusimport android.net.wifi.WifiScanner; 56d4c5eca00c9cae55561210479ed61a977923e0daRoshan Piusimport android.net.wifi.WifiSsid; 57cbe44718452e93ef2b68974230231ff4fac99deeMichael Plassimport android.net.wifi.WifiWakeReasonAndCounts; 5853f278b6fed422a18d763b07216a21e96d9445f9Michael Plassimport android.os.HandlerThread; 5953f278b6fed422a18d763b07216a21e96d9445f9Michael Plassimport android.os.Looper; 6053f278b6fed422a18d763b07216a21e96d9445f9Michael Plassimport android.os.RemoteException; 61d4c5eca00c9cae55561210479ed61a977923e0daRoshan Piusimport android.util.Pair; 621dc6d8ecde4cad66dc8cb7b97926f1120e7b0d57Michael Plass 6370b995bed9674a30c56b7ae2585d5897900ff695Michael Plassimport com.android.server.connectivity.KeepalivePacketData; 64df8568a5aaed3c82ff7ef1ecafab85abf7a99da7Michael Plassimport com.android.server.wifi.util.NativeUtil; 65d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 66d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Piusimport static org.junit.Assert.*; 67d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Piusimport static org.mockito.Mockito.*; 68d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 69b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plassimport org.junit.Before; 70b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plassimport org.junit.Test; 71d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Piusimport org.mockito.ArgumentCaptor; 72b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plassimport org.mockito.Mock; 73b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plassimport org.mockito.MockitoAnnotations; 743401582e1b1defc1877c7c47c6a839611fa211c3Michael Plassimport org.mockito.stubbing.Answer; 75b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plass 7670b995bed9674a30c56b7ae2585d5897900ff695Michael Plassimport java.net.InetAddress; 77ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plassimport java.util.ArrayList; 785a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plassimport java.util.Arrays; 79d4c5eca00c9cae55561210479ed61a977923e0daRoshan Piusimport java.util.List; 805a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plassimport java.util.Random; 81ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass 82b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plass/** 83b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plass * Unit tests for {@link com.android.server.wifi.WifiVendorHal}. 84b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plass */ 85b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plasspublic class WifiVendorHalTest { 86b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plass 87d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius WifiVendorHal mWifiVendorHal; 884f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass private WifiStatus mWifiStatusSuccess; 894f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass private WifiStatus mWifiStatusFailure; 908dfa1a2e88781c773cb1ce79a1d4b72cc45c5c04Michael Plass WifiLog mWifiLog; 914f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass @Mock 924f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass private HalDeviceManager mHalDeviceManager; 934f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass @Mock 944f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass private HandlerThread mWifiStateMachineHandlerThread; 954f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass @Mock 964f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass private WifiVendorHal.HalDeviceManagerStatusListener mHalDeviceManagerStatusCallbacks; 974f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass @Mock 984f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass private IWifiApIface mIWifiApIface; 994f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass @Mock 1004f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass private IWifiChip mIWifiChip; 1014f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass @Mock 1024f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass private IWifiStaIface mIWifiStaIface; 1034f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass @Mock 1044f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass private IWifiRttController mIWifiRttController; 1053401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass private IWifiStaIfaceEventCallback mIWifiStaIfaceEventCallback; 106d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius private IWifiChipEventCallback mIWifiChipEventCallback; 1073401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass 1083401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass /** 1093401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass * Identity function to supply a type to its argument, which is a lambda 1103401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass */ 1113401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass static Answer<WifiStatus> answerWifiStatus(Answer<WifiStatus> statusLambda) { 1123401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass return (statusLambda); 1133401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass } 114b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plass 115b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plass /** 116b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plass * Sets up for unit test 117b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plass */ 118b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plass @Before 119b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plass public void setUp() throws Exception { 120b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plass MockitoAnnotations.initMocks(this); 1218dfa1a2e88781c773cb1ce79a1d4b72cc45c5c04Michael Plass mWifiLog = new FakeWifiLog(); 1224f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass mWifiStatusSuccess = new WifiStatus(); 1234f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass mWifiStatusSuccess.code = WifiStatusCode.SUCCESS; 1244f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass mWifiStatusFailure = new WifiStatus(); 1254f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass mWifiStatusFailure.code = WifiStatusCode.ERROR_UNKNOWN; 1264f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass mWifiStatusFailure.description = "I don't even know what a Mock Turtle is."; 1274f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass when(mIWifiStaIface.enableLinkLayerStatsCollection(false)).thenReturn(mWifiStatusSuccess); 1284f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass 129d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius // Setup the HalDeviceManager mock's start/stop behaviour. This can be overridden in 130d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius // individual tests, if needed. 131d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius doAnswer(new AnswerWithArguments() { 132d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius public boolean answer() { 133d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius when(mHalDeviceManager.isReady()).thenReturn(true); 134d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius when(mHalDeviceManager.isStarted()).thenReturn(true); 135d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius mHalDeviceManagerStatusCallbacks.onStatusChanged(); 136d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius return true; 137d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius } 138d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius }).when(mHalDeviceManager).start(); 139d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 140d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius doAnswer(new AnswerWithArguments() { 141d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius public void answer() { 142d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius when(mHalDeviceManager.isReady()).thenReturn(true); 143d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius when(mHalDeviceManager.isStarted()).thenReturn(false); 144d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius mHalDeviceManagerStatusCallbacks.onStatusChanged(); 145d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius } 146d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius }).when(mHalDeviceManager).stop(); 147d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius when(mHalDeviceManager.createStaIface(eq(null), eq(null))) 148d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius .thenReturn(mIWifiStaIface); 149d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius when(mHalDeviceManager.createApIface(eq(null), eq(null))) 150d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius .thenReturn(mIWifiApIface); 151d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius when(mHalDeviceManager.getChip(any(IWifiIface.class))) 152d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius .thenReturn(mIWifiChip); 153d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius when(mHalDeviceManager.createRttController(any(IWifiIface.class))) 154d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius .thenReturn(mIWifiRttController); 155542b204c2120a9c91324ccc86c6695012ac02ab7Roshan Pius when(mIWifiChip.registerEventCallback(any(IWifiChipEventCallback.class))) 156542b204c2120a9c91324ccc86c6695012ac02ab7Roshan Pius .thenReturn(mWifiStatusSuccess); 1573401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass mIWifiStaIfaceEventCallback = null; 1587e4b5bdfa88703a09f611e3ef8973ab7e286375dRoshan Pius when(mIWifiStaIface.registerEventCallback(any(IWifiStaIfaceEventCallback.class))) 1593401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass .thenAnswer(answerWifiStatus((invocation) -> { 1603401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass Object[] args = invocation.getArguments(); 1613401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass mIWifiStaIfaceEventCallback = (IWifiStaIfaceEventCallback) args[0]; 1623401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass return (mWifiStatusSuccess); 1633401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass })); 164d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius mIWifiChipEventCallback = null; 165d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius when(mIWifiChip.registerEventCallback(any(IWifiChipEventCallback.class))) 166d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius .thenAnswer(answerWifiStatus((invocation) -> { 167d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius Object[] args = invocation.getArguments(); 168d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius mIWifiChipEventCallback = (IWifiChipEventCallback) args[0]; 169d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius return (mWifiStatusSuccess); 170d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius })); 171d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius 172d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius // Create the vendor HAL object under test. 173d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius mWifiVendorHal = new WifiVendorHal(mHalDeviceManager, mWifiStateMachineHandlerThread); 174d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 175d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius // Initialize the vendor HAL to capture the registered callback. 176d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius mWifiVendorHal.initialize(); 177d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius ArgumentCaptor<WifiVendorHal.HalDeviceManagerStatusListener> hdmCallbackCaptor = 178d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius ArgumentCaptor.forClass(WifiVendorHal.HalDeviceManagerStatusListener.class); 179d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).registerStatusListener( 180d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius hdmCallbackCaptor.capture(), any(Looper.class)); 181d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius mHalDeviceManagerStatusCallbacks = hdmCallbackCaptor.getValue(); 182d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius 183b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plass } 184b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plass 185b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plass /** 186d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius * Tests the successful starting of HAL in STA mode using 187d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius * {@link WifiVendorHal#startVendorHal(boolean)}. 188d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius */ 189d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius @Test 1907e4b5bdfa88703a09f611e3ef8973ab7e286375dRoshan Pius public void testStartHalSuccessInStaMode() throws Exception { 191d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius assertTrue(mWifiVendorHal.startVendorHal(true)); 192d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius assertTrue(mWifiVendorHal.isHalStarted()); 193d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 194d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).start(); 195d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).createStaIface(eq(null), eq(null)); 196d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).getChip(eq(mIWifiStaIface)); 197d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).createRttController(eq(mIWifiStaIface)); 198d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).isReady(); 199d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).isStarted(); 200542b204c2120a9c91324ccc86c6695012ac02ab7Roshan Pius verify(mIWifiStaIface).registerEventCallback(any(IWifiStaIfaceEventCallback.class)); 201542b204c2120a9c91324ccc86c6695012ac02ab7Roshan Pius verify(mIWifiChip).registerEventCallback(any(IWifiChipEventCallback.class)); 202d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 203d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager, never()).createApIface(eq(null), eq(null)); 204d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius } 205d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 206d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius /** 207d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius * Tests the successful starting of HAL in AP mode using 208d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius * {@link WifiVendorHal#startVendorHal(boolean)}. 209d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius */ 210d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius @Test 2117e4b5bdfa88703a09f611e3ef8973ab7e286375dRoshan Pius public void testStartHalSuccessInApMode() throws Exception { 212d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius assertTrue(mWifiVendorHal.startVendorHal(false)); 213d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius assertTrue(mWifiVendorHal.isHalStarted()); 214d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 215d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).start(); 216d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).createApIface(eq(null), eq(null)); 217d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).getChip(eq(mIWifiApIface)); 218d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).isReady(); 219d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).isStarted(); 220d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 221d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager, never()).createStaIface(eq(null), eq(null)); 222d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager, never()).createRttController(any(IWifiIface.class)); 223d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius } 224d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 225d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius /** 226d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius * Tests the failure to start HAL in STA mode using 227d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius * {@link WifiVendorHal#startVendorHal(boolean)}. 228d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius */ 229d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius @Test 2307e4b5bdfa88703a09f611e3ef8973ab7e286375dRoshan Pius public void testStartHalFailureInStaMode() throws Exception { 231d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius // No callbacks are invoked in this case since the start itself failed. So, override 232d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius // default AnswerWithArguments that we setup. 233d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius doAnswer(new AnswerWithArguments() { 2347e4b5bdfa88703a09f611e3ef8973ab7e286375dRoshan Pius public boolean answer() throws Exception { 235d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius return false; 236d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius } 237d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius }).when(mHalDeviceManager).start(); 238d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius assertFalse(mWifiVendorHal.startVendorHal(true)); 239d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius assertFalse(mWifiVendorHal.isHalStarted()); 240d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 241d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).start(); 242d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 243d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager, never()).createStaIface(eq(null), eq(null)); 244d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager, never()).createApIface(eq(null), eq(null)); 245d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager, never()).getChip(any(IWifiIface.class)); 246d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager, never()).createRttController(any(IWifiIface.class)); 247542b204c2120a9c91324ccc86c6695012ac02ab7Roshan Pius verify(mIWifiStaIface, never()) 248542b204c2120a9c91324ccc86c6695012ac02ab7Roshan Pius .registerEventCallback(any(IWifiStaIfaceEventCallback.class)); 249d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius } 250d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 251d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius /** 252d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius * Tests the failure to start HAL in STA mode using 253d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius * {@link WifiVendorHal#startVendorHal(boolean)}. 254d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius */ 255d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius @Test 2567e4b5bdfa88703a09f611e3ef8973ab7e286375dRoshan Pius public void testStartHalFailureInIfaceCreationInStaMode() throws Exception { 257d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius when(mHalDeviceManager.createStaIface(eq(null), eq(null))).thenReturn(null); 258d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius assertFalse(mWifiVendorHal.startVendorHal(true)); 259d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius assertFalse(mWifiVendorHal.isHalStarted()); 260d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 261d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).start(); 262d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).createStaIface(eq(null), eq(null)); 263d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).stop(); 264d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 265d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager, never()).createApIface(eq(null), eq(null)); 266d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager, never()).getChip(any(IWifiIface.class)); 267d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager, never()).createRttController(any(IWifiIface.class)); 268542b204c2120a9c91324ccc86c6695012ac02ab7Roshan Pius verify(mIWifiStaIface, never()) 269542b204c2120a9c91324ccc86c6695012ac02ab7Roshan Pius .registerEventCallback(any(IWifiStaIfaceEventCallback.class)); 270d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius } 271d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 272d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius /** 273d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius * Tests the failure to start HAL in STA mode using 274d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius * {@link WifiVendorHal#startVendorHal(boolean)}. 275d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius */ 276d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius @Test 2777e4b5bdfa88703a09f611e3ef8973ab7e286375dRoshan Pius public void testStartHalFailureInRttControllerCreationInStaMode() throws Exception { 278d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius when(mHalDeviceManager.createRttController(any(IWifiIface.class))).thenReturn(null); 279d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius assertFalse(mWifiVendorHal.startVendorHal(true)); 280d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius assertFalse(mWifiVendorHal.isHalStarted()); 281d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 282d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).start(); 283d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).createStaIface(eq(null), eq(null)); 284d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).createRttController(eq(mIWifiStaIface)); 285d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).stop(); 286542b204c2120a9c91324ccc86c6695012ac02ab7Roshan Pius verify(mIWifiStaIface).registerEventCallback(any(IWifiStaIfaceEventCallback.class)); 287d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 288d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager, never()).createApIface(eq(null), eq(null)); 289d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager, never()).getChip(any(IWifiIface.class)); 290d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius } 291d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 292d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius /** 293d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius * Tests the failure to start HAL in STA mode using 294d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius * {@link WifiVendorHal#startVendorHal(boolean)}. 295d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius */ 296d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius @Test 2977e4b5bdfa88703a09f611e3ef8973ab7e286375dRoshan Pius public void testStartHalFailureInChipGetInStaMode() throws Exception { 298d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius when(mHalDeviceManager.getChip(any(IWifiIface.class))).thenReturn(null); 299d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius assertFalse(mWifiVendorHal.startVendorHal(true)); 300d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius assertFalse(mWifiVendorHal.isHalStarted()); 301d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 302d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).start(); 303d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).createStaIface(eq(null), eq(null)); 304d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).createRttController(eq(mIWifiStaIface)); 305d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).getChip(any(IWifiIface.class)); 306d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).stop(); 307542b204c2120a9c91324ccc86c6695012ac02ab7Roshan Pius verify(mIWifiStaIface).registerEventCallback(any(IWifiStaIfaceEventCallback.class)); 308d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 309d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager, never()).createApIface(eq(null), eq(null)); 310d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius } 311d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 312d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius /** 313d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius * Tests the failure to start HAL in STA mode using 314d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius * {@link WifiVendorHal#startVendorHal(boolean)}. 315d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius */ 316d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius @Test 3177e4b5bdfa88703a09f611e3ef8973ab7e286375dRoshan Pius public void testStartHalFailureInStaIfaceCallbackRegistration() throws Exception { 3187e4b5bdfa88703a09f611e3ef8973ab7e286375dRoshan Pius when(mIWifiStaIface.registerEventCallback(any(IWifiStaIfaceEventCallback.class))) 3197e4b5bdfa88703a09f611e3ef8973ab7e286375dRoshan Pius .thenReturn(mWifiStatusFailure); 3207e4b5bdfa88703a09f611e3ef8973ab7e286375dRoshan Pius assertFalse(mWifiVendorHal.startVendorHal(true)); 3217e4b5bdfa88703a09f611e3ef8973ab7e286375dRoshan Pius assertFalse(mWifiVendorHal.isHalStarted()); 3227e4b5bdfa88703a09f611e3ef8973ab7e286375dRoshan Pius 3237e4b5bdfa88703a09f611e3ef8973ab7e286375dRoshan Pius verify(mHalDeviceManager).start(); 3247e4b5bdfa88703a09f611e3ef8973ab7e286375dRoshan Pius verify(mHalDeviceManager).createStaIface(eq(null), eq(null)); 3257e4b5bdfa88703a09f611e3ef8973ab7e286375dRoshan Pius verify(mHalDeviceManager).stop(); 326542b204c2120a9c91324ccc86c6695012ac02ab7Roshan Pius verify(mIWifiStaIface).registerEventCallback(any(IWifiStaIfaceEventCallback.class)); 3277e4b5bdfa88703a09f611e3ef8973ab7e286375dRoshan Pius 3287e4b5bdfa88703a09f611e3ef8973ab7e286375dRoshan Pius verify(mHalDeviceManager, never()).createRttController(eq(mIWifiStaIface)); 3297e4b5bdfa88703a09f611e3ef8973ab7e286375dRoshan Pius verify(mHalDeviceManager, never()).getChip(any(IWifiIface.class)); 3307e4b5bdfa88703a09f611e3ef8973ab7e286375dRoshan Pius verify(mHalDeviceManager, never()).createApIface(eq(null), eq(null)); 3317e4b5bdfa88703a09f611e3ef8973ab7e286375dRoshan Pius } 3327e4b5bdfa88703a09f611e3ef8973ab7e286375dRoshan Pius 3337e4b5bdfa88703a09f611e3ef8973ab7e286375dRoshan Pius /** 3347e4b5bdfa88703a09f611e3ef8973ab7e286375dRoshan Pius * Tests the failure to start HAL in STA mode using 3357e4b5bdfa88703a09f611e3ef8973ab7e286375dRoshan Pius * {@link WifiVendorHal#startVendorHal(boolean)}. 336542b204c2120a9c91324ccc86c6695012ac02ab7Roshan Pius */ 337542b204c2120a9c91324ccc86c6695012ac02ab7Roshan Pius @Test 338542b204c2120a9c91324ccc86c6695012ac02ab7Roshan Pius public void testStartHalFailureInChipCallbackRegistration() throws Exception { 339542b204c2120a9c91324ccc86c6695012ac02ab7Roshan Pius when(mIWifiChip.registerEventCallback(any(IWifiChipEventCallback.class))) 340542b204c2120a9c91324ccc86c6695012ac02ab7Roshan Pius .thenReturn(mWifiStatusFailure); 341542b204c2120a9c91324ccc86c6695012ac02ab7Roshan Pius assertFalse(mWifiVendorHal.startVendorHal(true)); 342542b204c2120a9c91324ccc86c6695012ac02ab7Roshan Pius assertFalse(mWifiVendorHal.isHalStarted()); 343542b204c2120a9c91324ccc86c6695012ac02ab7Roshan Pius 344542b204c2120a9c91324ccc86c6695012ac02ab7Roshan Pius verify(mHalDeviceManager).start(); 345542b204c2120a9c91324ccc86c6695012ac02ab7Roshan Pius verify(mHalDeviceManager).createStaIface(eq(null), eq(null)); 346542b204c2120a9c91324ccc86c6695012ac02ab7Roshan Pius verify(mHalDeviceManager).createRttController(eq(mIWifiStaIface)); 347542b204c2120a9c91324ccc86c6695012ac02ab7Roshan Pius verify(mHalDeviceManager).getChip(any(IWifiIface.class)); 348542b204c2120a9c91324ccc86c6695012ac02ab7Roshan Pius verify(mHalDeviceManager).stop(); 349542b204c2120a9c91324ccc86c6695012ac02ab7Roshan Pius verify(mIWifiStaIface).registerEventCallback(any(IWifiStaIfaceEventCallback.class)); 350542b204c2120a9c91324ccc86c6695012ac02ab7Roshan Pius verify(mIWifiChip).registerEventCallback(any(IWifiChipEventCallback.class)); 351542b204c2120a9c91324ccc86c6695012ac02ab7Roshan Pius 352542b204c2120a9c91324ccc86c6695012ac02ab7Roshan Pius verify(mHalDeviceManager, never()).createApIface(eq(null), eq(null)); 353542b204c2120a9c91324ccc86c6695012ac02ab7Roshan Pius } 354542b204c2120a9c91324ccc86c6695012ac02ab7Roshan Pius 355542b204c2120a9c91324ccc86c6695012ac02ab7Roshan Pius /** 356542b204c2120a9c91324ccc86c6695012ac02ab7Roshan Pius * Tests the failure to start HAL in STA mode using 357542b204c2120a9c91324ccc86c6695012ac02ab7Roshan Pius * {@link WifiVendorHal#startVendorHal(boolean)}. 3587e4b5bdfa88703a09f611e3ef8973ab7e286375dRoshan Pius */ 3597e4b5bdfa88703a09f611e3ef8973ab7e286375dRoshan Pius @Test 3607e4b5bdfa88703a09f611e3ef8973ab7e286375dRoshan Pius public void testStartHalFailureInApMode() throws Exception { 361d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius when(mHalDeviceManager.createApIface(eq(null), eq(null))).thenReturn(null); 362d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius assertFalse(mWifiVendorHal.startVendorHal(false)); 363d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius assertFalse(mWifiVendorHal.isHalStarted()); 364d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 365d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).start(); 366d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).createApIface(eq(null), eq(null)); 367d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).stop(); 368d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 369d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager, never()).createStaIface(eq(null), eq(null)); 370d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager, never()).getChip(any(IWifiIface.class)); 371d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager, never()).createRttController(any(IWifiIface.class)); 372d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius } 373d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 374d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius /** 375d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius * Tests the stopping of HAL in STA mode using 376d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius * {@link WifiVendorHal#stopVendorHal()}. 377d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius */ 378d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius @Test 379d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius public void testStopHalInStaMode() { 380d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius assertTrue(mWifiVendorHal.startVendorHal(true)); 381d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius assertTrue(mWifiVendorHal.isHalStarted()); 382d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 383d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius mWifiVendorHal.stopVendorHal(); 384d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius assertFalse(mWifiVendorHal.isHalStarted()); 385d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 386d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).start(); 387d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).stop(); 388d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).createStaIface(eq(null), eq(null)); 389d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).getChip(eq(mIWifiStaIface)); 390d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).createRttController(eq(mIWifiStaIface)); 391d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager, times(2)).isReady(); 392d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager, times(2)).isStarted(); 393d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 394d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager, never()).createApIface(eq(null), eq(null)); 395d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius } 396d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 397d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius /** 398d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius * Tests the stopping of HAL in AP mode using 399d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius * {@link WifiVendorHal#stopVendorHal()}. 400d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius */ 401d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius @Test 402d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius public void testStopHalInApMode() { 403d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius assertTrue(mWifiVendorHal.startVendorHal(false)); 404d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius assertTrue(mWifiVendorHal.isHalStarted()); 405d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 406d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius mWifiVendorHal.stopVendorHal(); 407d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius assertFalse(mWifiVendorHal.isHalStarted()); 408d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 409d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).start(); 410d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).stop(); 411d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).createApIface(eq(null), eq(null)); 412d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).getChip(eq(mIWifiApIface)); 413d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager, times(2)).isReady(); 414d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager, times(2)).isStarted(); 415d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 416d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager, never()).createStaIface(eq(null), eq(null)); 417d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager, never()).createRttController(any(IWifiIface.class)); 418d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius } 4194f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass 4204f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass /** 4218dfa1a2e88781c773cb1ce79a1d4b72cc45c5c04Michael Plass * Test that enter logs when verbose logging is enabled 4228dfa1a2e88781c773cb1ce79a1d4b72cc45c5c04Michael Plass */ 4238dfa1a2e88781c773cb1ce79a1d4b72cc45c5c04Michael Plass @Test 4248dfa1a2e88781c773cb1ce79a1d4b72cc45c5c04Michael Plass public void testEnterLogging() { 4258dfa1a2e88781c773cb1ce79a1d4b72cc45c5c04Michael Plass mWifiVendorHal.mLog = spy(mWifiLog); 4268dfa1a2e88781c773cb1ce79a1d4b72cc45c5c04Michael Plass mWifiVendorHal.enableVerboseLogging(true); 4278dfa1a2e88781c773cb1ce79a1d4b72cc45c5c04Michael Plass mWifiVendorHal.installPacketFilter(new byte[0]); 4288dfa1a2e88781c773cb1ce79a1d4b72cc45c5c04Michael Plass verify(mWifiVendorHal.mLog).trace(eq("% filter length %")); 4298dfa1a2e88781c773cb1ce79a1d4b72cc45c5c04Michael Plass } 4308dfa1a2e88781c773cb1ce79a1d4b72cc45c5c04Michael Plass 4318dfa1a2e88781c773cb1ce79a1d4b72cc45c5c04Michael Plass /** 4328dfa1a2e88781c773cb1ce79a1d4b72cc45c5c04Michael Plass * Test that enter does not log when verbose logging is not enabled 4338dfa1a2e88781c773cb1ce79a1d4b72cc45c5c04Michael Plass */ 4348dfa1a2e88781c773cb1ce79a1d4b72cc45c5c04Michael Plass @Test 4358dfa1a2e88781c773cb1ce79a1d4b72cc45c5c04Michael Plass public void testEnterSilenceWhenNotEnabled() { 4368dfa1a2e88781c773cb1ce79a1d4b72cc45c5c04Michael Plass mWifiVendorHal.mLog = spy(mWifiLog); 4378dfa1a2e88781c773cb1ce79a1d4b72cc45c5c04Michael Plass mWifiVendorHal.installPacketFilter(new byte[0]); 4388dfa1a2e88781c773cb1ce79a1d4b72cc45c5c04Michael Plass mWifiVendorHal.enableVerboseLogging(true); 4398dfa1a2e88781c773cb1ce79a1d4b72cc45c5c04Michael Plass mWifiVendorHal.enableVerboseLogging(false); 4408dfa1a2e88781c773cb1ce79a1d4b72cc45c5c04Michael Plass mWifiVendorHal.installPacketFilter(new byte[0]); 4418dfa1a2e88781c773cb1ce79a1d4b72cc45c5c04Michael Plass verify(mWifiVendorHal.mLog, never()).trace(eq("% filter length %")); 4428dfa1a2e88781c773cb1ce79a1d4b72cc45c5c04Michael Plass } 4438dfa1a2e88781c773cb1ce79a1d4b72cc45c5c04Michael Plass 4448dfa1a2e88781c773cb1ce79a1d4b72cc45c5c04Michael Plass /** 4458dfa1a2e88781c773cb1ce79a1d4b72cc45c5c04Michael Plass * Test that boolResult logs a false result 4468dfa1a2e88781c773cb1ce79a1d4b72cc45c5c04Michael Plass */ 4478dfa1a2e88781c773cb1ce79a1d4b72cc45c5c04Michael Plass @Test 4488dfa1a2e88781c773cb1ce79a1d4b72cc45c5c04Michael Plass public void testBoolResultFalse() { 4498dfa1a2e88781c773cb1ce79a1d4b72cc45c5c04Michael Plass mWifiLog = spy(mWifiLog); 4508dfa1a2e88781c773cb1ce79a1d4b72cc45c5c04Michael Plass mWifiVendorHal.mLog = mWifiLog; 4518dfa1a2e88781c773cb1ce79a1d4b72cc45c5c04Michael Plass mWifiVendorHal.mVerboseLog = mWifiLog; 4528dfa1a2e88781c773cb1ce79a1d4b72cc45c5c04Michael Plass assertFalse(mWifiVendorHal.getScanCapabilities(new WifiNative.ScanCapabilities())); 4538dfa1a2e88781c773cb1ce79a1d4b72cc45c5c04Michael Plass verify(mWifiLog).err("% returns %"); 4548dfa1a2e88781c773cb1ce79a1d4b72cc45c5c04Michael Plass } 4558dfa1a2e88781c773cb1ce79a1d4b72cc45c5c04Michael Plass 4568dfa1a2e88781c773cb1ce79a1d4b72cc45c5c04Michael Plass /** 45756d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass * Test that getApfCapabilities is hooked up to the HAL correctly 45856d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass * 45956d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass * A call before the vendor HAL is started should return a non-null result with version 0 46056d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass * 46156d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass * A call after the HAL is started should return the mocked values. 46256d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass */ 46356d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass @Test 46456d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass public void testGetScanCapabilities() throws Exception { 46556d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass StaBackgroundScanCapabilities capabilities = new StaBackgroundScanCapabilities(); 46656d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass capabilities.maxCacheSize = 12; 46756d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass capabilities.maxBuckets = 34; 46856d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass capabilities.maxApCachePerScan = 56; 46956d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass capabilities.maxReportingThreshold = 78; 47056d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass 47156d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass doAnswer(new AnswerWithArguments() { 47256d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass public void answer(IWifiStaIface.getBackgroundScanCapabilitiesCallback cb) 47356d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass throws RemoteException { 47456d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass cb.onValues(mWifiStatusSuccess, capabilities); 47556d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass } 47656d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass }).when(mIWifiStaIface).getBackgroundScanCapabilities(any( 47756d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass IWifiStaIface.getBackgroundScanCapabilitiesCallback.class)); 47856d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass 47956d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass WifiNative.ScanCapabilities result = new WifiNative.ScanCapabilities(); 48056d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass 48156d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass assertFalse(mWifiVendorHal.getScanCapabilities(result)); // should fail - not started 48256d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass assertTrue(mWifiVendorHal.startVendorHalSta()); // Start the vendor hal 48356d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass assertTrue(mWifiVendorHal.getScanCapabilities(result)); // should succeed 48456d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass 48556d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass assertEquals(12, result.max_scan_cache_size); 48656d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass assertEquals(34, result.max_scan_buckets); 48756d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass assertEquals(56, result.max_ap_cache_per_scan); 48856d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass assertEquals(78, result.max_scan_reporting_threshold); 48956d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass } 49056d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass 49156d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass private void setupValidFrequenciesForBand(ArrayList<Integer> frequencies) throws Exception { 49256d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass 49356d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass doAnswer(new AnswerWithArguments() { 49456d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass public void answer(int band, IWifiStaIface.getValidFrequenciesForBandCallback cb) 49556d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass throws RemoteException { 49656d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass cb.onValues(mWifiStatusSuccess, frequencies); 49756d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass } 49856d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass }).when(mIWifiStaIface).getValidFrequenciesForBand(anyInt(), any( 49956d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass IWifiStaIface.getValidFrequenciesForBandCallback.class)); 50056d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass 50156d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass doAnswer(new AnswerWithArguments() { 50256d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass public void answer(int band, IWifiApIface.getValidFrequenciesForBandCallback cb) 50356d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass throws RemoteException { 50456d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass cb.onValues(mWifiStatusSuccess, frequencies); 50556d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass } 50656d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass }).when(mIWifiApIface).getValidFrequenciesForBand(anyInt(), any( 50756d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass IWifiApIface.getValidFrequenciesForBandCallback.class)); 50856d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass 50956d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass } 51056d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass 51156d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass private int[] intArrayFromArrayList(ArrayList<Integer> in) { 51256d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass int[] ans = new int[in.size()]; 51356d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass int i = 0; 51456d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass for (Integer e : in) ans[i++] = e; 51556d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass return ans; 51656d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass } 51756d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass 51856d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass /** 51956d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass * Test that isGetChannelsForBandSupported works in STA mode 52056d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass */ 52156d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass @Test 52256d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass public void testGetChannelsForBandSupportedSta() throws Exception { 52356d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass ArrayList<Integer> freq = new ArrayList<>(); 52456d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass freq.add(2405); 52556d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass 52656d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass setupValidFrequenciesForBand(freq); 52756d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass 52856d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass assertFalse(mWifiVendorHal.isGetChannelsForBandSupported()); 52956d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass 53056d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass assertTrue(mWifiVendorHal.startVendorHalSta()); 53156d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass 53256d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass assertTrue(mWifiVendorHal.isGetChannelsForBandSupported()); 53356d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass } 53456d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass 53556d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass /** 53656d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass * Test that isGetChannelsForBandSupported works in AP mode 53756d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass */ 53856d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass @Test 53956d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass public void testGetChannelsForBandSupportedAp() throws Exception { 54056d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass ArrayList<Integer> freq = new ArrayList<>(); 54156d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass freq.add(2405); 54256d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass 54356d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass setupValidFrequenciesForBand(freq); 54456d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass 54556d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass assertFalse(mWifiVendorHal.isGetChannelsForBandSupported()); 54656d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass 54756d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass assertTrue(mWifiVendorHal.startVendorHalAp()); 54856d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass 54956d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass assertTrue(mWifiVendorHal.isGetChannelsForBandSupported()); 55056d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass } 55156d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass 55256d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass /** 5531dc6d8ecde4cad66dc8cb7b97926f1120e7b0d57Michael Plass * Test translation to WifiManager.WIFI_FEATURE_* 5541dc6d8ecde4cad66dc8cb7b97926f1120e7b0d57Michael Plass * 5551dc6d8ecde4cad66dc8cb7b97926f1120e7b0d57Michael Plass * Just do a spot-check with a few feature bits here; since the code is table- 5561dc6d8ecde4cad66dc8cb7b97926f1120e7b0d57Michael Plass * driven we don't have to work hard to exercise all of it. 5571dc6d8ecde4cad66dc8cb7b97926f1120e7b0d57Michael Plass */ 5581dc6d8ecde4cad66dc8cb7b97926f1120e7b0d57Michael Plass @Test 5591dc6d8ecde4cad66dc8cb7b97926f1120e7b0d57Michael Plass public void testFeatureMaskTranslation() { 5601dc6d8ecde4cad66dc8cb7b97926f1120e7b0d57Michael Plass int caps = ( 5611dc6d8ecde4cad66dc8cb7b97926f1120e7b0d57Michael Plass IWifiStaIface.StaIfaceCapabilityMask.BACKGROUND_SCAN 5621dc6d8ecde4cad66dc8cb7b97926f1120e7b0d57Michael Plass | IWifiStaIface.StaIfaceCapabilityMask.LINK_LAYER_STATS 5631dc6d8ecde4cad66dc8cb7b97926f1120e7b0d57Michael Plass ); 5641dc6d8ecde4cad66dc8cb7b97926f1120e7b0d57Michael Plass int expected = ( 565691806f65a5f259fd8e6b709c97d0035c418c483Michael Plass WifiManager.WIFI_FEATURE_SCANNER 5661dc6d8ecde4cad66dc8cb7b97926f1120e7b0d57Michael Plass | WifiManager.WIFI_FEATURE_LINK_LAYER_STATS); 5671dc6d8ecde4cad66dc8cb7b97926f1120e7b0d57Michael Plass assertEquals(expected, mWifiVendorHal.wifiFeatureMaskFromStaCapabilities(caps)); 5681dc6d8ecde4cad66dc8cb7b97926f1120e7b0d57Michael Plass } 5691dc6d8ecde4cad66dc8cb7b97926f1120e7b0d57Michael Plass 5701dc6d8ecde4cad66dc8cb7b97926f1120e7b0d57Michael Plass /** 5714f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass * Test enablement of link layer stats after startup 572699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass * 5734f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass * Request link layer stats before HAL start 5744f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass * - should not make it to the HAL layer 5754f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass * Start the HAL in STA mode 5764f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass * Request link layer stats twice more 5774f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass * - enable request should make it to the HAL layer 5784f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass * - HAL layer should have been called to make the requests (i.e., two calls total) 5794f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass */ 5804f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass @Test 5814f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass public void testLinkLayerStatsEnableAfterStartup() throws Exception { 5824f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass doNothing().when(mIWifiStaIface).getLinkLayerStats(any()); 5834f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass 5844f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass assertNull(mWifiVendorHal.getWifiLinkLayerStats()); 5854f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass assertTrue(mWifiVendorHal.startVendorHalSta()); 5864f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass assertTrue(mWifiVendorHal.isHalStarted()); 5874f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass 5884f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass verify(mHalDeviceManager).start(); 5894f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass mWifiVendorHal.getWifiLinkLayerStats(); 5904f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass mWifiVendorHal.getWifiLinkLayerStats(); 5914f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass verify(mIWifiStaIface).enableLinkLayerStatsCollection(false); // mLinkLayerStatsDebug 5924f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass verify(mIWifiStaIface, times(2)).getLinkLayerStats(any()); 5934f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass } 5944f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass 5954f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass /** 5964f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass * Test that link layer stats are not enabled and harmless in AP mode 597699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass * 5984f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass * Start the HAL in AP mode 5994f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass * - stats should not be enabled 6004f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass * Request link layer stats 6014f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass * - HAL layer should have been called to make the request 6024f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass */ 6034f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass @Test 6044f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass public void testLinkLayerStatsNotEnabledAndHarmlessInApMode() throws Exception { 6054f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass doNothing().when(mIWifiStaIface).getLinkLayerStats(any()); 6064f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass 6074f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass assertTrue(mWifiVendorHal.startVendorHalAp()); 6084f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass assertTrue(mWifiVendorHal.isHalStarted()); 6094f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass assertNull(mWifiVendorHal.getWifiLinkLayerStats()); 6104f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass 6114f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass verify(mHalDeviceManager).start(); 6124f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass 6134f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass verify(mIWifiStaIface, never()).enableLinkLayerStatsCollection(false); 6144f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass verify(mIWifiStaIface, never()).getLinkLayerStats(any()); 6154f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass } 6164f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass 617699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass /** 618699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass * Test that the link layer stats fields are populated correctly. 619699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass * 620699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass * This is done by filling with random values and then using toString on the 621699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass * original and converted values, comparing just the numerics in the result. 622699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass * This makes the assumption that the fields are in the same order in both string 623699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass * representations, which is not quite true. So apply some fixups before the final 624699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass * comparison. 625699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass */ 626699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass @Test 627699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass public void testLinkLayerStatsAssignment() throws Exception { 628699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass Random r = new Random(1775968256); 629699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass StaLinkLayerStats stats = new StaLinkLayerStats(); 630699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass randomizePacketStats(r, stats.iface.wmeBePktStats); 631699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass randomizePacketStats(r, stats.iface.wmeBkPktStats); 632699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass randomizePacketStats(r, stats.iface.wmeViPktStats); 633699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass randomizePacketStats(r, stats.iface.wmeVoPktStats); 634699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass randomizeRadioStats(r, stats.radio); 635699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass stats.timeStampInMs = 42; // currently dropped in conversion 636699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass 637699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass String expected = numbersOnly(stats.toString()); 638699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass 639699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass WifiLinkLayerStats converted = WifiVendorHal.frameworkFromHalLinkLayerStats(stats); 640699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass 641699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass String actual = numbersOnly(converted.toString()); 642699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass 643699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass // Do the required fixups to the both expected and actual 644699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass expected = rmValue(expected, stats.radio.rxTimeInMs); 645699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass expected = rmValue(expected, stats.radio.onTimeInMsForScan); 646699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass 647699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass actual = rmValue(actual, stats.radio.rxTimeInMs); 648699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass actual = rmValue(actual, stats.radio.onTimeInMsForScan); 649699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass actual = actual + "42 "; 650699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass 651699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass // The remaining fields should agree 652699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass assertEquals(expected, actual); 653699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass } 654699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass 655699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass /** Just the digits with delimiting spaces, please */ 656699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass private static String numbersOnly(String s) { 657699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass return s.replaceAll("[^0-9]+", " "); 658699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass } 659699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass 660699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass /** Remove the given value from the space-delimited string, or die trying. */ 661699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass private static String rmValue(String s, long value) throws Exception { 662699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass String ans = s.replaceAll(" " + value + " ", " "); 663699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass assertNotEquals(s, ans); 664699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass return ans; 665699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass } 666699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass 667699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass /** 668699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass * Populate packet stats with non-negative random values 669699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass */ 670699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass private static void randomizePacketStats(Random r, StaLinkLayerIfacePacketStats pstats) { 671699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass pstats.rxMpdu = r.nextLong() & 0xFFFFFFFFFFL; // more than 32 bits 672699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass pstats.txMpdu = r.nextLong() & 0xFFFFFFFFFFL; 673699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass pstats.lostMpdu = r.nextLong() & 0xFFFFFFFFFFL; 674699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass pstats.retries = r.nextLong() & 0xFFFFFFFFFFL; 675699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass } 676699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass 677699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass /** 678699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass * Populate radio stats with non-negative random values 679699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass */ 680699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass private static void randomizeRadioStats(Random r, StaLinkLayerRadioStats rstats) { 681699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass rstats.onTimeInMs = r.nextInt() & 0xFFFFFF; 682699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass rstats.txTimeInMs = r.nextInt() & 0xFFFFFF; 683699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass for (int i = 0; i < 4; i++) { 684699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass Integer v = r.nextInt() & 0xFFFFFF; 685699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass rstats.txTimeInMsPerLevel.add(v); 686699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass } 687699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass rstats.rxTimeInMs = r.nextInt() & 0xFFFFFF; 688699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass rstats.onTimeInMsForScan = r.nextInt() & 0xFFFFFF; 689699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass } 6904f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass 6917e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass /** 6927e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass * Test that getFirmwareVersion() and getDriverVersion() work 6937e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass * 6947e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass * Calls before the STA is started are expected to return null. 6957e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass */ 6967e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass @Test 6977e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass public void testVersionGetters() throws Exception { 6987e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass String firmwareVersion = "fuzzy"; 6997e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass String driverVersion = "dizzy"; 7007e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass IWifiChip.ChipDebugInfo chipDebugInfo = new IWifiChip.ChipDebugInfo(); 7017e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass chipDebugInfo.firmwareDescription = firmwareVersion; 7027e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass chipDebugInfo.driverDescription = driverVersion; 7037e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass 7047e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass doAnswer(new AnswerWithArguments() { 7057e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass public void answer(IWifiChip.requestChipDebugInfoCallback cb) throws RemoteException { 7067e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass cb.onValues(mWifiStatusSuccess, chipDebugInfo); 7077e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass } 7087e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass }).when(mIWifiChip).requestChipDebugInfo(any(IWifiChip.requestChipDebugInfoCallback.class)); 7097e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass 7107e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass assertNull(mWifiVendorHal.getFirmwareVersion()); 7117e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass assertNull(mWifiVendorHal.getDriverVersion()); 7127e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass 7137e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass assertTrue(mWifiVendorHal.startVendorHalSta()); 7147e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass 7157e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass assertEquals(firmwareVersion, mWifiVendorHal.getFirmwareVersion()); 7167e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass assertEquals(driverVersion, mWifiVendorHal.getDriverVersion()); 7177e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass } 718ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass 719ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass /** 720ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass * For checkRoundTripIntTranslation lambdas 721ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass */ 722ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass interface IntForInt { 723ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass int translate(int value); 724ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass } 725ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass 726ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass /** 727ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass * Checks that translation from x to y and back again is the identity function 728ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass * 729ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass * @param xFromY reverse translator 730ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass * @param yFromX forward translator 731ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass * @param xLimit non-inclusive upper bound on x (lower bound is zero) 732ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass */ 733ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass private void checkRoundTripIntTranslation( 734ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass IntForInt xFromY, IntForInt yFromX, int xFirst, int xLimit) throws Exception { 735ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass int ex = 0; 736ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass for (int i = xFirst; i < xLimit; i++) { 737ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass assertEquals(i, xFromY.translate(yFromX.translate(i))); 738ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass } 739ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass try { 740ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass yFromX.translate(xLimit); 741ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass assertTrue("expected an exception here", false); 742ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass } catch (IllegalArgumentException e) { 743ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass ex++; 744ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass } 745ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass try { 746ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass xFromY.translate(yFromX.translate(xLimit - 1) + 1); 747ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass assertTrue("expected an exception here", false); 748ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass } catch (IllegalArgumentException e) { 749ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass ex++; 750ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass } 751ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass assertEquals(2, ex); 752ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass } 753ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass 754ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass 755ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass /** 756ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass * Test translations of RTT type 757ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass */ 758ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass @Test 759ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass public void testRttTypeTranslation() throws Exception { 760ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass checkRoundTripIntTranslation( 761ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass (y) -> WifiVendorHal.halRttTypeFromFrameworkRttType(y), 762ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass (x) -> WifiVendorHal.frameworkRttTypeFromHalRttType(x), 763ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass 1, 3); 764ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass } 765ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass 766ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass /** 767ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass * Test translations of peer type 768ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass */ 769ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass @Test 770ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass public void testPeerTranslation() throws Exception { 771ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass checkRoundTripIntTranslation( 772ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass (y) -> WifiVendorHal.halPeerFromFrameworkPeer(y), 773ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass (x) -> WifiVendorHal.frameworkPeerFromHalPeer(x), 774ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass 1, 6); 775ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass } 776ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass 777ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass /** 778ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass * Test translations of channel width 779ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass */ 780ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass @Test 781ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass public void testChannelWidth() throws Exception { 782ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass checkRoundTripIntTranslation( 783ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass (y) -> WifiVendorHal.halChannelWidthFromFrameworkChannelWidth(y), 784ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass (x) -> WifiVendorHal.frameworkChannelWidthFromHalChannelWidth(x), 785ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass 0, 5); 786ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass } 787ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass 788ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass /** 789ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass * Test translations of preamble type mask 790ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass */ 791ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass @Test 792ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass public void testPreambleTranslation() throws Exception { 793ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass checkRoundTripIntTranslation( 794ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass (y) -> WifiVendorHal.halPreambleFromFrameworkPreamble(y), 795ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass (x) -> WifiVendorHal.frameworkPreambleFromHalPreamble(x), 796ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass 0, 8); 797ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass } 798ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass 799ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass /** 800ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass * Test translations of bandwidth mask 801ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass */ 802ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass @Test 803ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass public void testBandwidthTranslations() throws Exception { 804ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass checkRoundTripIntTranslation( 805ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass (y) -> WifiVendorHal.halBwFromFrameworkBw(y), 806ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass (x) -> WifiVendorHal.frameworkBwFromHalBw(x), 807ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass 0, 64); 808ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass } 809ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass 810ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass @Test 811ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass public void testGetRttStuff() throws Exception { 812ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass RttManager.RttParams params = new RttManager.RttParams(); 813ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass //TODO(b/34901744) populate 814ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass RttConfig config = WifiVendorHal.halRttConfigFromFrameworkRttParams(params); 815ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass //TODO(b/34901744) check 816ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass } 817ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass 818ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass @Test 819ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass public void testGetRttCapabilities() throws Exception { 820ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass RttCapabilities capabilities = new RttCapabilities(); 821ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass //TODO(b/34901744) populate 822ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass 823ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass doAnswer(new AnswerWithArguments() { 824ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass public void answer(IWifiRttController.getCapabilitiesCallback cb) 825ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass throws RemoteException { 826ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass cb.onValues(mWifiStatusSuccess, capabilities); 827ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass } 828ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass }).when(mIWifiRttController).getCapabilities(any( 829ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass IWifiRttController.getCapabilitiesCallback.class)); 830ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass 831ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass assertNull(mWifiVendorHal.getRttCapabilities()); 832ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass 833ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass assertTrue(mWifiVendorHal.startVendorHalSta()); 834ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass 835ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass RttManager.RttCapabilities actual = mWifiVendorHal.getRttCapabilities(); 836ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass //TODO(b/34901744) check 837ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass 838ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass } 839ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass 840ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass //TODO(b/34901744) negative RTT test cases as well. 841ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass // e.g. invoke RTT without putting the HAL in the correct mode. 842ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass 843ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass /** 844df8568a5aaed3c82ff7ef1ecafab85abf7a99da7Michael Plass * Test that setScanningMacOui is hooked up to the HAL correctly 845df8568a5aaed3c82ff7ef1ecafab85abf7a99da7Michael Plass */ 846df8568a5aaed3c82ff7ef1ecafab85abf7a99da7Michael Plass @Test 847df8568a5aaed3c82ff7ef1ecafab85abf7a99da7Michael Plass public void testSetScanningMacOui() throws Exception { 848df8568a5aaed3c82ff7ef1ecafab85abf7a99da7Michael Plass byte[] oui = NativeUtil.macAddressOuiToByteArray("DA:A1:19"); 849df8568a5aaed3c82ff7ef1ecafab85abf7a99da7Michael Plass byte[] zzz = NativeUtil.macAddressOuiToByteArray("00:00:00"); 850df8568a5aaed3c82ff7ef1ecafab85abf7a99da7Michael Plass 851df8568a5aaed3c82ff7ef1ecafab85abf7a99da7Michael Plass when(mIWifiStaIface.setScanningMacOui(any())).thenReturn(mWifiStatusSuccess); 852df8568a5aaed3c82ff7ef1ecafab85abf7a99da7Michael Plass 853df8568a5aaed3c82ff7ef1ecafab85abf7a99da7Michael Plass assertFalse(mWifiVendorHal.setScanningMacOui(oui)); // expect fail - STA not started 854df8568a5aaed3c82ff7ef1ecafab85abf7a99da7Michael Plass assertTrue(mWifiVendorHal.startVendorHalSta()); 855df8568a5aaed3c82ff7ef1ecafab85abf7a99da7Michael Plass assertFalse(mWifiVendorHal.setScanningMacOui(null)); // expect fail - null 856df8568a5aaed3c82ff7ef1ecafab85abf7a99da7Michael Plass assertFalse(mWifiVendorHal.setScanningMacOui(new byte[]{(byte) 1})); // expect fail - len 857df8568a5aaed3c82ff7ef1ecafab85abf7a99da7Michael Plass assertTrue(mWifiVendorHal.setScanningMacOui(oui)); 858df8568a5aaed3c82ff7ef1ecafab85abf7a99da7Michael Plass assertTrue(mWifiVendorHal.setScanningMacOui(zzz)); 859df8568a5aaed3c82ff7ef1ecafab85abf7a99da7Michael Plass 860df8568a5aaed3c82ff7ef1ecafab85abf7a99da7Michael Plass verify(mIWifiStaIface).setScanningMacOui(eq(oui)); 861df8568a5aaed3c82ff7ef1ecafab85abf7a99da7Michael Plass verify(mIWifiStaIface).setScanningMacOui(eq(zzz)); 862df8568a5aaed3c82ff7ef1ecafab85abf7a99da7Michael Plass } 863df8568a5aaed3c82ff7ef1ecafab85abf7a99da7Michael Plass 86470b995bed9674a30c56b7ae2585d5897900ff695Michael Plass @Test 86570b995bed9674a30c56b7ae2585d5897900ff695Michael Plass public void testStartSendingOffloadedPacket() throws Exception { 86670b995bed9674a30c56b7ae2585d5897900ff695Michael Plass byte[] srcMac = NativeUtil.macAddressToByteArray("4007b2088c81"); 86770b995bed9674a30c56b7ae2585d5897900ff695Michael Plass InetAddress src = InetAddress.parseNumericAddress("192.168.13.13"); 86870b995bed9674a30c56b7ae2585d5897900ff695Michael Plass InetAddress dst = InetAddress.parseNumericAddress("93.184.216.34"); 86970b995bed9674a30c56b7ae2585d5897900ff695Michael Plass int slot = 13; 87070b995bed9674a30c56b7ae2585d5897900ff695Michael Plass int millis = 16000; 87170b995bed9674a30c56b7ae2585d5897900ff695Michael Plass 87270b995bed9674a30c56b7ae2585d5897900ff695Michael Plass KeepalivePacketData kap = KeepalivePacketData.nattKeepalivePacket(src, 63000, dst, 4500); 87370b995bed9674a30c56b7ae2585d5897900ff695Michael Plass 87470b995bed9674a30c56b7ae2585d5897900ff695Michael Plass when(mIWifiStaIface.startSendingKeepAlivePackets( 87570b995bed9674a30c56b7ae2585d5897900ff695Michael Plass anyInt(), any(), anyShort(), any(), any(), anyInt() 87670b995bed9674a30c56b7ae2585d5897900ff695Michael Plass )).thenReturn(mWifiStatusSuccess); 87770b995bed9674a30c56b7ae2585d5897900ff695Michael Plass 87870b995bed9674a30c56b7ae2585d5897900ff695Michael Plass assertTrue(mWifiVendorHal.startVendorHalSta()); 87970b995bed9674a30c56b7ae2585d5897900ff695Michael Plass assertTrue(0 == mWifiVendorHal.startSendingOffloadedPacket(slot, srcMac, kap, millis)); 88070b995bed9674a30c56b7ae2585d5897900ff695Michael Plass 88170b995bed9674a30c56b7ae2585d5897900ff695Michael Plass verify(mIWifiStaIface).startSendingKeepAlivePackets( 88270b995bed9674a30c56b7ae2585d5897900ff695Michael Plass eq(slot), any(), anyShort(), any(), any(), eq(millis)); 88370b995bed9674a30c56b7ae2585d5897900ff695Michael Plass } 88470b995bed9674a30c56b7ae2585d5897900ff695Michael Plass 88570b995bed9674a30c56b7ae2585d5897900ff695Michael Plass @Test 88670b995bed9674a30c56b7ae2585d5897900ff695Michael Plass public void testStopSendingOffloadedPacket() throws Exception { 88770b995bed9674a30c56b7ae2585d5897900ff695Michael Plass int slot = 13; 88870b995bed9674a30c56b7ae2585d5897900ff695Michael Plass 88970b995bed9674a30c56b7ae2585d5897900ff695Michael Plass when(mIWifiStaIface.stopSendingKeepAlivePackets(anyInt())).thenReturn(mWifiStatusSuccess); 89070b995bed9674a30c56b7ae2585d5897900ff695Michael Plass 89170b995bed9674a30c56b7ae2585d5897900ff695Michael Plass assertTrue(mWifiVendorHal.startVendorHalSta()); 89270b995bed9674a30c56b7ae2585d5897900ff695Michael Plass assertTrue(0 == mWifiVendorHal.stopSendingOffloadedPacket(slot)); 89370b995bed9674a30c56b7ae2585d5897900ff695Michael Plass 89470b995bed9674a30c56b7ae2585d5897900ff695Michael Plass verify(mIWifiStaIface).stopSendingKeepAlivePackets(eq(slot)); 89570b995bed9674a30c56b7ae2585d5897900ff695Michael Plass } 89670b995bed9674a30c56b7ae2585d5897900ff695Michael Plass 897df8568a5aaed3c82ff7ef1ecafab85abf7a99da7Michael Plass /** 8983401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass * Test the setup, invocation, and removal of a RSSI event handler 8993401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass * 9003401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass */ 9013401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass @Test 9023401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass public void testRssiMonitoring() throws Exception { 9033401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass when(mIWifiStaIface.startRssiMonitoring(anyInt(), anyInt(), anyInt())) 9043401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass .thenReturn(mWifiStatusSuccess); 9053401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass when(mIWifiStaIface.stopRssiMonitoring(anyInt())) 9063401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass .thenReturn(mWifiStatusSuccess); 9073401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass 9083401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass ArrayList<Byte> breach = new ArrayList<>(10); 9093401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass byte hi = -21; 9103401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass byte med = -42; 9113401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass byte lo = -84; 9123401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass Byte lower = -88; 9133401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass WifiNative.WifiRssiEventHandler handler; 9143401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass handler = ((cur) -> { 9153401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass breach.add(cur); 9163401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass }); 9173401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass assertEquals(-1, mWifiVendorHal.startRssiMonitoring(hi, lo, handler)); // not started 9183401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass assertEquals(-1, mWifiVendorHal.stopRssiMonitoring()); // not started 9193401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass assertTrue(mWifiVendorHal.startVendorHalSta()); 9203401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass assertEquals(0, mWifiVendorHal.startRssiMonitoring(hi, lo, handler)); 9213401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass int theCmdId = mWifiVendorHal.sRssiMonCmdId; 9223401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass breach.clear(); 9233401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass mIWifiStaIfaceEventCallback.onRssiThresholdBreached(theCmdId, new byte[6], lower); 9243401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass assertEquals(breach.get(0), lower); 9253401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass assertEquals(0, mWifiVendorHal.stopRssiMonitoring()); 9263401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass assertEquals(0, mWifiVendorHal.startRssiMonitoring(hi, lo, handler)); 9273401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass assertEquals(0, mWifiVendorHal.startRssiMonitoring(med, lo, handler)); // replacing works 9283401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass assertEquals(-1, mWifiVendorHal.startRssiMonitoring(hi, lo, null)); // null handler fails 9293401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass assertEquals(0, mWifiVendorHal.startRssiMonitoring(hi, lo, handler)); 9303401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass assertEquals(-1, mWifiVendorHal.startRssiMonitoring(lo, hi, handler)); // empty range 9313401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass } 9323401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass 9333401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass /** 934ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass * Test that getApfCapabilities is hooked up to the HAL correctly 935ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass * 936ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass * A call before the vendor HAL is started should return a non-null result with version 0 937ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass * 938ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass * A call after the HAL is started should return the mocked values. 939ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass */ 940ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass @Test 941ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass public void testApfCapabilities() throws Exception { 942ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass int myVersion = 33; 943ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass int myMaxSize = 1234; 944ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass 945ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass StaApfPacketFilterCapabilities capabilities = new StaApfPacketFilterCapabilities(); 946ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass capabilities.version = myVersion; 947ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass capabilities.maxLength = myMaxSize; 948ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass 949ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass doAnswer(new AnswerWithArguments() { 950ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass public void answer(IWifiStaIface.getApfPacketFilterCapabilitiesCallback cb) 951ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass throws RemoteException { 952ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass cb.onValues(mWifiStatusSuccess, capabilities); 953ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass } 954ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass }).when(mIWifiStaIface).getApfPacketFilterCapabilities(any( 955ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass IWifiStaIface.getApfPacketFilterCapabilitiesCallback.class)); 956ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass 957ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass 958ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass assertEquals(0, mWifiVendorHal.getApfCapabilities().apfVersionSupported); 959ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass 960ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass assertTrue(mWifiVendorHal.startVendorHalSta()); 961ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass 962ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass ApfCapabilities actual = mWifiVendorHal.getApfCapabilities(); 963ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass 964ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass assertEquals(myVersion, actual.apfVersionSupported); 965ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass assertEquals(myMaxSize, actual.maximumApfProgramSize); 966ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass assertEquals(android.system.OsConstants.ARPHRD_ETHER, actual.apfPacketFormat); 967ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass assertNotEquals(0, actual.apfPacketFormat); 968ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass } 969ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass 970ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass /** 97170b995bed9674a30c56b7ae2585d5897900ff695Michael Plass * Test that an APF program can be installed. 972ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass */ 973ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass @Test 974ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass public void testInstallApf() throws Exception { 975ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass byte[] filter = new byte[] {19, 53, 10}; 976ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass 977ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass ArrayList<Byte> expected = new ArrayList<>(3); 978ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass for (byte b : filter) expected.add(b); 979ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass 980ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass when(mIWifiStaIface.installApfPacketFilter(anyInt(), any(ArrayList.class))) 981ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass .thenReturn(mWifiStatusSuccess); 982ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass 983ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass assertTrue(mWifiVendorHal.startVendorHalSta()); 984ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass assertTrue(mWifiVendorHal.installPacketFilter(filter)); 985ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass 986ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass verify(mIWifiStaIface).installApfPacketFilter(eq(0), eq(expected)); 987ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass } 988f1423f0bc5fbda5062adb0bd465b999799571f53Michael Plass 989f1423f0bc5fbda5062adb0bd465b999799571f53Michael Plass /** 990f1423f0bc5fbda5062adb0bd465b999799571f53Michael Plass * Test that the country code is set in AP mode (when it should be). 991f1423f0bc5fbda5062adb0bd465b999799571f53Michael Plass */ 992f1423f0bc5fbda5062adb0bd465b999799571f53Michael Plass @Test 993f1423f0bc5fbda5062adb0bd465b999799571f53Michael Plass public void testSetCountryCodeHal() throws Exception { 994f1423f0bc5fbda5062adb0bd465b999799571f53Michael Plass byte[] expected = new byte[]{(byte) 'C', (byte) 'A'}; 995f1423f0bc5fbda5062adb0bd465b999799571f53Michael Plass 996f1423f0bc5fbda5062adb0bd465b999799571f53Michael Plass when(mIWifiApIface.setCountryCode(any())) 997f1423f0bc5fbda5062adb0bd465b999799571f53Michael Plass .thenReturn(mWifiStatusSuccess); 998f1423f0bc5fbda5062adb0bd465b999799571f53Michael Plass 999f1423f0bc5fbda5062adb0bd465b999799571f53Michael Plass assertTrue(mWifiVendorHal.startVendorHalAp()); 1000f1423f0bc5fbda5062adb0bd465b999799571f53Michael Plass 1001f1423f0bc5fbda5062adb0bd465b999799571f53Michael Plass assertFalse(mWifiVendorHal.setCountryCodeHal(null)); 1002f1423f0bc5fbda5062adb0bd465b999799571f53Michael Plass assertFalse(mWifiVendorHal.setCountryCodeHal("")); 1003f1423f0bc5fbda5062adb0bd465b999799571f53Michael Plass assertFalse(mWifiVendorHal.setCountryCodeHal("A")); 1004f1423f0bc5fbda5062adb0bd465b999799571f53Michael Plass assertTrue(mWifiVendorHal.setCountryCodeHal("CA")); // Only one expected to succeed 1005f1423f0bc5fbda5062adb0bd465b999799571f53Michael Plass assertFalse(mWifiVendorHal.setCountryCodeHal("ZZZ")); 1006f1423f0bc5fbda5062adb0bd465b999799571f53Michael Plass 1007f1423f0bc5fbda5062adb0bd465b999799571f53Michael Plass verify(mIWifiApIface).setCountryCode(eq(expected)); 1008f1423f0bc5fbda5062adb0bd465b999799571f53Michael Plass } 100953f278b6fed422a18d763b07216a21e96d9445f9Michael Plass 101053f278b6fed422a18d763b07216a21e96d9445f9Michael Plass /** 10118dfa1a2e88781c773cb1ce79a1d4b72cc45c5c04Michael Plass * Test that RemoteException is caught and logged. 10128dfa1a2e88781c773cb1ce79a1d4b72cc45c5c04Michael Plass */ 10138dfa1a2e88781c773cb1ce79a1d4b72cc45c5c04Michael Plass @Test 10148dfa1a2e88781c773cb1ce79a1d4b72cc45c5c04Michael Plass public void testRemoteExceptionIsHandled() throws Exception { 10158dfa1a2e88781c773cb1ce79a1d4b72cc45c5c04Michael Plass mWifiLog = spy(mWifiLog); 1016e1d5fa72eb35fb8f936e19d0830548593de6a6ffMichael Plass mWifiVendorHal.mVerboseLog = mWifiLog; 10178dfa1a2e88781c773cb1ce79a1d4b72cc45c5c04Michael Plass when(mIWifiApIface.setCountryCode(any())) 10188dfa1a2e88781c773cb1ce79a1d4b72cc45c5c04Michael Plass .thenThrow(new RemoteException("oops")); 10198dfa1a2e88781c773cb1ce79a1d4b72cc45c5c04Michael Plass assertTrue(mWifiVendorHal.startVendorHalAp()); 10208dfa1a2e88781c773cb1ce79a1d4b72cc45c5c04Michael Plass assertFalse(mWifiVendorHal.setCountryCodeHal("CA")); 1021e1d5fa72eb35fb8f936e19d0830548593de6a6ffMichael Plass assertFalse(mWifiVendorHal.isHalStarted()); 10228dfa1a2e88781c773cb1ce79a1d4b72cc45c5c04Michael Plass verify(mWifiLog).err(any()); 10238dfa1a2e88781c773cb1ce79a1d4b72cc45c5c04Michael Plass } 10248dfa1a2e88781c773cb1ce79a1d4b72cc45c5c04Michael Plass 10258dfa1a2e88781c773cb1ce79a1d4b72cc45c5c04Michael Plass /** 102653f278b6fed422a18d763b07216a21e96d9445f9Michael Plass * Test that startLoggingToDebugRingBuffer is plumbed to chip 102753f278b6fed422a18d763b07216a21e96d9445f9Michael Plass * 102853f278b6fed422a18d763b07216a21e96d9445f9Michael Plass * A call before the vendor hal is started should just return false. 102953f278b6fed422a18d763b07216a21e96d9445f9Michael Plass * After starting in STA mode, the call should succeed, and pass ther right things down. 103053f278b6fed422a18d763b07216a21e96d9445f9Michael Plass */ 103153f278b6fed422a18d763b07216a21e96d9445f9Michael Plass @Test 103253f278b6fed422a18d763b07216a21e96d9445f9Michael Plass public void testStartLoggingRingBuffer() throws Exception { 103353f278b6fed422a18d763b07216a21e96d9445f9Michael Plass when(mIWifiChip.startLoggingToDebugRingBuffer( 103453f278b6fed422a18d763b07216a21e96d9445f9Michael Plass any(String.class), anyInt(), anyInt(), anyInt() 103553f278b6fed422a18d763b07216a21e96d9445f9Michael Plass )).thenReturn(mWifiStatusSuccess); 103653f278b6fed422a18d763b07216a21e96d9445f9Michael Plass 103753f278b6fed422a18d763b07216a21e96d9445f9Michael Plass assertFalse(mWifiVendorHal.startLoggingRingBuffer(1, 0x42, 0, 0, "One")); 103853f278b6fed422a18d763b07216a21e96d9445f9Michael Plass assertTrue(mWifiVendorHal.startVendorHalSta()); 103953f278b6fed422a18d763b07216a21e96d9445f9Michael Plass assertTrue(mWifiVendorHal.startLoggingRingBuffer(1, 0x42, 11, 3000, "One")); 104053f278b6fed422a18d763b07216a21e96d9445f9Michael Plass 104153f278b6fed422a18d763b07216a21e96d9445f9Michael Plass verify(mIWifiChip).startLoggingToDebugRingBuffer("One", 1, 11, 3000); 104253f278b6fed422a18d763b07216a21e96d9445f9Michael Plass } 104353f278b6fed422a18d763b07216a21e96d9445f9Michael Plass 104453f278b6fed422a18d763b07216a21e96d9445f9Michael Plass /** 104553f278b6fed422a18d763b07216a21e96d9445f9Michael Plass * Same test as testStartLoggingRingBuffer, but in AP mode rather than STA. 104653f278b6fed422a18d763b07216a21e96d9445f9Michael Plass */ 104753f278b6fed422a18d763b07216a21e96d9445f9Michael Plass @Test 104853f278b6fed422a18d763b07216a21e96d9445f9Michael Plass public void testStartLoggingRingBufferOnAp() throws Exception { 104953f278b6fed422a18d763b07216a21e96d9445f9Michael Plass when(mIWifiChip.startLoggingToDebugRingBuffer( 105053f278b6fed422a18d763b07216a21e96d9445f9Michael Plass any(String.class), anyInt(), anyInt(), anyInt() 105153f278b6fed422a18d763b07216a21e96d9445f9Michael Plass )).thenReturn(mWifiStatusSuccess); 105253f278b6fed422a18d763b07216a21e96d9445f9Michael Plass 105353f278b6fed422a18d763b07216a21e96d9445f9Michael Plass assertFalse(mWifiVendorHal.startLoggingRingBuffer(1, 0x42, 0, 0, "One")); 105453f278b6fed422a18d763b07216a21e96d9445f9Michael Plass assertTrue(mWifiVendorHal.startVendorHalAp()); 105553f278b6fed422a18d763b07216a21e96d9445f9Michael Plass assertTrue(mWifiVendorHal.startLoggingRingBuffer(1, 0x42, 11, 3000, "One")); 105653f278b6fed422a18d763b07216a21e96d9445f9Michael Plass 105753f278b6fed422a18d763b07216a21e96d9445f9Michael Plass verify(mIWifiChip).startLoggingToDebugRingBuffer("One", 1, 11, 3000); 105853f278b6fed422a18d763b07216a21e96d9445f9Michael Plass } 105953f278b6fed422a18d763b07216a21e96d9445f9Michael Plass 106053f278b6fed422a18d763b07216a21e96d9445f9Michael Plass /** 106153f278b6fed422a18d763b07216a21e96d9445f9Michael Plass * Test that getRingBufferStatus gets and translates its stuff correctly 106253f278b6fed422a18d763b07216a21e96d9445f9Michael Plass */ 106353f278b6fed422a18d763b07216a21e96d9445f9Michael Plass @Test 106453f278b6fed422a18d763b07216a21e96d9445f9Michael Plass public void testRingBufferStatus() throws Exception { 106553f278b6fed422a18d763b07216a21e96d9445f9Michael Plass WifiDebugRingBufferStatus one = new WifiDebugRingBufferStatus(); 106653f278b6fed422a18d763b07216a21e96d9445f9Michael Plass one.ringName = "One"; 106753f278b6fed422a18d763b07216a21e96d9445f9Michael Plass one.flags = WifiDebugRingBufferFlags.HAS_BINARY_ENTRIES; 106853f278b6fed422a18d763b07216a21e96d9445f9Michael Plass one.ringId = 5607371; 106953f278b6fed422a18d763b07216a21e96d9445f9Michael Plass one.sizeInBytes = 54321; 107053f278b6fed422a18d763b07216a21e96d9445f9Michael Plass one.freeSizeInBytes = 42; 107153f278b6fed422a18d763b07216a21e96d9445f9Michael Plass one.verboseLevel = WifiDebugRingBufferVerboseLevel.VERBOSE; 107253f278b6fed422a18d763b07216a21e96d9445f9Michael Plass String oneExpect = "name: One flag: 1 ringBufferId: 5607371 ringBufferByteSize: 54321" 107353f278b6fed422a18d763b07216a21e96d9445f9Michael Plass + " verboseLevel: 2 writtenBytes: 0 readBytes: 0 writtenRecords: 0"; 107453f278b6fed422a18d763b07216a21e96d9445f9Michael Plass 107553f278b6fed422a18d763b07216a21e96d9445f9Michael Plass WifiDebugRingBufferStatus two = new WifiDebugRingBufferStatus(); 107653f278b6fed422a18d763b07216a21e96d9445f9Michael Plass two.ringName = "Two"; 107753f278b6fed422a18d763b07216a21e96d9445f9Michael Plass two.flags = WifiDebugRingBufferFlags.HAS_ASCII_ENTRIES 107853f278b6fed422a18d763b07216a21e96d9445f9Michael Plass | WifiDebugRingBufferFlags.HAS_PER_PACKET_ENTRIES; 107953f278b6fed422a18d763b07216a21e96d9445f9Michael Plass two.ringId = 4512470; 108053f278b6fed422a18d763b07216a21e96d9445f9Michael Plass two.sizeInBytes = 300; 108153f278b6fed422a18d763b07216a21e96d9445f9Michael Plass two.freeSizeInBytes = 42; 108253f278b6fed422a18d763b07216a21e96d9445f9Michael Plass two.verboseLevel = WifiDebugRingBufferVerboseLevel.DEFAULT; 108353f278b6fed422a18d763b07216a21e96d9445f9Michael Plass 108453f278b6fed422a18d763b07216a21e96d9445f9Michael Plass ArrayList<WifiDebugRingBufferStatus> halBufferStatus = new ArrayList<>(2); 108553f278b6fed422a18d763b07216a21e96d9445f9Michael Plass halBufferStatus.add(one); 108653f278b6fed422a18d763b07216a21e96d9445f9Michael Plass halBufferStatus.add(two); 108753f278b6fed422a18d763b07216a21e96d9445f9Michael Plass 108853f278b6fed422a18d763b07216a21e96d9445f9Michael Plass WifiNative.RingBufferStatus[] actual; 108953f278b6fed422a18d763b07216a21e96d9445f9Michael Plass 109053f278b6fed422a18d763b07216a21e96d9445f9Michael Plass doAnswer(new AnswerWithArguments() { 109153f278b6fed422a18d763b07216a21e96d9445f9Michael Plass public void answer(IWifiChip.getDebugRingBuffersStatusCallback cb) 109253f278b6fed422a18d763b07216a21e96d9445f9Michael Plass throws RemoteException { 109353f278b6fed422a18d763b07216a21e96d9445f9Michael Plass cb.onValues(mWifiStatusSuccess, halBufferStatus); 109453f278b6fed422a18d763b07216a21e96d9445f9Michael Plass } 109553f278b6fed422a18d763b07216a21e96d9445f9Michael Plass }).when(mIWifiChip).getDebugRingBuffersStatus(any( 109653f278b6fed422a18d763b07216a21e96d9445f9Michael Plass IWifiChip.getDebugRingBuffersStatusCallback.class)); 109753f278b6fed422a18d763b07216a21e96d9445f9Michael Plass 109853f278b6fed422a18d763b07216a21e96d9445f9Michael Plass assertTrue(mWifiVendorHal.startVendorHalSta()); 109953f278b6fed422a18d763b07216a21e96d9445f9Michael Plass actual = mWifiVendorHal.getRingBufferStatus(); 110053f278b6fed422a18d763b07216a21e96d9445f9Michael Plass 110153f278b6fed422a18d763b07216a21e96d9445f9Michael Plass assertEquals(halBufferStatus.size(), actual.length); 110253f278b6fed422a18d763b07216a21e96d9445f9Michael Plass assertEquals(oneExpect, actual[0].toString()); 110353f278b6fed422a18d763b07216a21e96d9445f9Michael Plass assertEquals(two.ringId, actual[1].ringBufferId); 110453f278b6fed422a18d763b07216a21e96d9445f9Michael Plass 110553f278b6fed422a18d763b07216a21e96d9445f9Michael Plass } 110653f278b6fed422a18d763b07216a21e96d9445f9Michael Plass 110753f278b6fed422a18d763b07216a21e96d9445f9Michael Plass /** 110853f278b6fed422a18d763b07216a21e96d9445f9Michael Plass * Test that getRingBufferData calls forceDumpToDebugRingBuffer 110953f278b6fed422a18d763b07216a21e96d9445f9Michael Plass * 111053f278b6fed422a18d763b07216a21e96d9445f9Michael Plass * Try once before hal start, and twice after (one success, one failure). 111153f278b6fed422a18d763b07216a21e96d9445f9Michael Plass */ 111253f278b6fed422a18d763b07216a21e96d9445f9Michael Plass @Test 111353f278b6fed422a18d763b07216a21e96d9445f9Michael Plass public void testForceRingBufferDump() throws Exception { 111453f278b6fed422a18d763b07216a21e96d9445f9Michael Plass when(mIWifiChip.forceDumpToDebugRingBuffer(eq("Gunk"))).thenReturn(mWifiStatusSuccess); 111553f278b6fed422a18d763b07216a21e96d9445f9Michael Plass when(mIWifiChip.forceDumpToDebugRingBuffer(eq("Glop"))).thenReturn(mWifiStatusFailure); 111653f278b6fed422a18d763b07216a21e96d9445f9Michael Plass 111753f278b6fed422a18d763b07216a21e96d9445f9Michael Plass assertFalse(mWifiVendorHal.getRingBufferData("Gunk")); // hal not started 111853f278b6fed422a18d763b07216a21e96d9445f9Michael Plass 111953f278b6fed422a18d763b07216a21e96d9445f9Michael Plass assertTrue(mWifiVendorHal.startVendorHalSta()); 112053f278b6fed422a18d763b07216a21e96d9445f9Michael Plass 112153f278b6fed422a18d763b07216a21e96d9445f9Michael Plass assertTrue(mWifiVendorHal.getRingBufferData("Gunk")); // mocked call succeeds 112253f278b6fed422a18d763b07216a21e96d9445f9Michael Plass assertFalse(mWifiVendorHal.getRingBufferData("Glop")); // mocked call fails 112353f278b6fed422a18d763b07216a21e96d9445f9Michael Plass 112453f278b6fed422a18d763b07216a21e96d9445f9Michael Plass verify(mIWifiChip).forceDumpToDebugRingBuffer("Gunk"); 112553f278b6fed422a18d763b07216a21e96d9445f9Michael Plass verify(mIWifiChip).forceDumpToDebugRingBuffer("Glop"); 112653f278b6fed422a18d763b07216a21e96d9445f9Michael Plass } 112753f278b6fed422a18d763b07216a21e96d9445f9Michael Plass 11285a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass /** 11295a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass * Tests the start of packet fate monitoring. 11305a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass * 11315a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass * Try once before hal start, and once after (one success, one failure). 11325a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass */ 11335a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass @Test 11345a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass public void testStartPktFateMonitoring() throws Exception { 11355a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass when(mIWifiStaIface.startDebugPacketFateMonitoring()).thenReturn(mWifiStatusSuccess); 11365a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass 11375a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass assertFalse(mWifiVendorHal.startPktFateMonitoring()); 11385a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass verify(mIWifiStaIface, never()).startDebugPacketFateMonitoring(); 11395a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass 11405a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass assertTrue(mWifiVendorHal.startVendorHalSta()); 11415a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass assertTrue(mWifiVendorHal.startPktFateMonitoring()); 11425a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass verify(mIWifiStaIface).startDebugPacketFateMonitoring(); 11435a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass } 11445a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass 11455a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass /** 11465a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass * Tests the retrieval of tx packet fates. 11475a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass * 11485a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass * Try once before hal start, and once after. 11495a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass */ 11505a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass @Test 11515a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass public void testGetTxPktFates() throws Exception { 11525a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass byte[] frameContentBytes = new byte[30]; 11535a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass new Random().nextBytes(frameContentBytes); 11545a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass WifiDebugTxPacketFateReport fateReport = new WifiDebugTxPacketFateReport(); 11555a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass fateReport.fate = WifiDebugTxPacketFate.DRV_QUEUED; 11565a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass fateReport.frameInfo.driverTimestampUsec = new Random().nextLong(); 11575a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass fateReport.frameInfo.frameType = WifiDebugPacketFateFrameType.ETHERNET_II; 11585a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass fateReport.frameInfo.frameContent.addAll( 11595a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass NativeUtil.byteArrayToArrayList(frameContentBytes)); 11605a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass 11615a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass doAnswer(new AnswerWithArguments() { 11625a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass public void answer(IWifiStaIface.getDebugTxPacketFatesCallback cb) { 11635a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass cb.onValues(mWifiStatusSuccess, 11645a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass new ArrayList<WifiDebugTxPacketFateReport>(Arrays.asList(fateReport))); 11655a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass } 11665a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass }).when(mIWifiStaIface) 11675a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass .getDebugTxPacketFates(any(IWifiStaIface.getDebugTxPacketFatesCallback.class)); 11685a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass 11695a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass WifiNative.TxFateReport[] retrievedFates = new WifiNative.TxFateReport[1]; 11705a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass assertFalse(mWifiVendorHal.getTxPktFates(retrievedFates)); 11715a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass verify(mIWifiStaIface, never()) 11725a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass .getDebugTxPacketFates(any(IWifiStaIface.getDebugTxPacketFatesCallback.class)); 11735a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass 11745a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass assertTrue(mWifiVendorHal.startVendorHalSta()); 11755a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass 11765a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass assertTrue(mWifiVendorHal.getTxPktFates(retrievedFates)); 11775a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass verify(mIWifiStaIface) 11785a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass .getDebugTxPacketFates(any(IWifiStaIface.getDebugTxPacketFatesCallback.class)); 11795a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass assertEquals(WifiLoggerHal.TX_PKT_FATE_DRV_QUEUED, retrievedFates[0].mFate); 11805a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass assertEquals(fateReport.frameInfo.driverTimestampUsec, 11815a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass retrievedFates[0].mDriverTimestampUSec); 11825a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass assertEquals(WifiLoggerHal.FRAME_TYPE_ETHERNET_II, retrievedFates[0].mFrameType); 11835a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass assertArrayEquals(frameContentBytes, retrievedFates[0].mFrameBytes); 11845a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass } 11855a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass 11865a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass /** 11875a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass * Tests the retrieval of tx packet fates when the number of fates retrieved exceeds the 11885a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass * input array. 11895a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass * 11905a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass * Try once before hal start, and once after. 11915a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass */ 11925a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass @Test 11935a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass public void testGetTxPktFatesExceedsInputArrayLength() throws Exception { 11945a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass byte[] frameContentBytes = new byte[30]; 11955a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass new Random().nextBytes(frameContentBytes); 11965a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass WifiDebugTxPacketFateReport fateReport = new WifiDebugTxPacketFateReport(); 11975a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass fateReport.fate = WifiDebugTxPacketFate.FW_DROP_OTHER; 11985a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass fateReport.frameInfo.driverTimestampUsec = new Random().nextLong(); 11995a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass fateReport.frameInfo.frameType = WifiDebugPacketFateFrameType.MGMT_80211; 12005a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass fateReport.frameInfo.frameContent.addAll( 12015a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass NativeUtil.byteArrayToArrayList(frameContentBytes)); 12025a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass 12035a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass doAnswer(new AnswerWithArguments() { 12045a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass public void answer(IWifiStaIface.getDebugTxPacketFatesCallback cb) { 12055a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass cb.onValues(mWifiStatusSuccess, 12065a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass new ArrayList<WifiDebugTxPacketFateReport>(Arrays.asList( 12075a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass fateReport, fateReport))); 12085a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass } 12095a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass }).when(mIWifiStaIface) 12105a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass .getDebugTxPacketFates(any(IWifiStaIface.getDebugTxPacketFatesCallback.class)); 12115a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass 12125a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass WifiNative.TxFateReport[] retrievedFates = new WifiNative.TxFateReport[1]; 12135a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass assertFalse(mWifiVendorHal.getTxPktFates(retrievedFates)); 12145a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass verify(mIWifiStaIface, never()) 12155a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass .getDebugTxPacketFates(any(IWifiStaIface.getDebugTxPacketFatesCallback.class)); 12165a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass 12175a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass assertTrue(mWifiVendorHal.startVendorHalSta()); 12185a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass 12195a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass assertTrue(mWifiVendorHal.getTxPktFates(retrievedFates)); 12205a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass verify(mIWifiStaIface) 12215a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass .getDebugTxPacketFates(any(IWifiStaIface.getDebugTxPacketFatesCallback.class)); 12225a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass assertEquals(WifiLoggerHal.TX_PKT_FATE_FW_DROP_OTHER, retrievedFates[0].mFate); 12235a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass assertEquals(fateReport.frameInfo.driverTimestampUsec, 12245a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass retrievedFates[0].mDriverTimestampUSec); 12255a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass assertEquals(WifiLoggerHal.FRAME_TYPE_80211_MGMT, retrievedFates[0].mFrameType); 12265a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass assertArrayEquals(frameContentBytes, retrievedFates[0].mFrameBytes); 12275a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass } 12285a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass 12295a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass /** 12305a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass * Tests the retrieval of rx packet fates. 12315a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass * 12325a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass * Try once before hal start, and once after. 12335a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass */ 12345a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass @Test 12355a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass public void testGetRxPktFates() throws Exception { 12365a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass byte[] frameContentBytes = new byte[30]; 12375a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass new Random().nextBytes(frameContentBytes); 12385a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass WifiDebugRxPacketFateReport fateReport = new WifiDebugRxPacketFateReport(); 12395a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass fateReport.fate = WifiDebugRxPacketFate.SUCCESS; 12405a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass fateReport.frameInfo.driverTimestampUsec = new Random().nextLong(); 12415a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass fateReport.frameInfo.frameType = WifiDebugPacketFateFrameType.ETHERNET_II; 12425a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass fateReport.frameInfo.frameContent.addAll( 12435a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass NativeUtil.byteArrayToArrayList(frameContentBytes)); 12445a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass 12455a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass doAnswer(new AnswerWithArguments() { 12465a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass public void answer(IWifiStaIface.getDebugRxPacketFatesCallback cb) { 12475a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass cb.onValues(mWifiStatusSuccess, 12485a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass new ArrayList<WifiDebugRxPacketFateReport>(Arrays.asList(fateReport))); 12495a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass } 12505a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass }).when(mIWifiStaIface) 12515a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass .getDebugRxPacketFates(any(IWifiStaIface.getDebugRxPacketFatesCallback.class)); 12525a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass 12535a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass WifiNative.RxFateReport[] retrievedFates = new WifiNative.RxFateReport[1]; 12545a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass assertFalse(mWifiVendorHal.getRxPktFates(retrievedFates)); 12555a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass verify(mIWifiStaIface, never()) 12565a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass .getDebugRxPacketFates(any(IWifiStaIface.getDebugRxPacketFatesCallback.class)); 12575a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass 12585a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass assertTrue(mWifiVendorHal.startVendorHalSta()); 12595a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass 12605a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass assertTrue(mWifiVendorHal.getRxPktFates(retrievedFates)); 12615a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass verify(mIWifiStaIface) 12625a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass .getDebugRxPacketFates(any(IWifiStaIface.getDebugRxPacketFatesCallback.class)); 12635a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass assertEquals(WifiLoggerHal.RX_PKT_FATE_SUCCESS, retrievedFates[0].mFate); 12645a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass assertEquals(fateReport.frameInfo.driverTimestampUsec, 12655a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass retrievedFates[0].mDriverTimestampUSec); 12665a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass assertEquals(WifiLoggerHal.FRAME_TYPE_ETHERNET_II, retrievedFates[0].mFrameType); 12675a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass assertArrayEquals(frameContentBytes, retrievedFates[0].mFrameBytes); 12685a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass } 12695a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass 12705a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass /** 12715a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass * Tests the retrieval of rx packet fates when the number of fates retrieved exceeds the 12725a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass * input array. 12735a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass * 12745a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass * Try once before hal start, and once after. 12755a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass */ 12765a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass @Test 12775a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass public void testGetRxPktFatesExceedsInputArrayLength() throws Exception { 12785a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass byte[] frameContentBytes = new byte[30]; 12795a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass new Random().nextBytes(frameContentBytes); 12805a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass WifiDebugRxPacketFateReport fateReport = new WifiDebugRxPacketFateReport(); 12815a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass fateReport.fate = WifiDebugRxPacketFate.FW_DROP_FILTER; 12825a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass fateReport.frameInfo.driverTimestampUsec = new Random().nextLong(); 12835a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass fateReport.frameInfo.frameType = WifiDebugPacketFateFrameType.MGMT_80211; 12845a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass fateReport.frameInfo.frameContent.addAll( 12855a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass NativeUtil.byteArrayToArrayList(frameContentBytes)); 12865a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass 12875a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass doAnswer(new AnswerWithArguments() { 12885a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass public void answer(IWifiStaIface.getDebugRxPacketFatesCallback cb) { 12895a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass cb.onValues(mWifiStatusSuccess, 12905a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass new ArrayList<WifiDebugRxPacketFateReport>(Arrays.asList( 12915a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass fateReport, fateReport))); 12925a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass } 12935a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass }).when(mIWifiStaIface) 12945a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass .getDebugRxPacketFates(any(IWifiStaIface.getDebugRxPacketFatesCallback.class)); 12955a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass 12965a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass WifiNative.RxFateReport[] retrievedFates = new WifiNative.RxFateReport[1]; 12975a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass assertFalse(mWifiVendorHal.getRxPktFates(retrievedFates)); 12985a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass verify(mIWifiStaIface, never()) 12995a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass .getDebugRxPacketFates(any(IWifiStaIface.getDebugRxPacketFatesCallback.class)); 13005a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass 13015a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass assertTrue(mWifiVendorHal.startVendorHalSta()); 13025a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass 13035a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass assertTrue(mWifiVendorHal.getRxPktFates(retrievedFates)); 13045a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass verify(mIWifiStaIface) 13055a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass .getDebugRxPacketFates(any(IWifiStaIface.getDebugRxPacketFatesCallback.class)); 13065a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass assertEquals(WifiLoggerHal.RX_PKT_FATE_FW_DROP_FILTER, retrievedFates[0].mFate); 13075a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass assertEquals(fateReport.frameInfo.driverTimestampUsec, 13085a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass retrievedFates[0].mDriverTimestampUSec); 13095a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass assertEquals(WifiLoggerHal.FRAME_TYPE_80211_MGMT, retrievedFates[0].mFrameType); 13105a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass assertArrayEquals(frameContentBytes, retrievedFates[0].mFrameBytes); 13115a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass } 13125a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass 13135a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass /** 13145a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass * Tests the failure to retrieve tx packet fates when the input array is empty. 13155a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass */ 13165a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass @Test 13175a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass public void testGetTxPktFatesEmptyInputArray() throws Exception { 13185a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass assertTrue(mWifiVendorHal.startVendorHalSta()); 13195a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass assertFalse(mWifiVendorHal.getTxPktFates(new WifiNative.TxFateReport[0])); 13205a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass verify(mIWifiStaIface, never()) 13215a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass .getDebugTxPacketFates(any(IWifiStaIface.getDebugTxPacketFatesCallback.class)); 13225a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass } 13235a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass 13245a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass /** 13255a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass * Tests the failure to retrieve rx packet fates when the input array is empty. 13265a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass */ 13275a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass @Test 13285a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass public void testGetRxPktFatesEmptyInputArray() throws Exception { 13295a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass assertTrue(mWifiVendorHal.startVendorHalSta()); 13305a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass assertFalse(mWifiVendorHal.getRxPktFates(new WifiNative.RxFateReport[0])); 13315a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass verify(mIWifiStaIface, never()) 13325a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass .getDebugRxPacketFates(any(IWifiStaIface.getDebugRxPacketFatesCallback.class)); 13335a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass } 1334135be5a123dd70bb4663396a28dda9d6c26956fcMichael Plass 1335135be5a123dd70bb4663396a28dda9d6c26956fcMichael Plass /** 1336135be5a123dd70bb4663396a28dda9d6c26956fcMichael Plass * Tests the nd offload enable/disable. 1337135be5a123dd70bb4663396a28dda9d6c26956fcMichael Plass */ 1338135be5a123dd70bb4663396a28dda9d6c26956fcMichael Plass @Test 1339135be5a123dd70bb4663396a28dda9d6c26956fcMichael Plass public void testEnableDisableNdOffload() throws Exception { 1340135be5a123dd70bb4663396a28dda9d6c26956fcMichael Plass when(mIWifiStaIface.enableNdOffload(anyBoolean())).thenReturn(mWifiStatusSuccess); 1341135be5a123dd70bb4663396a28dda9d6c26956fcMichael Plass 1342135be5a123dd70bb4663396a28dda9d6c26956fcMichael Plass assertFalse(mWifiVendorHal.configureNeighborDiscoveryOffload(true)); 1343135be5a123dd70bb4663396a28dda9d6c26956fcMichael Plass verify(mIWifiStaIface, never()).enableNdOffload(anyBoolean()); 1344135be5a123dd70bb4663396a28dda9d6c26956fcMichael Plass 1345135be5a123dd70bb4663396a28dda9d6c26956fcMichael Plass assertTrue(mWifiVendorHal.startVendorHalSta()); 1346135be5a123dd70bb4663396a28dda9d6c26956fcMichael Plass 1347135be5a123dd70bb4663396a28dda9d6c26956fcMichael Plass assertTrue(mWifiVendorHal.configureNeighborDiscoveryOffload(true)); 1348135be5a123dd70bb4663396a28dda9d6c26956fcMichael Plass verify(mIWifiStaIface).enableNdOffload(eq(true)); 1349135be5a123dd70bb4663396a28dda9d6c26956fcMichael Plass assertTrue(mWifiVendorHal.configureNeighborDiscoveryOffload(false)); 1350135be5a123dd70bb4663396a28dda9d6c26956fcMichael Plass verify(mIWifiStaIface).enableNdOffload(eq(false)); 1351135be5a123dd70bb4663396a28dda9d6c26956fcMichael Plass } 1352135be5a123dd70bb4663396a28dda9d6c26956fcMichael Plass 1353135be5a123dd70bb4663396a28dda9d6c26956fcMichael Plass /** 1354135be5a123dd70bb4663396a28dda9d6c26956fcMichael Plass * Tests the nd offload enable failure. 1355135be5a123dd70bb4663396a28dda9d6c26956fcMichael Plass */ 1356135be5a123dd70bb4663396a28dda9d6c26956fcMichael Plass @Test 1357135be5a123dd70bb4663396a28dda9d6c26956fcMichael Plass public void testEnableNdOffloadFailure() throws Exception { 1358135be5a123dd70bb4663396a28dda9d6c26956fcMichael Plass when(mIWifiStaIface.enableNdOffload(eq(true))).thenReturn(mWifiStatusFailure); 1359135be5a123dd70bb4663396a28dda9d6c26956fcMichael Plass 1360135be5a123dd70bb4663396a28dda9d6c26956fcMichael Plass assertTrue(mWifiVendorHal.startVendorHalSta()); 1361135be5a123dd70bb4663396a28dda9d6c26956fcMichael Plass 1362135be5a123dd70bb4663396a28dda9d6c26956fcMichael Plass assertFalse(mWifiVendorHal.configureNeighborDiscoveryOffload(true)); 1363135be5a123dd70bb4663396a28dda9d6c26956fcMichael Plass verify(mIWifiStaIface).enableNdOffload(eq(true)); 1364135be5a123dd70bb4663396a28dda9d6c26956fcMichael Plass } 1365cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass 1366cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass /** 1367cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass * Tests the retrieval of wlan wake reason stats. 1368cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass */ 1369cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass @Test 1370cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass public void testGetWlanWakeReasonCount() throws Exception { 1371cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass WifiDebugHostWakeReasonStats stats = new WifiDebugHostWakeReasonStats(); 1372cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass Random rand = new Random(); 1373cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass stats.totalCmdEventWakeCnt = rand.nextInt(); 1374cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass stats.totalDriverFwLocalWakeCnt = rand.nextInt(); 1375cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass stats.totalRxPacketWakeCnt = rand.nextInt(); 1376cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass stats.rxPktWakeDetails.rxUnicastCnt = rand.nextInt(); 1377cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass stats.rxPktWakeDetails.rxMulticastCnt = rand.nextInt(); 1378cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass stats.rxIcmpPkWakeDetails.icmpPkt = rand.nextInt(); 1379cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass stats.rxIcmpPkWakeDetails.icmp6Pkt = rand.nextInt(); 1380cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass stats.rxMulticastPkWakeDetails.ipv4RxMulticastAddrCnt = rand.nextInt(); 1381cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass stats.rxMulticastPkWakeDetails.ipv6RxMulticastAddrCnt = rand.nextInt(); 1382cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass 1383cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass doAnswer(new AnswerWithArguments() { 1384cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass public void answer(IWifiChip.getDebugHostWakeReasonStatsCallback cb) { 1385cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass cb.onValues(mWifiStatusSuccess, stats); 1386cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass } 1387cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass }).when(mIWifiChip).getDebugHostWakeReasonStats( 1388cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass any(IWifiChip.getDebugHostWakeReasonStatsCallback.class)); 1389cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass 1390cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass assertNull(mWifiVendorHal.getWlanWakeReasonCount()); 1391cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass verify(mIWifiChip, never()) 1392cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass .getDebugHostWakeReasonStats( 1393cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass any(IWifiChip.getDebugHostWakeReasonStatsCallback.class)); 1394cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass 1395cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass assertTrue(mWifiVendorHal.startVendorHalSta()); 1396cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass 1397cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass WifiWakeReasonAndCounts retrievedStats = mWifiVendorHal.getWlanWakeReasonCount(); 1398cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass verify(mIWifiChip).getDebugHostWakeReasonStats( 1399cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass any(IWifiChip.getDebugHostWakeReasonStatsCallback.class)); 1400cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass assertNotNull(retrievedStats); 1401cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass assertEquals(stats.totalCmdEventWakeCnt, retrievedStats.totalCmdEventWake); 1402cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass assertEquals(stats.totalDriverFwLocalWakeCnt, retrievedStats.totalDriverFwLocalWake); 1403cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass assertEquals(stats.totalRxPacketWakeCnt, retrievedStats.totalRxDataWake); 1404cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass assertEquals(stats.rxPktWakeDetails.rxUnicastCnt, retrievedStats.rxUnicast); 1405cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass assertEquals(stats.rxPktWakeDetails.rxMulticastCnt, retrievedStats.rxMulticast); 1406cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass assertEquals(stats.rxIcmpPkWakeDetails.icmpPkt, retrievedStats.icmp); 1407cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass assertEquals(stats.rxIcmpPkWakeDetails.icmp6Pkt, retrievedStats.icmp6); 1408cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass assertEquals(stats.rxMulticastPkWakeDetails.ipv4RxMulticastAddrCnt, 1409cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass retrievedStats.ipv4RxMulticast); 1410cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass assertEquals(stats.rxMulticastPkWakeDetails.ipv6RxMulticastAddrCnt, 1411cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass retrievedStats.ipv6Multicast); 1412cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass } 1413cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass 1414cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass /** 1415cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass * Tests the failure in retrieval of wlan wake reason stats. 1416cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass */ 1417cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass @Test 1418cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass public void testGetWlanWakeReasonCountFailure() throws Exception { 1419cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass doAnswer(new AnswerWithArguments() { 1420cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass public void answer(IWifiChip.getDebugHostWakeReasonStatsCallback cb) { 1421cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass cb.onValues(mWifiStatusFailure, new WifiDebugHostWakeReasonStats()); 1422cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass } 1423cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass }).when(mIWifiChip).getDebugHostWakeReasonStats( 1424cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass any(IWifiChip.getDebugHostWakeReasonStatsCallback.class)); 1425cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass 1426cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass // This should work in both AP & STA mode. 1427cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass assertTrue(mWifiVendorHal.startVendorHalAp()); 1428cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass 1429cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass assertNull(mWifiVendorHal.getWlanWakeReasonCount()); 1430cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass verify(mIWifiChip).getDebugHostWakeReasonStats( 1431cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass any(IWifiChip.getDebugHostWakeReasonStatsCallback.class)); 1432cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass } 14332f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass 14342f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass /** 14352f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass * Test that getFwMemoryDump is properly plumbed 14362f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass */ 14372f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass @Test 14382f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass public void testGetFwMemoryDump() throws Exception { 14392f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass byte [] sample = NativeUtil.hexStringToByteArray("268c7a3fbfa4661c0bdd6a36"); 14402f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass ArrayList<Byte> halBlob = NativeUtil.byteArrayToArrayList(sample); 14412f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass 14422f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass doAnswer(new AnswerWithArguments() { 14432f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass public void answer(IWifiChip.requestFirmwareDebugDumpCallback cb) 14442f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass throws RemoteException { 14452f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass cb.onValues(mWifiStatusSuccess, halBlob); 14462f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass } 14472f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass }).when(mIWifiChip).requestFirmwareDebugDump(any( 14482f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass IWifiChip.requestFirmwareDebugDumpCallback.class)); 14492f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass 14502f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass assertTrue(mWifiVendorHal.startVendorHalSta()); 14512f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass assertArrayEquals(sample, mWifiVendorHal.getFwMemoryDump()); 14522f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass } 14532f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass 14542f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass /** 14552f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass * Test that getDriverStateDump is properly plumbed 14562f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass * 14572f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass * Just for variety, use AP mode here. 14582f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass */ 14592f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass @Test 14602f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass public void testGetDriverStateDump() throws Exception { 14612f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass byte [] sample = NativeUtil.hexStringToByteArray("e83ff543cf80083e6459d20f"); 14622f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass ArrayList<Byte> halBlob = NativeUtil.byteArrayToArrayList(sample); 14632f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass 14642f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass doAnswer(new AnswerWithArguments() { 14652f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass public void answer(IWifiChip.requestDriverDebugDumpCallback cb) 14662f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass throws RemoteException { 14672f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass cb.onValues(mWifiStatusSuccess, halBlob); 14682f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass } 14692f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass }).when(mIWifiChip).requestDriverDebugDump(any( 14702f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass IWifiChip.requestDriverDebugDumpCallback.class)); 14712f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass 14722f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass assertTrue(mWifiVendorHal.startVendorHalAp()); 14732f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass assertArrayEquals(sample, mWifiVendorHal.getDriverStateDump()); 14742f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass } 1475d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius 1476d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius /** 1477d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius * Test that background scan failure is handled correctly. 1478d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius */ 1479d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius @Test 1480d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius public void testBgScanFailureCallback() throws Exception { 1481d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius assertTrue(mWifiVendorHal.startVendorHalSta()); 1482d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius assertNotNull(mIWifiStaIfaceEventCallback); 1483d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius 1484d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius WifiNative.ScanEventHandler eventHandler = mock(WifiNative.ScanEventHandler.class); 1485d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius startBgScan(eventHandler); 1486d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius 1487d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius mIWifiStaIfaceEventCallback.onBackgroundScanFailure(mWifiVendorHal.mScan.cmdId); 1488d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius verify(eventHandler).onScanStatus(WifiNative.WIFI_SCAN_FAILED); 1489d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius } 1490d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius 1491d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius /** 1492136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass * Test that background scan failure with wrong id is not reported. 1493d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius */ 1494d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius @Test 1495d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius public void testBgScanFailureCallbackWithInvalidCmdId() throws Exception { 1496d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius assertTrue(mWifiVendorHal.startVendorHalSta()); 1497d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius assertNotNull(mIWifiStaIfaceEventCallback); 1498d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius 1499d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius WifiNative.ScanEventHandler eventHandler = mock(WifiNative.ScanEventHandler.class); 1500d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius startBgScan(eventHandler); 1501d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius 1502d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius mIWifiStaIfaceEventCallback.onBackgroundScanFailure(mWifiVendorHal.mScan.cmdId + 1); 1503d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius verify(eventHandler, never()).onScanStatus(WifiNative.WIFI_SCAN_FAILED); 1504d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius } 1505d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius 1506d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius /** 1507d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius * Test that background scan full results are handled correctly. 1508d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius */ 1509d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius @Test 1510d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius public void testBgScanFullScanResults() throws Exception { 1511d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius assertTrue(mWifiVendorHal.startVendorHalSta()); 1512d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius assertNotNull(mIWifiStaIfaceEventCallback); 1513d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius 1514d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius WifiNative.ScanEventHandler eventHandler = mock(WifiNative.ScanEventHandler.class); 1515d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius startBgScan(eventHandler); 1516d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius 1517d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius Pair<StaScanResult, ScanResult> result = createHidlAndFrameworkBgScanResult(); 1518d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius mIWifiStaIfaceEventCallback.onBackgroundFullScanResult( 15196b1dfdb05b07e485cf510d3cc393cb0ca7b9d9efRoshan Pius mWifiVendorHal.mScan.cmdId, 5, result.first); 1520d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius 1521d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius ArgumentCaptor<ScanResult> scanResultCaptor = ArgumentCaptor.forClass(ScanResult.class); 15226b1dfdb05b07e485cf510d3cc393cb0ca7b9d9efRoshan Pius verify(eventHandler).onFullScanResult(scanResultCaptor.capture(), eq(5)); 1523d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius 1524d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius assertScanResultEqual(result.second, scanResultCaptor.getValue()); 1525d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius } 1526d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius 1527d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius /** 1528d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius * Test that background scan results are handled correctly. 1529d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius */ 1530d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius @Test 1531d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius public void testBgScanScanResults() throws Exception { 1532d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius assertTrue(mWifiVendorHal.startVendorHalSta()); 1533d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius assertNotNull(mIWifiStaIfaceEventCallback); 1534d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius 1535d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius WifiNative.ScanEventHandler eventHandler = mock(WifiNative.ScanEventHandler.class); 1536d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius startBgScan(eventHandler); 1537d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius 1538d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius Pair<ArrayList<StaScanData>, ArrayList<WifiScanner.ScanData>> data = 1539d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius createHidlAndFrameworkBgScanDatas(); 1540d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius mIWifiStaIfaceEventCallback.onBackgroundScanResults( 1541d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius mWifiVendorHal.mScan.cmdId, data.first); 1542d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius 1543d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius verify(eventHandler).onScanStatus(WifiNative.WIFI_SCAN_RESULTS_AVAILABLE); 1544d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius assertScanDatasEqual( 1545d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius data.second, Arrays.asList(mWifiVendorHal.mScan.latestScanResults)); 1546d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius } 1547d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius 15481514ed2b37ca20f14990c9a605a576632300649bRoshan Pius /** 1549136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass * Test that starting a new background scan when one is active will stop the previous one. 1550136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass */ 1551136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass @Test 1552136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass public void testBgScanReplacement() throws Exception { 1553136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass when(mIWifiStaIface.stopBackgroundScan(anyInt())).thenReturn(mWifiStatusSuccess); 1554136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass assertTrue(mWifiVendorHal.startVendorHalSta()); 1555136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass assertNotNull(mIWifiStaIfaceEventCallback); 1556136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass WifiNative.ScanEventHandler eventHandler = mock(WifiNative.ScanEventHandler.class); 1557136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass startBgScan(eventHandler); 1558136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass int cmdId1 = mWifiVendorHal.mScan.cmdId; 1559136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass startBgScan(eventHandler); 1560136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass assertNotEquals(mWifiVendorHal.mScan.cmdId, cmdId1); 1561136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass verify(mIWifiStaIface, times(2)).startBackgroundScan(anyInt(), any()); 1562136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass verify(mIWifiStaIface).stopBackgroundScan(cmdId1); 1563136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass } 1564136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass 1565136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass /** 1566136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass * Test stopping a background scan. 1567136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass */ 1568136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass @Test 1569136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass public void testBgScanStop() throws Exception { 1570136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass when(mIWifiStaIface.stopBackgroundScan(anyInt())).thenReturn(mWifiStatusSuccess); 1571136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass assertTrue(mWifiVendorHal.startVendorHalSta()); 1572136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass assertNotNull(mIWifiStaIfaceEventCallback); 1573136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass WifiNative.ScanEventHandler eventHandler = mock(WifiNative.ScanEventHandler.class); 1574136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass startBgScan(eventHandler); 1575136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass 1576136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass int cmdId = mWifiVendorHal.mScan.cmdId; 1577136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass 1578136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass mWifiVendorHal.stopScan(); 1579136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass mWifiVendorHal.stopScan(); // second call should not do anything 1580136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass verify(mIWifiStaIface).stopBackgroundScan(cmdId); // Should be called just once 1581136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass } 1582136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass 1583136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass /** 1584136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass * Test pausing and restarting a background scan. 1585136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass */ 1586136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass @Test 1587136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass public void testBgScanPauseAndRestart() throws Exception { 1588136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass when(mIWifiStaIface.stopBackgroundScan(anyInt())).thenReturn(mWifiStatusSuccess); 1589136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass assertTrue(mWifiVendorHal.startVendorHalSta()); 1590136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass assertNotNull(mIWifiStaIfaceEventCallback); 1591136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass WifiNative.ScanEventHandler eventHandler = mock(WifiNative.ScanEventHandler.class); 1592136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass startBgScan(eventHandler); 1593136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass 1594136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass int cmdId = mWifiVendorHal.mScan.cmdId; 1595136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass 1596136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass mWifiVendorHal.pauseScan(); 1597136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass mWifiVendorHal.restartScan(); 1598136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass verify(mIWifiStaIface).stopBackgroundScan(cmdId); // Should be called just once 1599136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass verify(mIWifiStaIface, times(2)).startBackgroundScan(eq(cmdId), any()); 1600136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass } 1601136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass 1602136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass /** 16031514ed2b37ca20f14990c9a605a576632300649bRoshan Pius * Test the handling of log handler set. 16041514ed2b37ca20f14990c9a605a576632300649bRoshan Pius */ 16051514ed2b37ca20f14990c9a605a576632300649bRoshan Pius @Test 16061514ed2b37ca20f14990c9a605a576632300649bRoshan Pius public void testSetLogHandler() throws Exception { 16071514ed2b37ca20f14990c9a605a576632300649bRoshan Pius when(mIWifiChip.enableDebugErrorAlerts(anyBoolean())).thenReturn(mWifiStatusSuccess); 16081514ed2b37ca20f14990c9a605a576632300649bRoshan Pius 16091514ed2b37ca20f14990c9a605a576632300649bRoshan Pius WifiNative.WifiLoggerEventHandler eventHandler = 16101514ed2b37ca20f14990c9a605a576632300649bRoshan Pius mock(WifiNative.WifiLoggerEventHandler.class); 16111514ed2b37ca20f14990c9a605a576632300649bRoshan Pius 16121514ed2b37ca20f14990c9a605a576632300649bRoshan Pius assertFalse(mWifiVendorHal.setLoggingEventHandler(eventHandler)); 16131514ed2b37ca20f14990c9a605a576632300649bRoshan Pius verify(mIWifiChip, never()).enableDebugErrorAlerts(anyBoolean()); 16141514ed2b37ca20f14990c9a605a576632300649bRoshan Pius 16151514ed2b37ca20f14990c9a605a576632300649bRoshan Pius assertTrue(mWifiVendorHal.startVendorHalSta()); 16161514ed2b37ca20f14990c9a605a576632300649bRoshan Pius 16171514ed2b37ca20f14990c9a605a576632300649bRoshan Pius assertTrue(mWifiVendorHal.setLoggingEventHandler(eventHandler)); 16181514ed2b37ca20f14990c9a605a576632300649bRoshan Pius verify(mIWifiChip).enableDebugErrorAlerts(eq(true)); 16191514ed2b37ca20f14990c9a605a576632300649bRoshan Pius reset(mIWifiChip); 16201514ed2b37ca20f14990c9a605a576632300649bRoshan Pius 16211514ed2b37ca20f14990c9a605a576632300649bRoshan Pius // Second call should fail. 16221514ed2b37ca20f14990c9a605a576632300649bRoshan Pius assertFalse(mWifiVendorHal.setLoggingEventHandler(eventHandler)); 16231514ed2b37ca20f14990c9a605a576632300649bRoshan Pius verify(mIWifiChip, never()).enableDebugErrorAlerts(anyBoolean()); 16241514ed2b37ca20f14990c9a605a576632300649bRoshan Pius } 16251514ed2b37ca20f14990c9a605a576632300649bRoshan Pius 16261514ed2b37ca20f14990c9a605a576632300649bRoshan Pius /** 16271514ed2b37ca20f14990c9a605a576632300649bRoshan Pius * Test the handling of log handler reset. 16281514ed2b37ca20f14990c9a605a576632300649bRoshan Pius */ 16291514ed2b37ca20f14990c9a605a576632300649bRoshan Pius @Test 16301514ed2b37ca20f14990c9a605a576632300649bRoshan Pius public void testResetLogHandler() throws Exception { 16311514ed2b37ca20f14990c9a605a576632300649bRoshan Pius when(mIWifiChip.enableDebugErrorAlerts(anyBoolean())).thenReturn(mWifiStatusSuccess); 16326b1dfdb05b07e485cf510d3cc393cb0ca7b9d9efRoshan Pius when(mIWifiChip.stopLoggingToDebugRingBuffer()).thenReturn(mWifiStatusSuccess); 16331514ed2b37ca20f14990c9a605a576632300649bRoshan Pius 16341514ed2b37ca20f14990c9a605a576632300649bRoshan Pius assertFalse(mWifiVendorHal.resetLogHandler()); 16351514ed2b37ca20f14990c9a605a576632300649bRoshan Pius verify(mIWifiChip, never()).enableDebugErrorAlerts(anyBoolean()); 16366b1dfdb05b07e485cf510d3cc393cb0ca7b9d9efRoshan Pius verify(mIWifiChip, never()).stopLoggingToDebugRingBuffer(); 16371514ed2b37ca20f14990c9a605a576632300649bRoshan Pius 16381514ed2b37ca20f14990c9a605a576632300649bRoshan Pius assertTrue(mWifiVendorHal.startVendorHalSta()); 16391514ed2b37ca20f14990c9a605a576632300649bRoshan Pius 16401514ed2b37ca20f14990c9a605a576632300649bRoshan Pius // Not set, so this should fail. 16411514ed2b37ca20f14990c9a605a576632300649bRoshan Pius assertFalse(mWifiVendorHal.resetLogHandler()); 16421514ed2b37ca20f14990c9a605a576632300649bRoshan Pius verify(mIWifiChip, never()).enableDebugErrorAlerts(anyBoolean()); 16436b1dfdb05b07e485cf510d3cc393cb0ca7b9d9efRoshan Pius verify(mIWifiChip, never()).stopLoggingToDebugRingBuffer(); 16441514ed2b37ca20f14990c9a605a576632300649bRoshan Pius 16451514ed2b37ca20f14990c9a605a576632300649bRoshan Pius // Now set and then reset. 16461514ed2b37ca20f14990c9a605a576632300649bRoshan Pius assertTrue(mWifiVendorHal.setLoggingEventHandler( 16471514ed2b37ca20f14990c9a605a576632300649bRoshan Pius mock(WifiNative.WifiLoggerEventHandler.class))); 16481514ed2b37ca20f14990c9a605a576632300649bRoshan Pius assertTrue(mWifiVendorHal.resetLogHandler()); 16491514ed2b37ca20f14990c9a605a576632300649bRoshan Pius verify(mIWifiChip).enableDebugErrorAlerts(eq(false)); 16506b1dfdb05b07e485cf510d3cc393cb0ca7b9d9efRoshan Pius verify(mIWifiChip).stopLoggingToDebugRingBuffer(); 16511514ed2b37ca20f14990c9a605a576632300649bRoshan Pius reset(mIWifiChip); 16521514ed2b37ca20f14990c9a605a576632300649bRoshan Pius 16531514ed2b37ca20f14990c9a605a576632300649bRoshan Pius // Second reset should fail. 16541514ed2b37ca20f14990c9a605a576632300649bRoshan Pius assertFalse(mWifiVendorHal.resetLogHandler()); 16551514ed2b37ca20f14990c9a605a576632300649bRoshan Pius verify(mIWifiChip, never()).enableDebugErrorAlerts(anyBoolean()); 16566b1dfdb05b07e485cf510d3cc393cb0ca7b9d9efRoshan Pius verify(mIWifiChip, never()).stopLoggingToDebugRingBuffer(); 16571514ed2b37ca20f14990c9a605a576632300649bRoshan Pius } 16581514ed2b37ca20f14990c9a605a576632300649bRoshan Pius 16591514ed2b37ca20f14990c9a605a576632300649bRoshan Pius /** 16601514ed2b37ca20f14990c9a605a576632300649bRoshan Pius * Test the handling of alert callback. 16611514ed2b37ca20f14990c9a605a576632300649bRoshan Pius */ 16621514ed2b37ca20f14990c9a605a576632300649bRoshan Pius @Test 16631514ed2b37ca20f14990c9a605a576632300649bRoshan Pius public void testAlertCallback() throws Exception { 16641514ed2b37ca20f14990c9a605a576632300649bRoshan Pius when(mIWifiChip.enableDebugErrorAlerts(anyBoolean())).thenReturn(mWifiStatusSuccess); 16656b1dfdb05b07e485cf510d3cc393cb0ca7b9d9efRoshan Pius when(mIWifiChip.stopLoggingToDebugRingBuffer()).thenReturn(mWifiStatusSuccess); 16661514ed2b37ca20f14990c9a605a576632300649bRoshan Pius 16671514ed2b37ca20f14990c9a605a576632300649bRoshan Pius assertTrue(mWifiVendorHal.startVendorHalSta()); 16681514ed2b37ca20f14990c9a605a576632300649bRoshan Pius assertNotNull(mIWifiChipEventCallback); 16691514ed2b37ca20f14990c9a605a576632300649bRoshan Pius 16701514ed2b37ca20f14990c9a605a576632300649bRoshan Pius int errorCode = 5; 16711514ed2b37ca20f14990c9a605a576632300649bRoshan Pius byte[] errorData = new byte[45]; 16721514ed2b37ca20f14990c9a605a576632300649bRoshan Pius new Random().nextBytes(errorData); 16731514ed2b37ca20f14990c9a605a576632300649bRoshan Pius 16741514ed2b37ca20f14990c9a605a576632300649bRoshan Pius // Randomly raise the HIDL callback before we register for the log callback. 16751514ed2b37ca20f14990c9a605a576632300649bRoshan Pius // This should be ignored. 16761514ed2b37ca20f14990c9a605a576632300649bRoshan Pius mIWifiChipEventCallback.onDebugErrorAlert( 16771514ed2b37ca20f14990c9a605a576632300649bRoshan Pius errorCode, NativeUtil.byteArrayToArrayList(errorData)); 16781514ed2b37ca20f14990c9a605a576632300649bRoshan Pius 16791514ed2b37ca20f14990c9a605a576632300649bRoshan Pius WifiNative.WifiLoggerEventHandler eventHandler = 16801514ed2b37ca20f14990c9a605a576632300649bRoshan Pius mock(WifiNative.WifiLoggerEventHandler.class); 16811514ed2b37ca20f14990c9a605a576632300649bRoshan Pius assertTrue(mWifiVendorHal.setLoggingEventHandler(eventHandler)); 16821514ed2b37ca20f14990c9a605a576632300649bRoshan Pius verify(mIWifiChip).enableDebugErrorAlerts(eq(true)); 16831514ed2b37ca20f14990c9a605a576632300649bRoshan Pius 16841514ed2b37ca20f14990c9a605a576632300649bRoshan Pius // Now raise the HIDL callback, this should be properly handled. 16851514ed2b37ca20f14990c9a605a576632300649bRoshan Pius mIWifiChipEventCallback.onDebugErrorAlert( 16861514ed2b37ca20f14990c9a605a576632300649bRoshan Pius errorCode, NativeUtil.byteArrayToArrayList(errorData)); 16871514ed2b37ca20f14990c9a605a576632300649bRoshan Pius verify(eventHandler).onWifiAlert(eq(errorCode), eq(errorData)); 16881514ed2b37ca20f14990c9a605a576632300649bRoshan Pius 16891514ed2b37ca20f14990c9a605a576632300649bRoshan Pius // Now stop the logging and invoke the callback. This should be ignored. 16901514ed2b37ca20f14990c9a605a576632300649bRoshan Pius assertTrue(mWifiVendorHal.resetLogHandler()); 16911514ed2b37ca20f14990c9a605a576632300649bRoshan Pius mIWifiChipEventCallback.onDebugErrorAlert( 16921514ed2b37ca20f14990c9a605a576632300649bRoshan Pius errorCode, NativeUtil.byteArrayToArrayList(errorData)); 16931514ed2b37ca20f14990c9a605a576632300649bRoshan Pius } 16941514ed2b37ca20f14990c9a605a576632300649bRoshan Pius 16951514ed2b37ca20f14990c9a605a576632300649bRoshan Pius /** 16961514ed2b37ca20f14990c9a605a576632300649bRoshan Pius * Test the handling of ring buffer callback. 16971514ed2b37ca20f14990c9a605a576632300649bRoshan Pius */ 16981514ed2b37ca20f14990c9a605a576632300649bRoshan Pius @Test 16991514ed2b37ca20f14990c9a605a576632300649bRoshan Pius public void testRingBufferDataCallback() throws Exception { 17001514ed2b37ca20f14990c9a605a576632300649bRoshan Pius when(mIWifiChip.enableDebugErrorAlerts(anyBoolean())).thenReturn(mWifiStatusSuccess); 17016b1dfdb05b07e485cf510d3cc393cb0ca7b9d9efRoshan Pius when(mIWifiChip.stopLoggingToDebugRingBuffer()).thenReturn(mWifiStatusSuccess); 17021514ed2b37ca20f14990c9a605a576632300649bRoshan Pius 17031514ed2b37ca20f14990c9a605a576632300649bRoshan Pius assertTrue(mWifiVendorHal.startVendorHalSta()); 17041514ed2b37ca20f14990c9a605a576632300649bRoshan Pius assertNotNull(mIWifiChipEventCallback); 17051514ed2b37ca20f14990c9a605a576632300649bRoshan Pius 17061514ed2b37ca20f14990c9a605a576632300649bRoshan Pius byte[] errorData = new byte[45]; 17071514ed2b37ca20f14990c9a605a576632300649bRoshan Pius new Random().nextBytes(errorData); 17081514ed2b37ca20f14990c9a605a576632300649bRoshan Pius 17091514ed2b37ca20f14990c9a605a576632300649bRoshan Pius // Randomly raise the HIDL callback before we register for the log callback. 17101514ed2b37ca20f14990c9a605a576632300649bRoshan Pius // This should be ignored. 17111514ed2b37ca20f14990c9a605a576632300649bRoshan Pius mIWifiChipEventCallback.onDebugRingBufferDataAvailable( 17121514ed2b37ca20f14990c9a605a576632300649bRoshan Pius new WifiDebugRingBufferStatus(), NativeUtil.byteArrayToArrayList(errorData)); 17131514ed2b37ca20f14990c9a605a576632300649bRoshan Pius 17141514ed2b37ca20f14990c9a605a576632300649bRoshan Pius WifiNative.WifiLoggerEventHandler eventHandler = 17151514ed2b37ca20f14990c9a605a576632300649bRoshan Pius mock(WifiNative.WifiLoggerEventHandler.class); 17161514ed2b37ca20f14990c9a605a576632300649bRoshan Pius assertTrue(mWifiVendorHal.setLoggingEventHandler(eventHandler)); 17171514ed2b37ca20f14990c9a605a576632300649bRoshan Pius verify(mIWifiChip).enableDebugErrorAlerts(eq(true)); 17181514ed2b37ca20f14990c9a605a576632300649bRoshan Pius 17191514ed2b37ca20f14990c9a605a576632300649bRoshan Pius // Now raise the HIDL callback, this should be properly handled. 17201514ed2b37ca20f14990c9a605a576632300649bRoshan Pius mIWifiChipEventCallback.onDebugRingBufferDataAvailable( 17211514ed2b37ca20f14990c9a605a576632300649bRoshan Pius new WifiDebugRingBufferStatus(), NativeUtil.byteArrayToArrayList(errorData)); 17221514ed2b37ca20f14990c9a605a576632300649bRoshan Pius verify(eventHandler).onRingBufferData( 17231514ed2b37ca20f14990c9a605a576632300649bRoshan Pius any(WifiNative.RingBufferStatus.class), eq(errorData)); 17241514ed2b37ca20f14990c9a605a576632300649bRoshan Pius 17251514ed2b37ca20f14990c9a605a576632300649bRoshan Pius // Now stop the logging and invoke the callback. This should be ignored. 17261514ed2b37ca20f14990c9a605a576632300649bRoshan Pius assertTrue(mWifiVendorHal.resetLogHandler()); 17271514ed2b37ca20f14990c9a605a576632300649bRoshan Pius mIWifiChipEventCallback.onDebugRingBufferDataAvailable( 17281514ed2b37ca20f14990c9a605a576632300649bRoshan Pius new WifiDebugRingBufferStatus(), NativeUtil.byteArrayToArrayList(errorData)); 17291514ed2b37ca20f14990c9a605a576632300649bRoshan Pius } 17301514ed2b37ca20f14990c9a605a576632300649bRoshan Pius 1731d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius private void startBgScan(WifiNative.ScanEventHandler eventHandler) throws Exception { 1732d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius when(mIWifiStaIface.startBackgroundScan( 1733d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius anyInt(), any(StaBackgroundScanParameters.class))).thenReturn(mWifiStatusSuccess); 1734136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass WifiNative.ScanSettings settings = new WifiNative.ScanSettings(); 1735136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass settings.num_buckets = 1; 1736136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass WifiNative.BucketSettings bucketSettings = new WifiNative.BucketSettings(); 1737136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass bucketSettings.bucket = 0; 1738136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass bucketSettings.period_ms = 16000; 1739136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass bucketSettings.report_events = WifiScanner.REPORT_EVENT_AFTER_EACH_SCAN; 1740136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass settings.buckets = new WifiNative.BucketSettings[] {bucketSettings}; 1741136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass assertTrue(mWifiVendorHal.startScan(settings, eventHandler)); 1742d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius } 1743d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius 1744d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius // Create a pair of HIDL scan result and its corresponding framework scan result for 1745d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius // comparison. 1746d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius private Pair<StaScanResult, ScanResult> createHidlAndFrameworkBgScanResult() { 1747d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius StaScanResult staScanResult = new StaScanResult(); 1748d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius Random random = new Random(); 1749d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius byte[] ssid = new byte[8]; 1750d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius random.nextBytes(ssid); 1751d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius staScanResult.ssid.addAll(NativeUtil.byteArrayToArrayList(ssid)); 1752d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius random.nextBytes(staScanResult.bssid); 1753d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius staScanResult.frequency = 2432; 1754d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius staScanResult.rssi = -45; 1755d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius staScanResult.timeStampInUs = 5; 1756d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius WifiInformationElement ie1 = new WifiInformationElement(); 1757d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius byte[] ie1_data = new byte[56]; 1758d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius random.nextBytes(ie1_data); 1759d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius ie1.id = 1; 1760d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius ie1.data.addAll(NativeUtil.byteArrayToArrayList(ie1_data)); 1761d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius staScanResult.informationElements.add(ie1); 1762d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius 1763d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius // Now create the corresponding Scan result structure. 1764d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius ScanResult scanResult = new ScanResult(); 1765d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius scanResult.SSID = NativeUtil.encodeSsid(staScanResult.ssid); 1766d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius scanResult.BSSID = NativeUtil.macAddressFromByteArray(staScanResult.bssid); 1767d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius scanResult.wifiSsid = WifiSsid.createFromByteArray(ssid); 1768d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius scanResult.frequency = staScanResult.frequency; 1769d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius scanResult.level = staScanResult.rssi; 1770d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius scanResult.timestamp = staScanResult.timeStampInUs; 1771d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius scanResult.bytes = new byte[57]; 1772d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius scanResult.bytes[0] = ie1.id; 1773d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius System.arraycopy(ie1_data, 0, scanResult.bytes, 1, ie1_data.length); 1774d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius 1775d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius return Pair.create(staScanResult, scanResult); 1776d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius } 1777d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius 1778d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius // Create a pair of HIDL scan datas and its corresponding framework scan datas for 1779d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius // comparison. 1780d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius private Pair<ArrayList<StaScanData>, ArrayList<WifiScanner.ScanData>> 1781d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius createHidlAndFrameworkBgScanDatas() { 1782d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius ArrayList<StaScanData> staScanDatas = new ArrayList<>(); 1783d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius StaScanData staScanData = new StaScanData(); 1784d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius 1785d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius Pair<StaScanResult, ScanResult> result = createHidlAndFrameworkBgScanResult(); 1786d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius staScanData.results.add(result.first); 1787d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius staScanData.bucketsScanned = 5; 1788d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius staScanData.flags = StaScanDataFlagMask.INTERRUPTED; 1789d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius staScanDatas.add(staScanData); 1790d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius 1791d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius ArrayList<WifiScanner.ScanData> scanDatas = new ArrayList<>(); 1792d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius ScanResult[] scanResults = new ScanResult[1]; 1793d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius scanResults[0] = result.second; 1794d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius WifiScanner.ScanData scanData = 1795d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius new WifiScanner.ScanData(mWifiVendorHal.mScan.cmdId, 1, 1796d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius staScanData.bucketsScanned, false, scanResults); 1797d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius scanDatas.add(scanData); 1798d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius return Pair.create(staScanDatas, scanDatas); 1799d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius } 1800d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius 1801d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius private void assertScanResultEqual(ScanResult expected, ScanResult actual) { 1802d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius assertEquals(expected.SSID, actual.SSID); 1803d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius assertEquals(expected.wifiSsid.getHexString(), actual.wifiSsid.getHexString()); 1804d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius assertEquals(expected.BSSID, actual.BSSID); 1805d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius assertEquals(expected.frequency, actual.frequency); 1806d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius assertEquals(expected.level, actual.level); 1807d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius assertEquals(expected.timestamp, actual.timestamp); 1808d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius assertArrayEquals(expected.bytes, actual.bytes); 1809d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius } 1810d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius 1811d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius private void assertScanResultsEqual(ScanResult[] expected, ScanResult[] actual) { 1812d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius assertEquals(expected.length, actual.length); 1813d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius for (int i = 0; i < expected.length; i++) { 1814d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius assertScanResultEqual(expected[i], actual[i]); 1815d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius } 1816d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius } 1817d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius 1818d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius private void assertScanDataEqual(WifiScanner.ScanData expected, WifiScanner.ScanData actual) { 1819d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius assertEquals(expected.getId(), actual.getId()); 1820d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius assertEquals(expected.getFlags(), actual.getFlags()); 1821d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius assertEquals(expected.getBucketsScanned(), actual.getBucketsScanned()); 1822d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius assertScanResultsEqual(expected.getResults(), actual.getResults()); 1823d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius } 1824d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius 1825d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius private void assertScanDatasEqual( 1826d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius List<WifiScanner.ScanData> expected, List<WifiScanner.ScanData> actual) { 1827d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius assertEquals(expected.size(), actual.size()); 1828d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius for (int i = 0; i < expected.size(); i++) { 1829d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius assertScanDataEqual(expected.get(i), actual.get(i)); 1830d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius } 1831d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius } 1832b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plass} 1833