/* * Copyright (C) 2011 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.internal.telephony; import android.test.AndroidTestCase; import com.android.internal.telephony.gsm.SmsBroadcastConfigInfo; import java.util.ArrayList; /** * Test cases for the IntRangeManager class. */ public class IntRangeManagerTest extends AndroidTestCase { private static final int SMS_CB_CODE_SCHEME_MIN = 0; private static final int SMS_CB_CODE_SCHEME_MAX = 255; private static final int FLAG_START_UPDATE_CALLED = 0x01; private static final int FLAG_ADD_RANGE_CALLED = 0x02; private static final int FLAG_FINISH_UPDATE_CALLED = 0x04; private static final int ALL_FLAGS_SET = FLAG_START_UPDATE_CALLED | FLAG_ADD_RANGE_CALLED | FLAG_FINISH_UPDATE_CALLED; /** Dummy IntRangeManager for testing. */ class TestIntRangeManager extends IntRangeManager { ArrayList mConfigList = new ArrayList(); int flags; boolean finishUpdateReturnValue = true; /** * Called when the list of enabled ranges has changed. This will be * followed by zero or more calls to {@link #addRange} followed by * a call to {@link #finishUpdate}. */ protected void startUpdate() { mConfigList.clear(); flags |= FLAG_START_UPDATE_CALLED; } /** * Called after {@link #startUpdate} to indicate a range of enabled * values. * @param startId the first id included in the range * @param endId the last id included in the range */ protected void addRange(int startId, int endId, boolean selected) { mConfigList.add(new SmsBroadcastConfigInfo(startId, endId, SMS_CB_CODE_SCHEME_MIN, SMS_CB_CODE_SCHEME_MAX, selected)); flags |= FLAG_ADD_RANGE_CALLED; } /** * Called to indicate the end of a range update started by the * previous call to {@link #startUpdate}. */ protected boolean finishUpdate() { flags |= FLAG_FINISH_UPDATE_CALLED; return finishUpdateReturnValue; } /** Reset the object for the next test case. */ void reset() { flags = 0; mConfigList.clear(); } } public void testEmptyRangeManager() { TestIntRangeManager testManager = new TestIntRangeManager(); assertEquals("expecting empty configlist", 0, testManager.mConfigList.size()); } private void checkConfigInfo(SmsBroadcastConfigInfo info, int fromServiceId, int toServiceId, int fromCodeScheme, int toCodeScheme, boolean selected) { assertEquals("fromServiceId", fromServiceId, info.getFromServiceId()); assertEquals("toServiceId", toServiceId, info.getToServiceId()); assertEquals("fromCodeScheme", fromCodeScheme, info.getFromCodeScheme()); assertEquals("toCodeScheme", toCodeScheme, info.getToCodeScheme()); assertEquals("selected", selected, info.isSelected()); } public void testAddSingleChannel() { TestIntRangeManager testManager = new TestIntRangeManager(); assertEquals("flags before test", 0, testManager.flags); assertTrue("enabling range", testManager.enableRange(123, 123, "client1")); assertEquals("flags after test", ALL_FLAGS_SET, testManager.flags); assertEquals("configlist size", 1, testManager.mConfigList.size()); checkConfigInfo(testManager.mConfigList.get(0), 123, 123, SMS_CB_CODE_SCHEME_MIN, SMS_CB_CODE_SCHEME_MAX, true); testManager.reset(); assertTrue("updating ranges", testManager.updateRanges()); assertEquals("flags after test", ALL_FLAGS_SET, testManager.flags); assertEquals("configlist size", 1, testManager.mConfigList.size()); checkConfigInfo(testManager.mConfigList.get(0), 123, 123, SMS_CB_CODE_SCHEME_MIN, SMS_CB_CODE_SCHEME_MAX, true); } public void testRemoveSingleChannel() { TestIntRangeManager testManager = new TestIntRangeManager(); assertTrue("enabling range", testManager.enableRange(123, 123, "client1")); assertEquals("flags after enable", ALL_FLAGS_SET, testManager.flags); assertEquals("configlist size", 1, testManager.mConfigList.size()); testManager.reset(); assertTrue("disabling range", testManager.disableRange(123, 123, "client1")); assertEquals("flags after test", ALL_FLAGS_SET, testManager.flags); assertEquals("configlist size", 1, testManager.mConfigList.size()); checkConfigInfo(testManager.mConfigList.get(0), 123, 123, SMS_CB_CODE_SCHEME_MIN, SMS_CB_CODE_SCHEME_MAX, false); testManager.reset(); assertTrue("updating ranges", testManager.updateRanges()); assertEquals("flags after test", FLAG_START_UPDATE_CALLED | FLAG_FINISH_UPDATE_CALLED, testManager.flags); assertEquals("configlist size", 0, testManager.mConfigList.size()); } public void testRemoveBadChannel() { TestIntRangeManager testManager = new TestIntRangeManager(); assertFalse("disabling missing range", testManager.disableRange(123, 123, "client1")); assertEquals("flags after test", 0, testManager.flags); assertEquals("configlist size", 0, testManager.mConfigList.size()); } public void testAddTwoChannels() { TestIntRangeManager testManager = new TestIntRangeManager(); assertEquals("flags before test", 0, testManager.flags); assertTrue("enabling range 1", testManager.enableRange(100, 120, "client1")); assertEquals("flags after test", ALL_FLAGS_SET, testManager.flags); assertEquals("configlist size", 1, testManager.mConfigList.size()); checkConfigInfo(testManager.mConfigList.get(0), 100, 120, SMS_CB_CODE_SCHEME_MIN, SMS_CB_CODE_SCHEME_MAX, true); testManager.reset(); assertTrue("enabling range 2", testManager.enableRange(200, 250, "client2")); assertEquals("flags after test", ALL_FLAGS_SET, testManager.flags); assertEquals("configlist size", 1, testManager.mConfigList.size()); checkConfigInfo(testManager.mConfigList.get(0), 200, 250, SMS_CB_CODE_SCHEME_MIN, SMS_CB_CODE_SCHEME_MAX, true); testManager.reset(); assertTrue("updating ranges", testManager.updateRanges()); assertEquals("flags after test", ALL_FLAGS_SET, testManager.flags); assertEquals("configlist size", 2, testManager.mConfigList.size()); checkConfigInfo(testManager.mConfigList.get(0), 100, 120, SMS_CB_CODE_SCHEME_MIN, SMS_CB_CODE_SCHEME_MAX, true); checkConfigInfo(testManager.mConfigList.get(1), 200, 250, SMS_CB_CODE_SCHEME_MIN, SMS_CB_CODE_SCHEME_MAX, true); } public void testOverlappingChannels() { TestIntRangeManager testManager = new TestIntRangeManager(); assertEquals("flags before test", 0, testManager.flags); assertTrue("enabling range 1", testManager.enableRange(100, 200, "client1")); assertEquals("flags after test", ALL_FLAGS_SET, testManager.flags); assertEquals("configlist size", 1, testManager.mConfigList.size()); checkConfigInfo(testManager.mConfigList.get(0), 100, 200, SMS_CB_CODE_SCHEME_MIN, SMS_CB_CODE_SCHEME_MAX, true); testManager.reset(); assertTrue("enabling range 2", testManager.enableRange(150, 250, "client2")); assertEquals("flags after test", ALL_FLAGS_SET, testManager.flags); assertEquals("configlist size", 1, testManager.mConfigList.size()); checkConfigInfo(testManager.mConfigList.get(0), 201, 250, SMS_CB_CODE_SCHEME_MIN, SMS_CB_CODE_SCHEME_MAX, true); testManager.reset(); assertTrue("updating ranges", testManager.updateRanges()); assertEquals("flags after test", ALL_FLAGS_SET, testManager.flags); assertEquals("configlist size", 1, testManager.mConfigList.size()); checkConfigInfo(testManager.mConfigList.get(0), 100, 250, SMS_CB_CODE_SCHEME_MIN, SMS_CB_CODE_SCHEME_MAX, true); testManager.reset(); assertTrue("disabling range 1", testManager.disableRange(100, 200, "client1")); assertEquals("flags after test", ALL_FLAGS_SET, testManager.flags); assertEquals("configlist size", 1, testManager.mConfigList.size()); checkConfigInfo(testManager.mConfigList.get(0), 100, 149, SMS_CB_CODE_SCHEME_MIN, SMS_CB_CODE_SCHEME_MAX, false); testManager.reset(); assertTrue("disabling range 2", testManager.disableRange(150, 250, "client2")); assertEquals("flags after test", ALL_FLAGS_SET, testManager.flags); assertEquals("configlist size", 1, testManager.mConfigList.size()); checkConfigInfo(testManager.mConfigList.get(0), 150, 250, SMS_CB_CODE_SCHEME_MIN, SMS_CB_CODE_SCHEME_MAX, false); testManager.reset(); assertTrue("updating ranges", testManager.updateRanges()); assertEquals("flags after test", FLAG_START_UPDATE_CALLED | FLAG_FINISH_UPDATE_CALLED, testManager.flags); assertEquals("configlist size", 0, testManager.mConfigList.size()); } public void testOverlappingChannels2() { TestIntRangeManager testManager = new TestIntRangeManager(); assertEquals("flags before test", 0, testManager.flags); assertTrue("enabling range 1", testManager.enableRange(100, 200, "client1")); assertEquals("flags after test", ALL_FLAGS_SET, testManager.flags); assertEquals("configlist size", 1, testManager.mConfigList.size()); checkConfigInfo(testManager.mConfigList.get(0), 100, 200, SMS_CB_CODE_SCHEME_MIN, SMS_CB_CODE_SCHEME_MAX, true); testManager.reset(); assertTrue("enabling range 2", testManager.enableRange(150, 250, "client2")); assertEquals("flags after test", ALL_FLAGS_SET, testManager.flags); assertEquals("configlist size", 1, testManager.mConfigList.size()); checkConfigInfo(testManager.mConfigList.get(0), 201, 250, SMS_CB_CODE_SCHEME_MIN, SMS_CB_CODE_SCHEME_MAX, true); testManager.reset(); assertTrue("disabling range 2", testManager.disableRange(150, 250, "client2")); assertEquals("flags after test", ALL_FLAGS_SET, testManager.flags); assertEquals("configlist size", 1, testManager.mConfigList.size()); checkConfigInfo(testManager.mConfigList.get(0), 201, 250, SMS_CB_CODE_SCHEME_MIN, SMS_CB_CODE_SCHEME_MAX, false); testManager.reset(); assertTrue("updating ranges", testManager.updateRanges()); assertEquals("flags after test", ALL_FLAGS_SET, testManager.flags); assertEquals("configlist size", 1, testManager.mConfigList.size()); checkConfigInfo(testManager.mConfigList.get(0), 100, 200, SMS_CB_CODE_SCHEME_MIN, SMS_CB_CODE_SCHEME_MAX, true); testManager.reset(); assertTrue("disabling range 1", testManager.disableRange(100, 200, "client1")); assertEquals("flags after test", ALL_FLAGS_SET, testManager.flags); assertEquals("configlist size", 1, testManager.mConfigList.size()); checkConfigInfo(testManager.mConfigList.get(0), 100, 200, SMS_CB_CODE_SCHEME_MIN, SMS_CB_CODE_SCHEME_MAX, false); } public void testMultipleOverlappingChannels() { TestIntRangeManager testManager = new TestIntRangeManager(); assertEquals("flags before test", 0, testManager.flags); assertTrue("enabling range 1", testManager.enableRange(67, 9999, "client1")); assertEquals("flags after test", ALL_FLAGS_SET, testManager.flags); assertEquals("configlist size", 1, testManager.mConfigList.size()); checkConfigInfo(testManager.mConfigList.get(0), 67, 9999, SMS_CB_CODE_SCHEME_MIN, SMS_CB_CODE_SCHEME_MAX, true); testManager.reset(); assertTrue("enabling range 2", testManager.enableRange(150, 250, "client2")); assertEquals("flags after test", 0, testManager.flags); assertEquals("configlist size", 0, testManager.mConfigList.size()); testManager.reset(); assertTrue("enabling range 3", testManager.enableRange(25, 75, "client3")); assertEquals("flags after test", ALL_FLAGS_SET, testManager.flags); assertEquals("configlist size", 1, testManager.mConfigList.size()); checkConfigInfo(testManager.mConfigList.get(0), 25, 66, SMS_CB_CODE_SCHEME_MIN, SMS_CB_CODE_SCHEME_MAX, true); testManager.reset(); assertTrue("enabling range 4", testManager.enableRange(12, 500, "client4")); assertEquals("flags after test", ALL_FLAGS_SET, testManager.flags); assertEquals("configlist size", 1, testManager.mConfigList.size()); checkConfigInfo(testManager.mConfigList.get(0), 12, 24, SMS_CB_CODE_SCHEME_MIN, SMS_CB_CODE_SCHEME_MAX, true); testManager.reset(); assertTrue("enabling range 5", testManager.enableRange(8000, 9998, "client5")); assertEquals("flags after test", 0, testManager.flags); assertEquals("configlist size", 0, testManager.mConfigList.size()); testManager.reset(); assertTrue("enabling range 6", testManager.enableRange(50000, 65535, "client6")); assertEquals("flags after test", ALL_FLAGS_SET, testManager.flags); assertEquals("configlist size", 1, testManager.mConfigList.size()); checkConfigInfo(testManager.mConfigList.get(0), 50000, 65535, SMS_CB_CODE_SCHEME_MIN, SMS_CB_CODE_SCHEME_MAX, true); testManager.reset(); assertTrue("updating ranges", testManager.updateRanges()); assertEquals("flags after test", ALL_FLAGS_SET, testManager.flags); assertEquals("configlist size", 2, testManager.mConfigList.size()); checkConfigInfo(testManager.mConfigList.get(0), 12, 9999, SMS_CB_CODE_SCHEME_MIN, SMS_CB_CODE_SCHEME_MAX, true); checkConfigInfo(testManager.mConfigList.get(1), 50000, 65535, SMS_CB_CODE_SCHEME_MIN, SMS_CB_CODE_SCHEME_MAX, true); testManager.reset(); assertTrue("disabling range 1", testManager.disableRange(67, 9999, "client1")); assertEquals("flags after test", ALL_FLAGS_SET, testManager.flags); assertEquals("configlist size", 2, testManager.mConfigList.size()); checkConfigInfo(testManager.mConfigList.get(0), 501, 7999, SMS_CB_CODE_SCHEME_MIN, SMS_CB_CODE_SCHEME_MAX, false); checkConfigInfo(testManager.mConfigList.get(1), 9999, 9999, SMS_CB_CODE_SCHEME_MIN, SMS_CB_CODE_SCHEME_MAX, false); testManager.reset(); assertTrue("updating ranges", testManager.updateRanges()); assertEquals("flags after test", ALL_FLAGS_SET, testManager.flags); assertEquals("configlist size", 3, testManager.mConfigList.size()); checkConfigInfo(testManager.mConfigList.get(0), 12, 500, SMS_CB_CODE_SCHEME_MIN, SMS_CB_CODE_SCHEME_MAX, true); checkConfigInfo(testManager.mConfigList.get(1), 8000, 9998, SMS_CB_CODE_SCHEME_MIN, SMS_CB_CODE_SCHEME_MAX, true); checkConfigInfo(testManager.mConfigList.get(2), 50000, 65535, SMS_CB_CODE_SCHEME_MIN, SMS_CB_CODE_SCHEME_MAX, true); testManager.reset(); assertTrue("disabling range 4", testManager.disableRange(12, 500, "client4")); assertEquals("flags after test", ALL_FLAGS_SET, testManager.flags); assertEquals("configlist size", 3, testManager.mConfigList.size()); checkConfigInfo(testManager.mConfigList.get(0), 12, 24, SMS_CB_CODE_SCHEME_MIN, SMS_CB_CODE_SCHEME_MAX, false); checkConfigInfo(testManager.mConfigList.get(1), 76, 149, SMS_CB_CODE_SCHEME_MIN, SMS_CB_CODE_SCHEME_MAX, false); checkConfigInfo(testManager.mConfigList.get(2), 251, 500, SMS_CB_CODE_SCHEME_MIN, SMS_CB_CODE_SCHEME_MAX, false); testManager.reset(); assertTrue("updating ranges", testManager.updateRanges()); assertEquals("flags after test", ALL_FLAGS_SET, testManager.flags); assertEquals("configlist size", 4, testManager.mConfigList.size()); checkConfigInfo(testManager.mConfigList.get(0), 25, 75, SMS_CB_CODE_SCHEME_MIN, SMS_CB_CODE_SCHEME_MAX, true); checkConfigInfo(testManager.mConfigList.get(1), 150, 250, SMS_CB_CODE_SCHEME_MIN, SMS_CB_CODE_SCHEME_MAX, true); checkConfigInfo(testManager.mConfigList.get(2), 8000, 9998, SMS_CB_CODE_SCHEME_MIN, SMS_CB_CODE_SCHEME_MAX, true); checkConfigInfo(testManager.mConfigList.get(3), 50000, 65535, SMS_CB_CODE_SCHEME_MIN, SMS_CB_CODE_SCHEME_MAX, true); testManager.reset(); assertTrue("disabling range 5", testManager.disableRange(8000, 9998, "client5")); assertEquals("flags after test", ALL_FLAGS_SET, testManager.flags); assertEquals("configlist size", 1, testManager.mConfigList.size()); checkConfigInfo(testManager.mConfigList.get(0), 8000, 9998, SMS_CB_CODE_SCHEME_MIN, SMS_CB_CODE_SCHEME_MAX, false); testManager.reset(); assertTrue("updating ranges", testManager.updateRanges()); assertEquals("flags after test", ALL_FLAGS_SET, testManager.flags); assertEquals("configlist size", 3, testManager.mConfigList.size()); checkConfigInfo(testManager.mConfigList.get(0), 25, 75, SMS_CB_CODE_SCHEME_MIN, SMS_CB_CODE_SCHEME_MAX, true); checkConfigInfo(testManager.mConfigList.get(1), 150, 250, SMS_CB_CODE_SCHEME_MIN, SMS_CB_CODE_SCHEME_MAX, true); checkConfigInfo(testManager.mConfigList.get(2), 50000, 65535, SMS_CB_CODE_SCHEME_MIN, SMS_CB_CODE_SCHEME_MAX, true); testManager.reset(); assertTrue("disabling range 6", testManager.disableRange(50000, 65535, "client6")); assertEquals("flags after test", ALL_FLAGS_SET, testManager.flags); assertEquals("configlist size", 1, testManager.mConfigList.size()); checkConfigInfo(testManager.mConfigList.get(0), 50000, 65535, SMS_CB_CODE_SCHEME_MIN, SMS_CB_CODE_SCHEME_MAX, false); testManager.reset(); assertTrue("updating ranges", testManager.updateRanges()); assertEquals("flags after test", ALL_FLAGS_SET, testManager.flags); assertEquals("configlist size", 2, testManager.mConfigList.size()); checkConfigInfo(testManager.mConfigList.get(0), 25, 75, SMS_CB_CODE_SCHEME_MIN, SMS_CB_CODE_SCHEME_MAX, true); checkConfigInfo(testManager.mConfigList.get(1), 150, 250, SMS_CB_CODE_SCHEME_MIN, SMS_CB_CODE_SCHEME_MAX, true); testManager.reset(); assertTrue("disabling range 2", testManager.disableRange(150, 250, "client2")); assertEquals("flags after test", ALL_FLAGS_SET, testManager.flags); assertEquals("configlist size", 1, testManager.mConfigList.size()); checkConfigInfo(testManager.mConfigList.get(0), 150, 250, SMS_CB_CODE_SCHEME_MIN, SMS_CB_CODE_SCHEME_MAX, false); testManager.reset(); assertTrue("updating ranges", testManager.updateRanges()); assertEquals("flags after test", ALL_FLAGS_SET, testManager.flags); assertEquals("configlist size", 1, testManager.mConfigList.size()); checkConfigInfo(testManager.mConfigList.get(0), 25, 75, SMS_CB_CODE_SCHEME_MIN, SMS_CB_CODE_SCHEME_MAX, true); testManager.reset(); assertTrue("disabling range 3", testManager.disableRange(25, 75, "client3")); assertEquals("flags after test", ALL_FLAGS_SET, testManager.flags); assertEquals("configlist size", 1, testManager.mConfigList.size()); checkConfigInfo(testManager.mConfigList.get(0), 25, 75, SMS_CB_CODE_SCHEME_MIN, SMS_CB_CODE_SCHEME_MAX, false); testManager.reset(); assertTrue("updating ranges", testManager.updateRanges()); assertEquals("flags after test", FLAG_START_UPDATE_CALLED | FLAG_FINISH_UPDATE_CALLED, testManager.flags); assertEquals("configlist size", 0, testManager.mConfigList.size()); } }