13c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan/* 29c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu * Copyright (C) 2016 The Android Open Source Project 33c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan * 43c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan * Licensed under the Apache License, Version 2.0 (the "License"); 53c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan * you may not use this file except in compliance with the License. 63c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan * You may obtain a copy of the License at 73c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan * 83c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan * http://www.apache.org/licenses/LICENSE-2.0 93c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan * 103c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan * Unless required by applicable law or agreed to in writing, software 113c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan * distributed under the License is distributed on an "AS IS" BASIS, 123c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 133c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan * See the License for the specific language governing permissions and 143c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan * limitations under the License. 153c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan */ 163c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan 173c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajanpackage com.android.internal.telephony.gsm; 183c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan 19252459db4495ac41719866035698ae9af152298cJack Yuimport static android.provider.Settings.Secure.CMAS_ADDITIONAL_BROADCAST_PKG; 20252459db4495ac41719866035698ae9af152298cJack Yu 21252459db4495ac41719866035698ae9af152298cJack Yuimport static org.junit.Assert.assertEquals; 22cef2ab5e676f7a8187e5cddaa1d2547b13f48f39Jack Yuimport static org.mockito.Matchers.nullable; 23252459db4495ac41719866035698ae9af152298cJack Yuimport static org.mockito.Mockito.any; 24b6e1d01effda7b82b6b539c053f812031cfbbcf1Jack Yuimport static org.mockito.Mockito.anyBoolean; 25b6e1d01effda7b82b6b539c053f812031cfbbcf1Jack Yuimport static org.mockito.Mockito.anyInt; 26b6e1d01effda7b82b6b539c053f812031cfbbcf1Jack Yuimport static org.mockito.Mockito.doReturn; 27252459db4495ac41719866035698ae9af152298cJack Yuimport static org.mockito.Mockito.eq; 28252459db4495ac41719866035698ae9af152298cJack Yuimport static org.mockito.Mockito.times; 29b6e1d01effda7b82b6b539c053f812031cfbbcf1Jack Yuimport static org.mockito.Mockito.verify; 30b6e1d01effda7b82b6b539c053f812031cfbbcf1Jack Yu 31252459db4495ac41719866035698ae9af152298cJack Yuimport android.Manifest; 32252459db4495ac41719866035698ae9af152298cJack Yuimport android.app.Activity; 33252459db4495ac41719866035698ae9af152298cJack Yuimport android.app.AppOpsManager; 34252459db4495ac41719866035698ae9af152298cJack Yuimport android.content.BroadcastReceiver; 353c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajanimport android.content.Intent; 36252459db4495ac41719866035698ae9af152298cJack Yuimport android.os.Handler; 373c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajanimport android.os.HandlerThread; 38252459db4495ac41719866035698ae9af152298cJack Yuimport android.os.UserHandle; 39252459db4495ac41719866035698ae9af152298cJack Yuimport android.provider.Settings; 403c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajanimport android.provider.Telephony; 41516010d13181808ca8205316a419b615e5a9fe5eShuoqimport android.support.test.filters.FlakyTest; 429c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu 433c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajanimport com.android.internal.telephony.SmsStorageMonitor; 449c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yuimport com.android.internal.telephony.TelephonyTest; 453c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajanimport com.android.internal.telephony.TelephonyTestUtils; 463c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan 473c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajanimport org.junit.After; 483c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajanimport org.junit.Before; 49802962613bf8ac5e53d08a6310ceecf031e1b8a5Amit Mahajanimport org.junit.Ignore; 503c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajanimport org.mockito.ArgumentCaptor; 513c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajanimport org.mockito.Mock; 523c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan 53252459db4495ac41719866035698ae9af152298cJack Yuimport java.util.List; 54252459db4495ac41719866035698ae9af152298cJack Yu 55802962613bf8ac5e53d08a6310ceecf031e1b8a5Amit Mahajan@Ignore 569c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yupublic class GsmCellBroadcastHandlerTest extends TelephonyTest { 573c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan @Mock 583c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan private SmsStorageMonitor mSmsStorageMonitor; 593c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan @Mock 603c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan private android.telephony.SmsMessage mSmsMessage; 613c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan @Mock 623c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan private SmsMessage mGsmSmsMessage; 633c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan 643c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan private GsmCellBroadcastHandler mGsmCellBroadcastHandler; 657e9240253edb59e0aa657de434faa1ccdf17a742Amit Mahajan private GsmCellBroadcastHandlerTestHandler mGsmCellBroadcastHandlerTestHandler; 663c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan 673c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan private class GsmCellBroadcastHandlerTestHandler extends HandlerThread { 683c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan 693c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan private GsmCellBroadcastHandlerTestHandler(String name) { 703c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan super(name); 713c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan } 723c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan 733c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan @Override 743c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan public void onLooperPrepared() { 759c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu mGsmCellBroadcastHandler = GsmCellBroadcastHandler.makeGsmCellBroadcastHandler( 769c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu mContextFixture.getTestDouble(), mPhone); 779c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu setReady(true); 783c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan } 793c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan } 803c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan 813c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan @Before 823c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan public void setUp() throws Exception { 833c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan 849c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu super.setUp(getClass().getSimpleName()); 853c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan 863c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan doReturn(true).when(mTelephonyManager).getSmsReceiveCapableForPhone(anyInt(), anyBoolean()); 873c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan doReturn(true).when(mSmsStorageMonitor).isStorageAvailable(); 883c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan 897e9240253edb59e0aa657de434faa1ccdf17a742Amit Mahajan mGsmCellBroadcastHandlerTestHandler = 907e9240253edb59e0aa657de434faa1ccdf17a742Amit Mahajan new GsmCellBroadcastHandlerTestHandler(getClass().getSimpleName()); 917e9240253edb59e0aa657de434faa1ccdf17a742Amit Mahajan mGsmCellBroadcastHandlerTestHandler.start(); 925d5ca33a24e6b73a48b575a0e1a5e790784d0bb7Amit Mahajan waitUntilReady(); 933c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan } 943c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan 953c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan @After 963c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan public void tearDown() throws Exception { 973c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan mGsmCellBroadcastHandler = null; 98ae6e8f99bdb297f906d6dcdc0a385ba27eee47fdJack Yu mGsmCellBroadcastHandlerTestHandler.quit(); 999c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu super.tearDown(); 1003c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan } 1013c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan 102516010d13181808ca8205316a419b615e5a9fe5eShuoq @FlakyTest 1035d5ca33a24e6b73a48b575a0e1a5e790784d0bb7Amit Mahajan public void testBroadcastSms() { 104b6e1d01effda7b82b6b539c053f812031cfbbcf1Jack Yu mContextFixture.putResource( 105252459db4495ac41719866035698ae9af152298cJack Yu com.android.internal.R.string.config_defaultCellBroadcastReceiverPkg, 106252459db4495ac41719866035698ae9af152298cJack Yu "fake.cellbroadcastreceiver"); 107252459db4495ac41719866035698ae9af152298cJack Yu 108252459db4495ac41719866035698ae9af152298cJack Yu Settings.Secure.putString(mContext.getContentResolver(), 109252459db4495ac41719866035698ae9af152298cJack Yu CMAS_ADDITIONAL_BROADCAST_PKG, "another.fake.pkg"); 1103c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan mSimulatedCommands.notifyGsmBroadcastSms(new byte[] { 1113c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan (byte)0xc0, //geographical scope 1123c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan (byte)0x01, //serial number 1133c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan (byte)0x01, //serial number 1143c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan (byte)0x01, //message identifier 1153c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan (byte)0x01, //message identifier 1163c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan (byte)0x01 1173c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan }); 118252459db4495ac41719866035698ae9af152298cJack Yu TelephonyTestUtils.waitForMs(100); 1193c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan ArgumentCaptor<Intent> intentArgumentCaptor = ArgumentCaptor.forClass(Intent.class); 120252459db4495ac41719866035698ae9af152298cJack Yu verify(mContextFixture.getTestDouble(), times(2)).sendOrderedBroadcastAsUser( 121252459db4495ac41719866035698ae9af152298cJack Yu intentArgumentCaptor.capture(), eq(UserHandle.ALL), 122252459db4495ac41719866035698ae9af152298cJack Yu eq(Manifest.permission.RECEIVE_SMS), eq(AppOpsManager.OP_RECEIVE_SMS), 123cef2ab5e676f7a8187e5cddaa1d2547b13f48f39Jack Yu nullable(BroadcastReceiver.class), any(Handler.class), eq(Activity.RESULT_OK), 124cef2ab5e676f7a8187e5cddaa1d2547b13f48f39Jack Yu eq(null), eq(null)); 125252459db4495ac41719866035698ae9af152298cJack Yu 126252459db4495ac41719866035698ae9af152298cJack Yu List<Intent> intentList = intentArgumentCaptor.getAllValues(); 127252459db4495ac41719866035698ae9af152298cJack Yu 128252459db4495ac41719866035698ae9af152298cJack Yu assertEquals(Telephony.Sms.Intents.SMS_CB_RECEIVED_ACTION, 129252459db4495ac41719866035698ae9af152298cJack Yu intentList.get(0).getAction()); 130cef2ab5e676f7a8187e5cddaa1d2547b13f48f39Jack Yu assertEquals("another.fake.pkg", intentList.get(0).getPackage()); 131252459db4495ac41719866035698ae9af152298cJack Yu 132252459db4495ac41719866035698ae9af152298cJack Yu assertEquals(Telephony.Sms.Intents.SMS_CB_RECEIVED_ACTION, 133252459db4495ac41719866035698ae9af152298cJack Yu intentList.get(1).getAction()); 134cef2ab5e676f7a8187e5cddaa1d2547b13f48f39Jack Yu assertEquals("fake.cellbroadcastreceiver", intentList.get(1).getPackage()); 1353c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan } 1363c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan} 137