WifiVendorHalTest.java revision f5749a73fe63a3e01db62a9752be365fb40ec633
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; 180d5a9d5c9f0914ad145926beb96fb72b39089e02Etan Cohen 190d5a9d5c9f0914ad145926beb96fb72b39089e02Etan Cohenimport static org.junit.Assert.assertArrayEquals; 200d5a9d5c9f0914ad145926beb96fb72b39089e02Etan Cohenimport static org.junit.Assert.assertEquals; 210d5a9d5c9f0914ad145926beb96fb72b39089e02Etan Cohenimport static org.junit.Assert.assertFalse; 220d5a9d5c9f0914ad145926beb96fb72b39089e02Etan Cohenimport static org.junit.Assert.assertNotEquals; 230d5a9d5c9f0914ad145926beb96fb72b39089e02Etan Cohenimport static org.junit.Assert.assertNotNull; 240d5a9d5c9f0914ad145926beb96fb72b39089e02Etan Cohenimport static org.junit.Assert.assertNull; 250d5a9d5c9f0914ad145926beb96fb72b39089e02Etan Cohenimport static org.junit.Assert.assertTrue; 260d5a9d5c9f0914ad145926beb96fb72b39089e02Etan Cohenimport static org.mockito.Mockito.any; 270d5a9d5c9f0914ad145926beb96fb72b39089e02Etan Cohenimport static org.mockito.Mockito.anyBoolean; 280d5a9d5c9f0914ad145926beb96fb72b39089e02Etan Cohenimport static org.mockito.Mockito.anyInt; 290d5a9d5c9f0914ad145926beb96fb72b39089e02Etan Cohenimport static org.mockito.Mockito.anyObject; 300d5a9d5c9f0914ad145926beb96fb72b39089e02Etan Cohenimport static org.mockito.Mockito.anyShort; 310d5a9d5c9f0914ad145926beb96fb72b39089e02Etan Cohenimport static org.mockito.Mockito.doAnswer; 320d5a9d5c9f0914ad145926beb96fb72b39089e02Etan Cohenimport static org.mockito.Mockito.doNothing; 331c7f0d2c83318cdd1c127a083362e91765c0d941Jong Wook Kimimport static org.mockito.Mockito.doThrow; 340d5a9d5c9f0914ad145926beb96fb72b39089e02Etan Cohenimport static org.mockito.Mockito.eq; 350d5a9d5c9f0914ad145926beb96fb72b39089e02Etan Cohenimport static org.mockito.Mockito.mock; 360d5a9d5c9f0914ad145926beb96fb72b39089e02Etan Cohenimport static org.mockito.Mockito.never; 370d5a9d5c9f0914ad145926beb96fb72b39089e02Etan Cohenimport static org.mockito.Mockito.reset; 380d5a9d5c9f0914ad145926beb96fb72b39089e02Etan Cohenimport static org.mockito.Mockito.spy; 390d5a9d5c9f0914ad145926beb96fb72b39089e02Etan Cohenimport static org.mockito.Mockito.times; 400d5a9d5c9f0914ad145926beb96fb72b39089e02Etan Cohenimport static org.mockito.Mockito.verify; 41f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Piusimport static org.mockito.Mockito.verifyNoMoreInteractions; 420d5a9d5c9f0914ad145926beb96fb72b39089e02Etan Cohenimport static org.mockito.Mockito.when; 430d5a9d5c9f0914ad145926beb96fb72b39089e02Etan Cohen 44d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Piusimport android.app.test.MockAnswerUtil.AnswerWithArguments; 45d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Piusimport android.hardware.wifi.V1_0.IWifiApIface; 46d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Piusimport android.hardware.wifi.V1_0.IWifiChip; 47542b204c2120a9c91324ccc86c6695012ac02ab7Roshan Piusimport android.hardware.wifi.V1_0.IWifiChipEventCallback; 48d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Piusimport android.hardware.wifi.V1_0.IWifiIface; 49d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Piusimport android.hardware.wifi.V1_0.IWifiRttController; 501711409f11610d2d646036306ec8de4fb2f69712Wei Wangimport android.hardware.wifi.V1_0.IWifiRttControllerEventCallback; 51d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Piusimport android.hardware.wifi.V1_0.IWifiStaIface; 527e4b5bdfa88703a09f611e3ef8973ab7e286375dRoshan Piusimport android.hardware.wifi.V1_0.IWifiStaIfaceEventCallback; 53ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Piusimport android.hardware.wifi.V1_0.IfaceType; 540320a9aa86429e98ff282a9e2297e19337667ad9Michael Plassimport android.hardware.wifi.V1_0.RttBw; 55ea644ad9920420dbcf420602355f9f91a7266b14Michael Plassimport android.hardware.wifi.V1_0.RttCapabilities; 56ea644ad9920420dbcf420602355f9f91a7266b14Michael Plassimport android.hardware.wifi.V1_0.RttConfig; 570320a9aa86429e98ff282a9e2297e19337667ad9Michael Plassimport android.hardware.wifi.V1_0.RttPreamble; 58ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plassimport android.hardware.wifi.V1_0.StaApfPacketFilterCapabilities; 5956d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plassimport android.hardware.wifi.V1_0.StaBackgroundScanCapabilities; 60d4c5eca00c9cae55561210479ed61a977923e0daRoshan Piusimport android.hardware.wifi.V1_0.StaBackgroundScanParameters; 61699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plassimport android.hardware.wifi.V1_0.StaLinkLayerIfacePacketStats; 62699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plassimport android.hardware.wifi.V1_0.StaLinkLayerRadioStats; 63699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plassimport android.hardware.wifi.V1_0.StaLinkLayerStats; 64d4c5eca00c9cae55561210479ed61a977923e0daRoshan Piusimport android.hardware.wifi.V1_0.StaScanData; 65d4c5eca00c9cae55561210479ed61a977923e0daRoshan Piusimport android.hardware.wifi.V1_0.StaScanDataFlagMask; 66d4c5eca00c9cae55561210479ed61a977923e0daRoshan Piusimport android.hardware.wifi.V1_0.StaScanResult; 67cbe44718452e93ef2b68974230231ff4fac99deeMichael Plassimport android.hardware.wifi.V1_0.WifiDebugHostWakeReasonStats; 685a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plassimport android.hardware.wifi.V1_0.WifiDebugPacketFateFrameType; 6953f278b6fed422a18d763b07216a21e96d9445f9Michael Plassimport android.hardware.wifi.V1_0.WifiDebugRingBufferFlags; 7053f278b6fed422a18d763b07216a21e96d9445f9Michael Plassimport android.hardware.wifi.V1_0.WifiDebugRingBufferStatus; 7153f278b6fed422a18d763b07216a21e96d9445f9Michael Plassimport android.hardware.wifi.V1_0.WifiDebugRingBufferVerboseLevel; 725a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plassimport android.hardware.wifi.V1_0.WifiDebugRxPacketFate; 735a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plassimport android.hardware.wifi.V1_0.WifiDebugRxPacketFateReport; 745a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plassimport android.hardware.wifi.V1_0.WifiDebugTxPacketFate; 755a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plassimport android.hardware.wifi.V1_0.WifiDebugTxPacketFateReport; 76d4c5eca00c9cae55561210479ed61a977923e0daRoshan Piusimport android.hardware.wifi.V1_0.WifiInformationElement; 774f2049a015722cae0f0169379d499d5d4fc98e30Michael Plassimport android.hardware.wifi.V1_0.WifiStatus; 784f2049a015722cae0f0169379d499d5d4fc98e30Michael Plassimport android.hardware.wifi.V1_0.WifiStatusCode; 79f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Piusimport android.hardware.wifi.V1_2.IWifiChipEventCallback.IfaceInfo; 80f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Piusimport android.hardware.wifi.V1_2.IWifiChipEventCallback.RadioModeInfo; 81505663e1f5ecfd9ec588f5d9073915a5f0a9ecc1Nathan Haroldimport android.net.KeepalivePacketData; 821c7f0d2c83318cdd1c127a083362e91765c0d941Jong Wook Kimimport android.net.MacAddress; 83ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plassimport android.net.apf.ApfCapabilities; 84ea644ad9920420dbcf420602355f9f91a7266b14Michael Plassimport android.net.wifi.RttManager; 85d4c5eca00c9cae55561210479ed61a977923e0daRoshan Piusimport android.net.wifi.ScanResult; 861dc6d8ecde4cad66dc8cb7b97926f1120e7b0d57Michael Plassimport android.net.wifi.WifiManager; 87d4c5eca00c9cae55561210479ed61a977923e0daRoshan Piusimport android.net.wifi.WifiScanner; 88d4c5eca00c9cae55561210479ed61a977923e0daRoshan Piusimport android.net.wifi.WifiSsid; 89cbe44718452e93ef2b68974230231ff4fac99deeMichael Plassimport android.net.wifi.WifiWakeReasonAndCounts; 900d5a9d5c9f0914ad145926beb96fb72b39089e02Etan Cohenimport android.os.Handler; 91ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Piusimport android.os.Looper; 9253f278b6fed422a18d763b07216a21e96d9445f9Michael Plassimport android.os.RemoteException; 931711409f11610d2d646036306ec8de4fb2f69712Wei Wangimport android.os.test.TestLooper; 94ed0b7cfa5bb7be5731e42c2aaac7c9fdaa68baa4Nathan Haroldimport android.system.OsConstants; 95d4c5eca00c9cae55561210479ed61a977923e0daRoshan Piusimport android.util.Pair; 961dc6d8ecde4cad66dc8cb7b97926f1120e7b0d57Michael Plass 97be7435e9929c73d041a4c1c9aeba3a3421bcd859Roshan Piusimport com.android.server.wifi.HalDeviceManager.InterfaceDestroyedListener; 98df8568a5aaed3c82ff7ef1ecafab85abf7a99da7Michael Plassimport com.android.server.wifi.util.NativeUtil; 99d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 100b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plassimport org.junit.Before; 101b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plassimport org.junit.Test; 102d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Piusimport org.mockito.ArgumentCaptor; 103b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plassimport org.mockito.Mock; 104b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plassimport org.mockito.MockitoAnnotations; 1053401582e1b1defc1877c7c47c6a839611fa211c3Michael Plassimport org.mockito.stubbing.Answer; 106b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plass 10770b995bed9674a30c56b7ae2585d5897900ff695Michael Plassimport java.net.InetAddress; 108ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plassimport java.util.ArrayList; 1095a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plassimport java.util.Arrays; 110ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Piusimport java.util.HashSet; 111d4c5eca00c9cae55561210479ed61a977923e0daRoshan Piusimport java.util.List; 1125a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plassimport java.util.Random; 113ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Piusimport java.util.Set; 114ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass 115b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plass/** 116b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plass * Unit tests for {@link com.android.server.wifi.WifiVendorHal}. 117b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plass */ 118b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plasspublic class WifiVendorHalTest { 119b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plass 120d77212c2b255b5e6331222fde66bdc735295fbbeRoshan Pius private static final String TEST_IFACE_NAME = "wlan0"; 121f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius private static final String TEST_IFACE_NAME_1 = "wlan1"; 1221c7f0d2c83318cdd1c127a083362e91765c0d941Jong Wook Kim private static final MacAddress TEST_MAC_ADDRESS = MacAddress.fromString("ee:33:a2:94:10:92"); 1231c7f0d2c83318cdd1c127a083362e91765c0d941Jong Wook Kim 124d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius WifiVendorHal mWifiVendorHal; 1254f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass private WifiStatus mWifiStatusSuccess; 1264f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass private WifiStatus mWifiStatusFailure; 1278dfa1a2e88781c773cb1ce79a1d4b72cc45c5c04Michael Plass WifiLog mWifiLog; 1284f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass @Mock 1294f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass private HalDeviceManager mHalDeviceManager; 1304f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass @Mock 131f2e03411f137f55940a8f3592e96a272585bd7ddRoshan Pius private TestLooper mLooper; 1324f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass @Mock 1334f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass private WifiVendorHal.HalDeviceManagerStatusListener mHalDeviceManagerStatusCallbacks; 1344f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass @Mock 1354f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass private IWifiApIface mIWifiApIface; 1364f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass @Mock 1374f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass private IWifiChip mIWifiChip; 1384f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass @Mock 139ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius private android.hardware.wifi.V1_1.IWifiChip mIWifiChipV11; 140ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius @Mock 141cc9c910dd0d35ad75003e4777b15562ebd7ada35Roshan Pius private android.hardware.wifi.V1_2.IWifiChip mIWifiChipV12; 142cc9c910dd0d35ad75003e4777b15562ebd7ada35Roshan Pius @Mock 1434f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass private IWifiStaIface mIWifiStaIface; 1444f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass @Mock 1451c7f0d2c83318cdd1c127a083362e91765c0d941Jong Wook Kim private android.hardware.wifi.V1_2.IWifiStaIface mIWifiStaIfaceV12; 1461c7f0d2c83318cdd1c127a083362e91765c0d941Jong Wook Kim @Mock 1474f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass private IWifiRttController mIWifiRttController; 1483401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass private IWifiStaIfaceEventCallback mIWifiStaIfaceEventCallback; 149d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius private IWifiChipEventCallback mIWifiChipEventCallback; 150cc9c910dd0d35ad75003e4777b15562ebd7ada35Roshan Pius private android.hardware.wifi.V1_2.IWifiChipEventCallback mIWifiChipEventCallbackV12; 151af0e32cfa2f7402c60b9df88a0d9bd19f421026cRoshan Pius @Mock 152af0e32cfa2f7402c60b9df88a0d9bd19f421026cRoshan Pius private WifiNative.VendorHalDeathEventHandler mVendorHalDeathHandler; 153f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius @Mock 154f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius private WifiNative.VendorHalRadioModeChangeEventHandler mVendorHalRadioModeChangeHandler; 1553401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass 1563401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass /** 157ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius * Spy used to return the V1_1 IWifiChip mock object to simulate the 1.1 HAL running on the 158ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius * device. 159ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius */ 160ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius private class WifiVendorHalSpyV1_1 extends WifiVendorHal { 161ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius WifiVendorHalSpyV1_1(HalDeviceManager halDeviceManager, Looper looper) { 162ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius super(halDeviceManager, looper); 163ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius } 164ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius 165ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius @Override 166ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius protected android.hardware.wifi.V1_1.IWifiChip getWifiChipForV1_1Mockable() { 167ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius return mIWifiChipV11; 168ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius } 169cc9c910dd0d35ad75003e4777b15562ebd7ada35Roshan Pius 170cc9c910dd0d35ad75003e4777b15562ebd7ada35Roshan Pius @Override 171cc9c910dd0d35ad75003e4777b15562ebd7ada35Roshan Pius protected android.hardware.wifi.V1_2.IWifiChip getWifiChipForV1_2Mockable() { 172cc9c910dd0d35ad75003e4777b15562ebd7ada35Roshan Pius return null; 173cc9c910dd0d35ad75003e4777b15562ebd7ada35Roshan Pius } 1741c7f0d2c83318cdd1c127a083362e91765c0d941Jong Wook Kim 1751c7f0d2c83318cdd1c127a083362e91765c0d941Jong Wook Kim @Override 1761c7f0d2c83318cdd1c127a083362e91765c0d941Jong Wook Kim protected android.hardware.wifi.V1_2.IWifiStaIface getWifiStaIfaceForV1_2Mockable( 1771c7f0d2c83318cdd1c127a083362e91765c0d941Jong Wook Kim String ifaceName) { 1781c7f0d2c83318cdd1c127a083362e91765c0d941Jong Wook Kim return null; 1791c7f0d2c83318cdd1c127a083362e91765c0d941Jong Wook Kim } 180cc9c910dd0d35ad75003e4777b15562ebd7ada35Roshan Pius } 181cc9c910dd0d35ad75003e4777b15562ebd7ada35Roshan Pius 182cc9c910dd0d35ad75003e4777b15562ebd7ada35Roshan Pius /** 1831c7f0d2c83318cdd1c127a083362e91765c0d941Jong Wook Kim * Spy used to return the V1_2 IWifiChip and IWifiStaIface mock objects to simulate 1841c7f0d2c83318cdd1c127a083362e91765c0d941Jong Wook Kim * the 1.2 HAL running on the device. 185cc9c910dd0d35ad75003e4777b15562ebd7ada35Roshan Pius */ 186cc9c910dd0d35ad75003e4777b15562ebd7ada35Roshan Pius private class WifiVendorHalSpyV1_2 extends WifiVendorHal { 187cc9c910dd0d35ad75003e4777b15562ebd7ada35Roshan Pius WifiVendorHalSpyV1_2(HalDeviceManager halDeviceManager, Looper looper) { 188cc9c910dd0d35ad75003e4777b15562ebd7ada35Roshan Pius super(halDeviceManager, looper); 189cc9c910dd0d35ad75003e4777b15562ebd7ada35Roshan Pius } 190cc9c910dd0d35ad75003e4777b15562ebd7ada35Roshan Pius 191cc9c910dd0d35ad75003e4777b15562ebd7ada35Roshan Pius @Override 192cc9c910dd0d35ad75003e4777b15562ebd7ada35Roshan Pius protected android.hardware.wifi.V1_1.IWifiChip getWifiChipForV1_1Mockable() { 193cc9c910dd0d35ad75003e4777b15562ebd7ada35Roshan Pius return null; 194cc9c910dd0d35ad75003e4777b15562ebd7ada35Roshan Pius } 195cc9c910dd0d35ad75003e4777b15562ebd7ada35Roshan Pius 196cc9c910dd0d35ad75003e4777b15562ebd7ada35Roshan Pius @Override 197cc9c910dd0d35ad75003e4777b15562ebd7ada35Roshan Pius protected android.hardware.wifi.V1_2.IWifiChip getWifiChipForV1_2Mockable() { 198cc9c910dd0d35ad75003e4777b15562ebd7ada35Roshan Pius return mIWifiChipV12; 199cc9c910dd0d35ad75003e4777b15562ebd7ada35Roshan Pius } 2001c7f0d2c83318cdd1c127a083362e91765c0d941Jong Wook Kim 2011c7f0d2c83318cdd1c127a083362e91765c0d941Jong Wook Kim @Override 2021c7f0d2c83318cdd1c127a083362e91765c0d941Jong Wook Kim protected android.hardware.wifi.V1_2.IWifiStaIface getWifiStaIfaceForV1_2Mockable( 2031c7f0d2c83318cdd1c127a083362e91765c0d941Jong Wook Kim String ifaceName) { 2041c7f0d2c83318cdd1c127a083362e91765c0d941Jong Wook Kim return mIWifiStaIfaceV12; 2051c7f0d2c83318cdd1c127a083362e91765c0d941Jong Wook Kim } 206ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius } 207ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius 208ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius /** 2093401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass * Identity function to supply a type to its argument, which is a lambda 2103401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass */ 2113401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass static Answer<WifiStatus> answerWifiStatus(Answer<WifiStatus> statusLambda) { 2123401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass return (statusLambda); 2133401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass } 214b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plass 215b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plass /** 216b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plass * Sets up for unit test 217b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plass */ 218b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plass @Before 219b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plass public void setUp() throws Exception { 220b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plass MockitoAnnotations.initMocks(this); 2218dfa1a2e88781c773cb1ce79a1d4b72cc45c5c04Michael Plass mWifiLog = new FakeWifiLog(); 222f2e03411f137f55940a8f3592e96a272585bd7ddRoshan Pius mLooper = new TestLooper(); 2234f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass mWifiStatusSuccess = new WifiStatus(); 2244f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass mWifiStatusSuccess.code = WifiStatusCode.SUCCESS; 2254f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass mWifiStatusFailure = new WifiStatus(); 2264f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass mWifiStatusFailure.code = WifiStatusCode.ERROR_UNKNOWN; 2274f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass mWifiStatusFailure.description = "I don't even know what a Mock Turtle is."; 2284f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass when(mIWifiStaIface.enableLinkLayerStatsCollection(false)).thenReturn(mWifiStatusSuccess); 2294f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass 230d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius // Setup the HalDeviceManager mock's start/stop behaviour. This can be overridden in 231d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius // individual tests, if needed. 232d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius doAnswer(new AnswerWithArguments() { 233d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius public boolean answer() { 234d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius when(mHalDeviceManager.isReady()).thenReturn(true); 235d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius when(mHalDeviceManager.isStarted()).thenReturn(true); 236d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius mHalDeviceManagerStatusCallbacks.onStatusChanged(); 237d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius return true; 238d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius } 239d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius }).when(mHalDeviceManager).start(); 240d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 241d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius doAnswer(new AnswerWithArguments() { 242d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius public void answer() { 243d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius when(mHalDeviceManager.isReady()).thenReturn(true); 244d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius when(mHalDeviceManager.isStarted()).thenReturn(false); 245d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius mHalDeviceManagerStatusCallbacks.onStatusChanged(); 246d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius } 247d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius }).when(mHalDeviceManager).stop(); 2487dadc4d68ea820779ec513073347890b842a6f9cEtan Cohen when(mHalDeviceManager.createStaIface(anyBoolean(), any(), eq(null))) 249d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius .thenReturn(mIWifiStaIface); 250be7435e9929c73d041a4c1c9aeba3a3421bcd859Roshan Pius when(mHalDeviceManager.createApIface(any(), eq(null))) 251d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius .thenReturn(mIWifiApIface); 2523153926f9b95f42a8d3175b4f0e4d2e448ea8fc1Roshan Pius when(mHalDeviceManager.removeIface(any())).thenReturn(true); 253d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius when(mHalDeviceManager.getChip(any(IWifiIface.class))) 254d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius .thenReturn(mIWifiChip); 2556ac9ca60cb5d75f51b633bd0171da2ecf6274b2aEtan Cohen when(mHalDeviceManager.createRttController()).thenReturn(mIWifiRttController); 256542b204c2120a9c91324ccc86c6695012ac02ab7Roshan Pius when(mIWifiChip.registerEventCallback(any(IWifiChipEventCallback.class))) 257542b204c2120a9c91324ccc86c6695012ac02ab7Roshan Pius .thenReturn(mWifiStatusSuccess); 2583401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass mIWifiStaIfaceEventCallback = null; 2597e4b5bdfa88703a09f611e3ef8973ab7e286375dRoshan Pius when(mIWifiStaIface.registerEventCallback(any(IWifiStaIfaceEventCallback.class))) 2603401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass .thenAnswer(answerWifiStatus((invocation) -> { 2613401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass Object[] args = invocation.getArguments(); 2623401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass mIWifiStaIfaceEventCallback = (IWifiStaIfaceEventCallback) args[0]; 2633401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass return (mWifiStatusSuccess); 2643401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass })); 265d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius when(mIWifiChip.registerEventCallback(any(IWifiChipEventCallback.class))) 266d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius .thenAnswer(answerWifiStatus((invocation) -> { 267d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius Object[] args = invocation.getArguments(); 268d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius mIWifiChipEventCallback = (IWifiChipEventCallback) args[0]; 269d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius return (mWifiStatusSuccess); 270d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius })); 271cc9c910dd0d35ad75003e4777b15562ebd7ada35Roshan Pius when(mIWifiChipV12.registerEventCallback_1_2( 272cc9c910dd0d35ad75003e4777b15562ebd7ada35Roshan Pius any(android.hardware.wifi.V1_2.IWifiChipEventCallback.class))) 273cc9c910dd0d35ad75003e4777b15562ebd7ada35Roshan Pius .thenAnswer(answerWifiStatus((invocation) -> { 274cc9c910dd0d35ad75003e4777b15562ebd7ada35Roshan Pius Object[] args = invocation.getArguments(); 275cc9c910dd0d35ad75003e4777b15562ebd7ada35Roshan Pius mIWifiChipEventCallbackV12 = 276cc9c910dd0d35ad75003e4777b15562ebd7ada35Roshan Pius (android.hardware.wifi.V1_2.IWifiChipEventCallback) args[0]; 277cc9c910dd0d35ad75003e4777b15562ebd7ada35Roshan Pius return (mWifiStatusSuccess); 278cc9c910dd0d35ad75003e4777b15562ebd7ada35Roshan Pius })); 279d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius 2801711409f11610d2d646036306ec8de4fb2f69712Wei Wang when(mIWifiRttController.registerEventCallback(any(IWifiRttControllerEventCallback.class))) 2811711409f11610d2d646036306ec8de4fb2f69712Wei Wang .thenReturn(mWifiStatusSuccess); 2821711409f11610d2d646036306ec8de4fb2f69712Wei Wang 2833153926f9b95f42a8d3175b4f0e4d2e448ea8fc1Roshan Pius doAnswer(new AnswerWithArguments() { 2843153926f9b95f42a8d3175b4f0e4d2e448ea8fc1Roshan Pius public void answer(IWifiIface.getNameCallback cb) 2853153926f9b95f42a8d3175b4f0e4d2e448ea8fc1Roshan Pius throws RemoteException { 286d77212c2b255b5e6331222fde66bdc735295fbbeRoshan Pius cb.onValues(mWifiStatusSuccess, TEST_IFACE_NAME); 2873153926f9b95f42a8d3175b4f0e4d2e448ea8fc1Roshan Pius } 2883153926f9b95f42a8d3175b4f0e4d2e448ea8fc1Roshan Pius }).when(mIWifiStaIface).getName(any(IWifiIface.getNameCallback.class)); 2893153926f9b95f42a8d3175b4f0e4d2e448ea8fc1Roshan Pius doAnswer(new AnswerWithArguments() { 2903153926f9b95f42a8d3175b4f0e4d2e448ea8fc1Roshan Pius public void answer(IWifiIface.getNameCallback cb) 2913153926f9b95f42a8d3175b4f0e4d2e448ea8fc1Roshan Pius throws RemoteException { 292d77212c2b255b5e6331222fde66bdc735295fbbeRoshan Pius cb.onValues(mWifiStatusSuccess, TEST_IFACE_NAME); 2933153926f9b95f42a8d3175b4f0e4d2e448ea8fc1Roshan Pius } 2943153926f9b95f42a8d3175b4f0e4d2e448ea8fc1Roshan Pius }).when(mIWifiApIface).getName(any(IWifiIface.getNameCallback.class)); 2953153926f9b95f42a8d3175b4f0e4d2e448ea8fc1Roshan Pius 296d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius // Create the vendor HAL object under test. 297f2e03411f137f55940a8f3592e96a272585bd7ddRoshan Pius mWifiVendorHal = new WifiVendorHal(mHalDeviceManager, mLooper.getLooper()); 298d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 299d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius // Initialize the vendor HAL to capture the registered callback. 300af0e32cfa2f7402c60b9df88a0d9bd19f421026cRoshan Pius mWifiVendorHal.initialize(mVendorHalDeathHandler); 301d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius ArgumentCaptor<WifiVendorHal.HalDeviceManagerStatusListener> hdmCallbackCaptor = 302d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius ArgumentCaptor.forClass(WifiVendorHal.HalDeviceManagerStatusListener.class); 3030d5a9d5c9f0914ad145926beb96fb72b39089e02Etan Cohen verify(mHalDeviceManager).registerStatusListener(hdmCallbackCaptor.capture(), 3040d5a9d5c9f0914ad145926beb96fb72b39089e02Etan Cohen any(Handler.class)); 305d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius mHalDeviceManagerStatusCallbacks = hdmCallbackCaptor.getValue(); 306d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius 307b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plass } 308b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plass 309b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plass /** 310d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius * Tests the successful starting of HAL in STA mode using 3113153926f9b95f42a8d3175b4f0e4d2e448ea8fc1Roshan Pius * {@link WifiVendorHal#startVendorHalSta()}. 312d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius */ 313d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius @Test 3147e4b5bdfa88703a09f611e3ef8973ab7e286375dRoshan Pius public void testStartHalSuccessInStaMode() throws Exception { 3153153926f9b95f42a8d3175b4f0e4d2e448ea8fc1Roshan Pius assertTrue(mWifiVendorHal.startVendorHalSta()); 316d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius assertTrue(mWifiVendorHal.isHalStarted()); 317d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 318d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).start(); 3197dadc4d68ea820779ec513073347890b842a6f9cEtan Cohen verify(mHalDeviceManager).createStaIface(eq(false), any(), eq(null)); 320d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).getChip(eq(mIWifiStaIface)); 3216ac9ca60cb5d75f51b633bd0171da2ecf6274b2aEtan Cohen verify(mHalDeviceManager).createRttController(); 322d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).isReady(); 323d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).isStarted(); 324542b204c2120a9c91324ccc86c6695012ac02ab7Roshan Pius verify(mIWifiStaIface).registerEventCallback(any(IWifiStaIfaceEventCallback.class)); 325542b204c2120a9c91324ccc86c6695012ac02ab7Roshan Pius verify(mIWifiChip).registerEventCallback(any(IWifiChipEventCallback.class)); 326d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 327be7435e9929c73d041a4c1c9aeba3a3421bcd859Roshan Pius verify(mHalDeviceManager, never()).createApIface(any(), eq(null)); 328d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius } 329d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 330d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius /** 331d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius * Tests the successful starting of HAL in AP mode using 3323153926f9b95f42a8d3175b4f0e4d2e448ea8fc1Roshan Pius * {@link WifiVendorHal#startVendorHalAp()}. 333d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius */ 334d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius @Test 3357e4b5bdfa88703a09f611e3ef8973ab7e286375dRoshan Pius public void testStartHalSuccessInApMode() throws Exception { 3363153926f9b95f42a8d3175b4f0e4d2e448ea8fc1Roshan Pius assertTrue(mWifiVendorHal.startVendorHalAp()); 337d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius assertTrue(mWifiVendorHal.isHalStarted()); 338d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 339d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).start(); 340be7435e9929c73d041a4c1c9aeba3a3421bcd859Roshan Pius verify(mHalDeviceManager).createApIface(any(), eq(null)); 341d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).getChip(eq(mIWifiApIface)); 342d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).isReady(); 343d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).isStarted(); 344d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 3457dadc4d68ea820779ec513073347890b842a6f9cEtan Cohen verify(mHalDeviceManager, never()).createStaIface(anyBoolean(), any(), eq(null)); 3466ac9ca60cb5d75f51b633bd0171da2ecf6274b2aEtan Cohen verify(mHalDeviceManager, never()).createRttController(); 347d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius } 348d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 349d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius /** 350d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius * Tests the failure to start HAL in STA mode using 3513153926f9b95f42a8d3175b4f0e4d2e448ea8fc1Roshan Pius * {@link WifiVendorHal#startVendorHalSta()}. 352d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius */ 353d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius @Test 3547e4b5bdfa88703a09f611e3ef8973ab7e286375dRoshan Pius public void testStartHalFailureInStaMode() throws Exception { 355d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius // No callbacks are invoked in this case since the start itself failed. So, override 356d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius // default AnswerWithArguments that we setup. 357d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius doAnswer(new AnswerWithArguments() { 3587e4b5bdfa88703a09f611e3ef8973ab7e286375dRoshan Pius public boolean answer() throws Exception { 359d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius return false; 360d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius } 361d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius }).when(mHalDeviceManager).start(); 3623153926f9b95f42a8d3175b4f0e4d2e448ea8fc1Roshan Pius assertFalse(mWifiVendorHal.startVendorHalSta()); 363d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius assertFalse(mWifiVendorHal.isHalStarted()); 364d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 365d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).start(); 366d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 3677dadc4d68ea820779ec513073347890b842a6f9cEtan Cohen verify(mHalDeviceManager, never()).createStaIface(anyBoolean(), any(), eq(null)); 368be7435e9929c73d041a4c1c9aeba3a3421bcd859Roshan Pius verify(mHalDeviceManager, never()).createApIface(any(), eq(null)); 369d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager, never()).getChip(any(IWifiIface.class)); 3706ac9ca60cb5d75f51b633bd0171da2ecf6274b2aEtan Cohen verify(mHalDeviceManager, never()).createRttController(); 371542b204c2120a9c91324ccc86c6695012ac02ab7Roshan Pius verify(mIWifiStaIface, never()) 372542b204c2120a9c91324ccc86c6695012ac02ab7Roshan Pius .registerEventCallback(any(IWifiStaIfaceEventCallback.class)); 373d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius } 374d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 375d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius /** 376d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius * Tests the failure to start HAL in STA mode using 3773153926f9b95f42a8d3175b4f0e4d2e448ea8fc1Roshan Pius * {@link WifiVendorHal#startVendorHalSta()}. 378d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius */ 379d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius @Test 3807e4b5bdfa88703a09f611e3ef8973ab7e286375dRoshan Pius public void testStartHalFailureInIfaceCreationInStaMode() throws Exception { 3817dadc4d68ea820779ec513073347890b842a6f9cEtan Cohen when(mHalDeviceManager.createStaIface(anyBoolean(), any(), eq(null))).thenReturn(null); 3823153926f9b95f42a8d3175b4f0e4d2e448ea8fc1Roshan Pius assertFalse(mWifiVendorHal.startVendorHalSta()); 383d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius assertFalse(mWifiVendorHal.isHalStarted()); 384d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 385d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).start(); 3867dadc4d68ea820779ec513073347890b842a6f9cEtan Cohen verify(mHalDeviceManager).createStaIface(eq(false), any(), eq(null)); 387d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).stop(); 388d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 389be7435e9929c73d041a4c1c9aeba3a3421bcd859Roshan Pius verify(mHalDeviceManager, never()).createApIface(any(), eq(null)); 390d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager, never()).getChip(any(IWifiIface.class)); 3916ac9ca60cb5d75f51b633bd0171da2ecf6274b2aEtan Cohen verify(mHalDeviceManager, never()).createRttController(); 392542b204c2120a9c91324ccc86c6695012ac02ab7Roshan Pius verify(mIWifiStaIface, never()) 393542b204c2120a9c91324ccc86c6695012ac02ab7Roshan Pius .registerEventCallback(any(IWifiStaIfaceEventCallback.class)); 394d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius } 395d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 396d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius /** 397d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius * Tests the failure to start HAL in STA mode using 3983153926f9b95f42a8d3175b4f0e4d2e448ea8fc1Roshan Pius * {@link WifiVendorHal#startVendorHalSta()}. 399d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius */ 400d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius @Test 4017e4b5bdfa88703a09f611e3ef8973ab7e286375dRoshan Pius public void testStartHalFailureInRttControllerCreationInStaMode() throws Exception { 4026ac9ca60cb5d75f51b633bd0171da2ecf6274b2aEtan Cohen when(mHalDeviceManager.createRttController()).thenReturn(null); 4033153926f9b95f42a8d3175b4f0e4d2e448ea8fc1Roshan Pius assertFalse(mWifiVendorHal.startVendorHalSta()); 404d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius assertFalse(mWifiVendorHal.isHalStarted()); 405d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 406d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).start(); 4077dadc4d68ea820779ec513073347890b842a6f9cEtan Cohen verify(mHalDeviceManager).createStaIface(eq(false), any(), eq(null)); 4086ac9ca60cb5d75f51b633bd0171da2ecf6274b2aEtan Cohen verify(mHalDeviceManager).createRttController(); 409d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).stop(); 410542b204c2120a9c91324ccc86c6695012ac02ab7Roshan Pius verify(mIWifiStaIface).registerEventCallback(any(IWifiStaIfaceEventCallback.class)); 411d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 412be7435e9929c73d041a4c1c9aeba3a3421bcd859Roshan Pius verify(mHalDeviceManager, never()).createApIface(any(), eq(null)); 413d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager, never()).getChip(any(IWifiIface.class)); 414d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius } 415d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 416d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius /** 417d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius * Tests the failure to start HAL in STA mode using 4183153926f9b95f42a8d3175b4f0e4d2e448ea8fc1Roshan Pius * {@link WifiVendorHal#startVendorHalSta()}. 419d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius */ 420d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius @Test 4217e4b5bdfa88703a09f611e3ef8973ab7e286375dRoshan Pius public void testStartHalFailureInChipGetInStaMode() throws Exception { 422d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius when(mHalDeviceManager.getChip(any(IWifiIface.class))).thenReturn(null); 4233153926f9b95f42a8d3175b4f0e4d2e448ea8fc1Roshan Pius assertFalse(mWifiVendorHal.startVendorHalSta()); 424d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius assertFalse(mWifiVendorHal.isHalStarted()); 425d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 426d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).start(); 4277dadc4d68ea820779ec513073347890b842a6f9cEtan Cohen verify(mHalDeviceManager).createStaIface(eq(false), any(), eq(null)); 4286ac9ca60cb5d75f51b633bd0171da2ecf6274b2aEtan Cohen verify(mHalDeviceManager).createRttController(); 429d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).getChip(any(IWifiIface.class)); 430d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).stop(); 431542b204c2120a9c91324ccc86c6695012ac02ab7Roshan Pius verify(mIWifiStaIface).registerEventCallback(any(IWifiStaIfaceEventCallback.class)); 432d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 433be7435e9929c73d041a4c1c9aeba3a3421bcd859Roshan Pius verify(mHalDeviceManager, never()).createApIface(any(), eq(null)); 434d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius } 435d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 436d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius /** 437d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius * Tests the failure to start HAL in STA mode using 4383153926f9b95f42a8d3175b4f0e4d2e448ea8fc1Roshan Pius * {@link WifiVendorHal#startVendorHalSta()}. 439d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius */ 440d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius @Test 4417e4b5bdfa88703a09f611e3ef8973ab7e286375dRoshan Pius public void testStartHalFailureInStaIfaceCallbackRegistration() throws Exception { 4427e4b5bdfa88703a09f611e3ef8973ab7e286375dRoshan Pius when(mIWifiStaIface.registerEventCallback(any(IWifiStaIfaceEventCallback.class))) 4437e4b5bdfa88703a09f611e3ef8973ab7e286375dRoshan Pius .thenReturn(mWifiStatusFailure); 4443153926f9b95f42a8d3175b4f0e4d2e448ea8fc1Roshan Pius assertFalse(mWifiVendorHal.startVendorHalSta()); 4457e4b5bdfa88703a09f611e3ef8973ab7e286375dRoshan Pius assertFalse(mWifiVendorHal.isHalStarted()); 4467e4b5bdfa88703a09f611e3ef8973ab7e286375dRoshan Pius 4477e4b5bdfa88703a09f611e3ef8973ab7e286375dRoshan Pius verify(mHalDeviceManager).start(); 4487dadc4d68ea820779ec513073347890b842a6f9cEtan Cohen verify(mHalDeviceManager).createStaIface(eq(false), any(), eq(null)); 4497e4b5bdfa88703a09f611e3ef8973ab7e286375dRoshan Pius verify(mHalDeviceManager).stop(); 450542b204c2120a9c91324ccc86c6695012ac02ab7Roshan Pius verify(mIWifiStaIface).registerEventCallback(any(IWifiStaIfaceEventCallback.class)); 4517e4b5bdfa88703a09f611e3ef8973ab7e286375dRoshan Pius 4526ac9ca60cb5d75f51b633bd0171da2ecf6274b2aEtan Cohen verify(mHalDeviceManager, never()).createRttController(); 4537e4b5bdfa88703a09f611e3ef8973ab7e286375dRoshan Pius verify(mHalDeviceManager, never()).getChip(any(IWifiIface.class)); 454be7435e9929c73d041a4c1c9aeba3a3421bcd859Roshan Pius verify(mHalDeviceManager, never()).createApIface(any(), eq(null)); 4557e4b5bdfa88703a09f611e3ef8973ab7e286375dRoshan Pius } 4567e4b5bdfa88703a09f611e3ef8973ab7e286375dRoshan Pius 4577e4b5bdfa88703a09f611e3ef8973ab7e286375dRoshan Pius /** 4587e4b5bdfa88703a09f611e3ef8973ab7e286375dRoshan Pius * Tests the failure to start HAL in STA mode using 4593153926f9b95f42a8d3175b4f0e4d2e448ea8fc1Roshan Pius * {@link WifiVendorHal#startVendorHalSta()}. 460542b204c2120a9c91324ccc86c6695012ac02ab7Roshan Pius */ 461542b204c2120a9c91324ccc86c6695012ac02ab7Roshan Pius @Test 462542b204c2120a9c91324ccc86c6695012ac02ab7Roshan Pius public void testStartHalFailureInChipCallbackRegistration() throws Exception { 463542b204c2120a9c91324ccc86c6695012ac02ab7Roshan Pius when(mIWifiChip.registerEventCallback(any(IWifiChipEventCallback.class))) 464542b204c2120a9c91324ccc86c6695012ac02ab7Roshan Pius .thenReturn(mWifiStatusFailure); 4653153926f9b95f42a8d3175b4f0e4d2e448ea8fc1Roshan Pius assertFalse(mWifiVendorHal.startVendorHalSta()); 466542b204c2120a9c91324ccc86c6695012ac02ab7Roshan Pius assertFalse(mWifiVendorHal.isHalStarted()); 467542b204c2120a9c91324ccc86c6695012ac02ab7Roshan Pius 468542b204c2120a9c91324ccc86c6695012ac02ab7Roshan Pius verify(mHalDeviceManager).start(); 4697dadc4d68ea820779ec513073347890b842a6f9cEtan Cohen verify(mHalDeviceManager).createStaIface(eq(false), any(), eq(null)); 4706ac9ca60cb5d75f51b633bd0171da2ecf6274b2aEtan Cohen verify(mHalDeviceManager).createRttController(); 471542b204c2120a9c91324ccc86c6695012ac02ab7Roshan Pius verify(mHalDeviceManager).getChip(any(IWifiIface.class)); 472542b204c2120a9c91324ccc86c6695012ac02ab7Roshan Pius verify(mHalDeviceManager).stop(); 473542b204c2120a9c91324ccc86c6695012ac02ab7Roshan Pius verify(mIWifiStaIface).registerEventCallback(any(IWifiStaIfaceEventCallback.class)); 474542b204c2120a9c91324ccc86c6695012ac02ab7Roshan Pius verify(mIWifiChip).registerEventCallback(any(IWifiChipEventCallback.class)); 475542b204c2120a9c91324ccc86c6695012ac02ab7Roshan Pius 476be7435e9929c73d041a4c1c9aeba3a3421bcd859Roshan Pius verify(mHalDeviceManager, never()).createApIface(any(), eq(null)); 477542b204c2120a9c91324ccc86c6695012ac02ab7Roshan Pius } 478542b204c2120a9c91324ccc86c6695012ac02ab7Roshan Pius 479542b204c2120a9c91324ccc86c6695012ac02ab7Roshan Pius /** 4803153926f9b95f42a8d3175b4f0e4d2e448ea8fc1Roshan Pius * Tests the failure to start HAL in AP mode using 4813153926f9b95f42a8d3175b4f0e4d2e448ea8fc1Roshan Pius * {@link WifiVendorHal#startVendorHalAp()}. 4827e4b5bdfa88703a09f611e3ef8973ab7e286375dRoshan Pius */ 4837e4b5bdfa88703a09f611e3ef8973ab7e286375dRoshan Pius @Test 4847e4b5bdfa88703a09f611e3ef8973ab7e286375dRoshan Pius public void testStartHalFailureInApMode() throws Exception { 485be7435e9929c73d041a4c1c9aeba3a3421bcd859Roshan Pius when(mHalDeviceManager.createApIface(any(), eq(null))).thenReturn(null); 4863153926f9b95f42a8d3175b4f0e4d2e448ea8fc1Roshan Pius assertFalse(mWifiVendorHal.startVendorHalAp()); 487d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius assertFalse(mWifiVendorHal.isHalStarted()); 488d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 489d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).start(); 490be7435e9929c73d041a4c1c9aeba3a3421bcd859Roshan Pius verify(mHalDeviceManager).createApIface(any(), eq(null)); 491d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).stop(); 492d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 4937dadc4d68ea820779ec513073347890b842a6f9cEtan Cohen verify(mHalDeviceManager, never()).createStaIface(anyBoolean(), any(), eq(null)); 494d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager, never()).getChip(any(IWifiIface.class)); 4956ac9ca60cb5d75f51b633bd0171da2ecf6274b2aEtan Cohen verify(mHalDeviceManager, never()).createRttController(); 496d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius } 497d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 498d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius /** 499d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius * Tests the stopping of HAL in STA mode using 500d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius * {@link WifiVendorHal#stopVendorHal()}. 501d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius */ 502d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius @Test 503d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius public void testStopHalInStaMode() { 5043153926f9b95f42a8d3175b4f0e4d2e448ea8fc1Roshan Pius assertTrue(mWifiVendorHal.startVendorHalSta()); 505d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius assertTrue(mWifiVendorHal.isHalStarted()); 506d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 507d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius mWifiVendorHal.stopVendorHal(); 508d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius assertFalse(mWifiVendorHal.isHalStarted()); 509d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 510d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).start(); 511d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).stop(); 5127dadc4d68ea820779ec513073347890b842a6f9cEtan Cohen verify(mHalDeviceManager).createStaIface(eq(false), any(), eq(null)); 513d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).getChip(eq(mIWifiStaIface)); 5146ac9ca60cb5d75f51b633bd0171da2ecf6274b2aEtan Cohen verify(mHalDeviceManager).createRttController(); 515d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager, times(2)).isReady(); 516d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager, times(2)).isStarted(); 517d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 518be7435e9929c73d041a4c1c9aeba3a3421bcd859Roshan Pius verify(mHalDeviceManager, never()).createApIface(any(), eq(null)); 519d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius } 520d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 521d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius /** 522d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius * Tests the stopping of HAL in AP mode using 523d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius * {@link WifiVendorHal#stopVendorHal()}. 524d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius */ 525d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius @Test 526d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius public void testStopHalInApMode() { 5273153926f9b95f42a8d3175b4f0e4d2e448ea8fc1Roshan Pius assertTrue(mWifiVendorHal.startVendorHalAp()); 528d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius assertTrue(mWifiVendorHal.isHalStarted()); 529d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 530d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius mWifiVendorHal.stopVendorHal(); 531d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius assertFalse(mWifiVendorHal.isHalStarted()); 532d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 533d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).start(); 534d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).stop(); 535be7435e9929c73d041a4c1c9aeba3a3421bcd859Roshan Pius verify(mHalDeviceManager).createApIface(any(), eq(null)); 536d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager).getChip(eq(mIWifiApIface)); 537d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager, times(2)).isReady(); 538d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius verify(mHalDeviceManager, times(2)).isStarted(); 539d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius 5407dadc4d68ea820779ec513073347890b842a6f9cEtan Cohen verify(mHalDeviceManager, never()).createStaIface(anyBoolean(), any(), eq(null)); 5416ac9ca60cb5d75f51b633bd0171da2ecf6274b2aEtan Cohen verify(mHalDeviceManager, never()).createRttController(); 542d84fd37259c6e956d0f00c261f573dfa319acb91Roshan Pius } 5434f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass 5444f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass /** 545be7435e9929c73d041a4c1c9aeba3a3421bcd859Roshan Pius * Tests the handling of interface destroyed callback from HalDeviceManager. 546be7435e9929c73d041a4c1c9aeba3a3421bcd859Roshan Pius */ 547be7435e9929c73d041a4c1c9aeba3a3421bcd859Roshan Pius @Test 548be7435e9929c73d041a4c1c9aeba3a3421bcd859Roshan Pius public void testStaInterfaceDestroyedHandling() throws Exception { 549be7435e9929c73d041a4c1c9aeba3a3421bcd859Roshan Pius ArgumentCaptor<InterfaceDestroyedListener> internalListenerCaptor = 550be7435e9929c73d041a4c1c9aeba3a3421bcd859Roshan Pius ArgumentCaptor.forClass(InterfaceDestroyedListener.class); 551be7435e9929c73d041a4c1c9aeba3a3421bcd859Roshan Pius InterfaceDestroyedListener externalLister = mock(InterfaceDestroyedListener.class); 552be7435e9929c73d041a4c1c9aeba3a3421bcd859Roshan Pius 553be7435e9929c73d041a4c1c9aeba3a3421bcd859Roshan Pius assertTrue(mWifiVendorHal.startVendorHal()); 5547dadc4d68ea820779ec513073347890b842a6f9cEtan Cohen assertNotNull(mWifiVendorHal.createStaIface(false, externalLister)); 555be7435e9929c73d041a4c1c9aeba3a3421bcd859Roshan Pius assertTrue(mWifiVendorHal.isHalStarted()); 556be7435e9929c73d041a4c1c9aeba3a3421bcd859Roshan Pius 557be7435e9929c73d041a4c1c9aeba3a3421bcd859Roshan Pius verify(mHalDeviceManager).start(); 5587dadc4d68ea820779ec513073347890b842a6f9cEtan Cohen verify(mHalDeviceManager).createStaIface(eq(false), internalListenerCaptor.capture(), 5597dadc4d68ea820779ec513073347890b842a6f9cEtan Cohen eq(null)); 560be7435e9929c73d041a4c1c9aeba3a3421bcd859Roshan Pius verify(mHalDeviceManager).getChip(eq(mIWifiStaIface)); 561be7435e9929c73d041a4c1c9aeba3a3421bcd859Roshan Pius verify(mHalDeviceManager).createRttController(); 562be7435e9929c73d041a4c1c9aeba3a3421bcd859Roshan Pius verify(mHalDeviceManager).isReady(); 563be7435e9929c73d041a4c1c9aeba3a3421bcd859Roshan Pius verify(mHalDeviceManager).isStarted(); 564be7435e9929c73d041a4c1c9aeba3a3421bcd859Roshan Pius verify(mIWifiStaIface).registerEventCallback(any(IWifiStaIfaceEventCallback.class)); 565be7435e9929c73d041a4c1c9aeba3a3421bcd859Roshan Pius verify(mIWifiChip).registerEventCallback(any(IWifiChipEventCallback.class)); 566be7435e9929c73d041a4c1c9aeba3a3421bcd859Roshan Pius 567be7435e9929c73d041a4c1c9aeba3a3421bcd859Roshan Pius // Now trigger the interface destroyed callback from HalDeviceManager and ensure the 568be7435e9929c73d041a4c1c9aeba3a3421bcd859Roshan Pius // external listener is invoked and iface removed from internal database. 569be7435e9929c73d041a4c1c9aeba3a3421bcd859Roshan Pius internalListenerCaptor.getValue().onDestroyed(TEST_IFACE_NAME); 570be7435e9929c73d041a4c1c9aeba3a3421bcd859Roshan Pius verify(externalLister).onDestroyed(TEST_IFACE_NAME); 571be7435e9929c73d041a4c1c9aeba3a3421bcd859Roshan Pius 572be7435e9929c73d041a4c1c9aeba3a3421bcd859Roshan Pius // This should fail now, since the interface was already destroyed. 573be7435e9929c73d041a4c1c9aeba3a3421bcd859Roshan Pius assertFalse(mWifiVendorHal.removeStaIface(TEST_IFACE_NAME)); 574be7435e9929c73d041a4c1c9aeba3a3421bcd859Roshan Pius verify(mHalDeviceManager, never()).removeIface(any()); 575be7435e9929c73d041a4c1c9aeba3a3421bcd859Roshan Pius } 576be7435e9929c73d041a4c1c9aeba3a3421bcd859Roshan Pius 577be7435e9929c73d041a4c1c9aeba3a3421bcd859Roshan Pius /** 578be7435e9929c73d041a4c1c9aeba3a3421bcd859Roshan Pius * Tests the handling of interface destroyed callback from HalDeviceManager. 579be7435e9929c73d041a4c1c9aeba3a3421bcd859Roshan Pius */ 580be7435e9929c73d041a4c1c9aeba3a3421bcd859Roshan Pius @Test 581be7435e9929c73d041a4c1c9aeba3a3421bcd859Roshan Pius public void testApInterfaceDestroyedHandling() throws Exception { 582be7435e9929c73d041a4c1c9aeba3a3421bcd859Roshan Pius ArgumentCaptor<InterfaceDestroyedListener> internalListenerCaptor = 583be7435e9929c73d041a4c1c9aeba3a3421bcd859Roshan Pius ArgumentCaptor.forClass(InterfaceDestroyedListener.class); 584be7435e9929c73d041a4c1c9aeba3a3421bcd859Roshan Pius InterfaceDestroyedListener externalLister = mock(InterfaceDestroyedListener.class); 585be7435e9929c73d041a4c1c9aeba3a3421bcd859Roshan Pius 586be7435e9929c73d041a4c1c9aeba3a3421bcd859Roshan Pius assertTrue(mWifiVendorHal.startVendorHal()); 587be7435e9929c73d041a4c1c9aeba3a3421bcd859Roshan Pius assertNotNull(mWifiVendorHal.createApIface(externalLister)); 588be7435e9929c73d041a4c1c9aeba3a3421bcd859Roshan Pius assertTrue(mWifiVendorHal.isHalStarted()); 589be7435e9929c73d041a4c1c9aeba3a3421bcd859Roshan Pius 590be7435e9929c73d041a4c1c9aeba3a3421bcd859Roshan Pius verify(mHalDeviceManager).start(); 591be7435e9929c73d041a4c1c9aeba3a3421bcd859Roshan Pius verify(mHalDeviceManager).createApIface(internalListenerCaptor.capture(), eq(null)); 592be7435e9929c73d041a4c1c9aeba3a3421bcd859Roshan Pius verify(mHalDeviceManager).getChip(eq(mIWifiApIface)); 593be7435e9929c73d041a4c1c9aeba3a3421bcd859Roshan Pius verify(mHalDeviceManager).isReady(); 594be7435e9929c73d041a4c1c9aeba3a3421bcd859Roshan Pius verify(mHalDeviceManager).isStarted(); 595be7435e9929c73d041a4c1c9aeba3a3421bcd859Roshan Pius verify(mIWifiChip).registerEventCallback(any(IWifiChipEventCallback.class)); 596be7435e9929c73d041a4c1c9aeba3a3421bcd859Roshan Pius 597be7435e9929c73d041a4c1c9aeba3a3421bcd859Roshan Pius // Now trigger the interface destroyed callback from HalDeviceManager and ensure the 598be7435e9929c73d041a4c1c9aeba3a3421bcd859Roshan Pius // external listener is invoked and iface removed from internal database. 599be7435e9929c73d041a4c1c9aeba3a3421bcd859Roshan Pius internalListenerCaptor.getValue().onDestroyed(TEST_IFACE_NAME); 600be7435e9929c73d041a4c1c9aeba3a3421bcd859Roshan Pius verify(externalLister).onDestroyed(TEST_IFACE_NAME); 601be7435e9929c73d041a4c1c9aeba3a3421bcd859Roshan Pius 602be7435e9929c73d041a4c1c9aeba3a3421bcd859Roshan Pius // This should fail now, since the interface was already destroyed. 603be7435e9929c73d041a4c1c9aeba3a3421bcd859Roshan Pius assertFalse(mWifiVendorHal.removeApIface(TEST_IFACE_NAME)); 604be7435e9929c73d041a4c1c9aeba3a3421bcd859Roshan Pius verify(mHalDeviceManager, never()).removeIface(any()); 605be7435e9929c73d041a4c1c9aeba3a3421bcd859Roshan Pius } 606be7435e9929c73d041a4c1c9aeba3a3421bcd859Roshan Pius 607be7435e9929c73d041a4c1c9aeba3a3421bcd859Roshan Pius /** 6088dfa1a2e88781c773cb1ce79a1d4b72cc45c5c04Michael Plass * Test that enter logs when verbose logging is enabled 6098dfa1a2e88781c773cb1ce79a1d4b72cc45c5c04Michael Plass */ 6108dfa1a2e88781c773cb1ce79a1d4b72cc45c5c04Michael Plass @Test 6118dfa1a2e88781c773cb1ce79a1d4b72cc45c5c04Michael Plass public void testEnterLogging() { 6128dfa1a2e88781c773cb1ce79a1d4b72cc45c5c04Michael Plass mWifiVendorHal.mLog = spy(mWifiLog); 6138dfa1a2e88781c773cb1ce79a1d4b72cc45c5c04Michael Plass mWifiVendorHal.enableVerboseLogging(true); 614d77212c2b255b5e6331222fde66bdc735295fbbeRoshan Pius mWifiVendorHal.installPacketFilter(TEST_IFACE_NAME, new byte[0]); 615654e16971c2e558d59eafd9c4fab1cdbe4775657mukesh agrawal verify(mWifiVendorHal.mLog).trace(eq("filter length %"), eq(1)); 6168dfa1a2e88781c773cb1ce79a1d4b72cc45c5c04Michael Plass } 6178dfa1a2e88781c773cb1ce79a1d4b72cc45c5c04Michael Plass 6188dfa1a2e88781c773cb1ce79a1d4b72cc45c5c04Michael Plass /** 6198dfa1a2e88781c773cb1ce79a1d4b72cc45c5c04Michael Plass * Test that enter does not log when verbose logging is not enabled 6208dfa1a2e88781c773cb1ce79a1d4b72cc45c5c04Michael Plass */ 6218dfa1a2e88781c773cb1ce79a1d4b72cc45c5c04Michael Plass @Test 6228dfa1a2e88781c773cb1ce79a1d4b72cc45c5c04Michael Plass public void testEnterSilenceWhenNotEnabled() { 6238dfa1a2e88781c773cb1ce79a1d4b72cc45c5c04Michael Plass mWifiVendorHal.mLog = spy(mWifiLog); 624d77212c2b255b5e6331222fde66bdc735295fbbeRoshan Pius mWifiVendorHal.installPacketFilter(TEST_IFACE_NAME, new byte[0]); 6258dfa1a2e88781c773cb1ce79a1d4b72cc45c5c04Michael Plass mWifiVendorHal.enableVerboseLogging(true); 6268dfa1a2e88781c773cb1ce79a1d4b72cc45c5c04Michael Plass mWifiVendorHal.enableVerboseLogging(false); 627d77212c2b255b5e6331222fde66bdc735295fbbeRoshan Pius mWifiVendorHal.installPacketFilter(TEST_IFACE_NAME, new byte[0]); 628654e16971c2e558d59eafd9c4fab1cdbe4775657mukesh agrawal verify(mWifiVendorHal.mLog, never()).trace(eq("filter length %"), anyInt()); 6298dfa1a2e88781c773cb1ce79a1d4b72cc45c5c04Michael Plass } 6308dfa1a2e88781c773cb1ce79a1d4b72cc45c5c04Michael Plass 6318dfa1a2e88781c773cb1ce79a1d4b72cc45c5c04Michael Plass /** 6328dfa1a2e88781c773cb1ce79a1d4b72cc45c5c04Michael Plass * Test that boolResult logs a false result 6338dfa1a2e88781c773cb1ce79a1d4b72cc45c5c04Michael Plass */ 6348dfa1a2e88781c773cb1ce79a1d4b72cc45c5c04Michael Plass @Test 6358dfa1a2e88781c773cb1ce79a1d4b72cc45c5c04Michael Plass public void testBoolResultFalse() { 6368dfa1a2e88781c773cb1ce79a1d4b72cc45c5c04Michael Plass mWifiLog = spy(mWifiLog); 6378dfa1a2e88781c773cb1ce79a1d4b72cc45c5c04Michael Plass mWifiVendorHal.mLog = mWifiLog; 6388dfa1a2e88781c773cb1ce79a1d4b72cc45c5c04Michael Plass mWifiVendorHal.mVerboseLog = mWifiLog; 639d77212c2b255b5e6331222fde66bdc735295fbbeRoshan Pius assertFalse(mWifiVendorHal.getBgScanCapabilities( 640d77212c2b255b5e6331222fde66bdc735295fbbeRoshan Pius TEST_IFACE_NAME, new WifiNative.ScanCapabilities())); 6418dfa1a2e88781c773cb1ce79a1d4b72cc45c5c04Michael Plass verify(mWifiLog).err("% returns %"); 6428dfa1a2e88781c773cb1ce79a1d4b72cc45c5c04Michael Plass } 6438dfa1a2e88781c773cb1ce79a1d4b72cc45c5c04Michael Plass 6448dfa1a2e88781c773cb1ce79a1d4b72cc45c5c04Michael Plass /** 6456ba8a37de432d957e10dd9cc74798758870d02e6Michael Plass * Test that getBgScanCapabilities is hooked up to the HAL correctly 64656d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass * 64756d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass * A call before the vendor HAL is started should return a non-null result with version 0 64856d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass * 64956d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass * A call after the HAL is started should return the mocked values. 65056d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass */ 65156d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass @Test 6526ba8a37de432d957e10dd9cc74798758870d02e6Michael Plass public void testGetBgScanCapabilities() throws Exception { 65356d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass StaBackgroundScanCapabilities capabilities = new StaBackgroundScanCapabilities(); 65456d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass capabilities.maxCacheSize = 12; 65556d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass capabilities.maxBuckets = 34; 65656d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass capabilities.maxApCachePerScan = 56; 65756d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass capabilities.maxReportingThreshold = 78; 65856d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass 65956d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass doAnswer(new AnswerWithArguments() { 66056d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass public void answer(IWifiStaIface.getBackgroundScanCapabilitiesCallback cb) 66156d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass throws RemoteException { 66256d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass cb.onValues(mWifiStatusSuccess, capabilities); 66356d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass } 66456d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass }).when(mIWifiStaIface).getBackgroundScanCapabilities(any( 66556d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass IWifiStaIface.getBackgroundScanCapabilitiesCallback.class)); 66656d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass 66756d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass WifiNative.ScanCapabilities result = new WifiNative.ScanCapabilities(); 66856d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass 669d77212c2b255b5e6331222fde66bdc735295fbbeRoshan Pius // should fail - not started 670d77212c2b255b5e6331222fde66bdc735295fbbeRoshan Pius assertFalse(mWifiVendorHal.getBgScanCapabilities(TEST_IFACE_NAME, result)); 671d77212c2b255b5e6331222fde66bdc735295fbbeRoshan Pius // Start the vendor hal 672d77212c2b255b5e6331222fde66bdc735295fbbeRoshan Pius assertTrue(mWifiVendorHal.startVendorHalSta()); 673d77212c2b255b5e6331222fde66bdc735295fbbeRoshan Pius // should succeed 674d77212c2b255b5e6331222fde66bdc735295fbbeRoshan Pius assertTrue(mWifiVendorHal.getBgScanCapabilities(TEST_IFACE_NAME, result)); 67556d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass 67656d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass assertEquals(12, result.max_scan_cache_size); 67756d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass assertEquals(34, result.max_scan_buckets); 67856d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass assertEquals(56, result.max_ap_cache_per_scan); 67956d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass assertEquals(78, result.max_scan_reporting_threshold); 68056d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass } 68156d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass 68256d2cece0c3cc908a875fd1d3291a1ba8882bbafMichael Plass /** 6831dc6d8ecde4cad66dc8cb7b97926f1120e7b0d57Michael Plass * Test translation to WifiManager.WIFI_FEATURE_* 6841dc6d8ecde4cad66dc8cb7b97926f1120e7b0d57Michael Plass * 6851dc6d8ecde4cad66dc8cb7b97926f1120e7b0d57Michael Plass * Just do a spot-check with a few feature bits here; since the code is table- 6861dc6d8ecde4cad66dc8cb7b97926f1120e7b0d57Michael Plass * driven we don't have to work hard to exercise all of it. 6871dc6d8ecde4cad66dc8cb7b97926f1120e7b0d57Michael Plass */ 6881dc6d8ecde4cad66dc8cb7b97926f1120e7b0d57Michael Plass @Test 689ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius public void testStaIfaceFeatureMaskTranslation() { 6901dc6d8ecde4cad66dc8cb7b97926f1120e7b0d57Michael Plass int caps = ( 6911dc6d8ecde4cad66dc8cb7b97926f1120e7b0d57Michael Plass IWifiStaIface.StaIfaceCapabilityMask.BACKGROUND_SCAN 6921dc6d8ecde4cad66dc8cb7b97926f1120e7b0d57Michael Plass | IWifiStaIface.StaIfaceCapabilityMask.LINK_LAYER_STATS 6931dc6d8ecde4cad66dc8cb7b97926f1120e7b0d57Michael Plass ); 6941dc6d8ecde4cad66dc8cb7b97926f1120e7b0d57Michael Plass int expected = ( 695691806f65a5f259fd8e6b709c97d0035c418c483Michael Plass WifiManager.WIFI_FEATURE_SCANNER 6961dc6d8ecde4cad66dc8cb7b97926f1120e7b0d57Michael Plass | WifiManager.WIFI_FEATURE_LINK_LAYER_STATS); 6971dc6d8ecde4cad66dc8cb7b97926f1120e7b0d57Michael Plass assertEquals(expected, mWifiVendorHal.wifiFeatureMaskFromStaCapabilities(caps)); 6981dc6d8ecde4cad66dc8cb7b97926f1120e7b0d57Michael Plass } 6991dc6d8ecde4cad66dc8cb7b97926f1120e7b0d57Michael Plass 7001dc6d8ecde4cad66dc8cb7b97926f1120e7b0d57Michael Plass /** 701ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius * Test translation to WifiManager.WIFI_FEATURE_* 702ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius * 703ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius * Just do a spot-check with a few feature bits here; since the code is table- 704ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius * driven we don't have to work hard to exercise all of it. 705ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius */ 706ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius @Test 707ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius public void testChipFeatureMaskTranslation() { 7085858a3401ecd9368af7363b7bfad8df036856205Roshan Pius int caps = ( 7095858a3401ecd9368af7363b7bfad8df036856205Roshan Pius android.hardware.wifi.V1_1.IWifiChip.ChipCapabilityMask.SET_TX_POWER_LIMIT 7105858a3401ecd9368af7363b7bfad8df036856205Roshan Pius | android.hardware.wifi.V1_1.IWifiChip.ChipCapabilityMask.D2D_RTT 7115858a3401ecd9368af7363b7bfad8df036856205Roshan Pius | android.hardware.wifi.V1_1.IWifiChip.ChipCapabilityMask.D2AP_RTT 7125858a3401ecd9368af7363b7bfad8df036856205Roshan Pius ); 7135858a3401ecd9368af7363b7bfad8df036856205Roshan Pius int expected = ( 7145858a3401ecd9368af7363b7bfad8df036856205Roshan Pius WifiManager.WIFI_FEATURE_TX_POWER_LIMIT 7155858a3401ecd9368af7363b7bfad8df036856205Roshan Pius | WifiManager.WIFI_FEATURE_D2D_RTT 7165858a3401ecd9368af7363b7bfad8df036856205Roshan Pius | WifiManager.WIFI_FEATURE_D2AP_RTT 7175858a3401ecd9368af7363b7bfad8df036856205Roshan Pius ); 718ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius assertEquals(expected, mWifiVendorHal.wifiFeatureMaskFromChipCapabilities(caps)); 719ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius } 720ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius 721ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius /** 722ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius * Test get supported features. Tests whether we coalesce information from different sources 723ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius * (IWifiStaIface, IWifiChip and HalDeviceManager) into the bitmask of supported features 724ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius * correctly. 725ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius */ 726ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius @Test 727ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius public void testGetSupportedFeatures() throws Exception { 7283153926f9b95f42a8d3175b4f0e4d2e448ea8fc1Roshan Pius assertTrue(mWifiVendorHal.startVendorHalSta()); 729ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius 730ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius int staIfaceHidlCaps = ( 731ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius IWifiStaIface.StaIfaceCapabilityMask.BACKGROUND_SCAN 732ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius | IWifiStaIface.StaIfaceCapabilityMask.LINK_LAYER_STATS 733ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius ); 734ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius int chipHidlCaps = 735ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius android.hardware.wifi.V1_1.IWifiChip.ChipCapabilityMask.SET_TX_POWER_LIMIT; 736ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius Set<Integer> halDeviceManagerSupportedIfaces = new HashSet<Integer>() {{ 737ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius add(IfaceType.STA); 738ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius add(IfaceType.P2P); 739ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius }}; 740ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius int expectedFeatureSet = ( 741ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius WifiManager.WIFI_FEATURE_SCANNER 742ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius | WifiManager.WIFI_FEATURE_LINK_LAYER_STATS 743ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius | WifiManager.WIFI_FEATURE_TX_POWER_LIMIT 744ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius | WifiManager.WIFI_FEATURE_INFRA 745ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius | WifiManager.WIFI_FEATURE_P2P 746ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius ); 747ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius 748ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius doAnswer(new AnswerWithArguments() { 749ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius public void answer(IWifiStaIface.getCapabilitiesCallback cb) throws RemoteException { 750ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius cb.onValues(mWifiStatusSuccess, staIfaceHidlCaps); 751ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius } 752ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius }).when(mIWifiStaIface).getCapabilities(any(IWifiStaIface.getCapabilitiesCallback.class)); 753ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius doAnswer(new AnswerWithArguments() { 754ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius public void answer(IWifiChip.getCapabilitiesCallback cb) throws RemoteException { 755ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius cb.onValues(mWifiStatusSuccess, chipHidlCaps); 756ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius } 757ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius }).when(mIWifiChip).getCapabilities(any(IWifiChip.getCapabilitiesCallback.class)); 758ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius when(mHalDeviceManager.getSupportedIfaceTypes()) 759ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius .thenReturn(halDeviceManagerSupportedIfaces); 760ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius 761d77212c2b255b5e6331222fde66bdc735295fbbeRoshan Pius assertEquals(expectedFeatureSet, mWifiVendorHal.getSupportedFeatureSet(TEST_IFACE_NAME)); 762ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius } 763ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius 764ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius /** 7654f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass * Test enablement of link layer stats after startup 766699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass * 7674f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass * Request link layer stats before HAL start 7684f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass * - should not make it to the HAL layer 7694f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass * Start the HAL in STA mode 7704f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass * Request link layer stats twice more 7714f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass * - enable request should make it to the HAL layer 7724f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass * - HAL layer should have been called to make the requests (i.e., two calls total) 7734f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass */ 7744f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass @Test 7754f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass public void testLinkLayerStatsEnableAfterStartup() throws Exception { 7764f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass doNothing().when(mIWifiStaIface).getLinkLayerStats(any()); 7774f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass 778d77212c2b255b5e6331222fde66bdc735295fbbeRoshan Pius assertNull(mWifiVendorHal.getWifiLinkLayerStats(TEST_IFACE_NAME)); 7794f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass assertTrue(mWifiVendorHal.startVendorHalSta()); 7804f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass assertTrue(mWifiVendorHal.isHalStarted()); 7814f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass 7824f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass verify(mHalDeviceManager).start(); 783d77212c2b255b5e6331222fde66bdc735295fbbeRoshan Pius mWifiVendorHal.getWifiLinkLayerStats(TEST_IFACE_NAME); 784d77212c2b255b5e6331222fde66bdc735295fbbeRoshan Pius mWifiVendorHal.getWifiLinkLayerStats(TEST_IFACE_NAME); 7854f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass verify(mIWifiStaIface).enableLinkLayerStatsCollection(false); // mLinkLayerStatsDebug 7864f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass verify(mIWifiStaIface, times(2)).getLinkLayerStats(any()); 7874f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass } 7884f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass 7894f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass /** 7904f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass * Test that link layer stats are not enabled and harmless in AP mode 791699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass * 7924f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass * Start the HAL in AP mode 7934f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass * - stats should not be enabled 7944f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass * Request link layer stats 7954f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass * - HAL layer should have been called to make the request 7964f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass */ 7974f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass @Test 7984f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass public void testLinkLayerStatsNotEnabledAndHarmlessInApMode() throws Exception { 7994f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass doNothing().when(mIWifiStaIface).getLinkLayerStats(any()); 8004f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass 8014f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass assertTrue(mWifiVendorHal.startVendorHalAp()); 8024f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass assertTrue(mWifiVendorHal.isHalStarted()); 803d77212c2b255b5e6331222fde66bdc735295fbbeRoshan Pius assertNull(mWifiVendorHal.getWifiLinkLayerStats(TEST_IFACE_NAME)); 8044f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass 8054f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass verify(mHalDeviceManager).start(); 8064f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass 8074f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass verify(mIWifiStaIface, never()).enableLinkLayerStatsCollection(false); 8084f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass verify(mIWifiStaIface, never()).getLinkLayerStats(any()); 8094f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass } 8104f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass 811699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass /** 812699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass * Test that the link layer stats fields are populated correctly. 813699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass * 814699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass * This is done by filling with random values and then using toString on the 815699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass * original and converted values, comparing just the numerics in the result. 816699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass * This makes the assumption that the fields are in the same order in both string 817699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass * representations, which is not quite true. So apply some fixups before the final 818699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass * comparison. 819699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass */ 820699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass @Test 821699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass public void testLinkLayerStatsAssignment() throws Exception { 822699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass Random r = new Random(1775968256); 823699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass StaLinkLayerStats stats = new StaLinkLayerStats(); 824699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass randomizePacketStats(r, stats.iface.wmeBePktStats); 825699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass randomizePacketStats(r, stats.iface.wmeBkPktStats); 826699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass randomizePacketStats(r, stats.iface.wmeViPktStats); 827699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass randomizePacketStats(r, stats.iface.wmeVoPktStats); 8289ca3944e48689ee1d72eed1ed27bc19ecea2c039Roshan Pius randomizeRadioStats(r, stats.radios); 8299ca3944e48689ee1d72eed1ed27bc19ecea2c039Roshan Pius 830442a0afdad6b7eb32a9098d927ecd65aa64df6eaMichael Plass stats.timeStampInMs = r.nextLong() & 0xFFFFFFFFFFL; 831699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass 832442a0afdad6b7eb32a9098d927ecd65aa64df6eaMichael Plass String expected = numbersOnly(stats.toString() + " "); 833699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass 834699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass WifiLinkLayerStats converted = WifiVendorHal.frameworkFromHalLinkLayerStats(stats); 835699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass 836442a0afdad6b7eb32a9098d927ecd65aa64df6eaMichael Plass String actual = numbersOnly(converted.toString() + " "); 837699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass 838699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass // Do the required fixups to the both expected and actual 8399ca3944e48689ee1d72eed1ed27bc19ecea2c039Roshan Pius expected = rmValue(expected, stats.radios.get(0).rxTimeInMs); 8409ca3944e48689ee1d72eed1ed27bc19ecea2c039Roshan Pius expected = rmValue(expected, stats.radios.get(0).onTimeInMsForScan); 841699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass 8429ca3944e48689ee1d72eed1ed27bc19ecea2c039Roshan Pius actual = rmValue(actual, stats.radios.get(0).rxTimeInMs); 8439ca3944e48689ee1d72eed1ed27bc19ecea2c039Roshan Pius actual = rmValue(actual, stats.radios.get(0).onTimeInMsForScan); 844699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass 845699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass // The remaining fields should agree 846699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass assertEquals(expected, actual); 847699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass } 848699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass 849699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass /** Just the digits with delimiting spaces, please */ 850699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass private static String numbersOnly(String s) { 851699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass return s.replaceAll("[^0-9]+", " "); 852699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass } 853699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass 854699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass /** Remove the given value from the space-delimited string, or die trying. */ 855699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass private static String rmValue(String s, long value) throws Exception { 856699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass String ans = s.replaceAll(" " + value + " ", " "); 857699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass assertNotEquals(s, ans); 858699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass return ans; 859699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass } 860699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass 861699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass /** 862699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass * Populate packet stats with non-negative random values 863699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass */ 864699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass private static void randomizePacketStats(Random r, StaLinkLayerIfacePacketStats pstats) { 865699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass pstats.rxMpdu = r.nextLong() & 0xFFFFFFFFFFL; // more than 32 bits 866699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass pstats.txMpdu = r.nextLong() & 0xFFFFFFFFFFL; 867699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass pstats.lostMpdu = r.nextLong() & 0xFFFFFFFFFFL; 868699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass pstats.retries = r.nextLong() & 0xFFFFFFFFFFL; 869699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass } 870699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass 871699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass /** 872699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass * Populate radio stats with non-negative random values 873699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass */ 8749ca3944e48689ee1d72eed1ed27bc19ecea2c039Roshan Pius private static void randomizeRadioStats(Random r, ArrayList<StaLinkLayerRadioStats> rstats) { 8759ca3944e48689ee1d72eed1ed27bc19ecea2c039Roshan Pius StaLinkLayerRadioStats rstat = new StaLinkLayerRadioStats(); 8769ca3944e48689ee1d72eed1ed27bc19ecea2c039Roshan Pius rstat.onTimeInMs = r.nextInt() & 0xFFFFFF; 8779ca3944e48689ee1d72eed1ed27bc19ecea2c039Roshan Pius rstat.txTimeInMs = r.nextInt() & 0xFFFFFF; 878699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass for (int i = 0; i < 4; i++) { 879699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass Integer v = r.nextInt() & 0xFFFFFF; 8809ca3944e48689ee1d72eed1ed27bc19ecea2c039Roshan Pius rstat.txTimeInMsPerLevel.add(v); 881699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass } 8829ca3944e48689ee1d72eed1ed27bc19ecea2c039Roshan Pius rstat.rxTimeInMs = r.nextInt() & 0xFFFFFF; 8839ca3944e48689ee1d72eed1ed27bc19ecea2c039Roshan Pius rstat.onTimeInMsForScan = r.nextInt() & 0xFFFFFF; 8849ca3944e48689ee1d72eed1ed27bc19ecea2c039Roshan Pius rstats.add(rstat); 885699cb92ca94c3fbd883472937ab3b071cafadf77Michael Plass } 8864f2049a015722cae0f0169379d499d5d4fc98e30Michael Plass 8877e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass /** 8887e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass * Test that getFirmwareVersion() and getDriverVersion() work 8897e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass * 8907e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass * Calls before the STA is started are expected to return null. 8917e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass */ 8927e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass @Test 8937e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass public void testVersionGetters() throws Exception { 8947e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass String firmwareVersion = "fuzzy"; 8957e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass String driverVersion = "dizzy"; 8967e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass IWifiChip.ChipDebugInfo chipDebugInfo = new IWifiChip.ChipDebugInfo(); 8977e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass chipDebugInfo.firmwareDescription = firmwareVersion; 8987e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass chipDebugInfo.driverDescription = driverVersion; 8997e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass 9007e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass doAnswer(new AnswerWithArguments() { 9017e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass public void answer(IWifiChip.requestChipDebugInfoCallback cb) throws RemoteException { 9027e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass cb.onValues(mWifiStatusSuccess, chipDebugInfo); 9037e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass } 9047e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass }).when(mIWifiChip).requestChipDebugInfo(any(IWifiChip.requestChipDebugInfoCallback.class)); 9057e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass 9067e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass assertNull(mWifiVendorHal.getFirmwareVersion()); 9077e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass assertNull(mWifiVendorHal.getDriverVersion()); 9087e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass 9097e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass assertTrue(mWifiVendorHal.startVendorHalSta()); 9107e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass 9117e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass assertEquals(firmwareVersion, mWifiVendorHal.getFirmwareVersion()); 9127e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass assertEquals(driverVersion, mWifiVendorHal.getDriverVersion()); 9137e7e2e3fd4da1f5ccda2f03dcdb321654e9f6ff8Michael Plass } 914ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass 915ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass /** 916ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass * For checkRoundTripIntTranslation lambdas 917ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass */ 918ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass interface IntForInt { 919ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass int translate(int value); 920ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass } 921ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass 922ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass /** 923ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass * Checks that translation from x to y and back again is the identity function 924ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass * 925ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass * @param xFromY reverse translator 926ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass * @param yFromX forward translator 927ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass * @param xLimit non-inclusive upper bound on x (lower bound is zero) 928ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass */ 929ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass private void checkRoundTripIntTranslation( 930ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass IntForInt xFromY, IntForInt yFromX, int xFirst, int xLimit) throws Exception { 931ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass int ex = 0; 932ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass for (int i = xFirst; i < xLimit; i++) { 933ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass assertEquals(i, xFromY.translate(yFromX.translate(i))); 934ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass } 935ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass try { 936ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass yFromX.translate(xLimit); 937ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass assertTrue("expected an exception here", false); 938ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass } catch (IllegalArgumentException e) { 939ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass ex++; 940ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass } 941ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass try { 942ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass xFromY.translate(yFromX.translate(xLimit - 1) + 1); 943ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass assertTrue("expected an exception here", false); 944ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass } catch (IllegalArgumentException e) { 945ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass ex++; 946ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass } 947ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass assertEquals(2, ex); 948ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass } 949ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass 950ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass 951ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass /** 952ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass * Test translations of RTT type 953ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass */ 954ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass @Test 955ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass public void testRttTypeTranslation() throws Exception { 956ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass checkRoundTripIntTranslation( 957ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass (y) -> WifiVendorHal.halRttTypeFromFrameworkRttType(y), 958ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass (x) -> WifiVendorHal.frameworkRttTypeFromHalRttType(x), 959ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass 1, 3); 960ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass } 961ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass 962ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass /** 963ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass * Test translations of peer type 964ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass */ 965ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass @Test 966ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass public void testPeerTranslation() throws Exception { 967ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass checkRoundTripIntTranslation( 968ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass (y) -> WifiVendorHal.halPeerFromFrameworkPeer(y), 969ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass (x) -> WifiVendorHal.frameworkPeerFromHalPeer(x), 970ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass 1, 6); 971ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass } 972ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass 973ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass /** 974ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass * Test translations of channel width 975ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass */ 976ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass @Test 977ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass public void testChannelWidth() throws Exception { 978ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass checkRoundTripIntTranslation( 979ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass (y) -> WifiVendorHal.halChannelWidthFromFrameworkChannelWidth(y), 980ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass (x) -> WifiVendorHal.frameworkChannelWidthFromHalChannelWidth(x), 981ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass 0, 5); 982ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass } 983ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass 984ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass /** 985ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass * Test translations of preamble type mask 986ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass */ 987ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass @Test 988ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass public void testPreambleTranslation() throws Exception { 989ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass checkRoundTripIntTranslation( 990ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass (y) -> WifiVendorHal.halPreambleFromFrameworkPreamble(y), 991ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass (x) -> WifiVendorHal.frameworkPreambleFromHalPreamble(x), 992ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass 0, 8); 993ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass } 994ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass 995ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass /** 996ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass * Test translations of bandwidth mask 997ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass */ 998ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass @Test 999ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass public void testBandwidthTranslations() throws Exception { 1000ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass checkRoundTripIntTranslation( 1001ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass (y) -> WifiVendorHal.halBwFromFrameworkBw(y), 1002ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass (x) -> WifiVendorHal.frameworkBwFromHalBw(x), 1003ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass 0, 64); 1004ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass } 1005ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass 10060320a9aa86429e98ff282a9e2297e19337667ad9Michael Plass /** 10070320a9aa86429e98ff282a9e2297e19337667ad9Michael Plass * Test translation of framwork RttParams to hal RttConfig 10080320a9aa86429e98ff282a9e2297e19337667ad9Michael Plass */ 1009ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass @Test 1010ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass public void testGetRttStuff() throws Exception { 1011ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass RttManager.RttParams params = new RttManager.RttParams(); 10120320a9aa86429e98ff282a9e2297e19337667ad9Michael Plass params.bssid = "03:01:04:01:05:09"; 10130320a9aa86429e98ff282a9e2297e19337667ad9Michael Plass params.frequency = 2420; 10140320a9aa86429e98ff282a9e2297e19337667ad9Michael Plass params.channelWidth = ScanResult.CHANNEL_WIDTH_40MHZ; 10150320a9aa86429e98ff282a9e2297e19337667ad9Michael Plass params.centerFreq0 = 2440; 10160320a9aa86429e98ff282a9e2297e19337667ad9Michael Plass params.centerFreq1 = 1; 10170320a9aa86429e98ff282a9e2297e19337667ad9Michael Plass params.num_samples = 2; 10180320a9aa86429e98ff282a9e2297e19337667ad9Michael Plass params.num_retries = 3; 10190320a9aa86429e98ff282a9e2297e19337667ad9Michael Plass params.numberBurst = 4; 10200320a9aa86429e98ff282a9e2297e19337667ad9Michael Plass params.interval = 5; 10210320a9aa86429e98ff282a9e2297e19337667ad9Michael Plass params.numSamplesPerBurst = 8; 10220320a9aa86429e98ff282a9e2297e19337667ad9Michael Plass params.numRetriesPerMeasurementFrame = 6; 10230320a9aa86429e98ff282a9e2297e19337667ad9Michael Plass params.numRetriesPerFTMR = 7; 10240320a9aa86429e98ff282a9e2297e19337667ad9Michael Plass params.LCIRequest = false; 10250320a9aa86429e98ff282a9e2297e19337667ad9Michael Plass params.LCRRequest = false; 10260320a9aa86429e98ff282a9e2297e19337667ad9Michael Plass params.burstTimeout = 15; 10270320a9aa86429e98ff282a9e2297e19337667ad9Michael Plass String frameish = params.toString(); 10280320a9aa86429e98ff282a9e2297e19337667ad9Michael Plass assertFalse(frameish.contains("=0,")); // make sure all fields are initialized 1029ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass RttConfig config = WifiVendorHal.halRttConfigFromFrameworkRttParams(params); 10300320a9aa86429e98ff282a9e2297e19337667ad9Michael Plass String halish = config.toString(); 10310320a9aa86429e98ff282a9e2297e19337667ad9Michael Plass StringBuffer expect = new StringBuffer(200); 10320320a9aa86429e98ff282a9e2297e19337667ad9Michael Plass expect.append("{.addr = [3, 1, 4, 1, 5, 9], .type = ONE_SIDED, .peer = AP, "); 10330320a9aa86429e98ff282a9e2297e19337667ad9Michael Plass expect.append(".channel = {.width = WIDTH_40, .centerFreq = 2420, "); 10340320a9aa86429e98ff282a9e2297e19337667ad9Michael Plass expect.append(".centerFreq0 = 2440, .centerFreq1 = 1}, "); 10350320a9aa86429e98ff282a9e2297e19337667ad9Michael Plass expect.append(".burstPeriod = 5, .numBurst = 4, .numFramesPerBurst = 8, "); 10360320a9aa86429e98ff282a9e2297e19337667ad9Michael Plass expect.append(".numRetriesPerRttFrame = 6, .numRetriesPerFtmr = 7, "); 10370320a9aa86429e98ff282a9e2297e19337667ad9Michael Plass expect.append(".mustRequestLci = false, .mustRequestLcr = false, .burstDuration = 15, "); 10380320a9aa86429e98ff282a9e2297e19337667ad9Michael Plass expect.append(".preamble = HT, .bw = BW_20MHZ}"); 10390320a9aa86429e98ff282a9e2297e19337667ad9Michael Plass assertEquals(expect.toString(), halish); 1040ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass } 1041ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass 10420320a9aa86429e98ff282a9e2297e19337667ad9Michael Plass /** 10430320a9aa86429e98ff282a9e2297e19337667ad9Michael Plass * Test that RTT capabilities are plumbed through 10440320a9aa86429e98ff282a9e2297e19337667ad9Michael Plass */ 1045ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass @Test 1046ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass public void testGetRttCapabilities() throws Exception { 1047ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass RttCapabilities capabilities = new RttCapabilities(); 10480320a9aa86429e98ff282a9e2297e19337667ad9Michael Plass capabilities.lcrSupported = true; 10490320a9aa86429e98ff282a9e2297e19337667ad9Michael Plass capabilities.preambleSupport = RttPreamble.LEGACY | RttPreamble.VHT; 10500320a9aa86429e98ff282a9e2297e19337667ad9Michael Plass capabilities.bwSupport = RttBw.BW_5MHZ | RttBw.BW_20MHZ; 10510320a9aa86429e98ff282a9e2297e19337667ad9Michael Plass capabilities.mcVersion = 43; 1052ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass doAnswer(new AnswerWithArguments() { 1053ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass public void answer(IWifiRttController.getCapabilitiesCallback cb) 1054ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass throws RemoteException { 1055ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass cb.onValues(mWifiStatusSuccess, capabilities); 1056ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass } 1057ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass }).when(mIWifiRttController).getCapabilities(any( 1058ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass IWifiRttController.getCapabilitiesCallback.class)); 1059ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass 1060ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass assertNull(mWifiVendorHal.getRttCapabilities()); 1061ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass 1062ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass assertTrue(mWifiVendorHal.startVendorHalSta()); 1063ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass 1064ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass RttManager.RttCapabilities actual = mWifiVendorHal.getRttCapabilities(); 10650320a9aa86429e98ff282a9e2297e19337667ad9Michael Plass assertTrue(actual.lcrSupported); 10660320a9aa86429e98ff282a9e2297e19337667ad9Michael Plass assertEquals(RttManager.PREAMBLE_LEGACY | RttManager.PREAMBLE_VHT, 10670320a9aa86429e98ff282a9e2297e19337667ad9Michael Plass actual.preambleSupported); 10680320a9aa86429e98ff282a9e2297e19337667ad9Michael Plass assertEquals(RttManager.RTT_BW_5_SUPPORT | RttManager.RTT_BW_20_SUPPORT, 10690320a9aa86429e98ff282a9e2297e19337667ad9Michael Plass actual.bwSupported); 10700320a9aa86429e98ff282a9e2297e19337667ad9Michael Plass assertEquals(43, (int) capabilities.mcVersion); 1071ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass } 1072ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass 10730320a9aa86429e98ff282a9e2297e19337667ad9Michael Plass /** 10740320a9aa86429e98ff282a9e2297e19337667ad9Michael Plass * Negative test of disableRttResponder 10750320a9aa86429e98ff282a9e2297e19337667ad9Michael Plass */ 10760320a9aa86429e98ff282a9e2297e19337667ad9Michael Plass @Test 10770320a9aa86429e98ff282a9e2297e19337667ad9Michael Plass public void testDisableOfUnstartedRtt() throws Exception { 10780320a9aa86429e98ff282a9e2297e19337667ad9Michael Plass assertFalse(mWifiVendorHal.disableRttResponder()); 10790320a9aa86429e98ff282a9e2297e19337667ad9Michael Plass } 1080ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass 1081ea644ad9920420dbcf420602355f9f91a7266b14Michael Plass /** 1082df8568a5aaed3c82ff7ef1ecafab85abf7a99da7Michael Plass * Test that setScanningMacOui is hooked up to the HAL correctly 1083df8568a5aaed3c82ff7ef1ecafab85abf7a99da7Michael Plass */ 1084df8568a5aaed3c82ff7ef1ecafab85abf7a99da7Michael Plass @Test 1085df8568a5aaed3c82ff7ef1ecafab85abf7a99da7Michael Plass public void testSetScanningMacOui() throws Exception { 1086df8568a5aaed3c82ff7ef1ecafab85abf7a99da7Michael Plass byte[] oui = NativeUtil.macAddressOuiToByteArray("DA:A1:19"); 1087df8568a5aaed3c82ff7ef1ecafab85abf7a99da7Michael Plass byte[] zzz = NativeUtil.macAddressOuiToByteArray("00:00:00"); 1088df8568a5aaed3c82ff7ef1ecafab85abf7a99da7Michael Plass 1089df8568a5aaed3c82ff7ef1ecafab85abf7a99da7Michael Plass when(mIWifiStaIface.setScanningMacOui(any())).thenReturn(mWifiStatusSuccess); 1090df8568a5aaed3c82ff7ef1ecafab85abf7a99da7Michael Plass 1091d77212c2b255b5e6331222fde66bdc735295fbbeRoshan Pius // expect fail - STA not started 1092d77212c2b255b5e6331222fde66bdc735295fbbeRoshan Pius assertFalse(mWifiVendorHal.setScanningMacOui(TEST_IFACE_NAME, oui)); 1093df8568a5aaed3c82ff7ef1ecafab85abf7a99da7Michael Plass assertTrue(mWifiVendorHal.startVendorHalSta()); 1094d77212c2b255b5e6331222fde66bdc735295fbbeRoshan Pius // expect fail - null 1095d77212c2b255b5e6331222fde66bdc735295fbbeRoshan Pius assertFalse(mWifiVendorHal.setScanningMacOui(TEST_IFACE_NAME, null)); 1096d77212c2b255b5e6331222fde66bdc735295fbbeRoshan Pius // expect fail - len 1097d77212c2b255b5e6331222fde66bdc735295fbbeRoshan Pius assertFalse(mWifiVendorHal.setScanningMacOui(TEST_IFACE_NAME, new byte[]{(byte) 1})); 1098d77212c2b255b5e6331222fde66bdc735295fbbeRoshan Pius assertTrue(mWifiVendorHal.setScanningMacOui(TEST_IFACE_NAME, oui)); 1099d77212c2b255b5e6331222fde66bdc735295fbbeRoshan Pius assertTrue(mWifiVendorHal.setScanningMacOui(TEST_IFACE_NAME, zzz)); 1100df8568a5aaed3c82ff7ef1ecafab85abf7a99da7Michael Plass 1101df8568a5aaed3c82ff7ef1ecafab85abf7a99da7Michael Plass verify(mIWifiStaIface).setScanningMacOui(eq(oui)); 1102df8568a5aaed3c82ff7ef1ecafab85abf7a99da7Michael Plass verify(mIWifiStaIface).setScanningMacOui(eq(zzz)); 1103df8568a5aaed3c82ff7ef1ecafab85abf7a99da7Michael Plass } 1104df8568a5aaed3c82ff7ef1ecafab85abf7a99da7Michael Plass 110570b995bed9674a30c56b7ae2585d5897900ff695Michael Plass @Test 110670b995bed9674a30c56b7ae2585d5897900ff695Michael Plass public void testStartSendingOffloadedPacket() throws Exception { 110770b995bed9674a30c56b7ae2585d5897900ff695Michael Plass byte[] srcMac = NativeUtil.macAddressToByteArray("4007b2088c81"); 1108ed0b7cfa5bb7be5731e42c2aaac7c9fdaa68baa4Nathan Harold byte[] dstMac = NativeUtil.macAddressToByteArray("4007b8675309"); 110970b995bed9674a30c56b7ae2585d5897900ff695Michael Plass InetAddress src = InetAddress.parseNumericAddress("192.168.13.13"); 111070b995bed9674a30c56b7ae2585d5897900ff695Michael Plass InetAddress dst = InetAddress.parseNumericAddress("93.184.216.34"); 111170b995bed9674a30c56b7ae2585d5897900ff695Michael Plass int slot = 13; 111270b995bed9674a30c56b7ae2585d5897900ff695Michael Plass int millis = 16000; 111370b995bed9674a30c56b7ae2585d5897900ff695Michael Plass 111470b995bed9674a30c56b7ae2585d5897900ff695Michael Plass KeepalivePacketData kap = KeepalivePacketData.nattKeepalivePacket(src, 63000, dst, 4500); 111570b995bed9674a30c56b7ae2585d5897900ff695Michael Plass 111670b995bed9674a30c56b7ae2585d5897900ff695Michael Plass when(mIWifiStaIface.startSendingKeepAlivePackets( 111770b995bed9674a30c56b7ae2585d5897900ff695Michael Plass anyInt(), any(), anyShort(), any(), any(), anyInt() 111870b995bed9674a30c56b7ae2585d5897900ff695Michael Plass )).thenReturn(mWifiStatusSuccess); 111970b995bed9674a30c56b7ae2585d5897900ff695Michael Plass 112070b995bed9674a30c56b7ae2585d5897900ff695Michael Plass assertTrue(mWifiVendorHal.startVendorHalSta()); 1121d77212c2b255b5e6331222fde66bdc735295fbbeRoshan Pius assertTrue(0 == mWifiVendorHal.startSendingOffloadedPacket( 1122ed0b7cfa5bb7be5731e42c2aaac7c9fdaa68baa4Nathan Harold TEST_IFACE_NAME, slot, srcMac, dstMac, kap.getPacket(), 1123ed0b7cfa5bb7be5731e42c2aaac7c9fdaa68baa4Nathan Harold OsConstants.ETH_P_IPV6, millis)); 112470b995bed9674a30c56b7ae2585d5897900ff695Michael Plass 112570b995bed9674a30c56b7ae2585d5897900ff695Michael Plass verify(mIWifiStaIface).startSendingKeepAlivePackets( 112670b995bed9674a30c56b7ae2585d5897900ff695Michael Plass eq(slot), any(), anyShort(), any(), any(), eq(millis)); 112770b995bed9674a30c56b7ae2585d5897900ff695Michael Plass } 112870b995bed9674a30c56b7ae2585d5897900ff695Michael Plass 112970b995bed9674a30c56b7ae2585d5897900ff695Michael Plass @Test 113070b995bed9674a30c56b7ae2585d5897900ff695Michael Plass public void testStopSendingOffloadedPacket() throws Exception { 113170b995bed9674a30c56b7ae2585d5897900ff695Michael Plass int slot = 13; 113270b995bed9674a30c56b7ae2585d5897900ff695Michael Plass 113370b995bed9674a30c56b7ae2585d5897900ff695Michael Plass when(mIWifiStaIface.stopSendingKeepAlivePackets(anyInt())).thenReturn(mWifiStatusSuccess); 113470b995bed9674a30c56b7ae2585d5897900ff695Michael Plass 113570b995bed9674a30c56b7ae2585d5897900ff695Michael Plass assertTrue(mWifiVendorHal.startVendorHalSta()); 1136d77212c2b255b5e6331222fde66bdc735295fbbeRoshan Pius assertTrue(0 == mWifiVendorHal.stopSendingOffloadedPacket( 1137d77212c2b255b5e6331222fde66bdc735295fbbeRoshan Pius TEST_IFACE_NAME, slot)); 113870b995bed9674a30c56b7ae2585d5897900ff695Michael Plass 113970b995bed9674a30c56b7ae2585d5897900ff695Michael Plass verify(mIWifiStaIface).stopSendingKeepAlivePackets(eq(slot)); 114070b995bed9674a30c56b7ae2585d5897900ff695Michael Plass } 114170b995bed9674a30c56b7ae2585d5897900ff695Michael Plass 1142df8568a5aaed3c82ff7ef1ecafab85abf7a99da7Michael Plass /** 11433401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass * Test the setup, invocation, and removal of a RSSI event handler 11443401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass * 11453401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass */ 11463401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass @Test 11473401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass public void testRssiMonitoring() throws Exception { 11483401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass when(mIWifiStaIface.startRssiMonitoring(anyInt(), anyInt(), anyInt())) 11493401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass .thenReturn(mWifiStatusSuccess); 11503401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass when(mIWifiStaIface.stopRssiMonitoring(anyInt())) 11513401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass .thenReturn(mWifiStatusSuccess); 11523401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass 11533401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass ArrayList<Byte> breach = new ArrayList<>(10); 11543401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass byte hi = -21; 11553401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass byte med = -42; 11563401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass byte lo = -84; 11573401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass Byte lower = -88; 11583401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass WifiNative.WifiRssiEventHandler handler; 11593401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass handler = ((cur) -> { 11603401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass breach.add(cur); 11613401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass }); 1162d77212c2b255b5e6331222fde66bdc735295fbbeRoshan Pius // not started 1163d77212c2b255b5e6331222fde66bdc735295fbbeRoshan Pius assertEquals(-1, mWifiVendorHal.startRssiMonitoring(TEST_IFACE_NAME, hi, lo, handler)); 1164d77212c2b255b5e6331222fde66bdc735295fbbeRoshan Pius // not started 1165d77212c2b255b5e6331222fde66bdc735295fbbeRoshan Pius assertEquals(-1, mWifiVendorHal.stopRssiMonitoring(TEST_IFACE_NAME)); 11663401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass assertTrue(mWifiVendorHal.startVendorHalSta()); 1167d77212c2b255b5e6331222fde66bdc735295fbbeRoshan Pius assertEquals(0, mWifiVendorHal.startRssiMonitoring(TEST_IFACE_NAME, hi, lo, handler)); 11683401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass int theCmdId = mWifiVendorHal.sRssiMonCmdId; 11693401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass breach.clear(); 11703401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass mIWifiStaIfaceEventCallback.onRssiThresholdBreached(theCmdId, new byte[6], lower); 11713401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass assertEquals(breach.get(0), lower); 1172d77212c2b255b5e6331222fde66bdc735295fbbeRoshan Pius assertEquals(0, mWifiVendorHal.stopRssiMonitoring(TEST_IFACE_NAME)); 1173d77212c2b255b5e6331222fde66bdc735295fbbeRoshan Pius assertEquals(0, mWifiVendorHal.startRssiMonitoring(TEST_IFACE_NAME, hi, lo, handler)); 1174d77212c2b255b5e6331222fde66bdc735295fbbeRoshan Pius // replacing works 1175d77212c2b255b5e6331222fde66bdc735295fbbeRoshan Pius assertEquals(0, mWifiVendorHal.startRssiMonitoring(TEST_IFACE_NAME, med, lo, handler)); 1176d77212c2b255b5e6331222fde66bdc735295fbbeRoshan Pius // null handler fails 1177d77212c2b255b5e6331222fde66bdc735295fbbeRoshan Pius assertEquals(-1, mWifiVendorHal.startRssiMonitoring( 1178d77212c2b255b5e6331222fde66bdc735295fbbeRoshan Pius TEST_IFACE_NAME, hi, lo, null)); 1179d77212c2b255b5e6331222fde66bdc735295fbbeRoshan Pius assertEquals(0, mWifiVendorHal.startRssiMonitoring(TEST_IFACE_NAME, hi, lo, handler)); 1180d77212c2b255b5e6331222fde66bdc735295fbbeRoshan Pius // empty range 1181d77212c2b255b5e6331222fde66bdc735295fbbeRoshan Pius assertEquals(-1, mWifiVendorHal.startRssiMonitoring(TEST_IFACE_NAME, lo, hi, handler)); 11823401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass } 11833401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass 11843401582e1b1defc1877c7c47c6a839611fa211c3Michael Plass /** 1185ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass * Test that getApfCapabilities is hooked up to the HAL correctly 1186ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass * 1187ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass * A call before the vendor HAL is started should return a non-null result with version 0 1188ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass * 1189ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass * A call after the HAL is started should return the mocked values. 1190ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass */ 1191ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass @Test 1192ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass public void testApfCapabilities() throws Exception { 1193ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass int myVersion = 33; 1194ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass int myMaxSize = 1234; 1195ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass 1196ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass StaApfPacketFilterCapabilities capabilities = new StaApfPacketFilterCapabilities(); 1197ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass capabilities.version = myVersion; 1198ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass capabilities.maxLength = myMaxSize; 1199ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass 1200ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass doAnswer(new AnswerWithArguments() { 1201ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass public void answer(IWifiStaIface.getApfPacketFilterCapabilitiesCallback cb) 1202ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass throws RemoteException { 1203ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass cb.onValues(mWifiStatusSuccess, capabilities); 1204ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass } 1205ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass }).when(mIWifiStaIface).getApfPacketFilterCapabilities(any( 1206ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass IWifiStaIface.getApfPacketFilterCapabilitiesCallback.class)); 1207ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass 1208ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass 1209d77212c2b255b5e6331222fde66bdc735295fbbeRoshan Pius assertEquals(0, mWifiVendorHal.getApfCapabilities(TEST_IFACE_NAME) 1210d77212c2b255b5e6331222fde66bdc735295fbbeRoshan Pius .apfVersionSupported); 1211ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass 1212ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass assertTrue(mWifiVendorHal.startVendorHalSta()); 1213ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass 1214d77212c2b255b5e6331222fde66bdc735295fbbeRoshan Pius ApfCapabilities actual = mWifiVendorHal.getApfCapabilities(TEST_IFACE_NAME); 1215ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass 1216ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass assertEquals(myVersion, actual.apfVersionSupported); 1217ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass assertEquals(myMaxSize, actual.maximumApfProgramSize); 1218ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass assertEquals(android.system.OsConstants.ARPHRD_ETHER, actual.apfPacketFormat); 1219ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass assertNotEquals(0, actual.apfPacketFormat); 1220ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass } 1221ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass 1222ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass /** 122370b995bed9674a30c56b7ae2585d5897900ff695Michael Plass * Test that an APF program can be installed. 1224ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass */ 1225ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass @Test 1226ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass public void testInstallApf() throws Exception { 1227ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass byte[] filter = new byte[] {19, 53, 10}; 1228ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass 1229ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass ArrayList<Byte> expected = new ArrayList<>(3); 1230ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass for (byte b : filter) expected.add(b); 1231ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass 1232ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass when(mIWifiStaIface.installApfPacketFilter(anyInt(), any(ArrayList.class))) 1233ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass .thenReturn(mWifiStatusSuccess); 1234ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass 1235ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass assertTrue(mWifiVendorHal.startVendorHalSta()); 1236d77212c2b255b5e6331222fde66bdc735295fbbeRoshan Pius assertTrue(mWifiVendorHal.installPacketFilter(TEST_IFACE_NAME, filter)); 1237ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass 1238ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass verify(mIWifiStaIface).installApfPacketFilter(eq(0), eq(expected)); 1239ccac1c69ee6559b567e34b9b19e368efaa600174Michael Plass } 1240f1423f0bc5fbda5062adb0bd465b999799571f53Michael Plass 1241f1423f0bc5fbda5062adb0bd465b999799571f53Michael Plass /** 1242e25d3edec10f7b9cd60c291808f760a490b7d31dBernie Innocenti * Test that an APF program and data buffer can be read back. 1243e25d3edec10f7b9cd60c291808f760a490b7d31dBernie Innocenti */ 1244e25d3edec10f7b9cd60c291808f760a490b7d31dBernie Innocenti @Test 1245e25d3edec10f7b9cd60c291808f760a490b7d31dBernie Innocenti public void testReadApf() throws Exception { 1246e25d3edec10f7b9cd60c291808f760a490b7d31dBernie Innocenti // Expose the 1.2 IWifiStaIface. 1247e25d3edec10f7b9cd60c291808f760a490b7d31dBernie Innocenti mWifiVendorHal = new WifiVendorHalSpyV1_2(mHalDeviceManager, mLooper.getLooper()); 1248e25d3edec10f7b9cd60c291808f760a490b7d31dBernie Innocenti 1249e25d3edec10f7b9cd60c291808f760a490b7d31dBernie Innocenti byte[] program = new byte[] {65, 66, 67}; 1250e25d3edec10f7b9cd60c291808f760a490b7d31dBernie Innocenti ArrayList<Byte> expected = new ArrayList<>(3); 1251e25d3edec10f7b9cd60c291808f760a490b7d31dBernie Innocenti for (byte b : program) expected.add(b); 1252e25d3edec10f7b9cd60c291808f760a490b7d31dBernie Innocenti 1253e25d3edec10f7b9cd60c291808f760a490b7d31dBernie Innocenti doAnswer(new AnswerWithArguments() { 1254e25d3edec10f7b9cd60c291808f760a490b7d31dBernie Innocenti public void answer( 1255e25d3edec10f7b9cd60c291808f760a490b7d31dBernie Innocenti android.hardware.wifi.V1_2.IWifiStaIface.readApfPacketFilterDataCallback cb) 1256e25d3edec10f7b9cd60c291808f760a490b7d31dBernie Innocenti throws RemoteException { 1257e25d3edec10f7b9cd60c291808f760a490b7d31dBernie Innocenti cb.onValues(mWifiStatusSuccess, expected); 1258e25d3edec10f7b9cd60c291808f760a490b7d31dBernie Innocenti } 1259e25d3edec10f7b9cd60c291808f760a490b7d31dBernie Innocenti }).when(mIWifiStaIfaceV12).readApfPacketFilterData(any( 1260e25d3edec10f7b9cd60c291808f760a490b7d31dBernie Innocenti android.hardware.wifi.V1_2.IWifiStaIface.readApfPacketFilterDataCallback.class)); 1261e25d3edec10f7b9cd60c291808f760a490b7d31dBernie Innocenti 1262e25d3edec10f7b9cd60c291808f760a490b7d31dBernie Innocenti assertTrue(mWifiVendorHal.startVendorHalSta()); 1263e25d3edec10f7b9cd60c291808f760a490b7d31dBernie Innocenti assertArrayEquals(program, mWifiVendorHal.readPacketFilter(TEST_IFACE_NAME)); 1264e25d3edec10f7b9cd60c291808f760a490b7d31dBernie Innocenti } 1265e25d3edec10f7b9cd60c291808f760a490b7d31dBernie Innocenti 1266e25d3edec10f7b9cd60c291808f760a490b7d31dBernie Innocenti /** 1267f1423f0bc5fbda5062adb0bd465b999799571f53Michael Plass * Test that the country code is set in AP mode (when it should be). 1268f1423f0bc5fbda5062adb0bd465b999799571f53Michael Plass */ 1269f1423f0bc5fbda5062adb0bd465b999799571f53Michael Plass @Test 1270f1423f0bc5fbda5062adb0bd465b999799571f53Michael Plass public void testSetCountryCodeHal() throws Exception { 1271f1423f0bc5fbda5062adb0bd465b999799571f53Michael Plass byte[] expected = new byte[]{(byte) 'C', (byte) 'A'}; 1272f1423f0bc5fbda5062adb0bd465b999799571f53Michael Plass 1273f1423f0bc5fbda5062adb0bd465b999799571f53Michael Plass when(mIWifiApIface.setCountryCode(any())) 1274f1423f0bc5fbda5062adb0bd465b999799571f53Michael Plass .thenReturn(mWifiStatusSuccess); 1275f1423f0bc5fbda5062adb0bd465b999799571f53Michael Plass 1276f1423f0bc5fbda5062adb0bd465b999799571f53Michael Plass assertTrue(mWifiVendorHal.startVendorHalAp()); 1277f1423f0bc5fbda5062adb0bd465b999799571f53Michael Plass 1278d77212c2b255b5e6331222fde66bdc735295fbbeRoshan Pius assertFalse(mWifiVendorHal.setCountryCodeHal(TEST_IFACE_NAME, null)); 1279d77212c2b255b5e6331222fde66bdc735295fbbeRoshan Pius assertFalse(mWifiVendorHal.setCountryCodeHal(TEST_IFACE_NAME, "")); 1280d77212c2b255b5e6331222fde66bdc735295fbbeRoshan Pius assertFalse(mWifiVendorHal.setCountryCodeHal(TEST_IFACE_NAME, "A")); 1281d77212c2b255b5e6331222fde66bdc735295fbbeRoshan Pius // Only one expected to succeed 1282d77212c2b255b5e6331222fde66bdc735295fbbeRoshan Pius assertTrue(mWifiVendorHal.setCountryCodeHal(TEST_IFACE_NAME, "CA")); 1283d77212c2b255b5e6331222fde66bdc735295fbbeRoshan Pius assertFalse(mWifiVendorHal.setCountryCodeHal(TEST_IFACE_NAME, "ZZZ")); 1284f1423f0bc5fbda5062adb0bd465b999799571f53Michael Plass 1285f1423f0bc5fbda5062adb0bd465b999799571f53Michael Plass verify(mIWifiApIface).setCountryCode(eq(expected)); 1286f1423f0bc5fbda5062adb0bd465b999799571f53Michael Plass } 128753f278b6fed422a18d763b07216a21e96d9445f9Michael Plass 128853f278b6fed422a18d763b07216a21e96d9445f9Michael Plass /** 12898dfa1a2e88781c773cb1ce79a1d4b72cc45c5c04Michael Plass * Test that RemoteException is caught and logged. 12908dfa1a2e88781c773cb1ce79a1d4b72cc45c5c04Michael Plass */ 12918dfa1a2e88781c773cb1ce79a1d4b72cc45c5c04Michael Plass @Test 12928dfa1a2e88781c773cb1ce79a1d4b72cc45c5c04Michael Plass public void testRemoteExceptionIsHandled() throws Exception { 12938dfa1a2e88781c773cb1ce79a1d4b72cc45c5c04Michael Plass mWifiLog = spy(mWifiLog); 1294e1d5fa72eb35fb8f936e19d0830548593de6a6ffMichael Plass mWifiVendorHal.mVerboseLog = mWifiLog; 12958dfa1a2e88781c773cb1ce79a1d4b72cc45c5c04Michael Plass when(mIWifiApIface.setCountryCode(any())) 12968dfa1a2e88781c773cb1ce79a1d4b72cc45c5c04Michael Plass .thenThrow(new RemoteException("oops")); 12978dfa1a2e88781c773cb1ce79a1d4b72cc45c5c04Michael Plass assertTrue(mWifiVendorHal.startVendorHalAp()); 1298d77212c2b255b5e6331222fde66bdc735295fbbeRoshan Pius assertFalse(mWifiVendorHal.setCountryCodeHal(TEST_IFACE_NAME, "CA")); 1299e1d5fa72eb35fb8f936e19d0830548593de6a6ffMichael Plass assertFalse(mWifiVendorHal.isHalStarted()); 130044f4850de75c4de3389d7ecf48d82142e0590476mukesh agrawal verify(mWifiLog).err("% RemoteException in HIDL call %"); 13018dfa1a2e88781c773cb1ce79a1d4b72cc45c5c04Michael Plass } 13028dfa1a2e88781c773cb1ce79a1d4b72cc45c5c04Michael Plass 13038dfa1a2e88781c773cb1ce79a1d4b72cc45c5c04Michael Plass /** 130453f278b6fed422a18d763b07216a21e96d9445f9Michael Plass * Test that startLoggingToDebugRingBuffer is plumbed to chip 130553f278b6fed422a18d763b07216a21e96d9445f9Michael Plass * 130653f278b6fed422a18d763b07216a21e96d9445f9Michael Plass * A call before the vendor hal is started should just return false. 130753f278b6fed422a18d763b07216a21e96d9445f9Michael Plass * After starting in STA mode, the call should succeed, and pass ther right things down. 130853f278b6fed422a18d763b07216a21e96d9445f9Michael Plass */ 130953f278b6fed422a18d763b07216a21e96d9445f9Michael Plass @Test 131053f278b6fed422a18d763b07216a21e96d9445f9Michael Plass public void testStartLoggingRingBuffer() throws Exception { 131153f278b6fed422a18d763b07216a21e96d9445f9Michael Plass when(mIWifiChip.startLoggingToDebugRingBuffer( 131253f278b6fed422a18d763b07216a21e96d9445f9Michael Plass any(String.class), anyInt(), anyInt(), anyInt() 131353f278b6fed422a18d763b07216a21e96d9445f9Michael Plass )).thenReturn(mWifiStatusSuccess); 131453f278b6fed422a18d763b07216a21e96d9445f9Michael Plass 131553f278b6fed422a18d763b07216a21e96d9445f9Michael Plass assertFalse(mWifiVendorHal.startLoggingRingBuffer(1, 0x42, 0, 0, "One")); 131653f278b6fed422a18d763b07216a21e96d9445f9Michael Plass assertTrue(mWifiVendorHal.startVendorHalSta()); 131753f278b6fed422a18d763b07216a21e96d9445f9Michael Plass assertTrue(mWifiVendorHal.startLoggingRingBuffer(1, 0x42, 11, 3000, "One")); 131853f278b6fed422a18d763b07216a21e96d9445f9Michael Plass 131953f278b6fed422a18d763b07216a21e96d9445f9Michael Plass verify(mIWifiChip).startLoggingToDebugRingBuffer("One", 1, 11, 3000); 132053f278b6fed422a18d763b07216a21e96d9445f9Michael Plass } 132153f278b6fed422a18d763b07216a21e96d9445f9Michael Plass 132253f278b6fed422a18d763b07216a21e96d9445f9Michael Plass /** 132353f278b6fed422a18d763b07216a21e96d9445f9Michael Plass * Same test as testStartLoggingRingBuffer, but in AP mode rather than STA. 132453f278b6fed422a18d763b07216a21e96d9445f9Michael Plass */ 132553f278b6fed422a18d763b07216a21e96d9445f9Michael Plass @Test 132653f278b6fed422a18d763b07216a21e96d9445f9Michael Plass public void testStartLoggingRingBufferOnAp() throws Exception { 132753f278b6fed422a18d763b07216a21e96d9445f9Michael Plass when(mIWifiChip.startLoggingToDebugRingBuffer( 132853f278b6fed422a18d763b07216a21e96d9445f9Michael Plass any(String.class), anyInt(), anyInt(), anyInt() 132953f278b6fed422a18d763b07216a21e96d9445f9Michael Plass )).thenReturn(mWifiStatusSuccess); 133053f278b6fed422a18d763b07216a21e96d9445f9Michael Plass 133153f278b6fed422a18d763b07216a21e96d9445f9Michael Plass assertFalse(mWifiVendorHal.startLoggingRingBuffer(1, 0x42, 0, 0, "One")); 133253f278b6fed422a18d763b07216a21e96d9445f9Michael Plass assertTrue(mWifiVendorHal.startVendorHalAp()); 133353f278b6fed422a18d763b07216a21e96d9445f9Michael Plass assertTrue(mWifiVendorHal.startLoggingRingBuffer(1, 0x42, 11, 3000, "One")); 133453f278b6fed422a18d763b07216a21e96d9445f9Michael Plass 133553f278b6fed422a18d763b07216a21e96d9445f9Michael Plass verify(mIWifiChip).startLoggingToDebugRingBuffer("One", 1, 11, 3000); 133653f278b6fed422a18d763b07216a21e96d9445f9Michael Plass } 133753f278b6fed422a18d763b07216a21e96d9445f9Michael Plass 133853f278b6fed422a18d763b07216a21e96d9445f9Michael Plass /** 133953f278b6fed422a18d763b07216a21e96d9445f9Michael Plass * Test that getRingBufferStatus gets and translates its stuff correctly 134053f278b6fed422a18d763b07216a21e96d9445f9Michael Plass */ 134153f278b6fed422a18d763b07216a21e96d9445f9Michael Plass @Test 134253f278b6fed422a18d763b07216a21e96d9445f9Michael Plass public void testRingBufferStatus() throws Exception { 134353f278b6fed422a18d763b07216a21e96d9445f9Michael Plass WifiDebugRingBufferStatus one = new WifiDebugRingBufferStatus(); 134453f278b6fed422a18d763b07216a21e96d9445f9Michael Plass one.ringName = "One"; 134553f278b6fed422a18d763b07216a21e96d9445f9Michael Plass one.flags = WifiDebugRingBufferFlags.HAS_BINARY_ENTRIES; 134653f278b6fed422a18d763b07216a21e96d9445f9Michael Plass one.ringId = 5607371; 134753f278b6fed422a18d763b07216a21e96d9445f9Michael Plass one.sizeInBytes = 54321; 134853f278b6fed422a18d763b07216a21e96d9445f9Michael Plass one.freeSizeInBytes = 42; 134953f278b6fed422a18d763b07216a21e96d9445f9Michael Plass one.verboseLevel = WifiDebugRingBufferVerboseLevel.VERBOSE; 135053f278b6fed422a18d763b07216a21e96d9445f9Michael Plass String oneExpect = "name: One flag: 1 ringBufferId: 5607371 ringBufferByteSize: 54321" 135153f278b6fed422a18d763b07216a21e96d9445f9Michael Plass + " verboseLevel: 2 writtenBytes: 0 readBytes: 0 writtenRecords: 0"; 135253f278b6fed422a18d763b07216a21e96d9445f9Michael Plass 135353f278b6fed422a18d763b07216a21e96d9445f9Michael Plass WifiDebugRingBufferStatus two = new WifiDebugRingBufferStatus(); 135453f278b6fed422a18d763b07216a21e96d9445f9Michael Plass two.ringName = "Two"; 135553f278b6fed422a18d763b07216a21e96d9445f9Michael Plass two.flags = WifiDebugRingBufferFlags.HAS_ASCII_ENTRIES 135653f278b6fed422a18d763b07216a21e96d9445f9Michael Plass | WifiDebugRingBufferFlags.HAS_PER_PACKET_ENTRIES; 135753f278b6fed422a18d763b07216a21e96d9445f9Michael Plass two.ringId = 4512470; 135853f278b6fed422a18d763b07216a21e96d9445f9Michael Plass two.sizeInBytes = 300; 135953f278b6fed422a18d763b07216a21e96d9445f9Michael Plass two.freeSizeInBytes = 42; 136053f278b6fed422a18d763b07216a21e96d9445f9Michael Plass two.verboseLevel = WifiDebugRingBufferVerboseLevel.DEFAULT; 136153f278b6fed422a18d763b07216a21e96d9445f9Michael Plass 136253f278b6fed422a18d763b07216a21e96d9445f9Michael Plass ArrayList<WifiDebugRingBufferStatus> halBufferStatus = new ArrayList<>(2); 136353f278b6fed422a18d763b07216a21e96d9445f9Michael Plass halBufferStatus.add(one); 136453f278b6fed422a18d763b07216a21e96d9445f9Michael Plass halBufferStatus.add(two); 136553f278b6fed422a18d763b07216a21e96d9445f9Michael Plass 136653f278b6fed422a18d763b07216a21e96d9445f9Michael Plass WifiNative.RingBufferStatus[] actual; 136753f278b6fed422a18d763b07216a21e96d9445f9Michael Plass 136853f278b6fed422a18d763b07216a21e96d9445f9Michael Plass doAnswer(new AnswerWithArguments() { 136953f278b6fed422a18d763b07216a21e96d9445f9Michael Plass public void answer(IWifiChip.getDebugRingBuffersStatusCallback cb) 137053f278b6fed422a18d763b07216a21e96d9445f9Michael Plass throws RemoteException { 137153f278b6fed422a18d763b07216a21e96d9445f9Michael Plass cb.onValues(mWifiStatusSuccess, halBufferStatus); 137253f278b6fed422a18d763b07216a21e96d9445f9Michael Plass } 137353f278b6fed422a18d763b07216a21e96d9445f9Michael Plass }).when(mIWifiChip).getDebugRingBuffersStatus(any( 137453f278b6fed422a18d763b07216a21e96d9445f9Michael Plass IWifiChip.getDebugRingBuffersStatusCallback.class)); 137553f278b6fed422a18d763b07216a21e96d9445f9Michael Plass 137653f278b6fed422a18d763b07216a21e96d9445f9Michael Plass assertTrue(mWifiVendorHal.startVendorHalSta()); 137753f278b6fed422a18d763b07216a21e96d9445f9Michael Plass actual = mWifiVendorHal.getRingBufferStatus(); 137853f278b6fed422a18d763b07216a21e96d9445f9Michael Plass 137953f278b6fed422a18d763b07216a21e96d9445f9Michael Plass assertEquals(halBufferStatus.size(), actual.length); 138053f278b6fed422a18d763b07216a21e96d9445f9Michael Plass assertEquals(oneExpect, actual[0].toString()); 138153f278b6fed422a18d763b07216a21e96d9445f9Michael Plass assertEquals(two.ringId, actual[1].ringBufferId); 138253f278b6fed422a18d763b07216a21e96d9445f9Michael Plass } 138353f278b6fed422a18d763b07216a21e96d9445f9Michael Plass 138453f278b6fed422a18d763b07216a21e96d9445f9Michael Plass /** 138553f278b6fed422a18d763b07216a21e96d9445f9Michael Plass * Test that getRingBufferData calls forceDumpToDebugRingBuffer 138653f278b6fed422a18d763b07216a21e96d9445f9Michael Plass * 138753f278b6fed422a18d763b07216a21e96d9445f9Michael Plass * Try once before hal start, and twice after (one success, one failure). 138853f278b6fed422a18d763b07216a21e96d9445f9Michael Plass */ 138953f278b6fed422a18d763b07216a21e96d9445f9Michael Plass @Test 139053f278b6fed422a18d763b07216a21e96d9445f9Michael Plass public void testForceRingBufferDump() throws Exception { 139153f278b6fed422a18d763b07216a21e96d9445f9Michael Plass when(mIWifiChip.forceDumpToDebugRingBuffer(eq("Gunk"))).thenReturn(mWifiStatusSuccess); 139253f278b6fed422a18d763b07216a21e96d9445f9Michael Plass when(mIWifiChip.forceDumpToDebugRingBuffer(eq("Glop"))).thenReturn(mWifiStatusFailure); 139353f278b6fed422a18d763b07216a21e96d9445f9Michael Plass 139453f278b6fed422a18d763b07216a21e96d9445f9Michael Plass assertFalse(mWifiVendorHal.getRingBufferData("Gunk")); // hal not started 139553f278b6fed422a18d763b07216a21e96d9445f9Michael Plass 139653f278b6fed422a18d763b07216a21e96d9445f9Michael Plass assertTrue(mWifiVendorHal.startVendorHalSta()); 139753f278b6fed422a18d763b07216a21e96d9445f9Michael Plass 139853f278b6fed422a18d763b07216a21e96d9445f9Michael Plass assertTrue(mWifiVendorHal.getRingBufferData("Gunk")); // mocked call succeeds 139953f278b6fed422a18d763b07216a21e96d9445f9Michael Plass assertFalse(mWifiVendorHal.getRingBufferData("Glop")); // mocked call fails 140053f278b6fed422a18d763b07216a21e96d9445f9Michael Plass 140153f278b6fed422a18d763b07216a21e96d9445f9Michael Plass verify(mIWifiChip).forceDumpToDebugRingBuffer("Gunk"); 140253f278b6fed422a18d763b07216a21e96d9445f9Michael Plass verify(mIWifiChip).forceDumpToDebugRingBuffer("Glop"); 140353f278b6fed422a18d763b07216a21e96d9445f9Michael Plass } 140453f278b6fed422a18d763b07216a21e96d9445f9Michael Plass 14055a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass /** 14065a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass * Tests the start of packet fate monitoring. 14075a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass * 14085a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass * Try once before hal start, and once after (one success, one failure). 14095a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass */ 14105a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass @Test 14115a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass public void testStartPktFateMonitoring() throws Exception { 14125a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass when(mIWifiStaIface.startDebugPacketFateMonitoring()).thenReturn(mWifiStatusSuccess); 14135a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass 1414d77212c2b255b5e6331222fde66bdc735295fbbeRoshan Pius assertFalse(mWifiVendorHal.startPktFateMonitoring(TEST_IFACE_NAME)); 14155a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass verify(mIWifiStaIface, never()).startDebugPacketFateMonitoring(); 14165a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass 14175a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass assertTrue(mWifiVendorHal.startVendorHalSta()); 1418d77212c2b255b5e6331222fde66bdc735295fbbeRoshan Pius assertTrue(mWifiVendorHal.startPktFateMonitoring(TEST_IFACE_NAME)); 14195a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass verify(mIWifiStaIface).startDebugPacketFateMonitoring(); 14205a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass } 14215a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass 14225a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass /** 14235a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass * Tests the retrieval of tx packet fates. 14245a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass * 14255a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass * Try once before hal start, and once after. 14265a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass */ 14275a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass @Test 14285a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass public void testGetTxPktFates() throws Exception { 14295a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass byte[] frameContentBytes = new byte[30]; 14305a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass new Random().nextBytes(frameContentBytes); 14315a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass WifiDebugTxPacketFateReport fateReport = new WifiDebugTxPacketFateReport(); 14325a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass fateReport.fate = WifiDebugTxPacketFate.DRV_QUEUED; 14335a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass fateReport.frameInfo.driverTimestampUsec = new Random().nextLong(); 14345a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass fateReport.frameInfo.frameType = WifiDebugPacketFateFrameType.ETHERNET_II; 14355a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass fateReport.frameInfo.frameContent.addAll( 14365a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass NativeUtil.byteArrayToArrayList(frameContentBytes)); 14375a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass 14385a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass doAnswer(new AnswerWithArguments() { 14395a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass public void answer(IWifiStaIface.getDebugTxPacketFatesCallback cb) { 14405a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass cb.onValues(mWifiStatusSuccess, 14415a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass new ArrayList<WifiDebugTxPacketFateReport>(Arrays.asList(fateReport))); 14425a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass } 14435a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass }).when(mIWifiStaIface) 14445a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass .getDebugTxPacketFates(any(IWifiStaIface.getDebugTxPacketFatesCallback.class)); 14455a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass 14465a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass WifiNative.TxFateReport[] retrievedFates = new WifiNative.TxFateReport[1]; 1447d77212c2b255b5e6331222fde66bdc735295fbbeRoshan Pius assertFalse(mWifiVendorHal.getTxPktFates(TEST_IFACE_NAME, retrievedFates)); 14485a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass verify(mIWifiStaIface, never()) 14495a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass .getDebugTxPacketFates(any(IWifiStaIface.getDebugTxPacketFatesCallback.class)); 14505a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass 14515a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass assertTrue(mWifiVendorHal.startVendorHalSta()); 14525a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass 1453d77212c2b255b5e6331222fde66bdc735295fbbeRoshan Pius assertTrue(mWifiVendorHal.getTxPktFates(TEST_IFACE_NAME, retrievedFates)); 14545a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass verify(mIWifiStaIface) 14555a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass .getDebugTxPacketFates(any(IWifiStaIface.getDebugTxPacketFatesCallback.class)); 14565a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass assertEquals(WifiLoggerHal.TX_PKT_FATE_DRV_QUEUED, retrievedFates[0].mFate); 14575a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass assertEquals(fateReport.frameInfo.driverTimestampUsec, 14585a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass retrievedFates[0].mDriverTimestampUSec); 14595a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass assertEquals(WifiLoggerHal.FRAME_TYPE_ETHERNET_II, retrievedFates[0].mFrameType); 14605a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass assertArrayEquals(frameContentBytes, retrievedFates[0].mFrameBytes); 14615a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass } 14625a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass 14635a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass /** 14645a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass * Tests the retrieval of tx packet fates when the number of fates retrieved exceeds the 14655a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass * input array. 14665a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass * 14675a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass * Try once before hal start, and once after. 14685a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass */ 14695a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass @Test 14705a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass public void testGetTxPktFatesExceedsInputArrayLength() throws Exception { 14715a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass byte[] frameContentBytes = new byte[30]; 14725a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass new Random().nextBytes(frameContentBytes); 14735a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass WifiDebugTxPacketFateReport fateReport = new WifiDebugTxPacketFateReport(); 14745a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass fateReport.fate = WifiDebugTxPacketFate.FW_DROP_OTHER; 14755a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass fateReport.frameInfo.driverTimestampUsec = new Random().nextLong(); 14765a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass fateReport.frameInfo.frameType = WifiDebugPacketFateFrameType.MGMT_80211; 14775a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass fateReport.frameInfo.frameContent.addAll( 14785a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass NativeUtil.byteArrayToArrayList(frameContentBytes)); 14795a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass 14805a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass doAnswer(new AnswerWithArguments() { 14815a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass public void answer(IWifiStaIface.getDebugTxPacketFatesCallback cb) { 14825a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass cb.onValues(mWifiStatusSuccess, 14835a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass new ArrayList<WifiDebugTxPacketFateReport>(Arrays.asList( 14845a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass fateReport, fateReport))); 14855a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass } 14865a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass }).when(mIWifiStaIface) 14875a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass .getDebugTxPacketFates(any(IWifiStaIface.getDebugTxPacketFatesCallback.class)); 14885a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass 14895a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass WifiNative.TxFateReport[] retrievedFates = new WifiNative.TxFateReport[1]; 1490d77212c2b255b5e6331222fde66bdc735295fbbeRoshan Pius assertFalse(mWifiVendorHal.getTxPktFates(TEST_IFACE_NAME, retrievedFates)); 14915a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass verify(mIWifiStaIface, never()) 14925a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass .getDebugTxPacketFates(any(IWifiStaIface.getDebugTxPacketFatesCallback.class)); 14935a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass 14945a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass assertTrue(mWifiVendorHal.startVendorHalSta()); 14955a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass 1496d77212c2b255b5e6331222fde66bdc735295fbbeRoshan Pius assertTrue(mWifiVendorHal.getTxPktFates(TEST_IFACE_NAME, retrievedFates)); 14975a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass verify(mIWifiStaIface) 14985a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass .getDebugTxPacketFates(any(IWifiStaIface.getDebugTxPacketFatesCallback.class)); 14995a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass assertEquals(WifiLoggerHal.TX_PKT_FATE_FW_DROP_OTHER, retrievedFates[0].mFate); 15005a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass assertEquals(fateReport.frameInfo.driverTimestampUsec, 15015a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass retrievedFates[0].mDriverTimestampUSec); 15025a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass assertEquals(WifiLoggerHal.FRAME_TYPE_80211_MGMT, retrievedFates[0].mFrameType); 15035a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass assertArrayEquals(frameContentBytes, retrievedFates[0].mFrameBytes); 15045a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass } 15055a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass 15065a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass /** 15075a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass * Tests the retrieval of rx packet fates. 15085a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass * 15095a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass * Try once before hal start, and once after. 15105a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass */ 15115a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass @Test 15125a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass public void testGetRxPktFates() throws Exception { 15135a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass byte[] frameContentBytes = new byte[30]; 15145a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass new Random().nextBytes(frameContentBytes); 15155a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass WifiDebugRxPacketFateReport fateReport = new WifiDebugRxPacketFateReport(); 15165a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass fateReport.fate = WifiDebugRxPacketFate.SUCCESS; 15175a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass fateReport.frameInfo.driverTimestampUsec = new Random().nextLong(); 15185a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass fateReport.frameInfo.frameType = WifiDebugPacketFateFrameType.ETHERNET_II; 15195a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass fateReport.frameInfo.frameContent.addAll( 15205a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass NativeUtil.byteArrayToArrayList(frameContentBytes)); 15215a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass 15225a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass doAnswer(new AnswerWithArguments() { 15235a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass public void answer(IWifiStaIface.getDebugRxPacketFatesCallback cb) { 15245a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass cb.onValues(mWifiStatusSuccess, 15255a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass new ArrayList<WifiDebugRxPacketFateReport>(Arrays.asList(fateReport))); 15265a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass } 15275a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass }).when(mIWifiStaIface) 15285a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass .getDebugRxPacketFates(any(IWifiStaIface.getDebugRxPacketFatesCallback.class)); 15295a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass 15305a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass WifiNative.RxFateReport[] retrievedFates = new WifiNative.RxFateReport[1]; 1531d77212c2b255b5e6331222fde66bdc735295fbbeRoshan Pius assertFalse(mWifiVendorHal.getRxPktFates(TEST_IFACE_NAME, retrievedFates)); 15325a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass verify(mIWifiStaIface, never()) 15335a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass .getDebugRxPacketFates(any(IWifiStaIface.getDebugRxPacketFatesCallback.class)); 15345a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass 15355a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass assertTrue(mWifiVendorHal.startVendorHalSta()); 15365a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass 1537d77212c2b255b5e6331222fde66bdc735295fbbeRoshan Pius assertTrue(mWifiVendorHal.getRxPktFates(TEST_IFACE_NAME, retrievedFates)); 15385a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass verify(mIWifiStaIface) 15395a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass .getDebugRxPacketFates(any(IWifiStaIface.getDebugRxPacketFatesCallback.class)); 15405a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass assertEquals(WifiLoggerHal.RX_PKT_FATE_SUCCESS, retrievedFates[0].mFate); 15415a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass assertEquals(fateReport.frameInfo.driverTimestampUsec, 15425a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass retrievedFates[0].mDriverTimestampUSec); 15435a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass assertEquals(WifiLoggerHal.FRAME_TYPE_ETHERNET_II, retrievedFates[0].mFrameType); 15445a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass assertArrayEquals(frameContentBytes, retrievedFates[0].mFrameBytes); 15455a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass } 15465a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass 15475a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass /** 15485a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass * Tests the retrieval of rx packet fates when the number of fates retrieved exceeds the 15495a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass * input array. 15505a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass * 15515a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass * Try once before hal start, and once after. 15525a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass */ 15535a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass @Test 15545a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass public void testGetRxPktFatesExceedsInputArrayLength() throws Exception { 15555a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass byte[] frameContentBytes = new byte[30]; 15565a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass new Random().nextBytes(frameContentBytes); 15575a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass WifiDebugRxPacketFateReport fateReport = new WifiDebugRxPacketFateReport(); 15585a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass fateReport.fate = WifiDebugRxPacketFate.FW_DROP_FILTER; 15595a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass fateReport.frameInfo.driverTimestampUsec = new Random().nextLong(); 15605a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass fateReport.frameInfo.frameType = WifiDebugPacketFateFrameType.MGMT_80211; 15615a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass fateReport.frameInfo.frameContent.addAll( 15625a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass NativeUtil.byteArrayToArrayList(frameContentBytes)); 15635a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass 15645a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass doAnswer(new AnswerWithArguments() { 15655a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass public void answer(IWifiStaIface.getDebugRxPacketFatesCallback cb) { 15665a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass cb.onValues(mWifiStatusSuccess, 15675a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass new ArrayList<WifiDebugRxPacketFateReport>(Arrays.asList( 15685a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass fateReport, fateReport))); 15695a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass } 15705a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass }).when(mIWifiStaIface) 15715a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass .getDebugRxPacketFates(any(IWifiStaIface.getDebugRxPacketFatesCallback.class)); 15725a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass 15735a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass WifiNative.RxFateReport[] retrievedFates = new WifiNative.RxFateReport[1]; 1574d77212c2b255b5e6331222fde66bdc735295fbbeRoshan Pius assertFalse(mWifiVendorHal.getRxPktFates(TEST_IFACE_NAME, retrievedFates)); 15755a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass verify(mIWifiStaIface, never()) 15765a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass .getDebugRxPacketFates(any(IWifiStaIface.getDebugRxPacketFatesCallback.class)); 15775a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass 15785a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass assertTrue(mWifiVendorHal.startVendorHalSta()); 15795a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass 1580d77212c2b255b5e6331222fde66bdc735295fbbeRoshan Pius assertTrue(mWifiVendorHal.getRxPktFates(TEST_IFACE_NAME, retrievedFates)); 15815a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass verify(mIWifiStaIface) 15825a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass .getDebugRxPacketFates(any(IWifiStaIface.getDebugRxPacketFatesCallback.class)); 15835a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass assertEquals(WifiLoggerHal.RX_PKT_FATE_FW_DROP_FILTER, retrievedFates[0].mFate); 15845a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass assertEquals(fateReport.frameInfo.driverTimestampUsec, 15855a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass retrievedFates[0].mDriverTimestampUSec); 15865a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass assertEquals(WifiLoggerHal.FRAME_TYPE_80211_MGMT, retrievedFates[0].mFrameType); 15875a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass assertArrayEquals(frameContentBytes, retrievedFates[0].mFrameBytes); 15885a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass } 15895a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass 15905a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass /** 15915a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass * Tests the failure to retrieve tx packet fates when the input array is empty. 15925a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass */ 15935a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass @Test 15945a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass public void testGetTxPktFatesEmptyInputArray() throws Exception { 15955a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass assertTrue(mWifiVendorHal.startVendorHalSta()); 1596d77212c2b255b5e6331222fde66bdc735295fbbeRoshan Pius assertFalse(mWifiVendorHal.getTxPktFates(TEST_IFACE_NAME, new WifiNative.TxFateReport[0])); 15975a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass verify(mIWifiStaIface, never()) 15985a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass .getDebugTxPacketFates(any(IWifiStaIface.getDebugTxPacketFatesCallback.class)); 15995a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass } 16005a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass 16015a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass /** 16025a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass * Tests the failure to retrieve rx packet fates when the input array is empty. 16035a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass */ 16045a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass @Test 16055a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass public void testGetRxPktFatesEmptyInputArray() throws Exception { 16065a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass assertTrue(mWifiVendorHal.startVendorHalSta()); 1607d77212c2b255b5e6331222fde66bdc735295fbbeRoshan Pius assertFalse(mWifiVendorHal.getRxPktFates(TEST_IFACE_NAME, new WifiNative.RxFateReport[0])); 16085a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass verify(mIWifiStaIface, never()) 16095a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass .getDebugRxPacketFates(any(IWifiStaIface.getDebugRxPacketFatesCallback.class)); 16105a801ea1dd4da217cb2ea03ecfcfc02985e4f1dfMichael Plass } 1611135be5a123dd70bb4663396a28dda9d6c26956fcMichael Plass 1612135be5a123dd70bb4663396a28dda9d6c26956fcMichael Plass /** 1613135be5a123dd70bb4663396a28dda9d6c26956fcMichael Plass * Tests the nd offload enable/disable. 1614135be5a123dd70bb4663396a28dda9d6c26956fcMichael Plass */ 1615135be5a123dd70bb4663396a28dda9d6c26956fcMichael Plass @Test 1616135be5a123dd70bb4663396a28dda9d6c26956fcMichael Plass public void testEnableDisableNdOffload() throws Exception { 1617135be5a123dd70bb4663396a28dda9d6c26956fcMichael Plass when(mIWifiStaIface.enableNdOffload(anyBoolean())).thenReturn(mWifiStatusSuccess); 1618135be5a123dd70bb4663396a28dda9d6c26956fcMichael Plass 1619d77212c2b255b5e6331222fde66bdc735295fbbeRoshan Pius assertFalse(mWifiVendorHal.configureNeighborDiscoveryOffload(TEST_IFACE_NAME, true)); 1620135be5a123dd70bb4663396a28dda9d6c26956fcMichael Plass verify(mIWifiStaIface, never()).enableNdOffload(anyBoolean()); 1621135be5a123dd70bb4663396a28dda9d6c26956fcMichael Plass 1622135be5a123dd70bb4663396a28dda9d6c26956fcMichael Plass assertTrue(mWifiVendorHal.startVendorHalSta()); 1623135be5a123dd70bb4663396a28dda9d6c26956fcMichael Plass 1624d77212c2b255b5e6331222fde66bdc735295fbbeRoshan Pius assertTrue(mWifiVendorHal.configureNeighborDiscoveryOffload(TEST_IFACE_NAME, true)); 1625135be5a123dd70bb4663396a28dda9d6c26956fcMichael Plass verify(mIWifiStaIface).enableNdOffload(eq(true)); 1626d77212c2b255b5e6331222fde66bdc735295fbbeRoshan Pius assertTrue(mWifiVendorHal.configureNeighborDiscoveryOffload(TEST_IFACE_NAME, false)); 1627135be5a123dd70bb4663396a28dda9d6c26956fcMichael Plass verify(mIWifiStaIface).enableNdOffload(eq(false)); 1628135be5a123dd70bb4663396a28dda9d6c26956fcMichael Plass } 1629135be5a123dd70bb4663396a28dda9d6c26956fcMichael Plass 1630135be5a123dd70bb4663396a28dda9d6c26956fcMichael Plass /** 1631135be5a123dd70bb4663396a28dda9d6c26956fcMichael Plass * Tests the nd offload enable failure. 1632135be5a123dd70bb4663396a28dda9d6c26956fcMichael Plass */ 1633135be5a123dd70bb4663396a28dda9d6c26956fcMichael Plass @Test 1634135be5a123dd70bb4663396a28dda9d6c26956fcMichael Plass public void testEnableNdOffloadFailure() throws Exception { 1635135be5a123dd70bb4663396a28dda9d6c26956fcMichael Plass when(mIWifiStaIface.enableNdOffload(eq(true))).thenReturn(mWifiStatusFailure); 1636135be5a123dd70bb4663396a28dda9d6c26956fcMichael Plass 1637135be5a123dd70bb4663396a28dda9d6c26956fcMichael Plass assertTrue(mWifiVendorHal.startVendorHalSta()); 1638135be5a123dd70bb4663396a28dda9d6c26956fcMichael Plass 1639d77212c2b255b5e6331222fde66bdc735295fbbeRoshan Pius assertFalse(mWifiVendorHal.configureNeighborDiscoveryOffload(TEST_IFACE_NAME, true)); 1640135be5a123dd70bb4663396a28dda9d6c26956fcMichael Plass verify(mIWifiStaIface).enableNdOffload(eq(true)); 1641135be5a123dd70bb4663396a28dda9d6c26956fcMichael Plass } 1642cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass 1643cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass /** 1644cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass * Tests the retrieval of wlan wake reason stats. 1645cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass */ 1646cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass @Test 1647cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass public void testGetWlanWakeReasonCount() throws Exception { 1648cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass WifiDebugHostWakeReasonStats stats = new WifiDebugHostWakeReasonStats(); 1649cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass Random rand = new Random(); 1650cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass stats.totalCmdEventWakeCnt = rand.nextInt(); 1651cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass stats.totalDriverFwLocalWakeCnt = rand.nextInt(); 1652cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass stats.totalRxPacketWakeCnt = rand.nextInt(); 1653cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass stats.rxPktWakeDetails.rxUnicastCnt = rand.nextInt(); 1654cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass stats.rxPktWakeDetails.rxMulticastCnt = rand.nextInt(); 1655cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass stats.rxIcmpPkWakeDetails.icmpPkt = rand.nextInt(); 1656cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass stats.rxIcmpPkWakeDetails.icmp6Pkt = rand.nextInt(); 1657cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass stats.rxMulticastPkWakeDetails.ipv4RxMulticastAddrCnt = rand.nextInt(); 1658cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass stats.rxMulticastPkWakeDetails.ipv6RxMulticastAddrCnt = rand.nextInt(); 1659cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass 1660cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass doAnswer(new AnswerWithArguments() { 1661cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass public void answer(IWifiChip.getDebugHostWakeReasonStatsCallback cb) { 1662cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass cb.onValues(mWifiStatusSuccess, stats); 1663cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass } 1664cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass }).when(mIWifiChip).getDebugHostWakeReasonStats( 1665cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass any(IWifiChip.getDebugHostWakeReasonStatsCallback.class)); 1666cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass 1667cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass assertNull(mWifiVendorHal.getWlanWakeReasonCount()); 1668cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass verify(mIWifiChip, never()) 1669cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass .getDebugHostWakeReasonStats( 1670cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass any(IWifiChip.getDebugHostWakeReasonStatsCallback.class)); 1671cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass 1672cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass assertTrue(mWifiVendorHal.startVendorHalSta()); 1673cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass 1674cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass WifiWakeReasonAndCounts retrievedStats = mWifiVendorHal.getWlanWakeReasonCount(); 1675cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass verify(mIWifiChip).getDebugHostWakeReasonStats( 1676cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass any(IWifiChip.getDebugHostWakeReasonStatsCallback.class)); 1677cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass assertNotNull(retrievedStats); 1678cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass assertEquals(stats.totalCmdEventWakeCnt, retrievedStats.totalCmdEventWake); 1679cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass assertEquals(stats.totalDriverFwLocalWakeCnt, retrievedStats.totalDriverFwLocalWake); 1680cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass assertEquals(stats.totalRxPacketWakeCnt, retrievedStats.totalRxDataWake); 1681cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass assertEquals(stats.rxPktWakeDetails.rxUnicastCnt, retrievedStats.rxUnicast); 1682cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass assertEquals(stats.rxPktWakeDetails.rxMulticastCnt, retrievedStats.rxMulticast); 1683cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass assertEquals(stats.rxIcmpPkWakeDetails.icmpPkt, retrievedStats.icmp); 1684cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass assertEquals(stats.rxIcmpPkWakeDetails.icmp6Pkt, retrievedStats.icmp6); 1685cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass assertEquals(stats.rxMulticastPkWakeDetails.ipv4RxMulticastAddrCnt, 1686cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass retrievedStats.ipv4RxMulticast); 1687cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass assertEquals(stats.rxMulticastPkWakeDetails.ipv6RxMulticastAddrCnt, 1688cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass retrievedStats.ipv6Multicast); 1689cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass } 1690cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass 1691cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass /** 1692cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass * Tests the failure in retrieval of wlan wake reason stats. 1693cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass */ 1694cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass @Test 1695cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass public void testGetWlanWakeReasonCountFailure() throws Exception { 1696cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass doAnswer(new AnswerWithArguments() { 1697cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass public void answer(IWifiChip.getDebugHostWakeReasonStatsCallback cb) { 1698cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass cb.onValues(mWifiStatusFailure, new WifiDebugHostWakeReasonStats()); 1699cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass } 1700cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass }).when(mIWifiChip).getDebugHostWakeReasonStats( 1701cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass any(IWifiChip.getDebugHostWakeReasonStatsCallback.class)); 1702cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass 1703cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass // This should work in both AP & STA mode. 1704cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass assertTrue(mWifiVendorHal.startVendorHalAp()); 1705cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass 1706cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass assertNull(mWifiVendorHal.getWlanWakeReasonCount()); 1707cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass verify(mIWifiChip).getDebugHostWakeReasonStats( 1708cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass any(IWifiChip.getDebugHostWakeReasonStatsCallback.class)); 1709cbe44718452e93ef2b68974230231ff4fac99deeMichael Plass } 17102f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass 17112f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass /** 17122f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass * Test that getFwMemoryDump is properly plumbed 17132f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass */ 17142f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass @Test 17152f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass public void testGetFwMemoryDump() throws Exception { 17162f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass byte [] sample = NativeUtil.hexStringToByteArray("268c7a3fbfa4661c0bdd6a36"); 17172f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass ArrayList<Byte> halBlob = NativeUtil.byteArrayToArrayList(sample); 17182f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass 17192f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass doAnswer(new AnswerWithArguments() { 17202f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass public void answer(IWifiChip.requestFirmwareDebugDumpCallback cb) 17212f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass throws RemoteException { 17222f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass cb.onValues(mWifiStatusSuccess, halBlob); 17232f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass } 17242f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass }).when(mIWifiChip).requestFirmwareDebugDump(any( 17252f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass IWifiChip.requestFirmwareDebugDumpCallback.class)); 17262f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass 17272f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass assertTrue(mWifiVendorHal.startVendorHalSta()); 17282f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass assertArrayEquals(sample, mWifiVendorHal.getFwMemoryDump()); 17292f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass } 17302f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass 17312f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass /** 17322f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass * Test that getDriverStateDump is properly plumbed 17332f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass * 17342f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass * Just for variety, use AP mode here. 17352f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass */ 17362f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass @Test 17372f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass public void testGetDriverStateDump() throws Exception { 17382f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass byte [] sample = NativeUtil.hexStringToByteArray("e83ff543cf80083e6459d20f"); 17392f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass ArrayList<Byte> halBlob = NativeUtil.byteArrayToArrayList(sample); 17402f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass 17412f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass doAnswer(new AnswerWithArguments() { 17422f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass public void answer(IWifiChip.requestDriverDebugDumpCallback cb) 17432f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass throws RemoteException { 17442f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass cb.onValues(mWifiStatusSuccess, halBlob); 17452f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass } 17462f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass }).when(mIWifiChip).requestDriverDebugDump(any( 17472f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass IWifiChip.requestDriverDebugDumpCallback.class)); 17482f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass 17492f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass assertTrue(mWifiVendorHal.startVendorHalAp()); 17502f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass assertArrayEquals(sample, mWifiVendorHal.getDriverStateDump()); 17512f0db656f678c8cf1ab6643739c6d0059721e6e2Michael Plass } 1752d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius 1753d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius /** 1754d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius * Test that background scan failure is handled correctly. 1755d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius */ 1756d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius @Test 1757d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius public void testBgScanFailureCallback() throws Exception { 1758d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius assertTrue(mWifiVendorHal.startVendorHalSta()); 1759d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius assertNotNull(mIWifiStaIfaceEventCallback); 1760d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius 1761d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius WifiNative.ScanEventHandler eventHandler = mock(WifiNative.ScanEventHandler.class); 1762d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius startBgScan(eventHandler); 1763d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius 1764d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius mIWifiStaIfaceEventCallback.onBackgroundScanFailure(mWifiVendorHal.mScan.cmdId); 1765d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius verify(eventHandler).onScanStatus(WifiNative.WIFI_SCAN_FAILED); 1766d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius } 1767d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius 1768d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius /** 1769136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass * Test that background scan failure with wrong id is not reported. 1770d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius */ 1771d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius @Test 1772d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius public void testBgScanFailureCallbackWithInvalidCmdId() throws Exception { 1773d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius assertTrue(mWifiVendorHal.startVendorHalSta()); 1774d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius assertNotNull(mIWifiStaIfaceEventCallback); 1775d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius 1776d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius WifiNative.ScanEventHandler eventHandler = mock(WifiNative.ScanEventHandler.class); 1777d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius startBgScan(eventHandler); 1778d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius 1779d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius mIWifiStaIfaceEventCallback.onBackgroundScanFailure(mWifiVendorHal.mScan.cmdId + 1); 1780d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius verify(eventHandler, never()).onScanStatus(WifiNative.WIFI_SCAN_FAILED); 1781d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius } 1782d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius 1783d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius /** 1784d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius * Test that background scan full results are handled correctly. 1785d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius */ 1786d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius @Test 1787d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius public void testBgScanFullScanResults() throws Exception { 1788d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius assertTrue(mWifiVendorHal.startVendorHalSta()); 1789d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius assertNotNull(mIWifiStaIfaceEventCallback); 1790d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius 1791d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius WifiNative.ScanEventHandler eventHandler = mock(WifiNative.ScanEventHandler.class); 1792d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius startBgScan(eventHandler); 1793d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius 1794d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius Pair<StaScanResult, ScanResult> result = createHidlAndFrameworkBgScanResult(); 1795d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius mIWifiStaIfaceEventCallback.onBackgroundFullScanResult( 17966b1dfdb05b07e485cf510d3cc393cb0ca7b9d9efRoshan Pius mWifiVendorHal.mScan.cmdId, 5, result.first); 1797d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius 1798d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius ArgumentCaptor<ScanResult> scanResultCaptor = ArgumentCaptor.forClass(ScanResult.class); 17996b1dfdb05b07e485cf510d3cc393cb0ca7b9d9efRoshan Pius verify(eventHandler).onFullScanResult(scanResultCaptor.capture(), eq(5)); 1800d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius 1801d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius assertScanResultEqual(result.second, scanResultCaptor.getValue()); 1802d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius } 1803d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius 1804d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius /** 1805d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius * Test that background scan results are handled correctly. 1806d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius */ 1807d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius @Test 1808d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius public void testBgScanScanResults() throws Exception { 1809d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius assertTrue(mWifiVendorHal.startVendorHalSta()); 1810d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius assertNotNull(mIWifiStaIfaceEventCallback); 1811d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius 1812d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius WifiNative.ScanEventHandler eventHandler = mock(WifiNative.ScanEventHandler.class); 1813d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius startBgScan(eventHandler); 1814d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius 1815d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius Pair<ArrayList<StaScanData>, ArrayList<WifiScanner.ScanData>> data = 1816d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius createHidlAndFrameworkBgScanDatas(); 1817d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius mIWifiStaIfaceEventCallback.onBackgroundScanResults( 1818d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius mWifiVendorHal.mScan.cmdId, data.first); 1819d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius 1820d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius verify(eventHandler).onScanStatus(WifiNative.WIFI_SCAN_RESULTS_AVAILABLE); 1821d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius assertScanDatasEqual( 1822d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius data.second, Arrays.asList(mWifiVendorHal.mScan.latestScanResults)); 1823d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius } 1824d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius 18251514ed2b37ca20f14990c9a605a576632300649bRoshan Pius /** 1826136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass * Test that starting a new background scan when one is active will stop the previous one. 1827136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass */ 1828136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass @Test 1829136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass public void testBgScanReplacement() throws Exception { 1830136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass when(mIWifiStaIface.stopBackgroundScan(anyInt())).thenReturn(mWifiStatusSuccess); 1831136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass assertTrue(mWifiVendorHal.startVendorHalSta()); 1832136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass assertNotNull(mIWifiStaIfaceEventCallback); 1833136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass WifiNative.ScanEventHandler eventHandler = mock(WifiNative.ScanEventHandler.class); 1834136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass startBgScan(eventHandler); 1835136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass int cmdId1 = mWifiVendorHal.mScan.cmdId; 1836136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass startBgScan(eventHandler); 1837136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass assertNotEquals(mWifiVendorHal.mScan.cmdId, cmdId1); 1838136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass verify(mIWifiStaIface, times(2)).startBackgroundScan(anyInt(), any()); 1839136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass verify(mIWifiStaIface).stopBackgroundScan(cmdId1); 1840136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass } 1841136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass 1842136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass /** 1843136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass * Test stopping a background scan. 1844136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass */ 1845136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass @Test 1846136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass public void testBgScanStop() throws Exception { 1847136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass when(mIWifiStaIface.stopBackgroundScan(anyInt())).thenReturn(mWifiStatusSuccess); 1848136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass assertTrue(mWifiVendorHal.startVendorHalSta()); 1849136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass assertNotNull(mIWifiStaIfaceEventCallback); 1850136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass WifiNative.ScanEventHandler eventHandler = mock(WifiNative.ScanEventHandler.class); 1851136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass startBgScan(eventHandler); 1852136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass 1853136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass int cmdId = mWifiVendorHal.mScan.cmdId; 1854136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass 1855d77212c2b255b5e6331222fde66bdc735295fbbeRoshan Pius mWifiVendorHal.stopBgScan(TEST_IFACE_NAME); 1856d77212c2b255b5e6331222fde66bdc735295fbbeRoshan Pius mWifiVendorHal.stopBgScan(TEST_IFACE_NAME); // second call should not do anything 1857136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass verify(mIWifiStaIface).stopBackgroundScan(cmdId); // Should be called just once 1858136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass } 1859136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass 1860136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass /** 1861136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass * Test pausing and restarting a background scan. 1862136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass */ 1863136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass @Test 1864136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass public void testBgScanPauseAndRestart() throws Exception { 1865136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass when(mIWifiStaIface.stopBackgroundScan(anyInt())).thenReturn(mWifiStatusSuccess); 1866136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass assertTrue(mWifiVendorHal.startVendorHalSta()); 1867136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass assertNotNull(mIWifiStaIfaceEventCallback); 1868136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass WifiNative.ScanEventHandler eventHandler = mock(WifiNative.ScanEventHandler.class); 1869136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass startBgScan(eventHandler); 1870136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass 1871136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass int cmdId = mWifiVendorHal.mScan.cmdId; 1872136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass 1873d77212c2b255b5e6331222fde66bdc735295fbbeRoshan Pius mWifiVendorHal.pauseBgScan(TEST_IFACE_NAME); 1874d77212c2b255b5e6331222fde66bdc735295fbbeRoshan Pius mWifiVendorHal.restartBgScan(TEST_IFACE_NAME); 1875136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass verify(mIWifiStaIface).stopBackgroundScan(cmdId); // Should be called just once 1876136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass verify(mIWifiStaIface, times(2)).startBackgroundScan(eq(cmdId), any()); 1877136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass } 1878136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass 1879136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass /** 18801514ed2b37ca20f14990c9a605a576632300649bRoshan Pius * Test the handling of log handler set. 18811514ed2b37ca20f14990c9a605a576632300649bRoshan Pius */ 18821514ed2b37ca20f14990c9a605a576632300649bRoshan Pius @Test 18831514ed2b37ca20f14990c9a605a576632300649bRoshan Pius public void testSetLogHandler() throws Exception { 18841514ed2b37ca20f14990c9a605a576632300649bRoshan Pius when(mIWifiChip.enableDebugErrorAlerts(anyBoolean())).thenReturn(mWifiStatusSuccess); 18851514ed2b37ca20f14990c9a605a576632300649bRoshan Pius 18861514ed2b37ca20f14990c9a605a576632300649bRoshan Pius WifiNative.WifiLoggerEventHandler eventHandler = 18871514ed2b37ca20f14990c9a605a576632300649bRoshan Pius mock(WifiNative.WifiLoggerEventHandler.class); 18881514ed2b37ca20f14990c9a605a576632300649bRoshan Pius 18891514ed2b37ca20f14990c9a605a576632300649bRoshan Pius assertFalse(mWifiVendorHal.setLoggingEventHandler(eventHandler)); 18901514ed2b37ca20f14990c9a605a576632300649bRoshan Pius verify(mIWifiChip, never()).enableDebugErrorAlerts(anyBoolean()); 18911514ed2b37ca20f14990c9a605a576632300649bRoshan Pius 18921514ed2b37ca20f14990c9a605a576632300649bRoshan Pius assertTrue(mWifiVendorHal.startVendorHalSta()); 18931514ed2b37ca20f14990c9a605a576632300649bRoshan Pius 18941514ed2b37ca20f14990c9a605a576632300649bRoshan Pius assertTrue(mWifiVendorHal.setLoggingEventHandler(eventHandler)); 18951514ed2b37ca20f14990c9a605a576632300649bRoshan Pius verify(mIWifiChip).enableDebugErrorAlerts(eq(true)); 18961514ed2b37ca20f14990c9a605a576632300649bRoshan Pius reset(mIWifiChip); 18971514ed2b37ca20f14990c9a605a576632300649bRoshan Pius 18981514ed2b37ca20f14990c9a605a576632300649bRoshan Pius // Second call should fail. 18991514ed2b37ca20f14990c9a605a576632300649bRoshan Pius assertFalse(mWifiVendorHal.setLoggingEventHandler(eventHandler)); 19001514ed2b37ca20f14990c9a605a576632300649bRoshan Pius verify(mIWifiChip, never()).enableDebugErrorAlerts(anyBoolean()); 19011514ed2b37ca20f14990c9a605a576632300649bRoshan Pius } 19021514ed2b37ca20f14990c9a605a576632300649bRoshan Pius 19031514ed2b37ca20f14990c9a605a576632300649bRoshan Pius /** 19041514ed2b37ca20f14990c9a605a576632300649bRoshan Pius * Test the handling of log handler reset. 19051514ed2b37ca20f14990c9a605a576632300649bRoshan Pius */ 19061514ed2b37ca20f14990c9a605a576632300649bRoshan Pius @Test 19071514ed2b37ca20f14990c9a605a576632300649bRoshan Pius public void testResetLogHandler() throws Exception { 19081514ed2b37ca20f14990c9a605a576632300649bRoshan Pius when(mIWifiChip.enableDebugErrorAlerts(anyBoolean())).thenReturn(mWifiStatusSuccess); 19096b1dfdb05b07e485cf510d3cc393cb0ca7b9d9efRoshan Pius when(mIWifiChip.stopLoggingToDebugRingBuffer()).thenReturn(mWifiStatusSuccess); 19101514ed2b37ca20f14990c9a605a576632300649bRoshan Pius 19111514ed2b37ca20f14990c9a605a576632300649bRoshan Pius assertFalse(mWifiVendorHal.resetLogHandler()); 19121514ed2b37ca20f14990c9a605a576632300649bRoshan Pius verify(mIWifiChip, never()).enableDebugErrorAlerts(anyBoolean()); 19136b1dfdb05b07e485cf510d3cc393cb0ca7b9d9efRoshan Pius verify(mIWifiChip, never()).stopLoggingToDebugRingBuffer(); 19141514ed2b37ca20f14990c9a605a576632300649bRoshan Pius 19151514ed2b37ca20f14990c9a605a576632300649bRoshan Pius assertTrue(mWifiVendorHal.startVendorHalSta()); 19161514ed2b37ca20f14990c9a605a576632300649bRoshan Pius 19171514ed2b37ca20f14990c9a605a576632300649bRoshan Pius // Not set, so this should fail. 19181514ed2b37ca20f14990c9a605a576632300649bRoshan Pius assertFalse(mWifiVendorHal.resetLogHandler()); 19191514ed2b37ca20f14990c9a605a576632300649bRoshan Pius verify(mIWifiChip, never()).enableDebugErrorAlerts(anyBoolean()); 19206b1dfdb05b07e485cf510d3cc393cb0ca7b9d9efRoshan Pius verify(mIWifiChip, never()).stopLoggingToDebugRingBuffer(); 19211514ed2b37ca20f14990c9a605a576632300649bRoshan Pius 19221514ed2b37ca20f14990c9a605a576632300649bRoshan Pius // Now set and then reset. 19231514ed2b37ca20f14990c9a605a576632300649bRoshan Pius assertTrue(mWifiVendorHal.setLoggingEventHandler( 19241514ed2b37ca20f14990c9a605a576632300649bRoshan Pius mock(WifiNative.WifiLoggerEventHandler.class))); 19251514ed2b37ca20f14990c9a605a576632300649bRoshan Pius assertTrue(mWifiVendorHal.resetLogHandler()); 19261514ed2b37ca20f14990c9a605a576632300649bRoshan Pius verify(mIWifiChip).enableDebugErrorAlerts(eq(false)); 19276b1dfdb05b07e485cf510d3cc393cb0ca7b9d9efRoshan Pius verify(mIWifiChip).stopLoggingToDebugRingBuffer(); 19281514ed2b37ca20f14990c9a605a576632300649bRoshan Pius reset(mIWifiChip); 19291514ed2b37ca20f14990c9a605a576632300649bRoshan Pius 19301514ed2b37ca20f14990c9a605a576632300649bRoshan Pius // Second reset should fail. 19311514ed2b37ca20f14990c9a605a576632300649bRoshan Pius assertFalse(mWifiVendorHal.resetLogHandler()); 19321514ed2b37ca20f14990c9a605a576632300649bRoshan Pius verify(mIWifiChip, never()).enableDebugErrorAlerts(anyBoolean()); 19336b1dfdb05b07e485cf510d3cc393cb0ca7b9d9efRoshan Pius verify(mIWifiChip, never()).stopLoggingToDebugRingBuffer(); 19341514ed2b37ca20f14990c9a605a576632300649bRoshan Pius } 19351514ed2b37ca20f14990c9a605a576632300649bRoshan Pius 19361514ed2b37ca20f14990c9a605a576632300649bRoshan Pius /** 19371514ed2b37ca20f14990c9a605a576632300649bRoshan Pius * Test the handling of alert callback. 19381514ed2b37ca20f14990c9a605a576632300649bRoshan Pius */ 19391514ed2b37ca20f14990c9a605a576632300649bRoshan Pius @Test 19401514ed2b37ca20f14990c9a605a576632300649bRoshan Pius public void testAlertCallback() throws Exception { 19411514ed2b37ca20f14990c9a605a576632300649bRoshan Pius assertTrue(mWifiVendorHal.startVendorHalSta()); 19421514ed2b37ca20f14990c9a605a576632300649bRoshan Pius assertNotNull(mIWifiChipEventCallback); 19431514ed2b37ca20f14990c9a605a576632300649bRoshan Pius 1944cc9c910dd0d35ad75003e4777b15562ebd7ada35Roshan Pius testAlertCallbackUsingProvidedCallback(mIWifiChipEventCallback); 19451514ed2b37ca20f14990c9a605a576632300649bRoshan Pius } 19461514ed2b37ca20f14990c9a605a576632300649bRoshan Pius 19471514ed2b37ca20f14990c9a605a576632300649bRoshan Pius /** 19481514ed2b37ca20f14990c9a605a576632300649bRoshan Pius * Test the handling of ring buffer callback. 19491514ed2b37ca20f14990c9a605a576632300649bRoshan Pius */ 19501514ed2b37ca20f14990c9a605a576632300649bRoshan Pius @Test 19511514ed2b37ca20f14990c9a605a576632300649bRoshan Pius public void testRingBufferDataCallback() throws Exception { 19521514ed2b37ca20f14990c9a605a576632300649bRoshan Pius when(mIWifiChip.enableDebugErrorAlerts(anyBoolean())).thenReturn(mWifiStatusSuccess); 19536b1dfdb05b07e485cf510d3cc393cb0ca7b9d9efRoshan Pius when(mIWifiChip.stopLoggingToDebugRingBuffer()).thenReturn(mWifiStatusSuccess); 19541514ed2b37ca20f14990c9a605a576632300649bRoshan Pius 19551514ed2b37ca20f14990c9a605a576632300649bRoshan Pius assertTrue(mWifiVendorHal.startVendorHalSta()); 19561514ed2b37ca20f14990c9a605a576632300649bRoshan Pius assertNotNull(mIWifiChipEventCallback); 19571514ed2b37ca20f14990c9a605a576632300649bRoshan Pius 19581514ed2b37ca20f14990c9a605a576632300649bRoshan Pius byte[] errorData = new byte[45]; 19591514ed2b37ca20f14990c9a605a576632300649bRoshan Pius new Random().nextBytes(errorData); 19601514ed2b37ca20f14990c9a605a576632300649bRoshan Pius 19611514ed2b37ca20f14990c9a605a576632300649bRoshan Pius // Randomly raise the HIDL callback before we register for the log callback. 19625e6aea460e272ef7c70029abe9f0e5a695ad119emukesh agrawal // This should be safely ignored. (Not trigger NPE.) 19631514ed2b37ca20f14990c9a605a576632300649bRoshan Pius mIWifiChipEventCallback.onDebugRingBufferDataAvailable( 19641514ed2b37ca20f14990c9a605a576632300649bRoshan Pius new WifiDebugRingBufferStatus(), NativeUtil.byteArrayToArrayList(errorData)); 19655e6aea460e272ef7c70029abe9f0e5a695ad119emukesh agrawal mLooper.dispatchAll(); 19661514ed2b37ca20f14990c9a605a576632300649bRoshan Pius 19671514ed2b37ca20f14990c9a605a576632300649bRoshan Pius WifiNative.WifiLoggerEventHandler eventHandler = 19681514ed2b37ca20f14990c9a605a576632300649bRoshan Pius mock(WifiNative.WifiLoggerEventHandler.class); 19691514ed2b37ca20f14990c9a605a576632300649bRoshan Pius assertTrue(mWifiVendorHal.setLoggingEventHandler(eventHandler)); 19701514ed2b37ca20f14990c9a605a576632300649bRoshan Pius verify(mIWifiChip).enableDebugErrorAlerts(eq(true)); 19711514ed2b37ca20f14990c9a605a576632300649bRoshan Pius 19721514ed2b37ca20f14990c9a605a576632300649bRoshan Pius // Now raise the HIDL callback, this should be properly handled. 19731514ed2b37ca20f14990c9a605a576632300649bRoshan Pius mIWifiChipEventCallback.onDebugRingBufferDataAvailable( 19741514ed2b37ca20f14990c9a605a576632300649bRoshan Pius new WifiDebugRingBufferStatus(), NativeUtil.byteArrayToArrayList(errorData)); 19755e6aea460e272ef7c70029abe9f0e5a695ad119emukesh agrawal mLooper.dispatchAll(); 19761514ed2b37ca20f14990c9a605a576632300649bRoshan Pius verify(eventHandler).onRingBufferData( 19771514ed2b37ca20f14990c9a605a576632300649bRoshan Pius any(WifiNative.RingBufferStatus.class), eq(errorData)); 19781514ed2b37ca20f14990c9a605a576632300649bRoshan Pius 19791514ed2b37ca20f14990c9a605a576632300649bRoshan Pius // Now stop the logging and invoke the callback. This should be ignored. 19805e6aea460e272ef7c70029abe9f0e5a695ad119emukesh agrawal reset(eventHandler); 19811514ed2b37ca20f14990c9a605a576632300649bRoshan Pius assertTrue(mWifiVendorHal.resetLogHandler()); 19821514ed2b37ca20f14990c9a605a576632300649bRoshan Pius mIWifiChipEventCallback.onDebugRingBufferDataAvailable( 19831514ed2b37ca20f14990c9a605a576632300649bRoshan Pius new WifiDebugRingBufferStatus(), NativeUtil.byteArrayToArrayList(errorData)); 19845e6aea460e272ef7c70029abe9f0e5a695ad119emukesh agrawal mLooper.dispatchAll(); 19855e6aea460e272ef7c70029abe9f0e5a695ad119emukesh agrawal verify(eventHandler, never()).onRingBufferData(anyObject(), anyObject()); 19861514ed2b37ca20f14990c9a605a576632300649bRoshan Pius } 19871514ed2b37ca20f14990c9a605a576632300649bRoshan Pius 1988af0e32cfa2f7402c60b9df88a0d9bd19f421026cRoshan Pius /** 1989af0e32cfa2f7402c60b9df88a0d9bd19f421026cRoshan Pius * Test the handling of Vendor HAL death. 1990af0e32cfa2f7402c60b9df88a0d9bd19f421026cRoshan Pius */ 1991af0e32cfa2f7402c60b9df88a0d9bd19f421026cRoshan Pius @Test 1992af0e32cfa2f7402c60b9df88a0d9bd19f421026cRoshan Pius public void testVendorHalDeath() { 1993af0e32cfa2f7402c60b9df88a0d9bd19f421026cRoshan Pius // Invoke the HAL device manager status callback with ready set to false to indicate the 1994af0e32cfa2f7402c60b9df88a0d9bd19f421026cRoshan Pius // death of the HAL. 1995af0e32cfa2f7402c60b9df88a0d9bd19f421026cRoshan Pius when(mHalDeviceManager.isReady()).thenReturn(false); 1996af0e32cfa2f7402c60b9df88a0d9bd19f421026cRoshan Pius mHalDeviceManagerStatusCallbacks.onStatusChanged(); 1997af0e32cfa2f7402c60b9df88a0d9bd19f421026cRoshan Pius 1998af0e32cfa2f7402c60b9df88a0d9bd19f421026cRoshan Pius verify(mVendorHalDeathHandler).onDeath(); 1999af0e32cfa2f7402c60b9df88a0d9bd19f421026cRoshan Pius } 2000af0e32cfa2f7402c60b9df88a0d9bd19f421026cRoshan Pius 2001ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius /** 2002b7f35c58029fe5dce64813271ad4e8b1b6ea8893Roshan Pius * Test the new selectTxPowerScenario HIDL method invocation. This should return failure if the 2003ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius * HAL service is exposing the 1.0 interface. 2004ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius */ 2005ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius @Test 2006b7f35c58029fe5dce64813271ad4e8b1b6ea8893Roshan Pius public void testSelectTxPowerScenario() throws RemoteException { 20073153926f9b95f42a8d3175b4f0e4d2e448ea8fc1Roshan Pius assertTrue(mWifiVendorHal.startVendorHalSta()); 2008ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius // Should fail because we exposed the 1.0 IWifiChip. 2009b7f35c58029fe5dce64813271ad4e8b1b6ea8893Roshan Pius assertFalse( 2010b7f35c58029fe5dce64813271ad4e8b1b6ea8893Roshan Pius mWifiVendorHal.selectTxPowerScenario(WifiNative.TX_POWER_SCENARIO_VOICE_CALL)); 2011b7f35c58029fe5dce64813271ad4e8b1b6ea8893Roshan Pius verify(mIWifiChipV11, never()).selectTxPowerScenario(anyInt()); 2012ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius mWifiVendorHal.stopVendorHal(); 2013ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius 2014ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius // Now expose the 1.1 IWifiChip. 2015ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius mWifiVendorHal = new WifiVendorHalSpyV1_1(mHalDeviceManager, mLooper.getLooper()); 2016b7f35c58029fe5dce64813271ad4e8b1b6ea8893Roshan Pius when(mIWifiChipV11.selectTxPowerScenario(anyInt())).thenReturn(mWifiStatusSuccess); 2017ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius 20183153926f9b95f42a8d3175b4f0e4d2e448ea8fc1Roshan Pius assertTrue(mWifiVendorHal.startVendorHalSta()); 2019b7f35c58029fe5dce64813271ad4e8b1b6ea8893Roshan Pius assertTrue( 2020b7f35c58029fe5dce64813271ad4e8b1b6ea8893Roshan Pius mWifiVendorHal.selectTxPowerScenario(WifiNative.TX_POWER_SCENARIO_VOICE_CALL)); 2021b7f35c58029fe5dce64813271ad4e8b1b6ea8893Roshan Pius verify(mIWifiChipV11).selectTxPowerScenario( 2022b7f35c58029fe5dce64813271ad4e8b1b6ea8893Roshan Pius eq(android.hardware.wifi.V1_1.IWifiChip.TxPowerScenario.VOICE_CALL)); 2023b7f35c58029fe5dce64813271ad4e8b1b6ea8893Roshan Pius verify(mIWifiChipV11, never()).resetTxPowerScenario(); 2024ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius mWifiVendorHal.stopVendorHal(); 2025ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius } 2026ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius 2027ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius /** 2028b7f35c58029fe5dce64813271ad4e8b1b6ea8893Roshan Pius * Test the new resetTxPowerScenario HIDL method invocation. This should return failure if the 2029ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius * HAL service is exposing the 1.0 interface. 2030ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius */ 2031ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius @Test 2032b7f35c58029fe5dce64813271ad4e8b1b6ea8893Roshan Pius public void testResetTxPowerScenario() throws RemoteException { 20333153926f9b95f42a8d3175b4f0e4d2e448ea8fc1Roshan Pius assertTrue(mWifiVendorHal.startVendorHalSta()); 2034ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius // Should fail because we exposed the 1.0 IWifiChip. 2035b7f35c58029fe5dce64813271ad4e8b1b6ea8893Roshan Pius assertFalse(mWifiVendorHal.selectTxPowerScenario(WifiNative.TX_POWER_SCENARIO_NORMAL)); 2036b7f35c58029fe5dce64813271ad4e8b1b6ea8893Roshan Pius verify(mIWifiChipV11, never()).resetTxPowerScenario(); 2037ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius mWifiVendorHal.stopVendorHal(); 2038ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius 2039ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius // Now expose the 1.1 IWifiChip. 2040ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius mWifiVendorHal = new WifiVendorHalSpyV1_1(mHalDeviceManager, mLooper.getLooper()); 2041b7f35c58029fe5dce64813271ad4e8b1b6ea8893Roshan Pius when(mIWifiChipV11.resetTxPowerScenario()).thenReturn(mWifiStatusSuccess); 2042b7f35c58029fe5dce64813271ad4e8b1b6ea8893Roshan Pius 20433153926f9b95f42a8d3175b4f0e4d2e448ea8fc1Roshan Pius assertTrue(mWifiVendorHal.startVendorHalSta()); 2044b7f35c58029fe5dce64813271ad4e8b1b6ea8893Roshan Pius assertTrue(mWifiVendorHal.selectTxPowerScenario(WifiNative.TX_POWER_SCENARIO_NORMAL)); 2045b7f35c58029fe5dce64813271ad4e8b1b6ea8893Roshan Pius verify(mIWifiChipV11).resetTxPowerScenario(); 2046b7f35c58029fe5dce64813271ad4e8b1b6ea8893Roshan Pius verify(mIWifiChipV11, never()).selectTxPowerScenario(anyInt()); 2047b7f35c58029fe5dce64813271ad4e8b1b6ea8893Roshan Pius mWifiVendorHal.stopVendorHal(); 2048b7f35c58029fe5dce64813271ad4e8b1b6ea8893Roshan Pius } 2049b7f35c58029fe5dce64813271ad4e8b1b6ea8893Roshan Pius 2050b7f35c58029fe5dce64813271ad4e8b1b6ea8893Roshan Pius /** 2051b7f35c58029fe5dce64813271ad4e8b1b6ea8893Roshan Pius * Test the new selectTxPowerScenario HIDL method invocation with a bad scenario index. 2052b7f35c58029fe5dce64813271ad4e8b1b6ea8893Roshan Pius */ 2053b7f35c58029fe5dce64813271ad4e8b1b6ea8893Roshan Pius @Test 2054b7f35c58029fe5dce64813271ad4e8b1b6ea8893Roshan Pius public void testInvalidSelectTxPowerScenario() throws RemoteException { 2055b7f35c58029fe5dce64813271ad4e8b1b6ea8893Roshan Pius // Expose the 1.1 IWifiChip. 2056b7f35c58029fe5dce64813271ad4e8b1b6ea8893Roshan Pius mWifiVendorHal = new WifiVendorHalSpyV1_1(mHalDeviceManager, mLooper.getLooper()); 2057b7f35c58029fe5dce64813271ad4e8b1b6ea8893Roshan Pius when(mIWifiChipV11.selectTxPowerScenario(anyInt())).thenReturn(mWifiStatusSuccess); 2058ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius 20593153926f9b95f42a8d3175b4f0e4d2e448ea8fc1Roshan Pius assertTrue(mWifiVendorHal.startVendorHalSta()); 2060b7f35c58029fe5dce64813271ad4e8b1b6ea8893Roshan Pius assertFalse(mWifiVendorHal.selectTxPowerScenario(-6)); 2061b7f35c58029fe5dce64813271ad4e8b1b6ea8893Roshan Pius verify(mIWifiChipV11, never()).selectTxPowerScenario(anyInt()); 2062b7f35c58029fe5dce64813271ad4e8b1b6ea8893Roshan Pius verify(mIWifiChipV11, never()).resetTxPowerScenario(); 2063ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius mWifiVendorHal.stopVendorHal(); 2064ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius } 2065ba89009ba7554d5073c0b93c04f167c3a11667faRoshan Pius 20663153926f9b95f42a8d3175b4f0e4d2e448ea8fc1Roshan Pius /** 20673153926f9b95f42a8d3175b4f0e4d2e448ea8fc1Roshan Pius * Test the STA Iface creation failure due to iface name retrieval failure. 20683153926f9b95f42a8d3175b4f0e4d2e448ea8fc1Roshan Pius */ 20693153926f9b95f42a8d3175b4f0e4d2e448ea8fc1Roshan Pius @Test 20703153926f9b95f42a8d3175b4f0e4d2e448ea8fc1Roshan Pius public void testCreateStaIfaceFailureInIfaceName() throws RemoteException { 20713153926f9b95f42a8d3175b4f0e4d2e448ea8fc1Roshan Pius doAnswer(new AnswerWithArguments() { 20723153926f9b95f42a8d3175b4f0e4d2e448ea8fc1Roshan Pius public void answer(IWifiIface.getNameCallback cb) 20733153926f9b95f42a8d3175b4f0e4d2e448ea8fc1Roshan Pius throws RemoteException { 20743153926f9b95f42a8d3175b4f0e4d2e448ea8fc1Roshan Pius cb.onValues(mWifiStatusFailure, "wlan0"); 20753153926f9b95f42a8d3175b4f0e4d2e448ea8fc1Roshan Pius } 20763153926f9b95f42a8d3175b4f0e4d2e448ea8fc1Roshan Pius }).when(mIWifiStaIface).getName(any(IWifiIface.getNameCallback.class)); 20773153926f9b95f42a8d3175b4f0e4d2e448ea8fc1Roshan Pius 20783153926f9b95f42a8d3175b4f0e4d2e448ea8fc1Roshan Pius assertTrue(mWifiVendorHal.startVendorHal()); 20797dadc4d68ea820779ec513073347890b842a6f9cEtan Cohen assertNull(mWifiVendorHal.createStaIface(true, null)); 20807dadc4d68ea820779ec513073347890b842a6f9cEtan Cohen verify(mHalDeviceManager).createStaIface(eq(true), any(), eq(null)); 20813153926f9b95f42a8d3175b4f0e4d2e448ea8fc1Roshan Pius } 20823153926f9b95f42a8d3175b4f0e4d2e448ea8fc1Roshan Pius 20833153926f9b95f42a8d3175b4f0e4d2e448ea8fc1Roshan Pius /** 20843153926f9b95f42a8d3175b4f0e4d2e448ea8fc1Roshan Pius * Test the STA Iface creation failure due to iface name retrieval failure. 20853153926f9b95f42a8d3175b4f0e4d2e448ea8fc1Roshan Pius */ 20863153926f9b95f42a8d3175b4f0e4d2e448ea8fc1Roshan Pius @Test 2087d77212c2b255b5e6331222fde66bdc735295fbbeRoshan Pius public void testCreateApIfaceFailureInIfaceName() throws RemoteException { 20883153926f9b95f42a8d3175b4f0e4d2e448ea8fc1Roshan Pius doAnswer(new AnswerWithArguments() { 20893153926f9b95f42a8d3175b4f0e4d2e448ea8fc1Roshan Pius public void answer(IWifiIface.getNameCallback cb) 20903153926f9b95f42a8d3175b4f0e4d2e448ea8fc1Roshan Pius throws RemoteException { 20913153926f9b95f42a8d3175b4f0e4d2e448ea8fc1Roshan Pius cb.onValues(mWifiStatusFailure, "wlan0"); 20923153926f9b95f42a8d3175b4f0e4d2e448ea8fc1Roshan Pius } 20933153926f9b95f42a8d3175b4f0e4d2e448ea8fc1Roshan Pius }).when(mIWifiApIface).getName(any(IWifiIface.getNameCallback.class)); 20943153926f9b95f42a8d3175b4f0e4d2e448ea8fc1Roshan Pius 20953153926f9b95f42a8d3175b4f0e4d2e448ea8fc1Roshan Pius assertTrue(mWifiVendorHal.startVendorHal()); 20963153926f9b95f42a8d3175b4f0e4d2e448ea8fc1Roshan Pius assertNull(mWifiVendorHal.createApIface(null)); 2097be7435e9929c73d041a4c1c9aeba3a3421bcd859Roshan Pius verify(mHalDeviceManager).createApIface(any(), eq(null)); 20983153926f9b95f42a8d3175b4f0e4d2e448ea8fc1Roshan Pius } 20993153926f9b95f42a8d3175b4f0e4d2e448ea8fc1Roshan Pius 21003153926f9b95f42a8d3175b4f0e4d2e448ea8fc1Roshan Pius /** 21013153926f9b95f42a8d3175b4f0e4d2e448ea8fc1Roshan Pius * Test the creation and removal of STA Iface. 21023153926f9b95f42a8d3175b4f0e4d2e448ea8fc1Roshan Pius */ 21033153926f9b95f42a8d3175b4f0e4d2e448ea8fc1Roshan Pius @Test 21043153926f9b95f42a8d3175b4f0e4d2e448ea8fc1Roshan Pius public void testCreateRemoveStaIface() throws RemoteException { 21053153926f9b95f42a8d3175b4f0e4d2e448ea8fc1Roshan Pius assertTrue(mWifiVendorHal.startVendorHal()); 21067dadc4d68ea820779ec513073347890b842a6f9cEtan Cohen String ifaceName = mWifiVendorHal.createStaIface(false, null); 21077dadc4d68ea820779ec513073347890b842a6f9cEtan Cohen verify(mHalDeviceManager).createStaIface(eq(false), any(), eq(null)); 2108d77212c2b255b5e6331222fde66bdc735295fbbeRoshan Pius assertEquals(TEST_IFACE_NAME, ifaceName); 21093153926f9b95f42a8d3175b4f0e4d2e448ea8fc1Roshan Pius assertTrue(mWifiVendorHal.removeStaIface(ifaceName)); 21103153926f9b95f42a8d3175b4f0e4d2e448ea8fc1Roshan Pius verify(mHalDeviceManager).removeIface(eq(mIWifiStaIface)); 21113153926f9b95f42a8d3175b4f0e4d2e448ea8fc1Roshan Pius } 21123153926f9b95f42a8d3175b4f0e4d2e448ea8fc1Roshan Pius 21133153926f9b95f42a8d3175b4f0e4d2e448ea8fc1Roshan Pius /** 21143153926f9b95f42a8d3175b4f0e4d2e448ea8fc1Roshan Pius * Test the creation and removal of Ap Iface. 21153153926f9b95f42a8d3175b4f0e4d2e448ea8fc1Roshan Pius */ 21163153926f9b95f42a8d3175b4f0e4d2e448ea8fc1Roshan Pius @Test 21173153926f9b95f42a8d3175b4f0e4d2e448ea8fc1Roshan Pius public void testCreateRemoveApIface() throws RemoteException { 21183153926f9b95f42a8d3175b4f0e4d2e448ea8fc1Roshan Pius assertTrue(mWifiVendorHal.startVendorHal()); 21193153926f9b95f42a8d3175b4f0e4d2e448ea8fc1Roshan Pius String ifaceName = mWifiVendorHal.createApIface(null); 2120be7435e9929c73d041a4c1c9aeba3a3421bcd859Roshan Pius verify(mHalDeviceManager).createApIface(any(), eq(null)); 2121d77212c2b255b5e6331222fde66bdc735295fbbeRoshan Pius assertEquals(TEST_IFACE_NAME, ifaceName); 21223153926f9b95f42a8d3175b4f0e4d2e448ea8fc1Roshan Pius assertTrue(mWifiVendorHal.removeApIface(ifaceName)); 21233153926f9b95f42a8d3175b4f0e4d2e448ea8fc1Roshan Pius verify(mHalDeviceManager).removeIface(eq(mIWifiApIface)); 21243153926f9b95f42a8d3175b4f0e4d2e448ea8fc1Roshan Pius } 21253153926f9b95f42a8d3175b4f0e4d2e448ea8fc1Roshan Pius 2126cc9c910dd0d35ad75003e4777b15562ebd7ada35Roshan Pius /** 2127cc9c910dd0d35ad75003e4777b15562ebd7ada35Roshan Pius * Test the callback handling for the 1.2 HAL. 2128cc9c910dd0d35ad75003e4777b15562ebd7ada35Roshan Pius */ 2129cc9c910dd0d35ad75003e4777b15562ebd7ada35Roshan Pius @Test 2130cc9c910dd0d35ad75003e4777b15562ebd7ada35Roshan Pius public void testAlertCallbackUsing_1_2_EventCallback() throws Exception { 2131cc9c910dd0d35ad75003e4777b15562ebd7ada35Roshan Pius // Expose the 1.2 IWifiChip. 2132cc9c910dd0d35ad75003e4777b15562ebd7ada35Roshan Pius mWifiVendorHal = new WifiVendorHalSpyV1_2(mHalDeviceManager, mLooper.getLooper()); 2133cc9c910dd0d35ad75003e4777b15562ebd7ada35Roshan Pius 2134cc9c910dd0d35ad75003e4777b15562ebd7ada35Roshan Pius assertTrue(mWifiVendorHal.startVendorHalSta()); 2135cc9c910dd0d35ad75003e4777b15562ebd7ada35Roshan Pius assertNotNull(mIWifiChipEventCallbackV12); 2136cc9c910dd0d35ad75003e4777b15562ebd7ada35Roshan Pius 2137cc9c910dd0d35ad75003e4777b15562ebd7ada35Roshan Pius testAlertCallbackUsingProvidedCallback(mIWifiChipEventCallbackV12); 2138cc9c910dd0d35ad75003e4777b15562ebd7ada35Roshan Pius } 2139cc9c910dd0d35ad75003e4777b15562ebd7ada35Roshan Pius 21401c7f0d2c83318cdd1c127a083362e91765c0d941Jong Wook Kim /** 21411c7f0d2c83318cdd1c127a083362e91765c0d941Jong Wook Kim * Verifies setMacAddress() success. 21421c7f0d2c83318cdd1c127a083362e91765c0d941Jong Wook Kim */ 21431c7f0d2c83318cdd1c127a083362e91765c0d941Jong Wook Kim @Test 21441c7f0d2c83318cdd1c127a083362e91765c0d941Jong Wook Kim public void testSetMacAddressSuccess() throws Exception { 21451c7f0d2c83318cdd1c127a083362e91765c0d941Jong Wook Kim // Expose the 1.2 IWifiStaIface. 21461c7f0d2c83318cdd1c127a083362e91765c0d941Jong Wook Kim mWifiVendorHal = new WifiVendorHalSpyV1_2(mHalDeviceManager, mLooper.getLooper()); 21471c7f0d2c83318cdd1c127a083362e91765c0d941Jong Wook Kim byte[] macByteArray = TEST_MAC_ADDRESS.toByteArray(); 21481c7f0d2c83318cdd1c127a083362e91765c0d941Jong Wook Kim when(mIWifiStaIfaceV12.setMacAddress(macByteArray)).thenReturn(mWifiStatusSuccess); 21491c7f0d2c83318cdd1c127a083362e91765c0d941Jong Wook Kim 21501c7f0d2c83318cdd1c127a083362e91765c0d941Jong Wook Kim assertTrue(mWifiVendorHal.setMacAddress(TEST_IFACE_NAME, TEST_MAC_ADDRESS)); 21511c7f0d2c83318cdd1c127a083362e91765c0d941Jong Wook Kim verify(mIWifiStaIfaceV12).setMacAddress(macByteArray); 21521c7f0d2c83318cdd1c127a083362e91765c0d941Jong Wook Kim } 21531c7f0d2c83318cdd1c127a083362e91765c0d941Jong Wook Kim 21541c7f0d2c83318cdd1c127a083362e91765c0d941Jong Wook Kim /** 21551c7f0d2c83318cdd1c127a083362e91765c0d941Jong Wook Kim * Verifies setMacAddress() can handle failure status. 21561c7f0d2c83318cdd1c127a083362e91765c0d941Jong Wook Kim */ 21571c7f0d2c83318cdd1c127a083362e91765c0d941Jong Wook Kim @Test 21581c7f0d2c83318cdd1c127a083362e91765c0d941Jong Wook Kim public void testSetMacAddressFailDueToStatusFailure() throws Exception { 21591c7f0d2c83318cdd1c127a083362e91765c0d941Jong Wook Kim // Expose the 1.2 IWifiStaIface. 21601c7f0d2c83318cdd1c127a083362e91765c0d941Jong Wook Kim mWifiVendorHal = new WifiVendorHalSpyV1_2(mHalDeviceManager, mLooper.getLooper()); 21611c7f0d2c83318cdd1c127a083362e91765c0d941Jong Wook Kim byte[] macByteArray = TEST_MAC_ADDRESS.toByteArray(); 21621c7f0d2c83318cdd1c127a083362e91765c0d941Jong Wook Kim when(mIWifiStaIfaceV12.setMacAddress(macByteArray)).thenReturn(mWifiStatusFailure); 21631c7f0d2c83318cdd1c127a083362e91765c0d941Jong Wook Kim 21641c7f0d2c83318cdd1c127a083362e91765c0d941Jong Wook Kim assertFalse(mWifiVendorHal.setMacAddress(TEST_IFACE_NAME, TEST_MAC_ADDRESS)); 21651c7f0d2c83318cdd1c127a083362e91765c0d941Jong Wook Kim verify(mIWifiStaIfaceV12).setMacAddress(macByteArray); 21661c7f0d2c83318cdd1c127a083362e91765c0d941Jong Wook Kim } 21671c7f0d2c83318cdd1c127a083362e91765c0d941Jong Wook Kim 21681c7f0d2c83318cdd1c127a083362e91765c0d941Jong Wook Kim /** 21691c7f0d2c83318cdd1c127a083362e91765c0d941Jong Wook Kim * Verifies setMacAddress() can handle RemoteException. 21701c7f0d2c83318cdd1c127a083362e91765c0d941Jong Wook Kim */ 21711c7f0d2c83318cdd1c127a083362e91765c0d941Jong Wook Kim @Test 21721c7f0d2c83318cdd1c127a083362e91765c0d941Jong Wook Kim public void testSetMacAddressFailDueToRemoteException() throws Exception { 21731c7f0d2c83318cdd1c127a083362e91765c0d941Jong Wook Kim // Expose the 1.2 IWifiStaIface. 21741c7f0d2c83318cdd1c127a083362e91765c0d941Jong Wook Kim mWifiVendorHal = new WifiVendorHalSpyV1_2(mHalDeviceManager, mLooper.getLooper()); 21751c7f0d2c83318cdd1c127a083362e91765c0d941Jong Wook Kim byte[] macByteArray = TEST_MAC_ADDRESS.toByteArray(); 21761c7f0d2c83318cdd1c127a083362e91765c0d941Jong Wook Kim doThrow(new RemoteException()).when(mIWifiStaIfaceV12).setMacAddress(macByteArray); 21771c7f0d2c83318cdd1c127a083362e91765c0d941Jong Wook Kim 21781c7f0d2c83318cdd1c127a083362e91765c0d941Jong Wook Kim assertFalse(mWifiVendorHal.setMacAddress(TEST_IFACE_NAME, TEST_MAC_ADDRESS)); 21791c7f0d2c83318cdd1c127a083362e91765c0d941Jong Wook Kim verify(mIWifiStaIfaceV12).setMacAddress(macByteArray); 21801c7f0d2c83318cdd1c127a083362e91765c0d941Jong Wook Kim } 21811c7f0d2c83318cdd1c127a083362e91765c0d941Jong Wook Kim 21821c7f0d2c83318cdd1c127a083362e91765c0d941Jong Wook Kim /** 21831c7f0d2c83318cdd1c127a083362e91765c0d941Jong Wook Kim * Verifies setMacAddress() does not crash with older HALs. 21841c7f0d2c83318cdd1c127a083362e91765c0d941Jong Wook Kim */ 21851c7f0d2c83318cdd1c127a083362e91765c0d941Jong Wook Kim @Test 21861c7f0d2c83318cdd1c127a083362e91765c0d941Jong Wook Kim public void testSetMacAddressDoesNotCrashOnOlderHal() throws Exception { 21871c7f0d2c83318cdd1c127a083362e91765c0d941Jong Wook Kim byte[] macByteArray = TEST_MAC_ADDRESS.toByteArray(); 21881c7f0d2c83318cdd1c127a083362e91765c0d941Jong Wook Kim assertFalse(mWifiVendorHal.setMacAddress(TEST_IFACE_NAME, TEST_MAC_ADDRESS)); 21891c7f0d2c83318cdd1c127a083362e91765c0d941Jong Wook Kim } 21901c7f0d2c83318cdd1c127a083362e91765c0d941Jong Wook Kim 2191f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius /** 2192f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius * Verifies radio mode change callback to indicate DBS mode. 2193f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius */ 2194f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius @Test 2195f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius public void testRadioModeChangeCallbackToDbsMode() throws Exception { 2196f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius startHalInStaModeAndRegisterRadioModeChangeCallback(); 2197f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius 2198f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius RadioModeInfo radioModeInfo0 = new RadioModeInfo(); 2199f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius radioModeInfo0.bandInfo = WifiScanner.WIFI_BAND_5_GHZ; 2200f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius RadioModeInfo radioModeInfo1 = new RadioModeInfo(); 2201f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius radioModeInfo1.bandInfo = WifiScanner.WIFI_BAND_24_GHZ; 2202f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius 2203f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius IfaceInfo ifaceInfo0 = new IfaceInfo(); 2204f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius ifaceInfo0.name = TEST_IFACE_NAME; 2205f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius ifaceInfo0.channel = 34; 2206f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius IfaceInfo ifaceInfo1 = new IfaceInfo(); 2207f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius ifaceInfo1.name = TEST_IFACE_NAME_1; 2208f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius ifaceInfo1.channel = 1; 2209f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius 2210f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius radioModeInfo0.ifaceInfos.add(ifaceInfo0); 2211f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius radioModeInfo1.ifaceInfos.add(ifaceInfo1); 2212f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius 2213f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius ArrayList<RadioModeInfo> radioModeInfos = new ArrayList<>(); 2214f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius radioModeInfos.add(radioModeInfo0); 2215f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius radioModeInfos.add(radioModeInfo1); 2216f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius 2217f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius mIWifiChipEventCallbackV12.onRadioModeChange(radioModeInfos); 2218f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius verify(mVendorHalRadioModeChangeHandler).onDbs(); 2219f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius 2220f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius verifyNoMoreInteractions(mVendorHalRadioModeChangeHandler); 2221f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius } 2222f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius 2223f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius /** 2224f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius * Verifies radio mode change callback to indicate SBS mode. 2225f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius */ 2226f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius @Test 2227f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius public void testRadioModeChangeCallbackToSbsMode() throws Exception { 2228f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius startHalInStaModeAndRegisterRadioModeChangeCallback(); 2229f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius 2230f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius RadioModeInfo radioModeInfo0 = new RadioModeInfo(); 2231f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius radioModeInfo0.bandInfo = WifiScanner.WIFI_BAND_5_GHZ; 2232f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius RadioModeInfo radioModeInfo1 = new RadioModeInfo(); 2233f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius radioModeInfo1.bandInfo = WifiScanner.WIFI_BAND_5_GHZ; 2234f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius 2235f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius IfaceInfo ifaceInfo0 = new IfaceInfo(); 2236f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius ifaceInfo0.name = TEST_IFACE_NAME; 2237f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius ifaceInfo0.channel = 34; 2238f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius IfaceInfo ifaceInfo1 = new IfaceInfo(); 2239f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius ifaceInfo1.name = TEST_IFACE_NAME_1; 2240f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius ifaceInfo1.channel = 36; 2241f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius 2242f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius radioModeInfo0.ifaceInfos.add(ifaceInfo0); 2243f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius radioModeInfo1.ifaceInfos.add(ifaceInfo1); 2244f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius 2245f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius ArrayList<RadioModeInfo> radioModeInfos = new ArrayList<>(); 2246f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius radioModeInfos.add(radioModeInfo0); 2247f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius radioModeInfos.add(radioModeInfo1); 2248f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius 2249f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius mIWifiChipEventCallbackV12.onRadioModeChange(radioModeInfos); 2250f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius verify(mVendorHalRadioModeChangeHandler).onSbs(WifiScanner.WIFI_BAND_5_GHZ); 2251f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius 2252f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius verifyNoMoreInteractions(mVendorHalRadioModeChangeHandler); 2253f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius } 2254f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius 2255f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius /** 2256f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius * Verifies radio mode change callback to indicate SCC mode. 2257f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius */ 2258f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius @Test 2259f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius public void testRadioModeChangeCallbackToSccMode() throws Exception { 2260f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius startHalInStaModeAndRegisterRadioModeChangeCallback(); 2261f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius 2262f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius RadioModeInfo radioModeInfo0 = new RadioModeInfo(); 2263f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius radioModeInfo0.bandInfo = WifiScanner.WIFI_BAND_5_GHZ; 2264f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius RadioModeInfo radioModeInfo1 = new RadioModeInfo(); 2265f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius radioModeInfo1.bandInfo = WifiScanner.WIFI_BAND_5_GHZ; 2266f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius 2267f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius IfaceInfo ifaceInfo0 = new IfaceInfo(); 2268f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius ifaceInfo0.name = TEST_IFACE_NAME; 2269f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius ifaceInfo0.channel = 34; 2270f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius IfaceInfo ifaceInfo1 = new IfaceInfo(); 2271f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius ifaceInfo1.name = TEST_IFACE_NAME_1; 2272f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius ifaceInfo1.channel = 34; 2273f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius 2274f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius radioModeInfo0.ifaceInfos.add(ifaceInfo0); 2275f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius radioModeInfo0.ifaceInfos.add(ifaceInfo1); 2276f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius radioModeInfo1.ifaceInfos.add(ifaceInfo0); 2277f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius radioModeInfo1.ifaceInfos.add(ifaceInfo1); 2278f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius 2279f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius ArrayList<RadioModeInfo> radioModeInfos = new ArrayList<>(); 2280f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius radioModeInfos.add(radioModeInfo0); 2281f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius radioModeInfos.add(radioModeInfo1); 2282f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius 2283f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius mIWifiChipEventCallbackV12.onRadioModeChange(radioModeInfos); 2284f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius verify(mVendorHalRadioModeChangeHandler).onScc(WifiScanner.WIFI_BAND_5_GHZ); 2285f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius 2286f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius verifyNoMoreInteractions(mVendorHalRadioModeChangeHandler); 2287f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius } 2288f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius 2289f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius /** 2290f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius * Verifies radio mode change callback to indicate MCC mode. 2291f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius */ 2292f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius @Test 2293f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius public void testRadioModeChangeCallbackToMccMode() throws Exception { 2294f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius startHalInStaModeAndRegisterRadioModeChangeCallback(); 2295f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius 2296f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius RadioModeInfo radioModeInfo0 = new RadioModeInfo(); 2297f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius radioModeInfo0.bandInfo = WifiScanner.WIFI_BAND_5_GHZ; 2298f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius RadioModeInfo radioModeInfo1 = new RadioModeInfo(); 2299f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius radioModeInfo1.bandInfo = WifiScanner.WIFI_BAND_5_GHZ; 2300f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius 2301f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius IfaceInfo ifaceInfo0 = new IfaceInfo(); 2302f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius ifaceInfo0.name = TEST_IFACE_NAME; 2303f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius ifaceInfo0.channel = 34; 2304f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius IfaceInfo ifaceInfo1 = new IfaceInfo(); 2305f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius ifaceInfo1.name = TEST_IFACE_NAME_1; 2306f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius ifaceInfo1.channel = 36; 2307f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius 2308f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius radioModeInfo0.ifaceInfos.add(ifaceInfo0); 2309f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius radioModeInfo0.ifaceInfos.add(ifaceInfo1); 2310f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius radioModeInfo1.ifaceInfos.add(ifaceInfo0); 2311f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius radioModeInfo1.ifaceInfos.add(ifaceInfo1); 2312f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius 2313f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius ArrayList<RadioModeInfo> radioModeInfos = new ArrayList<>(); 2314f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius radioModeInfos.add(radioModeInfo0); 2315f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius radioModeInfos.add(radioModeInfo1); 2316f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius 2317f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius mIWifiChipEventCallbackV12.onRadioModeChange(radioModeInfos); 2318f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius verify(mVendorHalRadioModeChangeHandler).onMcc(WifiScanner.WIFI_BAND_5_GHZ); 2319f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius 2320f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius verifyNoMoreInteractions(mVendorHalRadioModeChangeHandler); 2321f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius } 2322f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius 2323f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius /** 2324f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius * Verifies radio mode change callback error cases. 2325f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius */ 2326f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius @Test 2327f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius public void testRadioModeChangeCallbackErrorTimeSharingWithDifferentIfacesOnBothRadios() 2328f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius throws Exception { 2329f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius startHalInStaModeAndRegisterRadioModeChangeCallback(); 2330f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius 2331f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius RadioModeInfo radioModeInfo0 = new RadioModeInfo(); 2332f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius radioModeInfo0.bandInfo = WifiScanner.WIFI_BAND_5_GHZ; 2333f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius RadioModeInfo radioModeInfo1 = new RadioModeInfo(); 2334f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius radioModeInfo1.bandInfo = WifiScanner.WIFI_BAND_5_GHZ; 2335f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius 2336f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius IfaceInfo ifaceInfo0 = new IfaceInfo(); 2337f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius ifaceInfo0.name = TEST_IFACE_NAME; 2338f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius ifaceInfo0.channel = 34; 2339f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius IfaceInfo ifaceInfo1 = new IfaceInfo(); 2340f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius ifaceInfo1.name = TEST_IFACE_NAME_1; 2341f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius ifaceInfo1.channel = 34; 2342f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius 2343f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius radioModeInfo0.ifaceInfos.add(ifaceInfo0); 2344f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius radioModeInfo0.ifaceInfos.add(ifaceInfo0); 2345f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius radioModeInfo1.ifaceInfos.add(ifaceInfo1); 2346f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius radioModeInfo1.ifaceInfos.add(ifaceInfo1); 2347f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius 2348f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius ArrayList<RadioModeInfo> radioModeInfos = new ArrayList<>(); 2349f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius radioModeInfos.add(radioModeInfo0); 2350f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius radioModeInfos.add(radioModeInfo1); 2351f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius 2352f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius mIWifiChipEventCallbackV12.onRadioModeChange(radioModeInfos); 2353f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius // Ignored.... 2354f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius 2355f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius verifyNoMoreInteractions(mVendorHalRadioModeChangeHandler); 2356f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius } 2357f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius 2358f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius /** 2359f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius * Verifies radio mode change callback error cases. 2360f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius */ 2361f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius @Test 2362f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius public void testRadioModeChangeCallbackErrorTimeSharingWithDifferentNumberOfIfacesOnBothRadios() 2363f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius throws Exception { 2364f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius startHalInStaModeAndRegisterRadioModeChangeCallback(); 2365f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius 2366f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius RadioModeInfo radioModeInfo0 = new RadioModeInfo(); 2367f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius radioModeInfo0.bandInfo = WifiScanner.WIFI_BAND_5_GHZ; 2368f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius RadioModeInfo radioModeInfo1 = new RadioModeInfo(); 2369f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius radioModeInfo1.bandInfo = WifiScanner.WIFI_BAND_5_GHZ; 2370f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius 2371f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius IfaceInfo ifaceInfo0 = new IfaceInfo(); 2372f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius ifaceInfo0.name = TEST_IFACE_NAME; 2373f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius ifaceInfo0.channel = 34; 2374f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius IfaceInfo ifaceInfo1 = new IfaceInfo(); 2375f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius ifaceInfo1.name = TEST_IFACE_NAME_1; 2376f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius ifaceInfo1.channel = 34; 2377f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius 2378f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius radioModeInfo0.ifaceInfos.add(ifaceInfo0); 2379f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius radioModeInfo1.ifaceInfos.add(ifaceInfo1); 2380f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius radioModeInfo1.ifaceInfos.add(ifaceInfo1); 2381f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius 2382f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius ArrayList<RadioModeInfo> radioModeInfos = new ArrayList<>(); 2383f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius radioModeInfos.add(radioModeInfo0); 2384f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius radioModeInfos.add(radioModeInfo1); 2385f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius 2386f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius mIWifiChipEventCallbackV12.onRadioModeChange(radioModeInfos); 2387f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius // Ignored.... 2388f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius 2389f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius verifyNoMoreInteractions(mVendorHalRadioModeChangeHandler); 2390f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius } 2391f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius 2392f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius /** 2393f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius * Verifies radio mode change callback error cases. 2394f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius */ 2395f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius @Test 2396f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius public void testRadioModeChangeCallbackErrorSimultaneousWithSameIfaceOnBothRadios() 2397f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius throws Exception { 2398f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius startHalInStaModeAndRegisterRadioModeChangeCallback(); 2399f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius 2400f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius RadioModeInfo radioModeInfo0 = new RadioModeInfo(); 2401f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius radioModeInfo0.bandInfo = WifiScanner.WIFI_BAND_24_GHZ; 2402f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius RadioModeInfo radioModeInfo1 = new RadioModeInfo(); 2403f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius radioModeInfo1.bandInfo = WifiScanner.WIFI_BAND_5_GHZ; 2404f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius 2405f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius IfaceInfo ifaceInfo0 = new IfaceInfo(); 2406f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius ifaceInfo0.name = TEST_IFACE_NAME; 2407f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius ifaceInfo0.channel = 34; 2408f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius 2409f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius radioModeInfo0.ifaceInfos.add(ifaceInfo0); 2410f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius radioModeInfo1.ifaceInfos.add(ifaceInfo0); 2411f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius 2412f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius ArrayList<RadioModeInfo> radioModeInfos = new ArrayList<>(); 2413f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius radioModeInfos.add(radioModeInfo0); 2414f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius radioModeInfos.add(radioModeInfo1); 2415f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius 2416f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius mIWifiChipEventCallbackV12.onRadioModeChange(radioModeInfos); 2417f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius // Ignored.... 2418f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius 2419f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius verifyNoMoreInteractions(mVendorHalRadioModeChangeHandler); 2420f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius } 2421f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius 2422f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius /** 2423f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius * Verifies radio mode change callback error cases. 2424f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius */ 2425f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius @Test 2426f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius public void testRadioModeChangeCallbackErrorTimeSharingWithDifferentBandsOnBothRadios() 2427f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius throws Exception { 2428f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius startHalInStaModeAndRegisterRadioModeChangeCallback(); 2429f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius 2430f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius RadioModeInfo radioModeInfo0 = new RadioModeInfo(); 2431f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius radioModeInfo0.bandInfo = WifiScanner.WIFI_BAND_24_GHZ; 2432f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius RadioModeInfo radioModeInfo1 = new RadioModeInfo(); 2433f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius radioModeInfo1.bandInfo = WifiScanner.WIFI_BAND_5_GHZ; 2434f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius 2435f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius IfaceInfo ifaceInfo0 = new IfaceInfo(); 2436f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius ifaceInfo0.name = TEST_IFACE_NAME; 2437f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius ifaceInfo0.channel = 34; 2438f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius IfaceInfo ifaceInfo1 = new IfaceInfo(); 2439f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius ifaceInfo1.name = TEST_IFACE_NAME_1; 2440f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius ifaceInfo1.channel = 36; 2441f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius 2442f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius radioModeInfo0.ifaceInfos.add(ifaceInfo0); 2443f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius radioModeInfo0.ifaceInfos.add(ifaceInfo1); 2444f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius radioModeInfo1.ifaceInfos.add(ifaceInfo0); 2445f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius radioModeInfo1.ifaceInfos.add(ifaceInfo1); 2446f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius 2447f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius ArrayList<RadioModeInfo> radioModeInfos = new ArrayList<>(); 2448f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius radioModeInfos.add(radioModeInfo0); 2449f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius radioModeInfos.add(radioModeInfo1); 2450f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius 2451f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius mIWifiChipEventCallbackV12.onRadioModeChange(radioModeInfos); 2452f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius // Ignored.... 2453f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius 2454f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius verifyNoMoreInteractions(mVendorHalRadioModeChangeHandler); 2455f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius } 2456f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius 2457f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius private void startHalInStaModeAndRegisterRadioModeChangeCallback() { 2458f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius // Expose the 1.2 IWifiChip. 2459f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius mWifiVendorHal = new WifiVendorHalSpyV1_2(mHalDeviceManager, mLooper.getLooper()); 2460f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius mWifiVendorHal.registerRadioModeChangeHandler(mVendorHalRadioModeChangeHandler); 2461f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius assertTrue(mWifiVendorHal.startVendorHalSta()); 2462f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius assertNotNull(mIWifiChipEventCallbackV12); 2463f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius } 2464f5749a73fe63a3e01db62a9752be365fb40ec633Roshan Pius 2465cc9c910dd0d35ad75003e4777b15562ebd7ada35Roshan Pius private void testAlertCallbackUsingProvidedCallback(IWifiChipEventCallback chipCallback) 2466cc9c910dd0d35ad75003e4777b15562ebd7ada35Roshan Pius throws Exception { 2467cc9c910dd0d35ad75003e4777b15562ebd7ada35Roshan Pius when(mIWifiChip.enableDebugErrorAlerts(anyBoolean())).thenReturn(mWifiStatusSuccess); 2468cc9c910dd0d35ad75003e4777b15562ebd7ada35Roshan Pius when(mIWifiChip.stopLoggingToDebugRingBuffer()).thenReturn(mWifiStatusSuccess); 2469cc9c910dd0d35ad75003e4777b15562ebd7ada35Roshan Pius 2470cc9c910dd0d35ad75003e4777b15562ebd7ada35Roshan Pius int errorCode = 5; 2471cc9c910dd0d35ad75003e4777b15562ebd7ada35Roshan Pius byte[] errorData = new byte[45]; 2472cc9c910dd0d35ad75003e4777b15562ebd7ada35Roshan Pius new Random().nextBytes(errorData); 2473cc9c910dd0d35ad75003e4777b15562ebd7ada35Roshan Pius 2474cc9c910dd0d35ad75003e4777b15562ebd7ada35Roshan Pius // Randomly raise the HIDL callback before we register for the log callback. 2475cc9c910dd0d35ad75003e4777b15562ebd7ada35Roshan Pius // This should be safely ignored. (Not trigger NPE.) 2476cc9c910dd0d35ad75003e4777b15562ebd7ada35Roshan Pius chipCallback.onDebugErrorAlert( 2477cc9c910dd0d35ad75003e4777b15562ebd7ada35Roshan Pius errorCode, NativeUtil.byteArrayToArrayList(errorData)); 2478cc9c910dd0d35ad75003e4777b15562ebd7ada35Roshan Pius mLooper.dispatchAll(); 2479cc9c910dd0d35ad75003e4777b15562ebd7ada35Roshan Pius 2480cc9c910dd0d35ad75003e4777b15562ebd7ada35Roshan Pius WifiNative.WifiLoggerEventHandler eventHandler = 2481cc9c910dd0d35ad75003e4777b15562ebd7ada35Roshan Pius mock(WifiNative.WifiLoggerEventHandler.class); 2482cc9c910dd0d35ad75003e4777b15562ebd7ada35Roshan Pius assertTrue(mWifiVendorHal.setLoggingEventHandler(eventHandler)); 2483cc9c910dd0d35ad75003e4777b15562ebd7ada35Roshan Pius verify(mIWifiChip).enableDebugErrorAlerts(eq(true)); 2484cc9c910dd0d35ad75003e4777b15562ebd7ada35Roshan Pius 2485cc9c910dd0d35ad75003e4777b15562ebd7ada35Roshan Pius // Now raise the HIDL callback, this should be properly handled. 2486cc9c910dd0d35ad75003e4777b15562ebd7ada35Roshan Pius chipCallback.onDebugErrorAlert( 2487cc9c910dd0d35ad75003e4777b15562ebd7ada35Roshan Pius errorCode, NativeUtil.byteArrayToArrayList(errorData)); 2488cc9c910dd0d35ad75003e4777b15562ebd7ada35Roshan Pius mLooper.dispatchAll(); 2489cc9c910dd0d35ad75003e4777b15562ebd7ada35Roshan Pius verify(eventHandler).onWifiAlert(eq(errorCode), eq(errorData)); 2490cc9c910dd0d35ad75003e4777b15562ebd7ada35Roshan Pius 2491cc9c910dd0d35ad75003e4777b15562ebd7ada35Roshan Pius // Now stop the logging and invoke the callback. This should be ignored. 2492cc9c910dd0d35ad75003e4777b15562ebd7ada35Roshan Pius reset(eventHandler); 2493cc9c910dd0d35ad75003e4777b15562ebd7ada35Roshan Pius assertTrue(mWifiVendorHal.resetLogHandler()); 2494cc9c910dd0d35ad75003e4777b15562ebd7ada35Roshan Pius chipCallback.onDebugErrorAlert( 2495cc9c910dd0d35ad75003e4777b15562ebd7ada35Roshan Pius errorCode, NativeUtil.byteArrayToArrayList(errorData)); 2496cc9c910dd0d35ad75003e4777b15562ebd7ada35Roshan Pius mLooper.dispatchAll(); 2497cc9c910dd0d35ad75003e4777b15562ebd7ada35Roshan Pius verify(eventHandler, never()).onWifiAlert(anyInt(), anyObject()); 2498cc9c910dd0d35ad75003e4777b15562ebd7ada35Roshan Pius } 2499cc9c910dd0d35ad75003e4777b15562ebd7ada35Roshan Pius 2500d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius private void startBgScan(WifiNative.ScanEventHandler eventHandler) throws Exception { 2501d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius when(mIWifiStaIface.startBackgroundScan( 2502d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius anyInt(), any(StaBackgroundScanParameters.class))).thenReturn(mWifiStatusSuccess); 2503136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass WifiNative.ScanSettings settings = new WifiNative.ScanSettings(); 2504136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass settings.num_buckets = 1; 2505136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass WifiNative.BucketSettings bucketSettings = new WifiNative.BucketSettings(); 2506136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass bucketSettings.bucket = 0; 2507136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass bucketSettings.period_ms = 16000; 2508136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass bucketSettings.report_events = WifiScanner.REPORT_EVENT_AFTER_EACH_SCAN; 2509136c7ba4dc189068fb63457a60f642ca499ed63cMichael Plass settings.buckets = new WifiNative.BucketSettings[] {bucketSettings}; 2510d77212c2b255b5e6331222fde66bdc735295fbbeRoshan Pius assertTrue(mWifiVendorHal.startBgScan(TEST_IFACE_NAME, settings, eventHandler)); 2511d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius } 2512d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius 2513d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius // Create a pair of HIDL scan result and its corresponding framework scan result for 2514d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius // comparison. 2515d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius private Pair<StaScanResult, ScanResult> createHidlAndFrameworkBgScanResult() { 2516d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius StaScanResult staScanResult = new StaScanResult(); 2517d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius Random random = new Random(); 2518d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius byte[] ssid = new byte[8]; 2519d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius random.nextBytes(ssid); 2520d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius staScanResult.ssid.addAll(NativeUtil.byteArrayToArrayList(ssid)); 2521d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius random.nextBytes(staScanResult.bssid); 2522d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius staScanResult.frequency = 2432; 2523d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius staScanResult.rssi = -45; 2524d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius staScanResult.timeStampInUs = 5; 2525d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius WifiInformationElement ie1 = new WifiInformationElement(); 2526d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius byte[] ie1_data = new byte[56]; 2527d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius random.nextBytes(ie1_data); 2528d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius ie1.id = 1; 2529d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius ie1.data.addAll(NativeUtil.byteArrayToArrayList(ie1_data)); 2530d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius staScanResult.informationElements.add(ie1); 2531d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius 2532d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius // Now create the corresponding Scan result structure. 2533d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius ScanResult scanResult = new ScanResult(); 2534d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius scanResult.SSID = NativeUtil.encodeSsid(staScanResult.ssid); 2535d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius scanResult.BSSID = NativeUtil.macAddressFromByteArray(staScanResult.bssid); 2536d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius scanResult.wifiSsid = WifiSsid.createFromByteArray(ssid); 2537d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius scanResult.frequency = staScanResult.frequency; 2538d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius scanResult.level = staScanResult.rssi; 2539d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius scanResult.timestamp = staScanResult.timeStampInUs; 2540d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius 2541d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius return Pair.create(staScanResult, scanResult); 2542d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius } 2543d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius 2544d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius // Create a pair of HIDL scan datas and its corresponding framework scan datas for 2545d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius // comparison. 2546d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius private Pair<ArrayList<StaScanData>, ArrayList<WifiScanner.ScanData>> 2547d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius createHidlAndFrameworkBgScanDatas() { 2548d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius ArrayList<StaScanData> staScanDatas = new ArrayList<>(); 2549d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius StaScanData staScanData = new StaScanData(); 2550d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius 2551d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius Pair<StaScanResult, ScanResult> result = createHidlAndFrameworkBgScanResult(); 2552d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius staScanData.results.add(result.first); 2553d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius staScanData.bucketsScanned = 5; 2554d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius staScanData.flags = StaScanDataFlagMask.INTERRUPTED; 2555d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius staScanDatas.add(staScanData); 2556d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius 2557d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius ArrayList<WifiScanner.ScanData> scanDatas = new ArrayList<>(); 2558d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius ScanResult[] scanResults = new ScanResult[1]; 2559d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius scanResults[0] = result.second; 2560d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius WifiScanner.ScanData scanData = 2561d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius new WifiScanner.ScanData(mWifiVendorHal.mScan.cmdId, 1, 2562d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius staScanData.bucketsScanned, false, scanResults); 2563d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius scanDatas.add(scanData); 2564d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius return Pair.create(staScanDatas, scanDatas); 2565d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius } 2566d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius 2567d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius private void assertScanResultEqual(ScanResult expected, ScanResult actual) { 2568d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius assertEquals(expected.SSID, actual.SSID); 2569d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius assertEquals(expected.wifiSsid.getHexString(), actual.wifiSsid.getHexString()); 2570d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius assertEquals(expected.BSSID, actual.BSSID); 2571d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius assertEquals(expected.frequency, actual.frequency); 2572d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius assertEquals(expected.level, actual.level); 2573d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius assertEquals(expected.timestamp, actual.timestamp); 2574d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius } 2575d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius 2576d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius private void assertScanResultsEqual(ScanResult[] expected, ScanResult[] actual) { 2577d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius assertEquals(expected.length, actual.length); 2578d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius for (int i = 0; i < expected.length; i++) { 2579d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius assertScanResultEqual(expected[i], actual[i]); 2580d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius } 2581d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius } 2582d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius 2583d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius private void assertScanDataEqual(WifiScanner.ScanData expected, WifiScanner.ScanData actual) { 2584d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius assertEquals(expected.getId(), actual.getId()); 2585d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius assertEquals(expected.getFlags(), actual.getFlags()); 2586d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius assertEquals(expected.getBucketsScanned(), actual.getBucketsScanned()); 2587d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius assertScanResultsEqual(expected.getResults(), actual.getResults()); 2588d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius } 2589d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius 2590d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius private void assertScanDatasEqual( 2591d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius List<WifiScanner.ScanData> expected, List<WifiScanner.ScanData> actual) { 2592d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius assertEquals(expected.size(), actual.size()); 2593d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius for (int i = 0; i < expected.size(); i++) { 2594d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius assertScanDataEqual(expected.get(i), actual.get(i)); 2595d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius } 2596d4c5eca00c9cae55561210479ed61a977923e0daRoshan Pius } 2597b4659e143a1a0b27e4f4ca82e8428863b8c41324Michael Plass} 2598