• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2016 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License
15  */
16 
17 package com.android.cellbroadcastreceiver;
18 
19 import static android.telephony.SmsManager.CELL_BROADCAST_RAN_TYPE_CDMA;
20 import static android.telephony.SmsManager.CELL_BROADCAST_RAN_TYPE_GSM;
21 
22 import static com.android.internal.telephony.cdma.sms.SmsEnvelope.SERVICE_CATEGORY_CMAS_CHILD_ABDUCTION_EMERGENCY;
23 import static com.android.internal.telephony.cdma.sms.SmsEnvelope.SERVICE_CATEGORY_CMAS_EXTREME_THREAT;
24 import static com.android.internal.telephony.cdma.sms.SmsEnvelope.SERVICE_CATEGORY_CMAS_PRESIDENTIAL_LEVEL_ALERT;
25 import static com.android.internal.telephony.cdma.sms.SmsEnvelope.SERVICE_CATEGORY_CMAS_SEVERE_THREAT;
26 import static com.android.internal.telephony.gsm.SmsCbConstants.MESSAGE_ID_CMAS_ALERT_CHILD_ABDUCTION_EMERGENCY;
27 import static com.android.internal.telephony.gsm.SmsCbConstants.MESSAGE_ID_CMAS_ALERT_CHILD_ABDUCTION_EMERGENCY_LANGUAGE;
28 import static com.android.internal.telephony.gsm.SmsCbConstants.MESSAGE_ID_CMAS_ALERT_EXTREME_EXPECTED_OBSERVED;
29 import static com.android.internal.telephony.gsm.SmsCbConstants.MESSAGE_ID_CMAS_ALERT_EXTREME_EXPECTED_OBSERVED_LANGUAGE;
30 import static com.android.internal.telephony.gsm.SmsCbConstants.MESSAGE_ID_CMAS_ALERT_EXTREME_IMMEDIATE_LIKELY;
31 import static com.android.internal.telephony.gsm.SmsCbConstants.MESSAGE_ID_CMAS_ALERT_EXTREME_IMMEDIATE_LIKELY_LANGUAGE;
32 import static com.android.internal.telephony.gsm.SmsCbConstants.MESSAGE_ID_CMAS_ALERT_EXTREME_IMMEDIATE_OBSERVED;
33 import static com.android.internal.telephony.gsm.SmsCbConstants.MESSAGE_ID_CMAS_ALERT_EXTREME_IMMEDIATE_OBSERVED_LANGUAGE;
34 import static com.android.internal.telephony.gsm.SmsCbConstants.MESSAGE_ID_CMAS_ALERT_PRESIDENTIAL_LEVEL;
35 import static com.android.internal.telephony.gsm.SmsCbConstants.MESSAGE_ID_CMAS_ALERT_PRESIDENTIAL_LEVEL_LANGUAGE;
36 import static com.android.internal.telephony.gsm.SmsCbConstants.MESSAGE_ID_CMAS_ALERT_SEVERE_EXPECTED_LIKELY;
37 import static com.android.internal.telephony.gsm.SmsCbConstants.MESSAGE_ID_CMAS_ALERT_SEVERE_EXPECTED_LIKELY_LANGUAGE;
38 import static com.android.internal.telephony.gsm.SmsCbConstants.MESSAGE_ID_ETWS_EARTHQUAKE_AND_TSUNAMI_WARNING;
39 import static com.android.internal.telephony.gsm.SmsCbConstants.MESSAGE_ID_ETWS_EARTHQUAKE_WARNING;
40 import static com.android.internal.telephony.gsm.SmsCbConstants.MESSAGE_ID_ETWS_OTHER_EMERGENCY_TYPE;
41 
42 import static org.mockito.Matchers.anyInt;
43 import static org.mockito.Matchers.anyString;
44 import static org.mockito.Mockito.doReturn;
45 import static org.mockito.Mockito.times;
46 import static org.mockito.Mockito.verify;
47 
48 import android.content.Intent;
49 
50 import com.android.internal.telephony.ISms;
51 
52 import org.junit.After;
53 import org.junit.Before;
54 import org.mockito.ArgumentCaptor;
55 import org.mockito.Captor;
56 import org.mockito.Mock;
57 
58 public class CellBroadcastBootupConfigTest extends
59         CellBroadcastServiceTestCase<CellBroadcastConfigService> {
60 
61     @Mock
62     ISms.Stub mSmsService;
63 
64     @Captor
65     private ArgumentCaptor<Integer> mStartIds;
66 
67     @Captor
68     private ArgumentCaptor<Integer> mEndIds;
69 
70     @Captor
71     private ArgumentCaptor<Integer> mTypes;
72 
73     private MockedServiceManager mMockedServiceManager;
74 
CellBroadcastBootupConfigTest()75     public CellBroadcastBootupConfigTest() {
76         super(CellBroadcastConfigService.class);
77     }
78 
79     @Before
setUp()80     public void setUp() throws Exception {
81         super.setUp();
82 
83         doReturn(mSmsService).when(mSmsService).queryLocalInterface(anyString());
84         mMockedServiceManager = new MockedServiceManager();
85         mMockedServiceManager.replaceService("isms", mSmsService);
86         putResources(R.array.cmas_presidential_alerts_channels_range_strings, new String[]{
87                 "0x1112-0x1112:rat=gsm",
88                 "0x1000-0x1000:rat=cdma",
89                 "0x111F-0x111F:rat=gsm",
90         });
91         putResources(R.array.cmas_alert_extreme_channels_range_strings, new String[]{
92                 "0x1113-0x1114:rat=gsm",
93                 "0x1001-0x1001:rat=cdma",
94                 "0x1120-0x1121:rat=gsm",
95         });
96         putResources(R.array.cmas_alerts_severe_range_strings, new String[]{
97                 "0x1115-0x111A:rat=gsm",
98                 "0x1002-0x1002:rat=cdma",
99                 "0x1122-0x1127:rat=gsm",
100         });
101         putResources(R.array.cmas_amber_alerts_channels_range_strings, new String[]{
102                 "0x111B-0x111B:rat=gsm",
103                 "0x1003-0x1003:rat=cdma",
104                 "0x1128-0x1128:rat=gsm",
105         });
106         putResources(R.array.etws_alerts_range_strings, new String[]{
107                 "0x1100-0x1102:rat=gsm",
108                 "0x1104-0x1104:rat=gsm",
109         });
110     }
111 
112     @After
tearDown()113     public void tearDown() throws Exception {
114         mMockedServiceManager.restoreAllServices();
115         super.tearDown();
116     }
117 
118     private static class CbConfig {
119         final int startId;
120         final int endId;
121         final int type;
122 
CbConfig(int startId, int endId, int type)123         CbConfig(int startId, int endId, int type) {
124             this.startId = startId;
125             this.endId = endId;
126             this.type = type;
127         }
128     }
129 
130     // Test if CellbroadcastConfigService properly configure all the required channels.
testConfiguration()131     public void testConfiguration() throws Exception {
132 
133         Intent intent = new Intent(mContext, CellBroadcastConfigService.class);
134         intent.setAction(CellBroadcastConfigService.ACTION_ENABLE_CHANNELS);
135 
136         startService(intent);
137         waitForMs(200);
138 
139         CbConfig[] configs = new CbConfig[] {
140                 new CbConfig(MESSAGE_ID_CMAS_ALERT_PRESIDENTIAL_LEVEL,
141                         MESSAGE_ID_CMAS_ALERT_PRESIDENTIAL_LEVEL,
142                         CELL_BROADCAST_RAN_TYPE_GSM),
143                 new CbConfig(SERVICE_CATEGORY_CMAS_PRESIDENTIAL_LEVEL_ALERT,
144                         SERVICE_CATEGORY_CMAS_PRESIDENTIAL_LEVEL_ALERT,
145                         CELL_BROADCAST_RAN_TYPE_CDMA),
146                 new CbConfig(MESSAGE_ID_CMAS_ALERT_PRESIDENTIAL_LEVEL_LANGUAGE,
147                         MESSAGE_ID_CMAS_ALERT_PRESIDENTIAL_LEVEL_LANGUAGE,
148                         CELL_BROADCAST_RAN_TYPE_GSM),
149                 new CbConfig(MESSAGE_ID_CMAS_ALERT_EXTREME_IMMEDIATE_OBSERVED,
150                         MESSAGE_ID_CMAS_ALERT_EXTREME_IMMEDIATE_LIKELY,
151                         CELL_BROADCAST_RAN_TYPE_GSM),
152                 new CbConfig(SERVICE_CATEGORY_CMAS_EXTREME_THREAT,
153                         SERVICE_CATEGORY_CMAS_EXTREME_THREAT,
154                         CELL_BROADCAST_RAN_TYPE_CDMA),
155                 new CbConfig(MESSAGE_ID_CMAS_ALERT_EXTREME_IMMEDIATE_OBSERVED_LANGUAGE,
156                         MESSAGE_ID_CMAS_ALERT_EXTREME_IMMEDIATE_LIKELY_LANGUAGE,
157                         CELL_BROADCAST_RAN_TYPE_GSM),
158                 new CbConfig(MESSAGE_ID_CMAS_ALERT_EXTREME_EXPECTED_OBSERVED,
159                         MESSAGE_ID_CMAS_ALERT_SEVERE_EXPECTED_LIKELY,
160                         CELL_BROADCAST_RAN_TYPE_GSM),
161                 new CbConfig(SERVICE_CATEGORY_CMAS_SEVERE_THREAT,
162                         SERVICE_CATEGORY_CMAS_SEVERE_THREAT,
163                         CELL_BROADCAST_RAN_TYPE_CDMA),
164                 new CbConfig(MESSAGE_ID_CMAS_ALERT_EXTREME_EXPECTED_OBSERVED_LANGUAGE,
165                         MESSAGE_ID_CMAS_ALERT_SEVERE_EXPECTED_LIKELY_LANGUAGE,
166                         CELL_BROADCAST_RAN_TYPE_GSM),
167                 new CbConfig(MESSAGE_ID_CMAS_ALERT_CHILD_ABDUCTION_EMERGENCY,
168                         MESSAGE_ID_CMAS_ALERT_CHILD_ABDUCTION_EMERGENCY,
169                         CELL_BROADCAST_RAN_TYPE_GSM),
170                 new CbConfig(SERVICE_CATEGORY_CMAS_CHILD_ABDUCTION_EMERGENCY,
171                         SERVICE_CATEGORY_CMAS_CHILD_ABDUCTION_EMERGENCY,
172                         CELL_BROADCAST_RAN_TYPE_CDMA),
173                 new CbConfig(MESSAGE_ID_CMAS_ALERT_CHILD_ABDUCTION_EMERGENCY_LANGUAGE,
174                         MESSAGE_ID_CMAS_ALERT_CHILD_ABDUCTION_EMERGENCY_LANGUAGE,
175                         CELL_BROADCAST_RAN_TYPE_GSM),
176                 new CbConfig(MESSAGE_ID_ETWS_EARTHQUAKE_WARNING,
177                         MESSAGE_ID_ETWS_EARTHQUAKE_AND_TSUNAMI_WARNING,
178                         CELL_BROADCAST_RAN_TYPE_GSM),
179                 new CbConfig(MESSAGE_ID_ETWS_OTHER_EMERGENCY_TYPE,
180                         MESSAGE_ID_ETWS_OTHER_EMERGENCY_TYPE,
181                         CELL_BROADCAST_RAN_TYPE_GSM),
182         };
183 
184         verify(mSmsService, times(configs.length)).enableCellBroadcastRangeForSubscriber(anyInt(),
185                 mStartIds.capture(), mEndIds.capture(), mTypes.capture());
186 
187         for (int i = 0; i < configs.length; i++) {
188             assertEquals("i=" + i, configs[i].startId, mStartIds.getAllValues().get(i).intValue());
189             assertEquals("i=" + i, configs[i].endId, mEndIds.getAllValues().get(i).intValue());
190             assertEquals("i=" + i, configs[i].type, mTypes.getAllValues().get(i).intValue());
191         }
192      }
193 }