1 /* 2 * Copyright (C) 2021 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.settings.wifi; 18 19 import static com.google.common.truth.Truth.assertThat; 20 21 import static org.mockito.ArgumentMatchers.any; 22 import static org.mockito.ArgumentMatchers.anyLong; 23 import static org.mockito.Mockito.doReturn; 24 import static org.mockito.Mockito.mock; 25 import static org.mockito.Mockito.never; 26 import static org.mockito.Mockito.spy; 27 import static org.mockito.Mockito.verify; 28 import static org.mockito.Mockito.when; 29 30 import android.content.Context; 31 import android.net.wifi.WifiManager; 32 import android.os.HandlerThread; 33 import android.os.PersistableBundle; 34 import android.telephony.CarrierConfigManager; 35 36 import androidx.lifecycle.Lifecycle; 37 import androidx.test.core.app.ApplicationProvider; 38 import androidx.test.ext.junit.runners.AndroidJUnit4; 39 40 import com.android.settings.testutils.FakeFeatureFactory; 41 import com.android.wifitrackerlib.MergedCarrierEntry; 42 import com.android.wifitrackerlib.WifiEntry; 43 import com.android.wifitrackerlib.WifiPickerTracker; 44 45 import org.junit.Before; 46 import org.junit.Rule; 47 import org.junit.Test; 48 import org.junit.runner.RunWith; 49 import org.mockito.Mock; 50 import org.mockito.junit.MockitoJUnit; 51 import org.mockito.junit.MockitoRule; 52 53 @RunWith(AndroidJUnit4.class) 54 public class WifiPickerTrackerHelperTest { 55 56 private static final int SUB_ID = 2; 57 58 @Rule 59 public final MockitoRule mMockitoRule = MockitoJUnit.rule(); 60 @Mock 61 public WifiManager mWifiManager; 62 @Mock 63 public CarrierConfigManager mCarrierConfigManager; 64 @Mock 65 public WifiPickerTracker mWifiPickerTracker; 66 @Mock 67 public MergedCarrierEntry mMergedCarrierEntry; 68 @Mock 69 public WifiEntry.ConnectCallback mConnectCallback; 70 71 private WifiPickerTrackerHelper mWifiPickerTrackerHelper; 72 73 private FakeFeatureFactory mFeatureFactory; 74 private PersistableBundle mCarrierConfig; 75 76 @Before setUp()77 public void setUp() { 78 final Context context = spy(ApplicationProvider.getApplicationContext()); 79 when(context.getSystemService(WifiManager.class)).thenReturn(mWifiManager); 80 when(context.getSystemService(CarrierConfigManager.class)) 81 .thenReturn(mCarrierConfigManager); 82 mCarrierConfig = new PersistableBundle(); 83 doReturn(mCarrierConfig).when(mCarrierConfigManager).getConfigForSubId(SUB_ID); 84 85 mFeatureFactory = FakeFeatureFactory.setupForTest(); 86 when(mFeatureFactory.wifiTrackerLibProvider 87 .createWifiPickerTracker( 88 any(), any(), any(), any(), any(), anyLong(), anyLong(), any())) 89 .thenReturn(mWifiPickerTracker); 90 mWifiPickerTrackerHelper = new WifiPickerTrackerHelper(mock(Lifecycle.class), 91 context, null); 92 } 93 94 @Test getWifiPickerTracker_returnNonNull()95 public void getWifiPickerTracker_returnNonNull() { 96 assertThat(mWifiPickerTrackerHelper.getWifiPickerTracker()).isNotNull(); 97 } 98 99 @Test onDestroy_workerThreadQuit()100 public void onDestroy_workerThreadQuit() { 101 final HandlerThread workerThread = mock(HandlerThread.class); 102 mWifiPickerTrackerHelper.setWorkerThread(workerThread); 103 104 mWifiPickerTrackerHelper.onDestroy(); 105 106 verify(workerThread).quit(); 107 } 108 109 @Test isCarrierNetworkProvisionEnabled_getNullConfig_returnFalse()110 public void isCarrierNetworkProvisionEnabled_getNullConfig_returnFalse() { 111 doReturn(null).when(mCarrierConfigManager).getConfigForSubId(SUB_ID); 112 113 assertThat(mWifiPickerTrackerHelper.isCarrierNetworkProvisionEnabled(SUB_ID)).isFalse(); 114 } 115 116 @Test isCarrierNetworkProvisionEnabled_returnCorrect()117 public void isCarrierNetworkProvisionEnabled_returnCorrect() { 118 mCarrierConfig.putBoolean( 119 CarrierConfigManager.KEY_CARRIER_PROVISIONS_WIFI_MERGED_NETWORKS_BOOL, true); 120 121 assertThat(mWifiPickerTrackerHelper.isCarrierNetworkProvisionEnabled(SUB_ID)).isTrue(); 122 123 mCarrierConfig.putBoolean( 124 CarrierConfigManager.KEY_CARRIER_PROVISIONS_WIFI_MERGED_NETWORKS_BOOL, false); 125 126 assertThat(mWifiPickerTrackerHelper.isCarrierNetworkProvisionEnabled(SUB_ID)).isFalse(); 127 } 128 129 @Test isCarrierNetworkEnabled_returnCorrect()130 public void isCarrierNetworkEnabled_returnCorrect() { 131 doReturn(true).when(mWifiManager).isCarrierNetworkOffloadEnabled(SUB_ID, true /* merged */); 132 133 assertThat(mWifiPickerTrackerHelper.isCarrierNetworkEnabled(SUB_ID)).isTrue(); 134 135 doReturn(false).when(mWifiManager) 136 .isCarrierNetworkOffloadEnabled(SUB_ID, true /* merged */); 137 138 assertThat(mWifiPickerTrackerHelper.isCarrierNetworkEnabled(SUB_ID)).isFalse(); 139 } 140 141 @Test setCarrierNetworkEnabled_shouldSetCorrect()142 public void setCarrierNetworkEnabled_shouldSetCorrect() { 143 mWifiPickerTrackerHelper.setWifiPickerTracker(mWifiPickerTracker); 144 when(mWifiPickerTracker.getMergedCarrierEntry()).thenReturn(mMergedCarrierEntry); 145 146 mWifiPickerTrackerHelper.setCarrierNetworkEnabled(true); 147 148 verify(mMergedCarrierEntry).setEnabled(true); 149 150 mWifiPickerTrackerHelper.setCarrierNetworkEnabled(false); 151 152 verify(mMergedCarrierEntry).setEnabled(false); 153 } 154 155 @Test setCarrierNetworkEnabled_mergedCarrierEntryIsNull_shouldNotSet()156 public void setCarrierNetworkEnabled_mergedCarrierEntryIsNull_shouldNotSet() { 157 mWifiPickerTrackerHelper.setWifiPickerTracker(mWifiPickerTracker); 158 when(mWifiPickerTracker.getMergedCarrierEntry()).thenReturn(null); 159 160 mWifiPickerTrackerHelper.setCarrierNetworkEnabled(true); 161 162 verify(mMergedCarrierEntry, never()).setEnabled(true); 163 164 mWifiPickerTrackerHelper.setCarrierNetworkEnabled(false); 165 166 verify(mMergedCarrierEntry, never()).setEnabled(true); 167 } 168 169 @Test connectCarrierNetwork_returnTrueAndConnect()170 public void connectCarrierNetwork_returnTrueAndConnect() { 171 mWifiPickerTrackerHelper.setWifiPickerTracker(mWifiPickerTracker); 172 when(mWifiPickerTracker.getMergedCarrierEntry()).thenReturn(mMergedCarrierEntry); 173 when(mMergedCarrierEntry.canConnect()).thenReturn(true); 174 175 assertThat(mWifiPickerTrackerHelper.connectCarrierNetwork(mConnectCallback)).isTrue(); 176 verify(mMergedCarrierEntry).connect(mConnectCallback); 177 } 178 179 @Test connectCarrierNetwork_mergedCarrierEntryIsNull_returnFalse()180 public void connectCarrierNetwork_mergedCarrierEntryIsNull_returnFalse() { 181 mWifiPickerTrackerHelper.setWifiPickerTracker(mWifiPickerTracker); 182 when(mWifiPickerTracker.getMergedCarrierEntry()).thenReturn(null); 183 184 assertThat(mWifiPickerTrackerHelper.connectCarrierNetwork(mConnectCallback)).isFalse(); 185 } 186 187 @Test connectCarrierNetwork_canConnectIsFalse_returnFalseAndNeverConnect()188 public void connectCarrierNetwork_canConnectIsFalse_returnFalseAndNeverConnect() { 189 mWifiPickerTrackerHelper.setWifiPickerTracker(mWifiPickerTracker); 190 when(mWifiPickerTracker.getMergedCarrierEntry()).thenReturn(mMergedCarrierEntry); 191 when(mMergedCarrierEntry.canConnect()).thenReturn(false); 192 193 assertThat(mWifiPickerTrackerHelper.connectCarrierNetwork(mConnectCallback)).isFalse(); 194 verify(mMergedCarrierEntry, never()).connect(mConnectCallback); 195 } 196 } 197