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
193c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajanimport android.content.Intent;
203c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajanimport android.os.HandlerThread;
213c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajanimport android.provider.Telephony;
223c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajanimport android.test.suitebuilder.annotation.SmallTest;
239c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu
243c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajanimport com.android.internal.telephony.SmsStorageMonitor;
259c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yuimport com.android.internal.telephony.TelephonyTest;
263c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajanimport com.android.internal.telephony.TelephonyTestUtils;
273c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan
283c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajanimport org.junit.After;
293c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajanimport org.junit.Before;
303c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajanimport org.junit.Test;
313c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajanimport org.mockito.ArgumentCaptor;
323c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajanimport org.mockito.Mock;
333c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan
349c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yuimport static org.junit.Assert.assertTrue;
359c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yuimport static org.mockito.Mockito.anyBoolean;
369c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yuimport static org.mockito.Mockito.anyInt;
379c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yuimport static org.mockito.Mockito.doReturn;
389c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yuimport static org.mockito.Mockito.verify;
393c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan
409c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yupublic class GsmCellBroadcastHandlerTest extends TelephonyTest {
413c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan    @Mock
423c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan    private SmsStorageMonitor mSmsStorageMonitor;
433c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan    @Mock
443c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan    private android.telephony.SmsMessage mSmsMessage;
453c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan    @Mock
463c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan    private SmsMessage mGsmSmsMessage;
473c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan
483c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan    private GsmCellBroadcastHandler mGsmCellBroadcastHandler;
497e9240253edb59e0aa657de434faa1ccdf17a742Amit Mahajan    private GsmCellBroadcastHandlerTestHandler mGsmCellBroadcastHandlerTestHandler;
503c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan
513c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan    private class GsmCellBroadcastHandlerTestHandler extends HandlerThread {
523c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan
533c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan        private GsmCellBroadcastHandlerTestHandler(String name) {
543c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan            super(name);
553c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan        }
563c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan
573c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan        @Override
583c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan        public void onLooperPrepared() {
599c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu            mGsmCellBroadcastHandler = GsmCellBroadcastHandler.makeGsmCellBroadcastHandler(
609c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu                    mContextFixture.getTestDouble(), mPhone);
619c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu            setReady(true);
623c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan        }
633c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan    }
643c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan
653c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan    @Before
663c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan    public void setUp() throws Exception {
673c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan
689c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu        super.setUp(getClass().getSimpleName());
693c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan
703c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan        doReturn(true).when(mTelephonyManager).getSmsReceiveCapableForPhone(anyInt(), anyBoolean());
713c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan        doReturn(true).when(mSmsStorageMonitor).isStorageAvailable();
723c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan
737e9240253edb59e0aa657de434faa1ccdf17a742Amit Mahajan        mGsmCellBroadcastHandlerTestHandler =
747e9240253edb59e0aa657de434faa1ccdf17a742Amit Mahajan                new GsmCellBroadcastHandlerTestHandler(getClass().getSimpleName());
757e9240253edb59e0aa657de434faa1ccdf17a742Amit Mahajan        mGsmCellBroadcastHandlerTestHandler.start();
765d5ca33a24e6b73a48b575a0e1a5e790784d0bb7Amit Mahajan        waitUntilReady();
773c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan    }
783c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan
793c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan    @After
803c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan    public void tearDown() throws Exception {
813c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan        mGsmCellBroadcastHandler = null;
827e9240253edb59e0aa657de434faa1ccdf17a742Amit Mahajan        mGsmCellBroadcastHandlerTestHandler.quitSafely();
839c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu        super.tearDown();
843c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan    }
853c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan
863c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan    @Test @SmallTest
875d5ca33a24e6b73a48b575a0e1a5e790784d0bb7Amit Mahajan    public void testBroadcastSms() {
883c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan        mSimulatedCommands.notifyGsmBroadcastSms(new byte[] {
893c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan                (byte)0xc0, //geographical scope
903c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan                (byte)0x01, //serial number
913c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan                (byte)0x01, //serial number
923c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan                (byte)0x01, //message identifier
933c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan                (byte)0x01, //message identifier
943c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan                (byte)0x01
953c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan        });
963c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan        TelephonyTestUtils.waitForMs(50);
973c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan        ArgumentCaptor<Intent> intentArgumentCaptor = ArgumentCaptor.forClass(Intent.class);
983c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan        verify(mContextFixture.getTestDouble()).sendBroadcast(intentArgumentCaptor.capture());
993c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan        assertTrue(intentArgumentCaptor.getValue().getAction().equals(
1003c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan                Telephony.Sms.Intents.SMS_EMERGENCY_CB_RECEIVED_ACTION) ||
1013c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan                intentArgumentCaptor.getValue().getAction().equals(
1023c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan                        Telephony.Sms.Intents.SMS_CB_RECEIVED_ACTION));
1033c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan    }
1043c7c2c2dfecfe11991f707a09ce79863e0ffdaa7Amit Mahajan}
105