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.os.PersistableBundle; 20import android.telephony.CarrierConfigManager; 21import android.test.suitebuilder.annotation.SmallTest; 22 23import com.android.internal.telephony.TelephonyTest; 24 25import org.junit.After; 26import org.junit.Before; 27import org.junit.Test; 28 29import java.util.ArrayList; 30 31import static junit.framework.Assert.assertEquals; 32import static junit.framework.Assert.assertFalse; 33import static junit.framework.Assert.assertTrue; 34import static org.mockito.Mockito.doReturn; 35 36public class DcFailCauseTest extends TelephonyTest { 37 38 private class DcFailCauseData { 39 public final int mCause; 40 public final boolean mPermanentFailure; 41 public final boolean mEventLoggable; 42 DcFailCauseData(int cause, boolean permanentFailure, boolean eventLoggable) { 43 mCause = cause; 44 mPermanentFailure = permanentFailure; 45 mEventLoggable = eventLoggable; 46 } 47 } 48 49 private ArrayList<DcFailCauseData> mFailCauseDataList; 50 51 @Before 52 public void setUp() throws Exception { 53 super.setUp(getClass().getSimpleName()); 54 55 mFailCauseDataList = new ArrayList<>(); 56 57 mFailCauseDataList.add(new DcFailCauseData(0, false, false)); 58 mFailCauseDataList.add(new DcFailCauseData(0x08, true, true)); 59 mFailCauseDataList.add(new DcFailCauseData(0x0E, false, false)); 60 mFailCauseDataList.add(new DcFailCauseData(0x19, false, false)); 61 mFailCauseDataList.add(new DcFailCauseData(0x1A, false, true)); 62 mFailCauseDataList.add(new DcFailCauseData(0x1B, true, false)); 63 mFailCauseDataList.add(new DcFailCauseData(0x1C, true, true)); 64 mFailCauseDataList.add(new DcFailCauseData(0x1D, true, true)); 65 mFailCauseDataList.add(new DcFailCauseData(0x1E, true, true)); 66 mFailCauseDataList.add(new DcFailCauseData(0x1F, false, true)); 67 mFailCauseDataList.add(new DcFailCauseData(0x20, true, true)); 68 mFailCauseDataList.add(new DcFailCauseData(0x21, true, true)); 69 mFailCauseDataList.add(new DcFailCauseData(0x22, false, true)); 70 mFailCauseDataList.add(new DcFailCauseData(0x23, true, true)); 71 mFailCauseDataList.add(new DcFailCauseData(0x24, false, false)); 72 mFailCauseDataList.add(new DcFailCauseData(0x25, false, false)); 73 mFailCauseDataList.add(new DcFailCauseData(0x26, false, false)); 74 mFailCauseDataList.add(new DcFailCauseData(0x27, false, false)); 75 mFailCauseDataList.add(new DcFailCauseData(0x28, false, false)); 76 mFailCauseDataList.add(new DcFailCauseData(0x29, false, false)); 77 mFailCauseDataList.add(new DcFailCauseData(0x2A, false, false)); 78 mFailCauseDataList.add(new DcFailCauseData(0x2B, false, false)); 79 mFailCauseDataList.add(new DcFailCauseData(0x2C, false, false)); 80 mFailCauseDataList.add(new DcFailCauseData(0x2D, false, false)); 81 mFailCauseDataList.add(new DcFailCauseData(0x2E, false, false)); 82 mFailCauseDataList.add(new DcFailCauseData(0x32, true, true)); 83 mFailCauseDataList.add(new DcFailCauseData(0x33, true, true)); 84 mFailCauseDataList.add(new DcFailCauseData(0x34, false, false)); 85 mFailCauseDataList.add(new DcFailCauseData(0x35, false, false)); 86 mFailCauseDataList.add(new DcFailCauseData(0x36, false, false)); 87 mFailCauseDataList.add(new DcFailCauseData(0x37, false, false)); 88 mFailCauseDataList.add(new DcFailCauseData(0x41, false, false)); 89 mFailCauseDataList.add(new DcFailCauseData(0x42, false, false)); 90 mFailCauseDataList.add(new DcFailCauseData(0x51, false, false)); 91 mFailCauseDataList.add(new DcFailCauseData(0x5F, false, false)); 92 mFailCauseDataList.add(new DcFailCauseData(0x60, false, false)); 93 mFailCauseDataList.add(new DcFailCauseData(0x61, false, false)); 94 mFailCauseDataList.add(new DcFailCauseData(0x62, false, false)); 95 mFailCauseDataList.add(new DcFailCauseData(0x63, false, false)); 96 mFailCauseDataList.add(new DcFailCauseData(0x64, false, false)); 97 mFailCauseDataList.add(new DcFailCauseData(0x65, false, false)); 98 mFailCauseDataList.add(new DcFailCauseData(0x6F, true, true)); 99 mFailCauseDataList.add(new DcFailCauseData(0x70, false, false)); 100 mFailCauseDataList.add(new DcFailCauseData(0x71, false, false)); 101 mFailCauseDataList.add(new DcFailCauseData(0x72, false, false)); 102 mFailCauseDataList.add(new DcFailCauseData(0x73, false, false)); 103 mFailCauseDataList.add(new DcFailCauseData(0x74, false, false)); 104 mFailCauseDataList.add(new DcFailCauseData(0x75, false, false)); 105 mFailCauseDataList.add(new DcFailCauseData(0x76, false, false)); 106 mFailCauseDataList.add(new DcFailCauseData(0x77, false, false)); 107 mFailCauseDataList.add(new DcFailCauseData(0x78, false, false)); 108 mFailCauseDataList.add(new DcFailCauseData(0x79, false, false)); 109 mFailCauseDataList.add(new DcFailCauseData(0x7A, false, false)); 110 mFailCauseDataList.add(new DcFailCauseData(0x1001, false, false)); 111 mFailCauseDataList.add(new DcFailCauseData(0x1002, false, false)); 112 mFailCauseDataList.add(new DcFailCauseData(0x1003, false, false)); 113 mFailCauseDataList.add(new DcFailCauseData(0x1004, false, false)); 114 mFailCauseDataList.add(new DcFailCauseData(0x1005, false, false)); 115 mFailCauseDataList.add(new DcFailCauseData(0x1006, false, false)); 116 mFailCauseDataList.add(new DcFailCauseData(0x1007, false, false)); 117 mFailCauseDataList.add(new DcFailCauseData(0x1008, false, false)); 118 mFailCauseDataList.add(new DcFailCauseData(0x1009, false, false)); 119 mFailCauseDataList.add(new DcFailCauseData(0x100A, false, false)); 120 mFailCauseDataList.add(new DcFailCauseData(0x100B, false, false)); 121 mFailCauseDataList.add(new DcFailCauseData(0x100C, false, false)); 122 mFailCauseDataList.add(new DcFailCauseData(0x100D, false, false)); 123 mFailCauseDataList.add(new DcFailCauseData(0x100E, false, false)); 124 mFailCauseDataList.add(new DcFailCauseData(0x100F, false, false)); 125 mFailCauseDataList.add(new DcFailCauseData(-1, false, false)); 126 mFailCauseDataList.add(new DcFailCauseData(-2, false, false)); 127 mFailCauseDataList.add(new DcFailCauseData(-3, true, true)); 128 mFailCauseDataList.add(new DcFailCauseData(-4, false, false)); 129 mFailCauseDataList.add(new DcFailCauseData(-5, true, true)); 130 mFailCauseDataList.add(new DcFailCauseData(-6, true, true)); 131 mFailCauseDataList.add(new DcFailCauseData(0xFFFF, false, false)); 132 mFailCauseDataList.add(new DcFailCauseData(0x10000, false, false)); 133 mFailCauseDataList.add(new DcFailCauseData(0x10001, true, false)); 134 mFailCauseDataList.add(new DcFailCauseData(0x10002, true, true)); 135 mFailCauseDataList.add(new DcFailCauseData(0x10003, false, false)); 136 mFailCauseDataList.add(new DcFailCauseData(0x10004, false, false)); 137 mFailCauseDataList.add(new DcFailCauseData(0x10005, false, false)); 138 } 139 140 @After 141 public void tearDown() throws Exception { 142 super.tearDown(); 143 } 144 145 @Test 146 @SmallTest 147 public void testPermanentFailDefault() throws Exception { 148 for (DcFailCauseData data : mFailCauseDataList) { 149 assertEquals("cause = " + data.mCause, data.mPermanentFailure, DcFailCause.fromInt( 150 data.mCause).isPermanentFailure(mContext, mPhone.getSubId())); 151 } 152 assertFalse(DcFailCause.fromInt(123456).isPermanentFailure(mContext, mPhone.getSubId())); 153 } 154 155 @Test 156 @SmallTest 157 public void testPermanentFailConfigured() throws Exception { 158 159 doReturn(2).when(mPhone).getSubId(); 160 PersistableBundle mBundle = mContextFixture.getCarrierConfigBundle(); 161 mBundle.putStringArray( 162 CarrierConfigManager.KEY_CARRIER_DATA_CALL_PERMANENT_FAILURE_STRINGS, 163 new String[]{"SERVICE_OPTION_NOT_SUBSCRIBED", "TETHERED_CALL_ACTIVE"}); 164 165 // Run it twice to make sure the cached carrier config is working as expected. 166 for (int i = 0; i < 2; i++) { 167 for (DcFailCauseData data : mFailCauseDataList) { 168 if (DcFailCause.fromInt(data.mCause).equals( 169 DcFailCause.SERVICE_OPTION_NOT_SUBSCRIBED) || 170 DcFailCause.fromInt(data.mCause).equals(DcFailCause.TETHERED_CALL_ACTIVE)) { 171 assertTrue("cause = " + data.mCause, DcFailCause.fromInt(data.mCause). 172 isPermanentFailure(mContext, mPhone.getSubId())); 173 } else { 174 assertFalse("cause = " + data.mCause, DcFailCause.fromInt(data.mCause). 175 isPermanentFailure(mContext, mPhone.getSubId())); 176 } 177 } 178 } 179 } 180 181 @Test 182 @SmallTest 183 public void testEventLoggable() throws Exception { 184 for (DcFailCauseData data : mFailCauseDataList) { 185 assertEquals("cause = " + data.mCause, data.mEventLoggable, 186 DcFailCause.fromInt(data.mCause).isEventLoggable()); 187 } 188 assertFalse(DcFailCause.fromInt(123456).isEventLoggable()); 189 } 190 191 @Test 192 @SmallTest 193 public void testGetErrorCode() throws Exception { 194 for (DcFailCauseData data : mFailCauseDataList) { 195 assertEquals(data.mCause, DcFailCause.fromInt(data.mCause).getErrorCode()); 196 } 197 assertEquals(DcFailCause.UNKNOWN.getErrorCode(), 198 DcFailCause.fromInt(123456).getErrorCode()); 199 } 200} 201