Remove DatagramSocket calls from IpSecManagerTest

Because the DatagramSocket version of the API is being
hidden, this test is being converted to use the
FileDescriptor version of applyTransportModeTransform()
and removeTransportModeTransform()

Bug: 37446006
Test: compilation
Change-Id: Ida4977a6e7496ce6b4de38bfd48bd6a162cab874
diff --git a/tests/tests/net/src/android/net/cts/IpSecManagerTest.java b/tests/tests/net/src/android/net/cts/IpSecManagerTest.java
index 39d683d..bcecee1 100644
--- a/tests/tests/net/src/android/net/cts/IpSecManagerTest.java
+++ b/tests/tests/net/src/android/net/cts/IpSecManagerTest.java
@@ -21,11 +21,13 @@
 import android.net.IpSecAlgorithm;
 import android.net.IpSecManager;
 import android.net.IpSecTransform;
+import android.os.ParcelFileDescriptor;
+import android.system.Os;
+import android.system.OsConstants;
 import android.test.AndroidTestCase;
-import android.util.Log;
-import java.io.IOException;
-import java.net.DatagramPacket;
+import java.io.ByteArrayOutputStream;
 import java.net.DatagramSocket;
+import java.io.FileDescriptor;
 import java.net.InetAddress;
 import java.net.UnknownHostException;
 import java.util.Arrays;
@@ -82,16 +84,17 @@
     public void testAllocSpi() throws Exception {
         for (InetAddress addr : GOOGLE_DNS_LIST) {
             IpSecManager.SecurityParameterIndex randomSpi = null, droidSpi = null;
-            randomSpi =
-                    mISM.reserveSecurityParameterIndex(
-                            IpSecTransform.DIRECTION_OUT,
-                            addr);
-            assertTrue(randomSpi.getSpi() != IpSecManager.INVALID_SECURITY_PARAMETER_INDEX);
+            randomSpi = mISM.reserveSecurityParameterIndex(IpSecTransform.DIRECTION_OUT, addr);
+            assertTrue(
+                    "Failed to receive a valid SPI",
+                    randomSpi.getSpi() != IpSecManager.INVALID_SECURITY_PARAMETER_INDEX);
 
             droidSpi =
                     mISM.reserveSecurityParameterIndex(
                             IpSecTransform.DIRECTION_IN, addr, DROID_SPI);
-            assertTrue(droidSpi.getSpi() == DROID_SPI);
+            assertTrue(
+                    "Failed to allocate specified SPI, " + DROID_SPI,
+                    droidSpi.getSpi() == DROID_SPI);
 
             try {
                 mISM.reserveSecurityParameterIndex(IpSecTransform.DIRECTION_IN, addr, DROID_SPI);
@@ -118,9 +121,7 @@
     public void testCreateTransform() throws Exception {
         InetAddress local = InetAddress.getLoopbackAddress();
         IpSecManager.SecurityParameterIndex outSpi =
-                mISM.reserveSecurityParameterIndex(
-                        IpSecTransform.DIRECTION_OUT,
-                        local);
+                mISM.reserveSecurityParameterIndex(IpSecTransform.DIRECTION_OUT, local);
 
         IpSecManager.SecurityParameterIndex inSpi =
                 mISM.reserveSecurityParameterIndex(
@@ -150,27 +151,21 @@
                                         CRYPT_KEY.length * 8))
                         .buildTransportModeTransform(local);
 
-        DatagramSocket localSocket;
-        localSocket = new DatagramSocket(8888);
-
+        // Hack to ensure the socket doesn't block indefinitely on failure
+        DatagramSocket localSocket = new DatagramSocket(8888);
         localSocket.setSoTimeout(500);
-        mISM.applyTransportModeTransform(localSocket, transform);
+        ParcelFileDescriptor pin = ParcelFileDescriptor.fromDatagramSocket(localSocket);
+        FileDescriptor udpSocket = pin.getFileDescriptor();
+
+        mISM.applyTransportModeTransform(udpSocket, transform);
         byte[] data = new String("Best test data ever!").getBytes("UTF-8");
 
-        DatagramPacket out = new DatagramPacket(data, data.length, local, 8888);
-        localSocket.send(out);
-        DatagramPacket in = new DatagramPacket(new byte[data.length], data.length);
-
-        localSocket.receive(in);
-        Log.d(TAG, Arrays.toString(data));
-        Log.d(TAG, Arrays.toString(in.getData()));
-        assertTrue(Arrays.equals(data, in.getData()));
+        byte[] in = new byte[data.length];
+        Os.sendto(udpSocket, data, 0, data.length, 0, local, 8888);
+        Os.read(udpSocket, in, 0, in.length);
+        assertTrue("Encapsulated data did not match.", Arrays.equals(data, in));
+        mISM.removeTransportModeTransform(udpSocket, transform);
+        Os.close(udpSocket);
         transform.close();
-        try {
-            localSocket.send(out);
-        } catch (IOException e) {
-        }
-
-        mISM.removeTransportModeTransform(localSocket, transform);
     }
 }