/* * Copyright (C) 2008 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.cellbroadcastreceiver; import java.io.UnsupportedEncodingException; import android.content.Intent; import android.provider.Telephony.Sms.Intents; import android.telephony.SmsCbLocation; import android.telephony.SmsCbMessage; import android.test.ActivityInstrumentationTestCase2; import android.util.Log; import com.android.internal.telephony.EncodeException; import com.android.internal.telephony.GsmAlphabet; import com.android.internal.telephony.gsm.GsmSmsCbMessage; import com.android.internal.telephony.uicc.IccUtils; /** * Various instrumentation tests for CellBroadcastReceiver. * * To run this test: runtest cellbroadcastreceiver * or: adb shell am instrument -w \ * com.android.cellbroadcastreceiver.tests/android.test.InstrumentationTestRunner * * TODO: write better test cases * */ public class DialogSmsDisplayTests extends ActivityInstrumentationTestCase2 { public static final String ACTION_SMS_SENT = "com.android.basicsmsreceiver.tests.SMS_SENT_ACTION"; private static String TAG = "DialogSmsDisplayTests"; private static final int DCS_7BIT_ENGLISH = 0x01; private static final int DCS_16BIT_UCS2 = 0x48; /* ETWS Test message including header */ private static final byte[] etwsMessageNormal = IccUtils.hexStringToBytes("000011001101" + // Line 1 CRLFLine 2 "EA307DCA602557309707901F58310D0A5BAE57CE770C531790E85C716CBF3044573065B930675730" + "9707767A751F30025F37304463FA308C306B5099304830664E0B30553044FF086C178C615E81FF09"); private static final byte[] etwsMessageCancel = IccUtils.hexStringToBytes("000011001101" + // Line 1 CRLFLine 2 "EA307DCA602557309707901F5831002853D66D8800290D0A5148307B3069002800310030003A0035" + "00320029306E7DCA602557309707901F5831309253D66D883057307E3059FF086C178C615E81FF09"); private static final byte[] etwsMessageTest = IccUtils.hexStringToBytes("000011031101" + // Line 1 CRLFLine 2 "EA3030108A137DF430117DCA602557309707573058310D0A5BAE57CE770C531790E85C716CBF3044" + "573065B9306757309707300263FA308C306B5099304830664E0B30553044FF086C178C615E81FF09"); public DialogSmsDisplayTests() { super(CellBroadcastListActivity.class); Log.i(TAG, "DialogSmsDisplayTests"); } @Override protected void setUp() throws Exception { super.setUp(); } @Override protected void tearDown() throws Exception { super.tearDown(); } byte[] encodeCellBroadcast(int serialNumber, int messageId, int dcs, String message) { byte[] pdu = new byte[88]; pdu[0] = (byte) ((serialNumber >> 8) & 0xff); pdu[1] = (byte) (serialNumber & 0xff); pdu[2] = (byte) ((messageId >> 8) & 0xff); pdu[3] = (byte) (messageId & 0xff); pdu[4] = (byte) (dcs & 0xff); pdu[5] = 0x11; // single page message try { byte[] encodedString; if (dcs == DCS_16BIT_UCS2) { encodedString = message.getBytes("UTF-16"); System.arraycopy(encodedString, 0, pdu, 6, encodedString.length); } else { // byte 0 of encodedString is the length in septets (don't copy) encodedString = GsmAlphabet.stringToGsm7BitPacked(message); System.arraycopy(encodedString, 1, pdu, 6, encodedString.length-1); } return pdu; } catch (EncodeException e) { Log.e(TAG, "Encode Exception"); return null; } catch (UnsupportedEncodingException e) { Log.e(TAG, "Unsupported encoding exception for UTF-16"); return null; } } private static final SmsCbLocation sEmptyLocation = new SmsCbLocation(); private static SmsCbMessage createFromPdu(byte[] pdu) { try { byte[][] pdus = new byte[1][]; pdus[0] = pdu; return GsmSmsCbMessage.createSmsCbMessage(sEmptyLocation, pdus); } catch (IllegalArgumentException e) { return null; } } public void testSendMessage7bit() throws Exception { Intent intent = new Intent(Intents.SMS_CB_RECEIVED_ACTION); byte[] pdu = encodeCellBroadcast(0, 0, DCS_7BIT_ENGLISH, "Hello in GSM 7 bit"); intent.putExtra("message", createFromPdu(pdu)); getActivity().sendOrderedBroadcast(intent, "android.permission.RECEIVE_SMS"); } public void testSendMessageUCS2() throws Exception { Intent intent = new Intent(Intents.SMS_CB_RECEIVED_ACTION); byte[] pdu = encodeCellBroadcast(0, 0, DCS_16BIT_UCS2, "Hello in UCS2"); intent.putExtra("message", createFromPdu(pdu)); getActivity().sendOrderedBroadcast(intent, "android.permission.RECEIVE_SMS"); } public void testSendEtwsMessageNormal() throws Exception { Intent intent = new Intent(Intents.SMS_EMERGENCY_CB_RECEIVED_ACTION); intent.putExtra("message", createFromPdu(etwsMessageNormal)); getActivity().sendOrderedBroadcast(intent, "android.permission.RECEIVE_EMERGENCY_BROADCAST"); } public void testSendEtwsMessageCancel() throws Exception { Intent intent = new Intent(Intents.SMS_EMERGENCY_CB_RECEIVED_ACTION); intent.putExtra("message", createFromPdu(etwsMessageCancel)); getActivity().sendOrderedBroadcast(intent, "android.permission.RECEIVE_EMERGENCY_BROADCAST"); } public void testSendEtwsMessageTest() throws Exception { Intent intent = new Intent(Intents.SMS_EMERGENCY_CB_RECEIVED_ACTION); intent.putExtra("message", createFromPdu(etwsMessageTest)); getActivity().sendOrderedBroadcast(intent, "android.permission.RECEIVE_EMERGENCY_BROADCAST"); } }