1/* 2 * Copyright (C) 2010 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 17package com.android.internal.telephony.dataconnection; 18 19import android.net.NetworkCapabilities; 20import android.net.NetworkConfig; 21import android.net.NetworkRequest; 22import android.test.suitebuilder.annotation.SmallTest; 23import android.util.LocalLog; 24 25import com.android.internal.R; 26import com.android.internal.telephony.DctConstants; 27import com.android.internal.telephony.PhoneConstants; 28import com.android.internal.telephony.TelephonyTest; 29 30import org.junit.After; 31import org.junit.Before; 32import org.junit.Test; 33import org.mockito.Mock; 34 35import static junit.framework.Assert.assertEquals; 36import static junit.framework.Assert.assertFalse; 37import static junit.framework.Assert.assertNull; 38import static junit.framework.Assert.assertTrue; 39import static org.mockito.Matchers.eq; 40import static org.mockito.Mockito.mock; 41import static org.mockito.Mockito.never; 42import static org.mockito.Mockito.times; 43import static org.mockito.Mockito.verify; 44 45public class ApnContextTest extends TelephonyTest { 46 47 @Mock 48 NetworkConfig mNetworkConfig; 49 @Mock 50 ApnSetting mApnSetting; 51 52 private ApnContext mApnContext; 53 54 @Before 55 public void setUp() throws Exception { 56 super.setUp(getClass().getSimpleName()); 57 mNetworkConfig.dependencyMet = true; 58 mApnContext = new ApnContext(mPhone, PhoneConstants.APN_TYPE_DEFAULT, TAG, mNetworkConfig, 59 mDcTracker); 60 } 61 62 @After 63 public void tearDown() throws Exception { 64 mApnContext = null; 65 super.tearDown(); 66 } 67 68 @Test 69 @SmallTest 70 public void testSetGetApnSetting() throws Exception { 71 mApnContext.setApnSetting(mApnSetting); 72 assertEquals(mApnSetting, mApnContext.getApnSetting()); 73 } 74 75 @Test 76 @SmallTest 77 public void testGetApnType() throws Exception { 78 assertEquals(PhoneConstants.APN_TYPE_DEFAULT, mApnContext.getApnType()); 79 } 80 81 @Test 82 @SmallTest 83 public void testConnectionGeneration() throws Exception { 84 for (int i = 0; i < 100; i++) { 85 mApnContext.incAndGetConnectionGeneration(); 86 assertEquals(i + 1, mApnContext.getConnectionGeneration()); 87 } 88 } 89 90 @Test 91 @SmallTest 92 public void testDataCallAsyncChannel() throws Exception { 93 94 DcAsyncChannel dcAc = mock(DcAsyncChannel.class); 95 96 mApnContext.setDataConnectionAc(dcAc); 97 assertEquals(dcAc, mApnContext.getDcAc()); 98 mApnContext.releaseDataConnection(""); 99 assertNull(mApnContext.getDcAc()); 100 assertEquals(DctConstants.State.IDLE, mApnContext.getState()); 101 } 102 103 @Test 104 @SmallTest 105 public void testDependencyMet() throws Exception { 106 assertTrue(mApnContext.getDependencyMet()); 107 mApnContext.setDependencyMet(false); 108 assertFalse(mApnContext.getDependencyMet()); 109 } 110 111 @Test 112 @SmallTest 113 public void testReason() throws Exception { 114 mApnContext.setReason("dataEnabled"); 115 assertEquals("dataEnabled", mApnContext.getReason()); 116 mApnContext.setReason("simLoaded"); 117 assertEquals("simLoaded", mApnContext.getReason()); 118 } 119 120 @Test 121 @SmallTest 122 public void testState() throws Exception { 123 mApnContext.setState(DctConstants.State.DISCONNECTING); 124 assertEquals(DctConstants.State.DISCONNECTING, mApnContext.getState()); 125 mApnContext.setEnabled(true); 126 mApnContext.setDependencyMet(true); 127 assertFalse(mApnContext.isConnectable()); 128 129 mApnContext.setState(DctConstants.State.SCANNING); 130 assertTrue(mApnContext.isConnectable()); 131 assertTrue(mApnContext.isConnectedOrConnecting()); 132 133 mApnContext.setState(DctConstants.State.FAILED); 134 assertTrue(mApnContext.isDisconnected()); 135 mApnContext.setState(DctConstants.State.IDLE); 136 assertTrue(mApnContext.isDisconnected()); 137 } 138 139 @Test 140 @SmallTest 141 public void testNetworkRequest() throws Exception { 142 LocalLog log = new LocalLog(3); 143 NetworkRequest nr = new NetworkRequest.Builder().build(); 144 mApnContext.requestNetwork(nr, log); 145 146 verify(mDcTracker, times(1)).setEnabled(eq(DctConstants.APN_DEFAULT_ID), eq(true)); 147 mApnContext.requestNetwork(nr, log); 148 verify(mDcTracker, times(1)).setEnabled(eq(DctConstants.APN_DEFAULT_ID), eq(true)); 149 150 mApnContext.releaseNetwork(nr, log); 151 verify(mDcTracker, times(1)).setEnabled(eq(DctConstants.APN_DEFAULT_ID), eq(false)); 152 mApnContext.releaseNetwork(nr, log); 153 verify(mDcTracker, times(1)).setEnabled(eq(DctConstants.APN_DEFAULT_ID), eq(false)); 154 } 155 156 @Test 157 @SmallTest 158 public void testConcurrentVoiceAndDataAllowed() throws Exception { 159 mApnContext.setConcurrentVoiceAndDataAllowed(true); 160 assertTrue(mApnContext.isConcurrentVoiceAndDataAllowed()); 161 mApnContext.setConcurrentVoiceAndDataAllowed(false); 162 assertFalse(mApnContext.isConcurrentVoiceAndDataAllowed()); 163 } 164 165 @Test 166 @SmallTest 167 public void testEnableDisable() throws Exception { 168 mApnContext.setEnabled(true); 169 assertTrue(mApnContext.isEnabled()); 170 mApnContext.setEnabled(false); 171 assertFalse(mApnContext.isEnabled()); 172 } 173 174 @Test 175 @SmallTest 176 public void testProvisionApn() throws Exception { 177 mContextFixture.putResource(R.string.mobile_provisioning_apn, "fake_apn"); 178 179 ApnSetting myApn = new ApnSetting( 180 2163, // id 181 "44010", // numeric 182 "sp-mode", // name 183 "fake_apn", // apn 184 "", // proxy 185 "", // port 186 "", // mmsc 187 "", // mmsproxy 188 "", // mmsport 189 "", // user 190 "", // password 191 -1, // authtype 192 new String[]{"default", "supl"}, // types 193 "IP", // protocol 194 "IP", // roaming_protocol 195 true, // carrier_enabled 196 0, // bearer 197 0, // bearer_bitmask 198 0, // profile_id 199 false, // modem_cognitive 200 0, // max_conns 201 0, // wait_time 202 0, // max_conns_time 203 0, // mtu 204 "", // mvno_type 205 ""); // mnvo_match_data 206 207 mApnContext.setApnSetting(myApn); 208 assertTrue(mApnContext.isProvisioningApn()); 209 mApnContext.setApnSetting(mApnSetting); 210 assertFalse(mApnContext.isProvisioningApn()); 211 } 212 213 @Test 214 @SmallTest 215 public void testIsReady() throws Exception { 216 mApnContext.setEnabled(true); 217 mApnContext.setDependencyMet(true); 218 assertTrue(mApnContext.isReady()); 219 220 mApnContext.setEnabled(false); 221 assertFalse(mApnContext.isReady()); 222 223 mApnContext.setDependencyMet(false); 224 assertFalse(mApnContext.isReady()); 225 226 mApnContext.setEnabled(true); 227 assertFalse(mApnContext.isReady()); 228 } 229 230 @Test 231 @SmallTest 232 public void testErrorCodeRetry() throws Exception { 233 mContextFixture.putStringArrayResource( 234 com.android.internal.R.array.config_cell_retries_per_error_code, 235 new String[]{"36,2"}); 236 mApnContext.resetErrorCodeRetries(); 237 238 assertFalse(mApnContext.restartOnError(36)); 239 assertTrue(mApnContext.restartOnError(36)); 240 assertFalse(mApnContext.restartOnError(37)); 241 } 242} 243