1ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajan/*
29c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu * Copyright (C) 2016 The Android Open Source Project
3ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajan *
4ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajan * Licensed under the Apache License, Version 2.0 (the "License");
5ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajan * you may not use this file except in compliance with the License.
6ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajan * You may obtain a copy of the License at
7ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajan *
8ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajan *      http://www.apache.org/licenses/LICENSE-2.0
9ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajan *
10ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajan * Unless required by applicable law or agreed to in writing, software
11ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajan * distributed under the License is distributed on an "AS IS" BASIS,
12ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajan * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajan * See the License for the specific language governing permissions and
14ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajan * limitations under the License.
15ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajan */
16ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajan
17ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajanpackage com.android.internal.telephony;
18ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajan
19ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajanimport android.content.Intent;
20ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajanimport android.os.HandlerThread;
21ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajanimport android.os.Message;
22ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajanimport android.provider.Telephony;
23ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajanimport android.test.suitebuilder.annotation.SmallTest;
24ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajanimport android.util.Log;
25ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajan
26ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajanimport com.android.internal.telephony.test.SimulatedCommands;
27ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajanimport com.android.internal.telephony.test.SimulatedCommandsVerifier;
28ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajan
29ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajanimport org.junit.After;
30ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajanimport org.junit.Before;
31ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajanimport org.junit.Test;
32ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajanimport org.mockito.ArgumentCaptor;
33ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajanimport org.mockito.Mock;
34ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajanimport org.mockito.MockitoAnnotations;
35ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajan
36ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajanimport java.lang.reflect.Field;
37ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajan
38ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajanimport static org.junit.Assert.*;
39ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajanimport static org.mockito.Mockito.*;
40ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajan
419c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yupublic class SmsStorageMonitorTest extends TelephonyTest {
42ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajan
43ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajan    private SmsStorageMonitor mSmsStorageMonitor;
447e9240253edb59e0aa657de434faa1ccdf17a742Amit Mahajan    private SmsStorageMonitorTestHandler mSmsStorageMonitorTestHandler;
45ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajan
46ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajan    private class SmsStorageMonitorTestHandler extends HandlerThread {
47ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajan
48ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajan        private SmsStorageMonitorTestHandler(String name) {
49ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajan            super(name);
50ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajan        }
51ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajan
52ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajan        @Override
53ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajan        public void onLooperPrepared() {
54ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajan            mSmsStorageMonitor = new SmsStorageMonitor(mPhone);
559c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu            setReady(true);
56ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajan        }
57ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajan    }
58ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajan
59ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajan    @Before
60ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajan    public void setUp() throws Exception {
619c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu        super.setUp(getClass().getSimpleName());
627e9240253edb59e0aa657de434faa1ccdf17a742Amit Mahajan        mSmsStorageMonitorTestHandler = new SmsStorageMonitorTestHandler(TAG);
637e9240253edb59e0aa657de434faa1ccdf17a742Amit Mahajan        mSmsStorageMonitorTestHandler.start();
64ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajan        waitUntilReady();
65ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajan    }
66ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajan
67ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajan    @After
68ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajan    public void tearDown() throws Exception {
69ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajan        mSmsStorageMonitor = null;
70ae6e8f99bdb297f906d6dcdc0a385ba27eee47fdJack Yu        mSmsStorageMonitorTestHandler.quit();
719c96807d990cdd3f4bb2d3f0fd56a1e78a95b353Jack Yu        super.tearDown();
72ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajan    }
73ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajan
74ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajan    @Test @SmallTest
75ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajan    public void testEventIccFull() {
76ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajan        // Notify icc sms full
77ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajan        mSimulatedCommands.notifyIccSmsFull();
78ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajan        TelephonyTestUtils.waitForMs(50);
79ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajan
80ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajan        // SIM_FULL_ACTION intent should be broadcast
81ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajan        ArgumentCaptor<Intent> intentArgumentCaptor = ArgumentCaptor.forClass(Intent.class);
82ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajan        verify(mContextFixture.getTestDouble()).sendBroadcast(intentArgumentCaptor.capture());
83ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajan        assertEquals(Telephony.Sms.Intents.SIM_FULL_ACTION,
84ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajan                intentArgumentCaptor.getValue().getAction());
85ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajan    }
86ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajan
87ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajan    @Test @SmallTest
88ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajan    public void testSmsMemoryStatus() {
89ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajan        // Notify radio on
90ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajan        mSimulatedCommands.notifyRadioOn();
91ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajan        TelephonyTestUtils.waitForMs(50);
92ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajan
93ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajan        verify(mSimulatedCommandsVerifier, never()).reportSmsMemoryStatus(anyBoolean(),
94ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajan                any(Message.class));
95ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajan
96ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajan        // Send DEVICE_STORAGE_FULL
97ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajan        mContextFixture.getTestDouble().sendBroadcast(
98ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajan                new Intent(Intent.ACTION_DEVICE_STORAGE_FULL));
99ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajan        TelephonyTestUtils.waitForMs(50);
100ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajan
101ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajan        verify(mSimulatedCommandsVerifier).reportSmsMemoryStatus(eq(false), any(Message.class));
102ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajan        assertFalse(mSmsStorageMonitor.isStorageAvailable());
103ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajan
104ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajan        mSimulatedCommands.notifyRadioOn();
105ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajan        TelephonyTestUtils.waitForMs(50);
106ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajan
107ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajan        verify(mSimulatedCommandsVerifier).reportSmsMemoryStatus(eq(false), any(Message.class));
108ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajan
109ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajan        // Send DEVICE_STORAGE_NOT_FULL
110ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajan        mContextFixture.getTestDouble().sendBroadcast(
111ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajan                new Intent(Intent.ACTION_DEVICE_STORAGE_NOT_FULL));
112ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajan        TelephonyTestUtils.waitForMs(50);
113ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajan
114ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajan        verify(mSimulatedCommandsVerifier).reportSmsMemoryStatus(eq(true), any(Message.class));
115ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajan        assertTrue(mSmsStorageMonitor.isStorageAvailable());
116ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajan
117ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajan        mSimulatedCommands.notifyRadioOn();
118ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajan        TelephonyTestUtils.waitForMs(50);
119ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajan
120ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajan        verify(mSimulatedCommandsVerifier).reportSmsMemoryStatus(eq(true), any(Message.class));
121ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajan    }
122ceea0fa1248e326663ac56e5ba37b0633f8adaccAmit Mahajan}