blob: f95d835e13741053e0d2575b9a673b41140c11d2 [file] [log] [blame]
/*
* Copyright (C) 2018 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.cts.deviceowner;
import android.net.Uri;
import android.telephony.TelephonyManager;
import android.telephony.data.ApnSetting;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.List;
/**
* Test override APN APIs.
*/
public class OverrideApnTest extends BaseDeviceOwnerTest {
private static final String TEST_APN_NAME = "testApnName";
private static final String UPDATE_APN_NAME = "updateApnName";
private static final String TEST_ENTRY_NAME = "testEntryName";
private static final String UPDATE_ETNRY_NAME = "updateEntryName";
private static final String TEST_OPERATOR_NUMERIC = "123456789";
private static final int TEST_PROXY_PORT = 123;
private static final String TEST_PROXY_ADDRESS = "123.123.123.123";
private static final Uri TEST_MMSC = Uri.parse("http://www.google.com");
private static final String TEST_USER_NAME = "testUser";
private static final String TEST_PASSWORD = "testPassword";
private static final int TEST_AUTH_TYPE = ApnSetting.AUTH_TYPE_CHAP;
private static final int TEST_APN_TYPE_BITMASK
= ApnSetting.TYPE_DEFAULT | ApnSetting.TYPE_EMERGENCY;
private static final int TEST_PROTOCOL = ApnSetting.PROTOCOL_IPV4V6;
private static final int TEST_NETWORK_TYPE_BITMASK = TelephonyManager.NETWORK_TYPE_CDMA;
private static final int TEST_MVNO_TYPE = ApnSetting.MVNO_TYPE_GID;
private static final boolean TEST_ENABLED = true;
private static final ApnSetting testApnFull;
static {
testApnFull = new ApnSetting.Builder()
.setApnName(TEST_APN_NAME)
.setEntryName(TEST_ENTRY_NAME)
.setOperatorNumeric(TEST_OPERATOR_NUMERIC)
.setProxyAddress(getProxyInetAddress(TEST_PROXY_ADDRESS))
.setProxyPort(TEST_PROXY_PORT)
.setMmsc(TEST_MMSC)
.setMmsProxyAddress(getProxyInetAddress(TEST_PROXY_ADDRESS))
.setMmsProxyPort(TEST_PROXY_PORT)
.setUser(TEST_USER_NAME)
.setPassword(TEST_PASSWORD)
.setAuthType(TEST_AUTH_TYPE)
.setApnTypeBitmask(TEST_APN_TYPE_BITMASK)
.setProtocol(TEST_PROTOCOL)
.setRoamingProtocol(TEST_PROTOCOL)
.setNetworkTypeBitmask(TEST_NETWORK_TYPE_BITMASK)
.setMvnoType(TEST_MVNO_TYPE)
.setCarrierEnabled(TEST_ENABLED)
.build();
}
private static InetAddress getProxyInetAddress(String proxyAddress) {
try {
return InetAddress.getByName(proxyAddress);
} catch (UnknownHostException e) {
return null;
}
}
@Override
protected void tearDown() throws Exception {
super.tearDown();
List <ApnSetting> apnList = mDevicePolicyManager.getOverrideApns(getWho());
for (ApnSetting apn : apnList) {
boolean deleted = mDevicePolicyManager.removeOverrideApn(getWho(), apn.getId());
assertTrue("Failed to clean up override APNs.", deleted);
}
mDevicePolicyManager.setOverrideApnsEnabled(getWho(), false);
}
public void testAddGetRemoveOverrideApn() throws Exception {
int insertedId = mDevicePolicyManager.addOverrideApn(getWho(), testApnFull);
assertTrue(insertedId != 0);
List <ApnSetting> apnList = mDevicePolicyManager.getOverrideApns(getWho());
assertEquals(1, apnList.size());
assertEquals(TEST_OPERATOR_NUMERIC, apnList.get(0).getOperatorNumeric());
assertEquals(TEST_ENTRY_NAME, apnList.get(0).getEntryName());
assertEquals(TEST_APN_NAME, apnList.get(0).getApnName());
assertEquals(getProxyInetAddress(TEST_PROXY_ADDRESS), apnList.get(0).getProxyAddress());
assertEquals(TEST_PROXY_PORT, apnList.get(0).getProxyPort());
assertEquals(TEST_MMSC, apnList.get(0).getMmsc());
assertEquals(getProxyInetAddress(TEST_PROXY_ADDRESS), apnList.get(0).getMmsProxyAddress());
assertEquals(TEST_PROXY_PORT, apnList.get(0).getMmsProxyPort());
assertEquals(TEST_USER_NAME, apnList.get(0).getUser());
assertEquals(TEST_PASSWORD, apnList.get(0).getPassword());
assertEquals(TEST_AUTH_TYPE, apnList.get(0).getAuthType());
assertEquals(TEST_APN_TYPE_BITMASK, apnList.get(0).getApnTypeBitmask());
assertEquals(TEST_PROTOCOL, apnList.get(0).getProtocol());
assertEquals(TEST_PROTOCOL, apnList.get(0).getRoamingProtocol());
assertEquals(TEST_ENABLED, apnList.get(0).isEnabled());
assertEquals(TEST_MVNO_TYPE, apnList.get(0).getMvnoType());
assertEquals(TEST_NETWORK_TYPE_BITMASK, apnList.get(0).getNetworkTypeBitmask());
assertTrue(mDevicePolicyManager.removeOverrideApn(getWho(), insertedId));
apnList = mDevicePolicyManager.getOverrideApns(getWho());
assertEquals(0, apnList.size());
}
public void testRemoveOverrideApnFailsForIncorrectId() throws Exception {
assertFalse(mDevicePolicyManager.removeOverrideApn(getWho(), -1));
}
public void testInsertConflictingApn() {
mDevicePolicyManager.addOverrideApn(getWho(), testApnFull);
int insertConflictingId = mDevicePolicyManager.addOverrideApn(getWho(), testApnFull);
assertEquals(-1, insertConflictingId);
}
public void testUpdateConflictingApn() {
mDevicePolicyManager.addOverrideApn(getWho(), testApnFull);
final ApnSetting apnToBeUpdated = (new ApnSetting.Builder())
.setEntryName(UPDATE_ETNRY_NAME)
.setApnName(UPDATE_APN_NAME)
.setApnTypeBitmask(ApnSetting.TYPE_DEFAULT)
.build();
int apnIdToUpdate = mDevicePolicyManager.addOverrideApn(getWho(), apnToBeUpdated);
assertNotSame(-1, apnIdToUpdate);
assertFalse(mDevicePolicyManager.updateOverrideApn(getWho(), apnIdToUpdate, testApnFull));
assertTrue(mDevicePolicyManager.removeOverrideApn(getWho(), apnIdToUpdate));
}
public void testUpdateOverrideApn() throws Exception {
int insertedId = mDevicePolicyManager.addOverrideApn(getWho(), testApnFull);
assertNotSame(-1, insertedId);
final ApnSetting updateApn = new ApnSetting.Builder()
.setApnName(UPDATE_APN_NAME)
.setEntryName(UPDATE_ETNRY_NAME)
.setOperatorNumeric(TEST_OPERATOR_NUMERIC)
.setProxyAddress(getProxyInetAddress(TEST_PROXY_ADDRESS))
.setProxyPort(TEST_PROXY_PORT)
.setMmsc(TEST_MMSC)
.setMmsProxyAddress(getProxyInetAddress(TEST_PROXY_ADDRESS))
.setMmsProxyPort(TEST_PROXY_PORT)
.setUser(TEST_USER_NAME)
.setPassword(TEST_PASSWORD)
.setAuthType(TEST_AUTH_TYPE)
.setApnTypeBitmask(TEST_APN_TYPE_BITMASK)
.setProtocol(TEST_PROTOCOL)
.setRoamingProtocol(TEST_PROTOCOL)
.setNetworkTypeBitmask(TEST_NETWORK_TYPE_BITMASK)
.setMvnoType(TEST_MVNO_TYPE)
.setCarrierEnabled(TEST_ENABLED)
.build();
assertTrue(mDevicePolicyManager.updateOverrideApn(getWho(), insertedId, updateApn));
List <ApnSetting> apnList = mDevicePolicyManager.getOverrideApns(getWho());
assertEquals(1, apnList.size());
assertEquals(TEST_OPERATOR_NUMERIC, apnList.get(0).getOperatorNumeric());
assertEquals(UPDATE_ETNRY_NAME, apnList.get(0).getEntryName());
assertEquals(UPDATE_APN_NAME, apnList.get(0).getApnName());
assertEquals(getProxyInetAddress(TEST_PROXY_ADDRESS), apnList.get(0).getProxyAddress());
assertEquals(TEST_PROXY_PORT, apnList.get(0).getProxyPort());
assertEquals(TEST_MMSC, apnList.get(0).getMmsc());
assertEquals(getProxyInetAddress(TEST_PROXY_ADDRESS), apnList.get(0).getMmsProxyAddress());
assertEquals(TEST_PROXY_PORT, apnList.get(0).getMmsProxyPort());
assertEquals(TEST_USER_NAME, apnList.get(0).getUser());
assertEquals(TEST_PASSWORD, apnList.get(0).getPassword());
assertEquals(TEST_AUTH_TYPE, apnList.get(0).getAuthType());
assertEquals(TEST_APN_TYPE_BITMASK, apnList.get(0).getApnTypeBitmask());
assertEquals(TEST_PROTOCOL, apnList.get(0).getProtocol());
assertEquals(TEST_PROTOCOL, apnList.get(0).getRoamingProtocol());
assertEquals(TEST_ENABLED, apnList.get(0).isEnabled());
assertEquals(TEST_MVNO_TYPE, apnList.get(0).getMvnoType());
assertTrue(mDevicePolicyManager.removeOverrideApn(getWho(), insertedId));
}
public void testOverrideApnDefaultValues() {
final ApnSetting emptyApn = new ApnSetting.Builder()
.setApnName(TEST_APN_NAME)
.setEntryName(TEST_ENTRY_NAME)
.setApnTypeBitmask(TEST_APN_TYPE_BITMASK)
.build();
int insertedId = mDevicePolicyManager.addOverrideApn(getWho(), emptyApn);
assertNotSame(-1, insertedId);
List <ApnSetting> apnList = mDevicePolicyManager.getOverrideApns(getWho());
assertEquals(1, apnList.size());
assertEquals("", apnList.get(0).getOperatorNumeric());
assertEquals(TEST_ENTRY_NAME, apnList.get(0).getEntryName());
assertEquals(TEST_APN_NAME, apnList.get(0).getApnName());
assertEquals(null, apnList.get(0).getProxyAddress());
assertEquals(-1, apnList.get(0).getProxyPort());
assertEquals(null, apnList.get(0).getMmsc());
assertEquals(null, apnList.get(0).getMmsProxyAddress());
assertEquals(-1, apnList.get(0).getMmsProxyPort());
assertEquals("", apnList.get(0).getUser());
assertEquals("", apnList.get(0).getPassword());
assertEquals(0, apnList.get(0).getAuthType());
assertEquals(TEST_APN_TYPE_BITMASK, apnList.get(0).getApnTypeBitmask());
assertEquals(-1, apnList.get(0).getProtocol());
assertEquals(-1, apnList.get(0).getRoamingProtocol());
assertEquals(false, apnList.get(0).isEnabled());
assertEquals(-1, apnList.get(0).getMvnoType());
assertTrue(mDevicePolicyManager.removeOverrideApn(getWho(), insertedId));
}
public void testBuildApnSettingFailsWithoutRequiredField() {
assertNull(new ApnSetting.Builder()
.setEntryName(UPDATE_ETNRY_NAME)
.setApnName(UPDATE_APN_NAME)
.build());
assertNull(new ApnSetting.Builder()
.setEntryName(UPDATE_ETNRY_NAME)
.setApnName(UPDATE_APN_NAME)
.setApnTypeBitmask(1 << 20)
.build());
assertNull(new ApnSetting.Builder()
.setApnName(UPDATE_APN_NAME)
.setApnTypeBitmask(TEST_APN_TYPE_BITMASK)
.build());
assertNull(new ApnSetting.Builder()
.setEntryName(UPDATE_ETNRY_NAME)
.setApnTypeBitmask(TEST_APN_TYPE_BITMASK)
.build());
}
public void testSetAndGetOverrideApnEnabled() throws Exception {
mDevicePolicyManager.setOverrideApnsEnabled(getWho(), true);
assertTrue(mDevicePolicyManager.isOverrideApnEnabled(getWho()));
mDevicePolicyManager.setOverrideApnsEnabled(getWho(), false);
assertFalse(mDevicePolicyManager.isOverrideApnEnabled(getWho()));
}
}