1ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby/* 2ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby * Copyright (C) 2011 The Android Open Source Project 3ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby * 4ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby * Licensed under the Apache License, Version 2.0 (the "License"); 5ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby * you may not use this file except in compliance with the License. 6ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby * You may obtain a copy of the License at 7ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby * 8ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby * http://www.apache.org/licenses/LICENSE-2.0 9ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby * 10ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby * Unless required by applicable law or agreed to in writing, software 11ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby * distributed under the License is distributed on an "AS IS" BASIS, 12ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby * See the License for the specific language governing permissions and 14ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby * limitations under the License. 15ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby */ 16ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby 17ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hambypackage com.android.internal.telephony.gsm; 18ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby 19ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hambyimport android.os.HandlerThread; 20ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hambyimport android.test.AndroidTestCase; 21ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hambyimport android.util.Log; 22ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby 23ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hambyimport java.nio.charset.Charset; 24ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby 25ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby/** 26ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby * Test SMS-PP data download to UICC. 27ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby * Uses test messages from 3GPP TS 31.124 section 27.22.5. 28ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby */ 29ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hambypublic class UsimDataDownloadTest extends AndroidTestCase { 30ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby private static final String TAG = "UsimDataDownloadTest"; 31ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby 32ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby class TestHandlerThread extends HandlerThread { 33ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby private UsimDataDownloadHandler mHandler; 34ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby 35ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby TestHandlerThread() { 36ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby super("TestHandlerThread"); 37ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby } 38ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby 39ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby @Override 40ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby protected void onLooperPrepared() { 41ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby synchronized (this) { 42ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby mHandler = new UsimDataDownloadHandler(mCm); 43ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby notifyAll(); 44ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby } 45ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby } 46ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby 47ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby UsimDataDownloadHandler getHandler() { 48ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby synchronized (this) { 49ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby while (mHandler == null) { 50ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby try { 51ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby wait(); 52ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby } catch (InterruptedException ignored) {} 53ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby } 54ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby return mHandler; 55ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby } 56ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby } 57ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby } 58ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby 59ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby private UsimDataDownloadCommands mCm; 60ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby private TestHandlerThread mHandlerThread; 61ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby UsimDataDownloadHandler mHandler; 62ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby 63ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby @Override 64ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby protected void setUp() throws Exception { 65ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby super.setUp(); 66ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby mCm = new UsimDataDownloadCommands(mContext); 67ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby mHandlerThread = new TestHandlerThread(); 68ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby mHandlerThread.start(); 69ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby mHandler = mHandlerThread.getHandler(); 70ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby Log.d(TAG, "mHandler is constructed"); 71ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby } 72ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby 73ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby @Override 74ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby protected void tearDown() throws Exception { 75ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby mHandlerThread.quit(); 76ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby super.tearDown(); 77ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby } 78ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby 79ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby // SMS-PP Message 3.1.1 80ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby private static final byte[] SMS_PP_MESSAGE_3_1_1 = { 81ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby // Service center address 82ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby 0x09, (byte) 0x91, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, (byte) 0xf8, 83ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby 84ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby 0x04, 0x04, (byte) 0x91, 0x21, 0x43, 0x7f, 0x16, (byte) 0x89, 0x10, 0x10, 0x00, 0x00, 85ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby 0x00, 0x00, 0x0d, 0x54, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 86ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby 0x67, 0x65, 0x20, 0x31 87ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby }; 88ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby 89ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby // SMS-PP Download Envelope 3.1.1 90ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby private static final String SMS_PP_ENVELOPE_3_1_1 = "d12d8202838106099111223344556677f88b1c04" 91ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby + "049121437f16891010000000000d546573744d6573736167652031"; 92ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby 93ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby // SMS-PP Message 3.1.5 94ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby private static final byte[] SMS_PP_MESSAGE_3_1_5 = { 95ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby // Service center address 96ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby 0x09, (byte) 0x91, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, (byte) 0xf8, 97ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby 98ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby 0x44, 0x04, (byte) 0x91, 0x21, 0x43, 0x7f, (byte) 0xf6, (byte) 0x89, 0x10, 0x10, 0x00, 99ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby 0x00, 0x00, 0x00, 0x1e, 0x02, 0x70, 0x00, 0x00, 0x19, 0x00, 0x0d, 0x00, 0x00, 100ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby 0x00, 0x00, (byte) 0xbf, (byte) 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 101ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby (byte) 0xdc, (byte) 0xdc, (byte) 0xdc, (byte) 0xdc, (byte) 0xdc, (byte) 0xdc, 102ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby (byte) 0xdc, (byte) 0xdc, (byte) 0xdc, (byte) 0xdc 103ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby }; 104ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby 105ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby // SMS-PP Download Envelope 3.1.5 106ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby private static final String SMS_PP_ENVELOPE_3_1_5 = "d13e8202838106099111223344556677f88b2d44" 107ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby + "049121437ff6891010000000001e0270000019000d00000000bfff00000000000100" 108ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby + "dcdcdcdcdcdcdcdcdcdc"; 109ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby 110ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby public void testDataDownloadMessage1() { 111ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby SmsMessage message = SmsMessage.createFromPdu(SMS_PP_MESSAGE_3_1_1); 112ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby assertTrue("message is SMS-PP data download", message.isUsimDataDownload()); 113ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby 114ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby mCm.expectSendEnvelope(SMS_PP_ENVELOPE_3_1_1, 0x90, 0x00, ""); 115ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby mCm.expectAcknowledgeGsmSms(true, 0); 116ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby mHandler.startDataDownload(message); 117ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby mCm.assertExpectedMethodsCalled(); 118ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby 119ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby mCm.expectSendEnvelope(SMS_PP_ENVELOPE_3_1_1, 0x90, 0x00, "0123456789"); 120ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby mCm.expectAcknowledgeGsmSmsWithPdu(true, "00077f16050123456789"); 121ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby mHandler.startDataDownload(message); 122ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby mCm.assertExpectedMethodsCalled(); 123ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby 124ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby mCm.expectSendEnvelope(SMS_PP_ENVELOPE_3_1_1, 0x62, 0xff, "0123456789abcdef"); 125ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby mCm.expectAcknowledgeGsmSmsWithPdu(false, "00d5077f16080123456789abcdef"); 126ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby mHandler.startDataDownload(message); 127ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby mCm.assertExpectedMethodsCalled(); 128ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby } 129ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby 130ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby public void testDataDownloadMessage5() { 131ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby SmsMessage message = SmsMessage.createFromPdu(SMS_PP_MESSAGE_3_1_5); 132ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby assertTrue("message is SMS-PP data download", message.isUsimDataDownload()); 133ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby 134ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby mCm.expectSendEnvelope(SMS_PP_ENVELOPE_3_1_5, 0x90, 0x00, "9876543210"); 135ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby mCm.expectAcknowledgeGsmSmsWithPdu(true, "00077ff6059876543210"); 136ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby mHandler.startDataDownload(message); 137ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby mCm.assertExpectedMethodsCalled(); 138ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby 139ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby mCm.expectSendEnvelope(SMS_PP_ENVELOPE_3_1_5, 0x93, 0x00, ""); 140ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby mCm.expectAcknowledgeGsmSms(false, 0xd4); // SIM toolkit busy 141ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby mHandler.startDataDownload(message); 142ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby mCm.assertExpectedMethodsCalled(); 143ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby } 144ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby} 145