GsmCellBroadcastHandlerTest.java revision 516010d13181808ca8205316a419b615e5a9fe5e
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; 22252459db4495ac41719866035698ae9af152298cJack Yuimport static org.mockito.Mockito.any; 23b6e1d01effda7b82b6b539c053f812031cfbbcf1Jack Yuimport static org.mockito.Mockito.anyBoolean; 24b6e1d01effda7b82b6b539c053f812031cfbbcf1Jack Yuimport static org.mockito.Mockito.anyInt; 25b6e1d01effda7b82b6b539c053f812031cfbbcf1Jack Yuimport static org.mockito.Mockito.doReturn; 26252459db4495ac41719866035698ae9af152298cJack Yuimport static org.mockito.Mockito.eq; 27252459db4495ac41719866035698ae9af152298cJack Yuimport static org.mockito.Mockito.times; 28b6e1d01effda7b82b6b539c053f812031cfbbcf1Jack Yuimport static org.mockito.Mockito.verify; 29b6e1d01effda7b82b6b539c053f812031cfbbcf1Jack Yu 30252459db4495ac41719866035698ae9af152298cJack Yuimport android.Manifest; 31252459db4495ac41719866035698ae9af152298cJack Yuimport android.app.Activity; 32252459db4495ac41719866035698ae9af152298cJack Yuimport android.app.AppOpsManager; 33252459db4495ac41719866035698ae9af152298cJack Yuimport android.content.BroadcastReceiver; 343c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajanimport android.content.Intent; 35252459db4495ac41719866035698ae9af152298cJack Yuimport android.os.Handler; 363c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajanimport android.os.HandlerThread; 37252459db4495ac41719866035698ae9af152298cJack Yuimport android.os.UserHandle; 38252459db4495ac41719866035698ae9af152298cJack Yuimport android.provider.Settings; 393c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajanimport android.provider.Telephony; 40516010d13181808ca8205316a419b615e5a9fe5eShuoqimport android.support.test.filters.FlakyTest; 413c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajanimport android.test.suitebuilder.annotation.SmallTest; 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; 493c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajanimport org.junit.Test; 503c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajanimport org.mockito.ArgumentCaptor; 513c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajanimport org.mockito.Mock; 523c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan 53252459db4495ac41719866035698ae9af152298cJack Yuimport java.util.List; 54252459db4495ac41719866035698ae9af152298cJack Yu 559c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yupublic class GsmCellBroadcastHandlerTest extends TelephonyTest { 563c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan @Mock 573c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan private SmsStorageMonitor mSmsStorageMonitor; 583c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan @Mock 593c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan private android.telephony.SmsMessage mSmsMessage; 603c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan @Mock 613c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan private SmsMessage mGsmSmsMessage; 623c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan 633c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan private GsmCellBroadcastHandler mGsmCellBroadcastHandler; 647e9240253edb59e0aa657de434faa1ccdf17a742Amit Mahajan private GsmCellBroadcastHandlerTestHandler mGsmCellBroadcastHandlerTestHandler; 653c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan 663c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan private class GsmCellBroadcastHandlerTestHandler extends HandlerThread { 673c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan 683c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan private GsmCellBroadcastHandlerTestHandler(String name) { 693c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan super(name); 703c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan } 713c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan 723c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan @Override 733c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan public void onLooperPrepared() { 749c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu mGsmCellBroadcastHandler = GsmCellBroadcastHandler.makeGsmCellBroadcastHandler( 759c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu mContextFixture.getTestDouble(), mPhone); 769c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu setReady(true); 773c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan } 783c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan } 793c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan 803c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan @Before 813c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan public void setUp() throws Exception { 823c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan 839c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu super.setUp(getClass().getSimpleName()); 843c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan 853c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan doReturn(true).when(mTelephonyManager).getSmsReceiveCapableForPhone(anyInt(), anyBoolean()); 863c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan doReturn(true).when(mSmsStorageMonitor).isStorageAvailable(); 873c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan 887e9240253edb59e0aa657de434faa1ccdf17a742Amit Mahajan mGsmCellBroadcastHandlerTestHandler = 897e9240253edb59e0aa657de434faa1ccdf17a742Amit Mahajan new GsmCellBroadcastHandlerTestHandler(getClass().getSimpleName()); 907e9240253edb59e0aa657de434faa1ccdf17a742Amit Mahajan mGsmCellBroadcastHandlerTestHandler.start(); 915d5ca33a24e6b73a48b575a0e1a5e790784d0bb7Amit Mahajan waitUntilReady(); 923c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan } 933c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan 943c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan @After 953c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan public void tearDown() throws Exception { 963c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan mGsmCellBroadcastHandler = null; 977e9240253edb59e0aa657de434faa1ccdf17a742Amit Mahajan mGsmCellBroadcastHandlerTestHandler.quitSafely(); 989c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu super.tearDown(); 993c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan } 1003c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan 101516010d13181808ca8205316a419b615e5a9fe5eShuoq @FlakyTest 1023c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan @Test @SmallTest 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), 123252459db4495ac41719866035698ae9af152298cJack Yu any(BroadcastReceiver.class), any(Handler.class), eq(Activity.RESULT_OK), eq(null), 124252459db4495ac41719866035698ae9af152298cJack Yu 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()); 130252459db4495ac41719866035698ae9af152298cJack Yu // TODO: uncomment the following once ArgumentCaptor's bug is fixed. 131252459db4495ac41719866035698ae9af152298cJack Yu // assertEquals("fake.cellbroadcastreceiver", intentList.get(0).getPackage()); 132252459db4495ac41719866035698ae9af152298cJack Yu 133252459db4495ac41719866035698ae9af152298cJack Yu assertEquals(Telephony.Sms.Intents.SMS_CB_RECEIVED_ACTION, 134252459db4495ac41719866035698ae9af152298cJack Yu intentList.get(1).getAction()); 135252459db4495ac41719866035698ae9af152298cJack Yu assertEquals("another.fake.pkg", intentList.get(0).getPackage()); 1363c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan } 1373c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan} 138