DO NOT MERGE Manually merge commit 'f28778064383821ccf48c9570191f34a24aa513f' into nyc-mr1-dev-plus-aosp

Change-Id: I7cb1f97a5b931c2057a811d7947f47ad7320ef1c
diff --git a/services/core/java/com/android/server/net/IpConfigStore.java b/services/core/java/com/android/server/net/IpConfigStore.java
index 2807ec8..4d56468 100644
--- a/services/core/java/com/android/server/net/IpConfigStore.java
+++ b/services/core/java/com/android/server/net/IpConfigStore.java
@@ -27,6 +27,7 @@
 import android.util.Log;
 import android.util.SparseArray;
 
+import com.android.internal.annotations.VisibleForTesting;
 import com.android.server.net.DelayedDiskWrite;
 
 import java.io.BufferedInputStream;
@@ -34,7 +35,9 @@
 import java.io.DataOutputStream;
 import java.io.EOFException;
 import java.io.FileInputStream;
+import java.io.FileNotFoundException;
 import java.io.IOException;
+import java.io.InputStream;
 import java.net.InetAddress;
 import java.net.Inet4Address;
 
@@ -67,7 +70,8 @@
         this(new DelayedDiskWrite());
     }
 
-    private boolean writeConfig(DataOutputStream out, int configKey,
+    @VisibleForTesting
+    public static boolean writeConfig(DataOutputStream out, int configKey,
                                 IpConfiguration config) throws IOException {
         boolean written = false;
 
@@ -171,12 +175,25 @@
         });
     }
 
-    public SparseArray<IpConfiguration> readIpAndProxyConfigurations(String filePath) {
-        SparseArray<IpConfiguration> networks = new SparseArray<IpConfiguration>();
+    public static SparseArray<IpConfiguration> readIpAndProxyConfigurations(String filePath) {
+        BufferedInputStream bufferedInputStream;
+        try {
+            bufferedInputStream = new BufferedInputStream(new FileInputStream(filePath));
+        } catch (FileNotFoundException e) {
+            // Return an empty array here because callers expect an empty array when the file is
+            // not present.
+            loge("Error opening configuration file: " + e);
+            return new SparseArray<>();
+        }
+        return readIpAndProxyConfigurations(bufferedInputStream);
+    }
 
+    public static SparseArray<IpConfiguration> readIpAndProxyConfigurations(
+            InputStream inputStream) {
+        SparseArray<IpConfiguration> networks = new SparseArray<IpConfiguration>();
         DataInputStream in = null;
         try {
-            in = new DataInputStream(new BufferedInputStream(new FileInputStream(filePath)));
+            in = new DataInputStream(inputStream);
 
             int version = in.readInt();
             if (version != 2 && version != 1) {
@@ -327,11 +344,11 @@
         return networks;
     }
 
-    protected void loge(String s) {
+    protected static void loge(String s) {
         Log.e(TAG, s);
     }
 
-    protected void log(String s) {
+    protected static void log(String s) {
         Log.d(TAG, s);
     }
 }