1/* 2 * Copyright (C) 2011 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; 18 19import android.test.AndroidTestCase; 20 21import com.android.internal.telephony.gsm.SmsBroadcastConfigInfo; 22 23import java.util.ArrayList; 24 25/** 26 * Test cases for the IntRangeManager class. 27 */ 28public class IntRangeManagerTest extends AndroidTestCase { 29 30 private static final int SMS_CB_CODE_SCHEME_MIN = 0; 31 private static final int SMS_CB_CODE_SCHEME_MAX = 255; 32 33 private static final int FLAG_START_UPDATE_CALLED = 0x01; 34 private static final int FLAG_ADD_RANGE_CALLED = 0x02; 35 private static final int FLAG_FINISH_UPDATE_CALLED = 0x04; 36 37 private static final int ALL_FLAGS_SET = FLAG_START_UPDATE_CALLED | FLAG_ADD_RANGE_CALLED | 38 FLAG_FINISH_UPDATE_CALLED; 39 40 /** Dummy IntRangeManager for testing. */ 41 class TestIntRangeManager extends IntRangeManager { 42 ArrayList<SmsBroadcastConfigInfo> mConfigList = 43 new ArrayList<SmsBroadcastConfigInfo>(); 44 45 int flags; 46 boolean finishUpdateReturnValue = true; 47 48 /** 49 * Called when the list of enabled ranges has changed. This will be 50 * followed by zero or more calls to {@link #addRange} followed by 51 * a call to {@link #finishUpdate}. 52 */ 53 protected void startUpdate() { 54 mConfigList.clear(); 55 flags |= FLAG_START_UPDATE_CALLED; 56 } 57 58 /** 59 * Called after {@link #startUpdate} to indicate a range of enabled 60 * values. 61 * @param startId the first id included in the range 62 * @param endId the last id included in the range 63 */ 64 protected void addRange(int startId, int endId, boolean selected) { 65 mConfigList.add(new SmsBroadcastConfigInfo(startId, endId, 66 SMS_CB_CODE_SCHEME_MIN, SMS_CB_CODE_SCHEME_MAX, selected)); 67 flags |= FLAG_ADD_RANGE_CALLED; 68 } 69 70 /** 71 * Called to indicate the end of a range update started by the 72 * previous call to {@link #startUpdate}. 73 */ 74 protected boolean finishUpdate() { 75 flags |= FLAG_FINISH_UPDATE_CALLED; 76 return finishUpdateReturnValue; 77 } 78 79 /** Reset the object for the next test case. */ 80 void reset() { 81 flags = 0; 82 mConfigList.clear(); 83 } 84 } 85 86 public void testEmptyRangeManager() { 87 TestIntRangeManager testManager = new TestIntRangeManager(); 88 assertEquals("expecting empty configlist", 0, testManager.mConfigList.size()); 89 } 90 91 private void checkConfigInfo(SmsBroadcastConfigInfo info, int fromServiceId, 92 int toServiceId, int fromCodeScheme, int toCodeScheme, boolean selected) { 93 assertEquals("fromServiceId", fromServiceId, info.getFromServiceId()); 94 assertEquals("toServiceId", toServiceId, info.getToServiceId()); 95 assertEquals("fromCodeScheme", fromCodeScheme, info.getFromCodeScheme()); 96 assertEquals("toCodeScheme", toCodeScheme, info.getToCodeScheme()); 97 assertEquals("selected", selected, info.isSelected()); 98 } 99 100 public void testAddSingleChannel() { 101 TestIntRangeManager testManager = new TestIntRangeManager(); 102 assertEquals("flags before test", 0, testManager.flags); 103 assertTrue("enabling range", testManager.enableRange(123, 123, "client1")); 104 assertEquals("flags after test", ALL_FLAGS_SET, testManager.flags); 105 assertEquals("configlist size", 1, testManager.mConfigList.size()); 106 checkConfigInfo(testManager.mConfigList.get(0), 123, 123, SMS_CB_CODE_SCHEME_MIN, 107 SMS_CB_CODE_SCHEME_MAX, true); 108 testManager.reset(); 109 assertTrue("updating ranges", testManager.updateRanges()); 110 assertEquals("flags after test", ALL_FLAGS_SET, testManager.flags); 111 assertEquals("configlist size", 1, testManager.mConfigList.size()); 112 checkConfigInfo(testManager.mConfigList.get(0), 123, 123, SMS_CB_CODE_SCHEME_MIN, 113 SMS_CB_CODE_SCHEME_MAX, true); 114 } 115 116 public void testRemoveSingleChannel() { 117 TestIntRangeManager testManager = new TestIntRangeManager(); 118 assertTrue("enabling range", testManager.enableRange(123, 123, "client1")); 119 assertEquals("flags after enable", ALL_FLAGS_SET, testManager.flags); 120 assertEquals("configlist size", 1, testManager.mConfigList.size()); 121 testManager.reset(); 122 assertTrue("disabling range", testManager.disableRange(123, 123, "client1")); 123 assertEquals("flags after test", ALL_FLAGS_SET, testManager.flags); 124 assertEquals("configlist size", 1, testManager.mConfigList.size()); 125 checkConfigInfo(testManager.mConfigList.get(0), 123, 123, SMS_CB_CODE_SCHEME_MIN, 126 SMS_CB_CODE_SCHEME_MAX, false); 127 testManager.reset(); 128 assertTrue("updating ranges", testManager.updateRanges()); 129 assertEquals("flags after test", FLAG_START_UPDATE_CALLED | FLAG_FINISH_UPDATE_CALLED, 130 testManager.flags); 131 assertEquals("configlist size", 0, testManager.mConfigList.size()); 132 } 133 134 public void testRemoveBadChannel() { 135 TestIntRangeManager testManager = new TestIntRangeManager(); 136 assertFalse("disabling missing range", testManager.disableRange(123, 123, "client1")); 137 assertEquals("flags after test", 0, testManager.flags); 138 assertEquals("configlist size", 0, testManager.mConfigList.size()); 139 } 140 141 public void testAddTwoChannels() { 142 TestIntRangeManager testManager = new TestIntRangeManager(); 143 assertEquals("flags before test", 0, testManager.flags); 144 assertTrue("enabling range 1", testManager.enableRange(100, 120, "client1")); 145 assertEquals("flags after test", ALL_FLAGS_SET, testManager.flags); 146 assertEquals("configlist size", 1, testManager.mConfigList.size()); 147 checkConfigInfo(testManager.mConfigList.get(0), 100, 120, SMS_CB_CODE_SCHEME_MIN, 148 SMS_CB_CODE_SCHEME_MAX, true); 149 testManager.reset(); 150 assertTrue("enabling range 2", testManager.enableRange(200, 250, "client2")); 151 assertEquals("flags after test", ALL_FLAGS_SET, testManager.flags); 152 assertEquals("configlist size", 1, testManager.mConfigList.size()); 153 checkConfigInfo(testManager.mConfigList.get(0), 200, 250, SMS_CB_CODE_SCHEME_MIN, 154 SMS_CB_CODE_SCHEME_MAX, true); 155 testManager.reset(); 156 assertTrue("updating ranges", testManager.updateRanges()); 157 assertEquals("flags after test", ALL_FLAGS_SET, testManager.flags); 158 assertEquals("configlist size", 2, testManager.mConfigList.size()); 159 checkConfigInfo(testManager.mConfigList.get(0), 100, 120, SMS_CB_CODE_SCHEME_MIN, 160 SMS_CB_CODE_SCHEME_MAX, true); 161 checkConfigInfo(testManager.mConfigList.get(1), 200, 250, SMS_CB_CODE_SCHEME_MIN, 162 SMS_CB_CODE_SCHEME_MAX, true); 163 } 164 165 public void testOverlappingChannels() { 166 TestIntRangeManager testManager = new TestIntRangeManager(); 167 assertEquals("flags before test", 0, testManager.flags); 168 assertTrue("enabling range 1", testManager.enableRange(100, 200, "client1")); 169 assertEquals("flags after test", ALL_FLAGS_SET, testManager.flags); 170 assertEquals("configlist size", 1, testManager.mConfigList.size()); 171 checkConfigInfo(testManager.mConfigList.get(0), 100, 200, SMS_CB_CODE_SCHEME_MIN, 172 SMS_CB_CODE_SCHEME_MAX, true); 173 testManager.reset(); 174 assertTrue("enabling range 2", testManager.enableRange(150, 250, "client2")); 175 assertEquals("flags after test", ALL_FLAGS_SET, testManager.flags); 176 assertEquals("configlist size", 1, testManager.mConfigList.size()); 177 checkConfigInfo(testManager.mConfigList.get(0), 201, 250, SMS_CB_CODE_SCHEME_MIN, 178 SMS_CB_CODE_SCHEME_MAX, true); 179 testManager.reset(); 180 assertTrue("updating ranges", testManager.updateRanges()); 181 assertEquals("flags after test", ALL_FLAGS_SET, testManager.flags); 182 assertEquals("configlist size", 1, testManager.mConfigList.size()); 183 checkConfigInfo(testManager.mConfigList.get(0), 100, 250, SMS_CB_CODE_SCHEME_MIN, 184 SMS_CB_CODE_SCHEME_MAX, true); 185 testManager.reset(); 186 assertTrue("disabling range 1", testManager.disableRange(100, 200, "client1")); 187 assertEquals("flags after test", ALL_FLAGS_SET, testManager.flags); 188 assertEquals("configlist size", 1, testManager.mConfigList.size()); 189 checkConfigInfo(testManager.mConfigList.get(0), 100, 149, SMS_CB_CODE_SCHEME_MIN, 190 SMS_CB_CODE_SCHEME_MAX, false); 191 testManager.reset(); 192 assertTrue("disabling range 2", testManager.disableRange(150, 250, "client2")); 193 assertEquals("flags after test", ALL_FLAGS_SET, testManager.flags); 194 assertEquals("configlist size", 1, testManager.mConfigList.size()); 195 checkConfigInfo(testManager.mConfigList.get(0), 150, 250, SMS_CB_CODE_SCHEME_MIN, 196 SMS_CB_CODE_SCHEME_MAX, false); 197 testManager.reset(); 198 assertTrue("updating ranges", testManager.updateRanges()); 199 assertEquals("flags after test", FLAG_START_UPDATE_CALLED | FLAG_FINISH_UPDATE_CALLED, 200 testManager.flags); 201 assertEquals("configlist size", 0, testManager.mConfigList.size()); 202 } 203 204 public void testOverlappingChannels2() { 205 TestIntRangeManager testManager = new TestIntRangeManager(); 206 assertEquals("flags before test", 0, testManager.flags); 207 assertTrue("enabling range 1", testManager.enableRange(100, 200, "client1")); 208 assertEquals("flags after test", ALL_FLAGS_SET, testManager.flags); 209 assertEquals("configlist size", 1, testManager.mConfigList.size()); 210 checkConfigInfo(testManager.mConfigList.get(0), 100, 200, SMS_CB_CODE_SCHEME_MIN, 211 SMS_CB_CODE_SCHEME_MAX, true); 212 testManager.reset(); 213 assertTrue("enabling range 2", testManager.enableRange(150, 250, "client2")); 214 assertEquals("flags after test", ALL_FLAGS_SET, testManager.flags); 215 assertEquals("configlist size", 1, testManager.mConfigList.size()); 216 checkConfigInfo(testManager.mConfigList.get(0), 201, 250, SMS_CB_CODE_SCHEME_MIN, 217 SMS_CB_CODE_SCHEME_MAX, true); 218 testManager.reset(); 219 assertTrue("disabling range 2", testManager.disableRange(150, 250, "client2")); 220 assertEquals("flags after test", ALL_FLAGS_SET, testManager.flags); 221 assertEquals("configlist size", 1, testManager.mConfigList.size()); 222 checkConfigInfo(testManager.mConfigList.get(0), 201, 250, SMS_CB_CODE_SCHEME_MIN, 223 SMS_CB_CODE_SCHEME_MAX, false); 224 testManager.reset(); 225 assertTrue("updating ranges", testManager.updateRanges()); 226 assertEquals("flags after test", ALL_FLAGS_SET, testManager.flags); 227 assertEquals("configlist size", 1, testManager.mConfigList.size()); 228 checkConfigInfo(testManager.mConfigList.get(0), 100, 200, SMS_CB_CODE_SCHEME_MIN, 229 SMS_CB_CODE_SCHEME_MAX, true); 230 testManager.reset(); 231 assertTrue("disabling range 1", testManager.disableRange(100, 200, "client1")); 232 assertEquals("flags after test", ALL_FLAGS_SET, testManager.flags); 233 assertEquals("configlist size", 1, testManager.mConfigList.size()); 234 checkConfigInfo(testManager.mConfigList.get(0), 100, 200, SMS_CB_CODE_SCHEME_MIN, 235 SMS_CB_CODE_SCHEME_MAX, false); 236 } 237 238 public void testMultipleOverlappingChannels() { 239 TestIntRangeManager testManager = new TestIntRangeManager(); 240 assertEquals("flags before test", 0, testManager.flags); 241 assertTrue("enabling range 1", testManager.enableRange(67, 9999, "client1")); 242 assertEquals("flags after test", ALL_FLAGS_SET, testManager.flags); 243 assertEquals("configlist size", 1, testManager.mConfigList.size()); 244 checkConfigInfo(testManager.mConfigList.get(0), 67, 9999, SMS_CB_CODE_SCHEME_MIN, 245 SMS_CB_CODE_SCHEME_MAX, true); 246 testManager.reset(); 247 assertTrue("enabling range 2", testManager.enableRange(150, 250, "client2")); 248 assertEquals("flags after test", 0, testManager.flags); 249 assertEquals("configlist size", 0, testManager.mConfigList.size()); 250 testManager.reset(); 251 assertTrue("enabling range 3", testManager.enableRange(25, 75, "client3")); 252 assertEquals("flags after test", ALL_FLAGS_SET, testManager.flags); 253 assertEquals("configlist size", 1, testManager.mConfigList.size()); 254 checkConfigInfo(testManager.mConfigList.get(0), 25, 66, SMS_CB_CODE_SCHEME_MIN, 255 SMS_CB_CODE_SCHEME_MAX, true); 256 testManager.reset(); 257 assertTrue("enabling range 4", testManager.enableRange(12, 500, "client4")); 258 assertEquals("flags after test", ALL_FLAGS_SET, testManager.flags); 259 assertEquals("configlist size", 1, testManager.mConfigList.size()); 260 checkConfigInfo(testManager.mConfigList.get(0), 12, 24, SMS_CB_CODE_SCHEME_MIN, 261 SMS_CB_CODE_SCHEME_MAX, true); 262 testManager.reset(); 263 assertTrue("enabling range 5", testManager.enableRange(8000, 9998, "client5")); 264 assertEquals("flags after test", 0, testManager.flags); 265 assertEquals("configlist size", 0, testManager.mConfigList.size()); 266 testManager.reset(); 267 assertTrue("enabling range 6", testManager.enableRange(50000, 65535, "client6")); 268 assertEquals("flags after test", ALL_FLAGS_SET, testManager.flags); 269 assertEquals("configlist size", 1, testManager.mConfigList.size()); 270 checkConfigInfo(testManager.mConfigList.get(0), 50000, 65535, SMS_CB_CODE_SCHEME_MIN, 271 SMS_CB_CODE_SCHEME_MAX, true); 272 testManager.reset(); 273 assertTrue("updating ranges", testManager.updateRanges()); 274 assertEquals("flags after test", ALL_FLAGS_SET, testManager.flags); 275 assertEquals("configlist size", 2, testManager.mConfigList.size()); 276 checkConfigInfo(testManager.mConfigList.get(0), 12, 9999, SMS_CB_CODE_SCHEME_MIN, 277 SMS_CB_CODE_SCHEME_MAX, true); 278 checkConfigInfo(testManager.mConfigList.get(1), 50000, 65535, SMS_CB_CODE_SCHEME_MIN, 279 SMS_CB_CODE_SCHEME_MAX, true); 280 testManager.reset(); 281 assertTrue("disabling range 1", testManager.disableRange(67, 9999, "client1")); 282 assertEquals("flags after test", ALL_FLAGS_SET, testManager.flags); 283 assertEquals("configlist size", 2, testManager.mConfigList.size()); 284 checkConfigInfo(testManager.mConfigList.get(0), 501, 7999, SMS_CB_CODE_SCHEME_MIN, 285 SMS_CB_CODE_SCHEME_MAX, false); 286 checkConfigInfo(testManager.mConfigList.get(1), 9999, 9999, SMS_CB_CODE_SCHEME_MIN, 287 SMS_CB_CODE_SCHEME_MAX, false); 288 testManager.reset(); 289 assertTrue("updating ranges", testManager.updateRanges()); 290 assertEquals("flags after test", ALL_FLAGS_SET, testManager.flags); 291 assertEquals("configlist size", 3, testManager.mConfigList.size()); 292 checkConfigInfo(testManager.mConfigList.get(0), 12, 500, SMS_CB_CODE_SCHEME_MIN, 293 SMS_CB_CODE_SCHEME_MAX, true); 294 checkConfigInfo(testManager.mConfigList.get(1), 8000, 9998, SMS_CB_CODE_SCHEME_MIN, 295 SMS_CB_CODE_SCHEME_MAX, true); 296 checkConfigInfo(testManager.mConfigList.get(2), 50000, 65535, SMS_CB_CODE_SCHEME_MIN, 297 SMS_CB_CODE_SCHEME_MAX, true); 298 testManager.reset(); 299 assertTrue("disabling range 4", testManager.disableRange(12, 500, "client4")); 300 assertEquals("flags after test", ALL_FLAGS_SET, testManager.flags); 301 assertEquals("configlist size", 3, testManager.mConfigList.size()); 302 checkConfigInfo(testManager.mConfigList.get(0), 12, 24, SMS_CB_CODE_SCHEME_MIN, 303 SMS_CB_CODE_SCHEME_MAX, false); 304 checkConfigInfo(testManager.mConfigList.get(1), 76, 149, SMS_CB_CODE_SCHEME_MIN, 305 SMS_CB_CODE_SCHEME_MAX, false); 306 checkConfigInfo(testManager.mConfigList.get(2), 251, 500, SMS_CB_CODE_SCHEME_MIN, 307 SMS_CB_CODE_SCHEME_MAX, false); 308 testManager.reset(); 309 assertTrue("updating ranges", testManager.updateRanges()); 310 assertEquals("flags after test", ALL_FLAGS_SET, testManager.flags); 311 assertEquals("configlist size", 4, testManager.mConfigList.size()); 312 checkConfigInfo(testManager.mConfigList.get(0), 25, 75, SMS_CB_CODE_SCHEME_MIN, 313 SMS_CB_CODE_SCHEME_MAX, true); 314 checkConfigInfo(testManager.mConfigList.get(1), 150, 250, SMS_CB_CODE_SCHEME_MIN, 315 SMS_CB_CODE_SCHEME_MAX, true); 316 checkConfigInfo(testManager.mConfigList.get(2), 8000, 9998, SMS_CB_CODE_SCHEME_MIN, 317 SMS_CB_CODE_SCHEME_MAX, true); 318 checkConfigInfo(testManager.mConfigList.get(3), 50000, 65535, SMS_CB_CODE_SCHEME_MIN, 319 SMS_CB_CODE_SCHEME_MAX, true); 320 testManager.reset(); 321 assertTrue("disabling range 5", testManager.disableRange(8000, 9998, "client5")); 322 assertEquals("flags after test", ALL_FLAGS_SET, testManager.flags); 323 assertEquals("configlist size", 1, testManager.mConfigList.size()); 324 checkConfigInfo(testManager.mConfigList.get(0), 8000, 9998, SMS_CB_CODE_SCHEME_MIN, 325 SMS_CB_CODE_SCHEME_MAX, false); 326 testManager.reset(); 327 assertTrue("updating ranges", testManager.updateRanges()); 328 assertEquals("flags after test", ALL_FLAGS_SET, testManager.flags); 329 assertEquals("configlist size", 3, testManager.mConfigList.size()); 330 checkConfigInfo(testManager.mConfigList.get(0), 25, 75, SMS_CB_CODE_SCHEME_MIN, 331 SMS_CB_CODE_SCHEME_MAX, true); 332 checkConfigInfo(testManager.mConfigList.get(1), 150, 250, SMS_CB_CODE_SCHEME_MIN, 333 SMS_CB_CODE_SCHEME_MAX, true); 334 checkConfigInfo(testManager.mConfigList.get(2), 50000, 65535, SMS_CB_CODE_SCHEME_MIN, 335 SMS_CB_CODE_SCHEME_MAX, true); 336 testManager.reset(); 337 assertTrue("disabling range 6", testManager.disableRange(50000, 65535, "client6")); 338 assertEquals("flags after test", ALL_FLAGS_SET, testManager.flags); 339 assertEquals("configlist size", 1, testManager.mConfigList.size()); 340 checkConfigInfo(testManager.mConfigList.get(0), 50000, 65535, SMS_CB_CODE_SCHEME_MIN, 341 SMS_CB_CODE_SCHEME_MAX, false); 342 testManager.reset(); 343 assertTrue("updating ranges", testManager.updateRanges()); 344 assertEquals("flags after test", ALL_FLAGS_SET, testManager.flags); 345 assertEquals("configlist size", 2, testManager.mConfigList.size()); 346 checkConfigInfo(testManager.mConfigList.get(0), 25, 75, SMS_CB_CODE_SCHEME_MIN, 347 SMS_CB_CODE_SCHEME_MAX, true); 348 checkConfigInfo(testManager.mConfigList.get(1), 150, 250, SMS_CB_CODE_SCHEME_MIN, 349 SMS_CB_CODE_SCHEME_MAX, true); 350 testManager.reset(); 351 assertTrue("disabling range 2", testManager.disableRange(150, 250, "client2")); 352 assertEquals("flags after test", ALL_FLAGS_SET, testManager.flags); 353 assertEquals("configlist size", 1, testManager.mConfigList.size()); 354 checkConfigInfo(testManager.mConfigList.get(0), 150, 250, SMS_CB_CODE_SCHEME_MIN, 355 SMS_CB_CODE_SCHEME_MAX, false); 356 testManager.reset(); 357 assertTrue("updating ranges", testManager.updateRanges()); 358 assertEquals("flags after test", ALL_FLAGS_SET, testManager.flags); 359 assertEquals("configlist size", 1, testManager.mConfigList.size()); 360 checkConfigInfo(testManager.mConfigList.get(0), 25, 75, SMS_CB_CODE_SCHEME_MIN, 361 SMS_CB_CODE_SCHEME_MAX, true); 362 testManager.reset(); 363 assertTrue("disabling range 3", testManager.disableRange(25, 75, "client3")); 364 assertEquals("flags after test", ALL_FLAGS_SET, testManager.flags); 365 assertEquals("configlist size", 1, testManager.mConfigList.size()); 366 checkConfigInfo(testManager.mConfigList.get(0), 25, 75, SMS_CB_CODE_SCHEME_MIN, 367 SMS_CB_CODE_SCHEME_MAX, false); 368 testManager.reset(); 369 assertTrue("updating ranges", testManager.updateRanges()); 370 assertEquals("flags after test", FLAG_START_UPDATE_CALLED | FLAG_FINISH_UPDATE_CALLED, 371 testManager.flags); 372 assertEquals("configlist size", 0, testManager.mConfigList.size()); 373 } 374} 375