blob: f2c1ae7748769fafb40c1c3605b7fa54b128a928 [file] [log] [blame]
/*
* Copyright (C) 2016 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License
*/
package com.android.cellbroadcastreceiver;
import static android.telephony.SmsManager.CELL_BROADCAST_RAN_TYPE_CDMA;
import static android.telephony.SmsManager.CELL_BROADCAST_RAN_TYPE_GSM;
import static com.android.internal.telephony.cdma.sms.SmsEnvelope.SERVICE_CATEGORY_CMAS_CHILD_ABDUCTION_EMERGENCY;
import static com.android.internal.telephony.cdma.sms.SmsEnvelope.SERVICE_CATEGORY_CMAS_EXTREME_THREAT;
import static com.android.internal.telephony.cdma.sms.SmsEnvelope.SERVICE_CATEGORY_CMAS_PRESIDENTIAL_LEVEL_ALERT;
import static com.android.internal.telephony.cdma.sms.SmsEnvelope.SERVICE_CATEGORY_CMAS_SEVERE_THREAT;
import static com.android.internal.telephony.gsm.SmsCbConstants.MESSAGE_ID_CMAS_ALERT_CHILD_ABDUCTION_EMERGENCY;
import static com.android.internal.telephony.gsm.SmsCbConstants.MESSAGE_ID_CMAS_ALERT_CHILD_ABDUCTION_EMERGENCY_LANGUAGE;
import static com.android.internal.telephony.gsm.SmsCbConstants.MESSAGE_ID_CMAS_ALERT_EXTREME_EXPECTED_OBSERVED;
import static com.android.internal.telephony.gsm.SmsCbConstants.MESSAGE_ID_CMAS_ALERT_EXTREME_EXPECTED_OBSERVED_LANGUAGE;
import static com.android.internal.telephony.gsm.SmsCbConstants.MESSAGE_ID_CMAS_ALERT_EXTREME_IMMEDIATE_LIKELY;
import static com.android.internal.telephony.gsm.SmsCbConstants.MESSAGE_ID_CMAS_ALERT_EXTREME_IMMEDIATE_LIKELY_LANGUAGE;
import static com.android.internal.telephony.gsm.SmsCbConstants.MESSAGE_ID_CMAS_ALERT_EXTREME_IMMEDIATE_OBSERVED;
import static com.android.internal.telephony.gsm.SmsCbConstants.MESSAGE_ID_CMAS_ALERT_EXTREME_IMMEDIATE_OBSERVED_LANGUAGE;
import static com.android.internal.telephony.gsm.SmsCbConstants.MESSAGE_ID_CMAS_ALERT_PRESIDENTIAL_LEVEL;
import static com.android.internal.telephony.gsm.SmsCbConstants.MESSAGE_ID_CMAS_ALERT_PRESIDENTIAL_LEVEL_LANGUAGE;
import static com.android.internal.telephony.gsm.SmsCbConstants.MESSAGE_ID_CMAS_ALERT_SEVERE_EXPECTED_LIKELY;
import static com.android.internal.telephony.gsm.SmsCbConstants.MESSAGE_ID_CMAS_ALERT_SEVERE_EXPECTED_LIKELY_LANGUAGE;
import static com.android.internal.telephony.gsm.SmsCbConstants.MESSAGE_ID_ETWS_EARTHQUAKE_AND_TSUNAMI_WARNING;
import static com.android.internal.telephony.gsm.SmsCbConstants.MESSAGE_ID_ETWS_EARTHQUAKE_WARNING;
import static com.android.internal.telephony.gsm.SmsCbConstants.MESSAGE_ID_ETWS_OTHER_EMERGENCY_TYPE;
import static org.mockito.Matchers.anyInt;
import static org.mockito.Matchers.anyString;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import android.content.Intent;
import com.android.internal.telephony.ISms;
import org.junit.After;
import org.junit.Before;
import org.mockito.ArgumentCaptor;
import org.mockito.Captor;
import org.mockito.Mock;
public class CellBroadcastBootupConfigTest extends
CellBroadcastServiceTestCase<CellBroadcastConfigService> {
@Mock
ISms.Stub mSmsService;
@Captor
private ArgumentCaptor<Integer> mStartIds;
@Captor
private ArgumentCaptor<Integer> mEndIds;
@Captor
private ArgumentCaptor<Integer> mTypes;
public CellBroadcastBootupConfigTest() {
super(CellBroadcastConfigService.class);
}
@Before
public void setUp() throws Exception {
super.setUp();
doReturn(mSmsService).when(mSmsService).queryLocalInterface(anyString());
mMockedServiceManager.replaceService("isms", mSmsService);
putResources(R.array.cmas_presidential_alerts_channels_range_strings, new String[]{
"0x1112-0x1112:rat=gsm",
"0x1000-0x1000:rat=cdma",
"0x111F-0x111F:rat=gsm",
});
putResources(R.array.cmas_alert_extreme_channels_range_strings, new String[]{
"0x1113-0x1114:rat=gsm",
"0x1001-0x1001:rat=cdma",
"0x1120-0x1121:rat=gsm",
});
putResources(R.array.cmas_alerts_severe_range_strings, new String[]{
"0x1115-0x111A:rat=gsm",
"0x1002-0x1002:rat=cdma",
"0x1122-0x1127:rat=gsm",
});
putResources(R.array.cmas_amber_alerts_channels_range_strings, new String[]{
"0x111B-0x111B:rat=gsm",
"0x1003-0x1003:rat=cdma",
"0x1128-0x1128:rat=gsm",
});
putResources(R.array.etws_alerts_range_strings, new String[]{
"0x1100-0x1102:rat=gsm",
"0x1104-0x1104:rat=gsm",
});
}
@After
public void tearDown() throws Exception {
super.tearDown();
}
private static class CbConfig {
final int startId;
final int endId;
final int type;
CbConfig(int startId, int endId, int type) {
this.startId = startId;
this.endId = endId;
this.type = type;
}
}
// Test if CellbroadcastConfigService properly configure all the required channels.
public void testConfiguration() throws Exception {
Intent intent = new Intent(mContext, CellBroadcastConfigService.class);
intent.setAction(CellBroadcastConfigService.ACTION_ENABLE_CHANNELS);
startService(intent);
waitForMs(200);
CbConfig[] configs = new CbConfig[] {
new CbConfig(MESSAGE_ID_CMAS_ALERT_PRESIDENTIAL_LEVEL,
MESSAGE_ID_CMAS_ALERT_PRESIDENTIAL_LEVEL,
CELL_BROADCAST_RAN_TYPE_GSM),
new CbConfig(SERVICE_CATEGORY_CMAS_PRESIDENTIAL_LEVEL_ALERT,
SERVICE_CATEGORY_CMAS_PRESIDENTIAL_LEVEL_ALERT,
CELL_BROADCAST_RAN_TYPE_CDMA),
new CbConfig(MESSAGE_ID_CMAS_ALERT_PRESIDENTIAL_LEVEL_LANGUAGE,
MESSAGE_ID_CMAS_ALERT_PRESIDENTIAL_LEVEL_LANGUAGE,
CELL_BROADCAST_RAN_TYPE_GSM),
new CbConfig(MESSAGE_ID_CMAS_ALERT_EXTREME_IMMEDIATE_OBSERVED,
MESSAGE_ID_CMAS_ALERT_EXTREME_IMMEDIATE_LIKELY,
CELL_BROADCAST_RAN_TYPE_GSM),
new CbConfig(SERVICE_CATEGORY_CMAS_EXTREME_THREAT,
SERVICE_CATEGORY_CMAS_EXTREME_THREAT,
CELL_BROADCAST_RAN_TYPE_CDMA),
new CbConfig(MESSAGE_ID_CMAS_ALERT_EXTREME_IMMEDIATE_OBSERVED_LANGUAGE,
MESSAGE_ID_CMAS_ALERT_EXTREME_IMMEDIATE_LIKELY_LANGUAGE,
CELL_BROADCAST_RAN_TYPE_GSM),
new CbConfig(MESSAGE_ID_CMAS_ALERT_EXTREME_EXPECTED_OBSERVED,
MESSAGE_ID_CMAS_ALERT_SEVERE_EXPECTED_LIKELY,
CELL_BROADCAST_RAN_TYPE_GSM),
new CbConfig(SERVICE_CATEGORY_CMAS_SEVERE_THREAT,
SERVICE_CATEGORY_CMAS_SEVERE_THREAT,
CELL_BROADCAST_RAN_TYPE_CDMA),
new CbConfig(MESSAGE_ID_CMAS_ALERT_EXTREME_EXPECTED_OBSERVED_LANGUAGE,
MESSAGE_ID_CMAS_ALERT_SEVERE_EXPECTED_LIKELY_LANGUAGE,
CELL_BROADCAST_RAN_TYPE_GSM),
new CbConfig(MESSAGE_ID_CMAS_ALERT_CHILD_ABDUCTION_EMERGENCY,
MESSAGE_ID_CMAS_ALERT_CHILD_ABDUCTION_EMERGENCY,
CELL_BROADCAST_RAN_TYPE_GSM),
new CbConfig(SERVICE_CATEGORY_CMAS_CHILD_ABDUCTION_EMERGENCY,
SERVICE_CATEGORY_CMAS_CHILD_ABDUCTION_EMERGENCY,
CELL_BROADCAST_RAN_TYPE_CDMA),
new CbConfig(MESSAGE_ID_CMAS_ALERT_CHILD_ABDUCTION_EMERGENCY_LANGUAGE,
MESSAGE_ID_CMAS_ALERT_CHILD_ABDUCTION_EMERGENCY_LANGUAGE,
CELL_BROADCAST_RAN_TYPE_GSM),
new CbConfig(MESSAGE_ID_ETWS_EARTHQUAKE_WARNING,
MESSAGE_ID_ETWS_EARTHQUAKE_AND_TSUNAMI_WARNING,
CELL_BROADCAST_RAN_TYPE_GSM),
new CbConfig(MESSAGE_ID_ETWS_OTHER_EMERGENCY_TYPE,
MESSAGE_ID_ETWS_OTHER_EMERGENCY_TYPE,
CELL_BROADCAST_RAN_TYPE_GSM),
};
verify(mSmsService, times(configs.length)).enableCellBroadcastRangeForSubscriber(anyInt(),
mStartIds.capture(), mEndIds.capture(), mTypes.capture());
for (int i = 0; i < configs.length; i++) {
assertEquals("i=" + i, configs[i].startId, mStartIds.getAllValues().get(i).intValue());
assertEquals("i=" + i, configs[i].endId, mEndIds.getAllValues().get(i).intValue());
assertEquals("i=" + i, configs[i].type, mTypes.getAllValues().get(i).intValue());
}
}
}