• 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.unit;
18 
19 import static com.android.internal.telephony.cdma.sms.SmsEnvelope.SERVICE_CATEGORY_CMAS_CHILD_ABDUCTION_EMERGENCY;
20 import static com.android.internal.telephony.cdma.sms.SmsEnvelope.SERVICE_CATEGORY_CMAS_EXTREME_THREAT;
21 import static com.android.internal.telephony.cdma.sms.SmsEnvelope.SERVICE_CATEGORY_CMAS_PRESIDENTIAL_LEVEL_ALERT;
22 import static com.android.internal.telephony.cdma.sms.SmsEnvelope.SERVICE_CATEGORY_CMAS_SEVERE_THREAT;
23 import static com.android.internal.telephony.gsm.SmsCbConstants.MESSAGE_ID_CMAS_ALERT_CHILD_ABDUCTION_EMERGENCY;
24 import static com.android.internal.telephony.gsm.SmsCbConstants.MESSAGE_ID_CMAS_ALERT_CHILD_ABDUCTION_EMERGENCY_LANGUAGE;
25 import static com.android.internal.telephony.gsm.SmsCbConstants.MESSAGE_ID_CMAS_ALERT_EXTREME_EXPECTED_OBSERVED;
26 import static com.android.internal.telephony.gsm.SmsCbConstants.MESSAGE_ID_CMAS_ALERT_EXTREME_EXPECTED_OBSERVED_LANGUAGE;
27 import static com.android.internal.telephony.gsm.SmsCbConstants.MESSAGE_ID_CMAS_ALERT_EXTREME_IMMEDIATE_LIKELY;
28 import static com.android.internal.telephony.gsm.SmsCbConstants.MESSAGE_ID_CMAS_ALERT_EXTREME_IMMEDIATE_LIKELY_LANGUAGE;
29 import static com.android.internal.telephony.gsm.SmsCbConstants.MESSAGE_ID_CMAS_ALERT_EXTREME_IMMEDIATE_OBSERVED;
30 import static com.android.internal.telephony.gsm.SmsCbConstants.MESSAGE_ID_CMAS_ALERT_EXTREME_IMMEDIATE_OBSERVED_LANGUAGE;
31 import static com.android.internal.telephony.gsm.SmsCbConstants.MESSAGE_ID_CMAS_ALERT_PRESIDENTIAL_LEVEL;
32 import static com.android.internal.telephony.gsm.SmsCbConstants.MESSAGE_ID_CMAS_ALERT_PRESIDENTIAL_LEVEL_LANGUAGE;
33 import static com.android.internal.telephony.gsm.SmsCbConstants.MESSAGE_ID_CMAS_ALERT_SEVERE_EXPECTED_LIKELY;
34 import static com.android.internal.telephony.gsm.SmsCbConstants.MESSAGE_ID_CMAS_ALERT_SEVERE_EXPECTED_LIKELY_LANGUAGE;
35 import static com.android.internal.telephony.gsm.SmsCbConstants.MESSAGE_ID_ETWS_EARTHQUAKE_AND_TSUNAMI_WARNING;
36 import static com.android.internal.telephony.gsm.SmsCbConstants.MESSAGE_ID_ETWS_EARTHQUAKE_WARNING;
37 import static com.android.internal.telephony.gsm.SmsCbConstants.MESSAGE_ID_ETWS_OTHER_EMERGENCY_TYPE;
38 
39 import static org.mockito.Matchers.anyInt;
40 import static org.mockito.Matchers.anyString;
41 import static org.mockito.Mockito.doReturn;
42 import static org.mockito.Mockito.timeout;
43 import static org.mockito.Mockito.verify;
44 
45 import android.content.Intent;
46 import android.os.IBinder;
47 import android.telephony.SmsCbMessage;
48 
49 import androidx.test.filters.FlakyTest;
50 
51 import com.android.cellbroadcastreceiver.CellBroadcastConfigService;
52 import com.android.cellbroadcastreceiver.CellBroadcastSettings;
53 import com.android.internal.telephony.ISms;
54 
55 import org.junit.After;
56 import org.junit.Before;
57 import org.mockito.ArgumentCaptor;
58 import org.mockito.Captor;
59 import org.mockito.Mock;
60 
61 public class CellBroadcastBootupConfigTest extends
62         CellBroadcastServiceTestCase<CellBroadcastConfigService> {
63 
64     @Mock
65     ISms.Stub mSmsService;
66     @Mock
67     IBinder mIBinder;
68 
69     @Captor
70     private ArgumentCaptor<Integer> mStartIds;
71 
72     @Captor
73     private ArgumentCaptor<Integer> mEndIds;
74 
75     @Captor
76     private ArgumentCaptor<Integer> mTypes;
77 
CellBroadcastBootupConfigTest()78     public CellBroadcastBootupConfigTest() {
79         super(CellBroadcastConfigService.class);
80     }
81 
82     @Before
setUp()83     public void setUp() throws Exception {
84         super.setUp();
85 
86         doReturn(mSmsService).when(mSmsService).queryLocalInterface(anyString());
87         doReturn(mIBinder).when(mSmsService).asBinder();
88         mMockedServiceManager.replaceService("isms", mSmsService);
89         putResources(com.android.cellbroadcastreceiver.R.array
90                 .cmas_presidential_alerts_channels_range_strings, new String[]{
91                 "0x1112-0x1112:rat=gsm",
92                 "0x1000-0x1000:rat=cdma",
93                 "0x111F-0x111F:rat=gsm",
94         });
95         putResources(com.android.cellbroadcastreceiver.R.array
96                 .cmas_alert_extreme_channels_range_strings, new String[]{
97                 "0x1113-0x1114:rat=gsm",
98                 "0x1001-0x1001:rat=cdma",
99                 "0x1120-0x1121:rat=gsm",
100         });
101         putResources(com.android.cellbroadcastreceiver.R.array
102                 .cmas_alerts_severe_range_strings, new String[]{
103                 "0x1115-0x111A:rat=gsm",
104                 "0x1002-0x1002:rat=cdma",
105                 "0x1122-0x1127:rat=gsm",
106         });
107         putResources(com.android.cellbroadcastreceiver.R.array
108                 .cmas_amber_alerts_channels_range_strings, new String[]{
109                 "0x111B-0x111B:rat=gsm",
110                 "0x1003-0x1003:rat=cdma",
111                 "0x1128-0x1128:rat=gsm",
112         });
113         putResources(com.android.cellbroadcastreceiver.R.array
114                 .etws_alerts_range_strings, new String[]{
115                 "0x1100-0x1102:rat=gsm",
116                 "0x1104-0x1104:rat=gsm",
117         });
118     }
119 
120     @After
tearDown()121     public void tearDown() throws Exception {
122         super.tearDown();
123     }
124 
125     private static class CbConfig {
126         final int startId;
127         final int endId;
128         final int type;
129 
CbConfig(int startId, int endId, int type)130         CbConfig(int startId, int endId, int type) {
131             this.startId = startId;
132             this.endId = endId;
133             this.type = type;
134         }
135     }
136 
137     // Test if CellbroadcastConfigService properly configure all the required channels.
138 
139     @FlakyTest
testConfiguration()140     public void testConfiguration() throws Exception {
141         String[] preferenceKeys = {
142                 CellBroadcastSettings.KEY_ENABLE_ALERTS_MASTER_TOGGLE,
143                 CellBroadcastSettings.KEY_ENABLE_CMAS_EXTREME_THREAT_ALERTS,
144                 CellBroadcastSettings.KEY_ENABLE_CMAS_SEVERE_THREAT_ALERTS,
145                 CellBroadcastSettings.KEY_ENABLE_CMAS_AMBER_ALERTS,
146                 CellBroadcastSettings.KEY_ENABLE_PUBLIC_SAFETY_MESSAGES,
147                 CellBroadcastSettings.KEY_ENABLE_EMERGENCY_ALERTS,
148         };
149         for (String key : preferenceKeys) {
150             enablePreference(key);
151         }
152 
153         Intent intent = new Intent(mContext, CellBroadcastConfigService.class);
154         intent.setAction(CellBroadcastConfigService.ACTION_ENABLE_CHANNELS);
155 
156         startService(intent);
157 
158         CbConfig[] configs = new CbConfig[] {
159                 new CbConfig(MESSAGE_ID_CMAS_ALERT_PRESIDENTIAL_LEVEL,
160                         MESSAGE_ID_CMAS_ALERT_PRESIDENTIAL_LEVEL,
161                         SmsCbMessage.MESSAGE_FORMAT_3GPP),
162                 new CbConfig(SERVICE_CATEGORY_CMAS_PRESIDENTIAL_LEVEL_ALERT,
163                         SERVICE_CATEGORY_CMAS_PRESIDENTIAL_LEVEL_ALERT,
164                         SmsCbMessage.MESSAGE_FORMAT_3GPP2),
165                 new CbConfig(MESSAGE_ID_CMAS_ALERT_PRESIDENTIAL_LEVEL_LANGUAGE,
166                         MESSAGE_ID_CMAS_ALERT_PRESIDENTIAL_LEVEL_LANGUAGE,
167                         SmsCbMessage.MESSAGE_FORMAT_3GPP),
168                 new CbConfig(MESSAGE_ID_CMAS_ALERT_EXTREME_IMMEDIATE_OBSERVED,
169                         MESSAGE_ID_CMAS_ALERT_EXTREME_IMMEDIATE_LIKELY,
170                         SmsCbMessage.MESSAGE_FORMAT_3GPP),
171                 new CbConfig(SERVICE_CATEGORY_CMAS_EXTREME_THREAT,
172                         SERVICE_CATEGORY_CMAS_EXTREME_THREAT,
173                         SmsCbMessage.MESSAGE_FORMAT_3GPP2),
174                 new CbConfig(MESSAGE_ID_CMAS_ALERT_EXTREME_IMMEDIATE_OBSERVED_LANGUAGE,
175                         MESSAGE_ID_CMAS_ALERT_EXTREME_IMMEDIATE_LIKELY_LANGUAGE,
176                         SmsCbMessage.MESSAGE_FORMAT_3GPP),
177                 new CbConfig(MESSAGE_ID_CMAS_ALERT_EXTREME_EXPECTED_OBSERVED,
178                         MESSAGE_ID_CMAS_ALERT_SEVERE_EXPECTED_LIKELY,
179                         SmsCbMessage.MESSAGE_FORMAT_3GPP),
180                 new CbConfig(SERVICE_CATEGORY_CMAS_SEVERE_THREAT,
181                         SERVICE_CATEGORY_CMAS_SEVERE_THREAT,
182                         SmsCbMessage.MESSAGE_FORMAT_3GPP2),
183                 new CbConfig(MESSAGE_ID_CMAS_ALERT_EXTREME_EXPECTED_OBSERVED_LANGUAGE,
184                         MESSAGE_ID_CMAS_ALERT_SEVERE_EXPECTED_LIKELY_LANGUAGE,
185                         SmsCbMessage.MESSAGE_FORMAT_3GPP),
186                 new CbConfig(MESSAGE_ID_CMAS_ALERT_CHILD_ABDUCTION_EMERGENCY,
187                         MESSAGE_ID_CMAS_ALERT_CHILD_ABDUCTION_EMERGENCY,
188                         SmsCbMessage.MESSAGE_FORMAT_3GPP),
189                 new CbConfig(SERVICE_CATEGORY_CMAS_CHILD_ABDUCTION_EMERGENCY,
190                         SERVICE_CATEGORY_CMAS_CHILD_ABDUCTION_EMERGENCY,
191                         SmsCbMessage.MESSAGE_FORMAT_3GPP2),
192                 new CbConfig(MESSAGE_ID_CMAS_ALERT_CHILD_ABDUCTION_EMERGENCY_LANGUAGE,
193                         MESSAGE_ID_CMAS_ALERT_CHILD_ABDUCTION_EMERGENCY_LANGUAGE,
194                         SmsCbMessage.MESSAGE_FORMAT_3GPP),
195                 new CbConfig(MESSAGE_ID_ETWS_EARTHQUAKE_WARNING,
196                         MESSAGE_ID_ETWS_EARTHQUAKE_AND_TSUNAMI_WARNING,
197                         SmsCbMessage.MESSAGE_FORMAT_3GPP),
198                 new CbConfig(MESSAGE_ID_ETWS_OTHER_EMERGENCY_TYPE,
199                         MESSAGE_ID_ETWS_OTHER_EMERGENCY_TYPE,
200                         SmsCbMessage.MESSAGE_FORMAT_3GPP),
201         };
202 
203         verify(mSmsService, timeout(10000).times(configs.length))
204                 .enableCellBroadcastRangeForSubscriber(
205                         anyInt(), mStartIds.capture(), mEndIds.capture(), mTypes.capture());
206 
207         for (int i = 0; i < configs.length; i++) {
208             assertEquals("i=" + i, configs[i].startId, mStartIds.getAllValues().get(i).intValue());
209             assertEquals("i=" + i, configs[i].endId, mEndIds.getAllValues().get(i).intValue());
210             assertEquals("i=" + i, configs[i].type, mTypes.getAllValues().get(i).intValue());
211         }
212      }
213 }