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