10825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville/*
20825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Copyright (C) 2006 The Android Open Source Project
30825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville *
40825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Licensed under the Apache License, Version 2.0 (the "License");
50825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * you may not use this file except in compliance with the License.
60825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * You may obtain a copy of the License at
70825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville *
80825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville *      http://www.apache.org/licenses/LICENSE-2.0
90825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville *
100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Unless required by applicable law or agreed to in writing, software
110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * distributed under the License is distributed on an "AS IS" BASIS,
120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * See the License for the specific language governing permissions and
140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * limitations under the License.
150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */
160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
170825495a331bb44df395a0cdb79fab85e68db5d5Wink Savillepackage com.android.internal.telephony;
180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
190825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.ServiceManager;
200825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.test.suitebuilder.annotation.Suppress;
210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
22d720945f2be5ea5fe0faf67e67d9ea0e184eba67Alex Yakavenkaimport com.android.internal.telephony.uicc.AdnRecord;
23d720945f2be5ea5fe0faf67e67d9ea0e184eba67Alex Yakavenkaimport com.android.internal.telephony.uicc.IccConstants;
24d720945f2be5ea5fe0faf67e67d9ea0e184eba67Alex Yakavenka
250825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport java.util.List;
260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
270825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport junit.framework.TestCase;
280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville@Suppress
300825495a331bb44df395a0cdb79fab85e68db5d5Wink Savillepublic class SimPhoneBookTest extends TestCase {
310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void testBasic() throws Exception {
330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        IIccPhoneBook simPhoneBook =
340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                IIccPhoneBook.Stub.asInterface(ServiceManager.getService("simphonebook"));
350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertNotNull(simPhoneBook);
360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int size[] = simPhoneBook.getAdnRecordsSize(IccConstants.EF_ADN);
380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertNotNull(size);
390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(3, size.length);
400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(size[0] * size[2], size[1]);
410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertTrue(size[2] >= 100);
420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        List<AdnRecord> adnRecordList = simPhoneBook.getAdnRecordsInEf(IccConstants.EF_ADN);
440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // do it twice cause the second time shall read from cache only
450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        adnRecordList = simPhoneBook.getAdnRecordsInEf(IccConstants.EF_ADN);
460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertNotNull(adnRecordList);
470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // Test for phone book update
490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int adnIndex, listIndex = 0;
500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        AdnRecord originalAdn = null;
510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // We need to maintain the state of the SIM before and after the test.
520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // Since this test doesn't mock the SIM we try to get a valid ADN record,
530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // for 3 tries and if this fails, we bail out.
540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        for (adnIndex = 3 ; adnIndex >= 1; adnIndex--) {
550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            listIndex = adnIndex - 1; // listIndex is zero based.
560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            originalAdn = adnRecordList.get(listIndex);
570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            assertNotNull("Original Adn is Null.", originalAdn);
580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            assertNotNull("Original Adn alpha tag is null.", originalAdn.getAlphaTag());
590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            assertNotNull("Original Adn number is null.", originalAdn.getNumber());
600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (originalAdn.getNumber().length() > 0 &&
620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                originalAdn.getAlphaTag().length() > 0) {
630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                break;
640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (adnIndex == 0) return;
670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        AdnRecord emptyAdn = new AdnRecord("", "");
690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        AdnRecord firstAdn = new AdnRecord("John", "4085550101");
700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        AdnRecord secondAdn = new AdnRecord("Andy", "6505550102");
710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String pin2 = null;
720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // udpate by index
740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        boolean success = simPhoneBook.updateAdnRecordsInEfByIndex(IccConstants.EF_ADN,
750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                firstAdn.getAlphaTag(), firstAdn.getNumber(), adnIndex, pin2);
760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        adnRecordList = simPhoneBook.getAdnRecordsInEf(IccConstants.EF_ADN);
770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville         AdnRecord tmpAdn = adnRecordList.get(listIndex);
780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertTrue(success);
790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertTrue(firstAdn.isEqual(tmpAdn));
800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // replace by search
820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        success = simPhoneBook.updateAdnRecordsInEfBySearch(IccConstants.EF_ADN,
830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                firstAdn.getAlphaTag(), firstAdn.getNumber(),
840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                secondAdn.getAlphaTag(), secondAdn.getNumber(), pin2);
850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        adnRecordList = simPhoneBook.getAdnRecordsInEf(IccConstants.EF_ADN);
860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        tmpAdn = adnRecordList.get(listIndex);
870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertTrue(success);
880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertFalse(firstAdn.isEqual(tmpAdn));
890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertTrue(secondAdn.isEqual(tmpAdn));
900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // erase be search
920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        success = simPhoneBook.updateAdnRecordsInEfBySearch(IccConstants.EF_ADN,
930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                secondAdn.getAlphaTag(), secondAdn.getNumber(),
940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                emptyAdn.getAlphaTag(), emptyAdn.getNumber(), pin2);
950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        adnRecordList = simPhoneBook.getAdnRecordsInEf(IccConstants.EF_ADN);
960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        tmpAdn = adnRecordList.get(listIndex);
970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertTrue(success);
980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertTrue(tmpAdn.isEmpty());
990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // restore the orginial adn
1010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        success = simPhoneBook.updateAdnRecordsInEfByIndex(IccConstants.EF_ADN,
1020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                originalAdn.getAlphaTag(), originalAdn.getNumber(), adnIndex,
1030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                pin2);
1040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        adnRecordList = simPhoneBook.getAdnRecordsInEf(IccConstants.EF_ADN);
1050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        tmpAdn = adnRecordList.get(listIndex);
1060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertTrue(success);
1070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertTrue(originalAdn.isEqual(tmpAdn));
1080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
1090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville}
110