UsimDataDownloadTest.java revision 0825495a331bb44df395a0cdb79fab85e68db5d5
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.gsm; 18 19import android.os.HandlerThread; 20import android.test.AndroidTestCase; 21import android.util.Log; 22 23import java.nio.charset.Charset; 24 25/** 26 * Test SMS-PP data download to UICC. 27 * Uses test messages from 3GPP TS 31.124 section 27.22.5. 28 */ 29public class UsimDataDownloadTest extends AndroidTestCase { 30 private static final String TAG = "UsimDataDownloadTest"; 31 32 class TestHandlerThread extends HandlerThread { 33 private UsimDataDownloadHandler mHandler; 34 35 TestHandlerThread() { 36 super("TestHandlerThread"); 37 } 38 39 @Override 40 protected void onLooperPrepared() { 41 synchronized (this) { 42 mHandler = new UsimDataDownloadHandler(mCm); 43 notifyAll(); 44 } 45 } 46 47 UsimDataDownloadHandler getHandler() { 48 synchronized (this) { 49 while (mHandler == null) { 50 try { 51 wait(); 52 } catch (InterruptedException ignored) {} 53 } 54 return mHandler; 55 } 56 } 57 } 58 59 private UsimDataDownloadCommands mCm; 60 private TestHandlerThread mHandlerThread; 61 UsimDataDownloadHandler mHandler; 62 63 @Override 64 protected void setUp() throws Exception { 65 super.setUp(); 66 mCm = new UsimDataDownloadCommands(mContext); 67 mHandlerThread = new TestHandlerThread(); 68 mHandlerThread.start(); 69 mHandler = mHandlerThread.getHandler(); 70 Log.d(TAG, "mHandler is constructed"); 71 } 72 73 @Override 74 protected void tearDown() throws Exception { 75 mHandlerThread.quit(); 76 super.tearDown(); 77 } 78 79 // SMS-PP Message 3.1.1 80 private static final byte[] SMS_PP_MESSAGE_3_1_1 = { 81 // Service center address 82 0x09, (byte) 0x91, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, (byte) 0xf8, 83 84 0x04, 0x04, (byte) 0x91, 0x21, 0x43, 0x7f, 0x16, (byte) 0x89, 0x10, 0x10, 0x00, 0x00, 85 0x00, 0x00, 0x0d, 0x54, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 86 0x67, 0x65, 0x20, 0x31 87 }; 88 89 // SMS-PP Download Envelope 3.1.1 90 private static final String SMS_PP_ENVELOPE_3_1_1 = "d12d8202838106099111223344556677f88b1c04" 91 + "049121437f16891010000000000d546573744d6573736167652031"; 92 93 // SMS-PP Message 3.1.5 94 private static final byte[] SMS_PP_MESSAGE_3_1_5 = { 95 // Service center address 96 0x09, (byte) 0x91, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, (byte) 0xf8, 97 98 0x44, 0x04, (byte) 0x91, 0x21, 0x43, 0x7f, (byte) 0xf6, (byte) 0x89, 0x10, 0x10, 0x00, 99 0x00, 0x00, 0x00, 0x1e, 0x02, 0x70, 0x00, 0x00, 0x19, 0x00, 0x0d, 0x00, 0x00, 100 0x00, 0x00, (byte) 0xbf, (byte) 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 101 (byte) 0xdc, (byte) 0xdc, (byte) 0xdc, (byte) 0xdc, (byte) 0xdc, (byte) 0xdc, 102 (byte) 0xdc, (byte) 0xdc, (byte) 0xdc, (byte) 0xdc 103 }; 104 105 // SMS-PP Download Envelope 3.1.5 106 private static final String SMS_PP_ENVELOPE_3_1_5 = "d13e8202838106099111223344556677f88b2d44" 107 + "049121437ff6891010000000001e0270000019000d00000000bfff00000000000100" 108 + "dcdcdcdcdcdcdcdcdcdc"; 109 110 public void testDataDownloadMessage1() { 111 SmsMessage message = SmsMessage.createFromPdu(SMS_PP_MESSAGE_3_1_1); 112 assertTrue("message is SMS-PP data download", message.isUsimDataDownload()); 113 114 mCm.expectSendEnvelope(SMS_PP_ENVELOPE_3_1_1, 0x90, 0x00, ""); 115 mCm.expectAcknowledgeGsmSms(true, 0); 116 mHandler.startDataDownload(message); 117 mCm.assertExpectedMethodsCalled(); 118 119 mCm.expectSendEnvelope(SMS_PP_ENVELOPE_3_1_1, 0x90, 0x00, "0123456789"); 120 mCm.expectAcknowledgeGsmSmsWithPdu(true, "00077f16050123456789"); 121 mHandler.startDataDownload(message); 122 mCm.assertExpectedMethodsCalled(); 123 124 mCm.expectSendEnvelope(SMS_PP_ENVELOPE_3_1_1, 0x62, 0xff, "0123456789abcdef"); 125 mCm.expectAcknowledgeGsmSmsWithPdu(false, "00d5077f16080123456789abcdef"); 126 mHandler.startDataDownload(message); 127 mCm.assertExpectedMethodsCalled(); 128 } 129 130 public void testDataDownloadMessage5() { 131 SmsMessage message = SmsMessage.createFromPdu(SMS_PP_MESSAGE_3_1_5); 132 assertTrue("message is SMS-PP data download", message.isUsimDataDownload()); 133 134 mCm.expectSendEnvelope(SMS_PP_ENVELOPE_3_1_5, 0x90, 0x00, "9876543210"); 135 mCm.expectAcknowledgeGsmSmsWithPdu(true, "00077ff6059876543210"); 136 mHandler.startDataDownload(message); 137 mCm.assertExpectedMethodsCalled(); 138 139 mCm.expectSendEnvelope(SMS_PP_ENVELOPE_3_1_5, 0x93, 0x00, ""); 140 mCm.expectAcknowledgeGsmSms(false, 0xd4); // SIM toolkit busy 141 mHandler.startDataDownload(message); 142 mCm.assertExpectedMethodsCalled(); 143 } 144} 145