Merge "Temporarily disable flaky test."
diff --git a/api/current.txt b/api/current.txt
index 482a221..29ca75e 100755
--- a/api/current.txt
+++ b/api/current.txt
@@ -43384,26 +43384,26 @@
public static class ApnSetting.Builder {
ctor public ApnSetting.Builder();
method public android.telephony.data.ApnSetting build();
- method public android.telephony.data.ApnSetting.Builder setApnName(String);
- method public android.telephony.data.ApnSetting.Builder setApnTypeBitmask(int);
- method public android.telephony.data.ApnSetting.Builder setAuthType(int);
- method public android.telephony.data.ApnSetting.Builder setCarrierEnabled(boolean);
+ method @NonNull public android.telephony.data.ApnSetting.Builder setApnName(String);
+ method @NonNull public android.telephony.data.ApnSetting.Builder setApnTypeBitmask(int);
+ method @NonNull public android.telephony.data.ApnSetting.Builder setAuthType(int);
+ method @NonNull public android.telephony.data.ApnSetting.Builder setCarrierEnabled(boolean);
method @NonNull public android.telephony.data.ApnSetting.Builder setCarrierId(int);
- method public android.telephony.data.ApnSetting.Builder setEntryName(String);
+ method @NonNull public android.telephony.data.ApnSetting.Builder setEntryName(String);
method @Deprecated public android.telephony.data.ApnSetting.Builder setMmsProxyAddress(java.net.InetAddress);
- method public android.telephony.data.ApnSetting.Builder setMmsProxyAddress(String);
- method public android.telephony.data.ApnSetting.Builder setMmsProxyPort(int);
- method public android.telephony.data.ApnSetting.Builder setMmsc(android.net.Uri);
- method public android.telephony.data.ApnSetting.Builder setMvnoType(int);
- method public android.telephony.data.ApnSetting.Builder setNetworkTypeBitmask(int);
- method public android.telephony.data.ApnSetting.Builder setOperatorNumeric(String);
- method public android.telephony.data.ApnSetting.Builder setPassword(String);
- method public android.telephony.data.ApnSetting.Builder setProtocol(int);
+ method @NonNull public android.telephony.data.ApnSetting.Builder setMmsProxyAddress(String);
+ method @NonNull public android.telephony.data.ApnSetting.Builder setMmsProxyPort(int);
+ method @NonNull public android.telephony.data.ApnSetting.Builder setMmsc(android.net.Uri);
+ method @NonNull public android.telephony.data.ApnSetting.Builder setMvnoType(int);
+ method @NonNull public android.telephony.data.ApnSetting.Builder setNetworkTypeBitmask(int);
+ method @NonNull public android.telephony.data.ApnSetting.Builder setOperatorNumeric(String);
+ method @NonNull public android.telephony.data.ApnSetting.Builder setPassword(String);
+ method @NonNull public android.telephony.data.ApnSetting.Builder setProtocol(int);
method @Deprecated public android.telephony.data.ApnSetting.Builder setProxyAddress(java.net.InetAddress);
- method public android.telephony.data.ApnSetting.Builder setProxyAddress(String);
- method public android.telephony.data.ApnSetting.Builder setProxyPort(int);
- method public android.telephony.data.ApnSetting.Builder setRoamingProtocol(int);
- method public android.telephony.data.ApnSetting.Builder setUser(String);
+ method @NonNull public android.telephony.data.ApnSetting.Builder setProxyAddress(String);
+ method @NonNull public android.telephony.data.ApnSetting.Builder setProxyPort(int);
+ method @NonNull public android.telephony.data.ApnSetting.Builder setRoamingProtocol(int);
+ method @NonNull public android.telephony.data.ApnSetting.Builder setUser(String);
}
}
diff --git a/core/java/com/android/internal/os/RoSystemProperties.java b/core/java/com/android/internal/os/RoSystemProperties.java
index 209933a..8b3f47a 100644
--- a/core/java/com/android/internal/os/RoSystemProperties.java
+++ b/core/java/com/android/internal/os/RoSystemProperties.java
@@ -44,17 +44,19 @@
SystemProperties.getBoolean("ro.fw.system_user_split", false);
// ------ ro.crypto.* -------- //
- public static final String CRYPTO_STATE = SystemProperties.get("ro.crypto.state");
- public static final String CRYPTO_TYPE = CryptoProperties.type().orElse("none");
+ public static final CryptoProperties.state_values CRYPTO_STATE =
+ CryptoProperties.state().orElse(CryptoProperties.state_values.UNSUPPORTED);
+ public static final CryptoProperties.type_values CRYPTO_TYPE =
+ CryptoProperties.type().orElse(CryptoProperties.type_values.NONE);
// These are pseudo-properties
public static final boolean CRYPTO_ENCRYPTABLE =
- !CRYPTO_STATE.isEmpty() && !"unsupported".equals(CRYPTO_STATE);
+ CRYPTO_STATE != CryptoProperties.state_values.UNSUPPORTED;
public static final boolean CRYPTO_ENCRYPTED =
- "encrypted".equalsIgnoreCase(CRYPTO_STATE);
+ CRYPTO_STATE == CryptoProperties.state_values.ENCRYPTED;
public static final boolean CRYPTO_FILE_ENCRYPTED =
- "file".equalsIgnoreCase(CRYPTO_TYPE);
+ CRYPTO_TYPE == CryptoProperties.type_values.FILE;
public static final boolean CRYPTO_BLOCK_ENCRYPTED =
- "block".equalsIgnoreCase(CRYPTO_TYPE);
+ CRYPTO_TYPE == CryptoProperties.type_values.BLOCK;
public static final boolean CONTROL_PRIVAPP_PERMISSIONS_LOG =
"log".equalsIgnoreCase(CONTROL_PRIVAPP_PERMISSIONS);
diff --git a/telephony/java/android/telephony/data/ApnSetting.java b/telephony/java/android/telephony/data/ApnSetting.java
index 1607817..ae2c1d1 100644
--- a/telephony/java/android/telephony/data/ApnSetting.java
+++ b/telephony/java/android/telephony/data/ApnSetting.java
@@ -1641,6 +1641,7 @@
*
* @param entryName the entry name to set for the APN
*/
+ @NonNull
public Builder setEntryName(String entryName) {
this.mEntryName = entryName;
return this;
@@ -1651,6 +1652,7 @@
*
* @param apnName the name to set for the APN
*/
+ @NonNull
public Builder setApnName(String apnName) {
this.mApnName = apnName;
return this;
@@ -1681,6 +1683,7 @@
*
* @param proxy the proxy address to set for the APN
*/
+ @NonNull
public Builder setProxyAddress(String proxy) {
this.mProxyAddress = proxy;
return this;
@@ -1691,6 +1694,7 @@
*
* @param port the proxy port to set for the APN
*/
+ @NonNull
public Builder setProxyPort(int port) {
this.mProxyPort = port;
return this;
@@ -1701,6 +1705,7 @@
*
* @param mmsc the MMSC Uri to set for the APN
*/
+ @NonNull
public Builder setMmsc(Uri mmsc) {
this.mMmsc = mmsc;
return this;
@@ -1732,6 +1737,7 @@
*
* @param mmsProxy the MMS proxy address to set for the APN
*/
+ @NonNull
public Builder setMmsProxyAddress(String mmsProxy) {
this.mMmsProxyAddress = mmsProxy;
return this;
@@ -1742,6 +1748,7 @@
*
* @param mmsPort the MMS proxy port to set for the APN
*/
+ @NonNull
public Builder setMmsProxyPort(int mmsPort) {
this.mMmsProxyPort = mmsPort;
return this;
@@ -1752,6 +1759,7 @@
*
* @param user the APN username to set for the APN
*/
+ @NonNull
public Builder setUser(String user) {
this.mUser = user;
return this;
@@ -1763,6 +1771,7 @@
* @see android.provider.Telephony.Carriers#PASSWORD
* @param password the APN password to set for the APN
*/
+ @NonNull
public Builder setPassword(String password) {
this.mPassword = password;
return this;
@@ -1773,6 +1782,7 @@
*
* @param authType the authentication type to set for the APN
*/
+ @NonNull
public Builder setAuthType(@AuthType int authType) {
this.mAuthType = authType;
return this;
@@ -1789,6 +1799,7 @@
*
* @param apnTypeBitmask a bitmask describing the types of the APN
*/
+ @NonNull
public Builder setApnTypeBitmask(@ApnType int apnTypeBitmask) {
this.mApnTypeBitmask = apnTypeBitmask;
return this;
@@ -1801,6 +1812,7 @@
*
* @param operatorNumeric the numeric operator ID to set for this entry
*/
+ @NonNull
public Builder setOperatorNumeric(String operatorNumeric) {
this.mOperatorNumeric = operatorNumeric;
return this;
@@ -1813,6 +1825,7 @@
*
* @param protocol the protocol to set to use to connect to this APN
*/
+ @NonNull
public Builder setProtocol(@ProtocolType int protocol) {
this.mProtocol = protocol;
return this;
@@ -1825,6 +1838,7 @@
*
* @param roamingProtocol the protocol to set to use to connect to this APN when roaming
*/
+ @NonNull
public Builder setRoamingProtocol(@ProtocolType int roamingProtocol) {
this.mRoamingProtocol = roamingProtocol;
return this;
@@ -1835,6 +1849,7 @@
*
* @param carrierEnabled the current status to set for this APN
*/
+ @NonNull
public Builder setCarrierEnabled(boolean carrierEnabled) {
this.mCarrierEnabled = carrierEnabled;
return this;
@@ -1845,6 +1860,7 @@
*
* @param networkTypeBitmask the Radio Technology (Network Type) info
*/
+ @NonNull
public Builder setNetworkTypeBitmask(int networkTypeBitmask) {
this.mNetworkTypeBitmask = networkTypeBitmask;
return this;
@@ -1855,6 +1871,7 @@
*
* @param mvnoType the MVNO match type to set for this APN
*/
+ @NonNull
public Builder setMvnoType(@MvnoType int mvnoType) {
this.mMvnoType = mvnoType;
return this;
diff --git a/tests/net/java/com/android/server/ConnectivityServiceTest.java b/tests/net/java/com/android/server/ConnectivityServiceTest.java
index 3870ff3..b4582cc 100644
--- a/tests/net/java/com/android/server/ConnectivityServiceTest.java
+++ b/tests/net/java/com/android/server/ConnectivityServiceTest.java
@@ -190,6 +190,8 @@
import java.net.Inet4Address;
import java.net.InetAddress;
+import java.net.InetSocketAddress;
+import java.net.Socket;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.Arrays;
@@ -206,6 +208,7 @@
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.function.Consumer;
import java.util.function.Predicate;
/**
@@ -3993,17 +3996,24 @@
callback3.expectStopped();
}
- @Test
- public void testNattSocketKeepalives_SingleThreadExecutor() throws Exception {
+ // Helper method to prepare the executor and run test
+ private void runTestWithSerialExecutors(Consumer<Executor> functor) {
final ExecutorService executorSingleThread = Executors.newSingleThreadExecutor();
- doTestNattSocketKeepalivesWithExecutor(executorSingleThread);
+ final Executor executorInline = (Runnable r) -> r.run();
+ functor.accept(executorSingleThread);
executorSingleThread.shutdown();
+ functor.accept(executorInline);
}
@Test
- public void testNattSocketKeepalives_InlineExecutor() throws Exception {
- final Executor executorInline = (Runnable r) -> r.run();
- doTestNattSocketKeepalivesWithExecutor(executorInline);
+ public void testNattSocketKeepalives() {
+ runTestWithSerialExecutors(executor -> {
+ try {
+ doTestNattSocketKeepalivesWithExecutor(executor);
+ } catch (Exception e) {
+ fail(e.getMessage());
+ }
+ });
}
private void doTestNattSocketKeepalivesWithExecutor(Executor executor) throws Exception {
@@ -4144,6 +4154,81 @@
mWiFiNetworkAgent.disconnect();
waitFor(mWiFiNetworkAgent.getDisconnectedCV());
+ mWiFiNetworkAgent = null;
+ }
+
+ @Test
+ public void testTcpSocketKeepalives() {
+ runTestWithSerialExecutors(executor -> {
+ try {
+ doTestTcpSocketKeepalivesWithExecutor(executor);
+ } catch (Exception e) {
+ fail(e.getMessage());
+ }
+ });
+ }
+
+ private void doTestTcpSocketKeepalivesWithExecutor(Executor executor) throws Exception {
+ final int srcPortV4 = 12345;
+ final int srcPortV6 = 23456;
+ final InetAddress myIPv4 = InetAddress.getByName("127.0.0.1");
+ final InetAddress myIPv6 = InetAddress.getByName("::1");
+
+ final int validKaInterval = 15;
+ final int invalidKaInterval = 9;
+
+ final LinkProperties lp = new LinkProperties();
+ lp.setInterfaceName("wlan12");
+ lp.addLinkAddress(new LinkAddress(myIPv6, 64));
+ lp.addLinkAddress(new LinkAddress(myIPv4, 25));
+ lp.addRoute(new RouteInfo(InetAddress.getByName("fe80::1234")));
+ lp.addRoute(new RouteInfo(InetAddress.getByName("127.0.0.254")));
+
+ final Network notMyNet = new Network(61234);
+ final Network myNet = connectKeepaliveNetwork(lp);
+
+ final Socket testSocketV4 = new Socket();
+ final Socket testSocketV6 = new Socket();
+
+ TestSocketKeepaliveCallback callback = new TestSocketKeepaliveCallback();
+ SocketKeepalive ka;
+
+ // Attempt to start Tcp keepalives with invalid parameters and check for errors.
+ // Invalid network.
+ ka = mCm.createSocketKeepalive(notMyNet, testSocketV4, executor, callback);
+ ka.start(validKaInterval);
+ callback.expectError(SocketKeepalive.ERROR_INVALID_NETWORK);
+
+ // Invalid Socket (socket is not bound with IPv4 address).
+ ka = mCm.createSocketKeepalive(myNet, testSocketV4, executor, callback);
+ ka.start(validKaInterval);
+ callback.expectError(SocketKeepalive.ERROR_INVALID_SOCKET);
+
+ // Invalid Socket (socket is not bound with IPv6 address).
+ ka = mCm.createSocketKeepalive(myNet, testSocketV6, executor, callback);
+ ka.start(validKaInterval);
+ callback.expectError(SocketKeepalive.ERROR_INVALID_SOCKET);
+
+ // Bind the socket address
+ testSocketV4.bind(new InetSocketAddress(myIPv4, srcPortV4));
+ testSocketV6.bind(new InetSocketAddress(myIPv6, srcPortV6));
+
+ // Invalid Socket (socket is bound with IPv4 address).
+ ka = mCm.createSocketKeepalive(myNet, testSocketV4, executor, callback);
+ ka.start(validKaInterval);
+ callback.expectError(SocketKeepalive.ERROR_INVALID_SOCKET);
+
+ // Invalid Socket (socket is bound with IPv6 address).
+ ka = mCm.createSocketKeepalive(myNet, testSocketV6, executor, callback);
+ ka.start(validKaInterval);
+ callback.expectError(SocketKeepalive.ERROR_INVALID_SOCKET);
+
+ testSocketV4.close();
+ testSocketV6.close();
+
+ mWiFiNetworkAgent.disconnect();
+ waitFor(mWiFiNetworkAgent.getDisconnectedCV());
+ mWiFiNetworkAgent = null;
}
@Test