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