Merge "Force creation of Socket upon Transform application"

This commit is contained in:
Benedict Wong
2018-04-04 17:14:46 +00:00
committed by Gerrit Code Review
2 changed files with 34 additions and 0 deletions

View File

@@ -336,6 +336,9 @@ public final class IpSecManager {
*/
public void applyTransportModeTransform(@NonNull Socket socket,
@PolicyDirection int direction, @NonNull IpSecTransform transform) throws IOException {
// Ensure creation of FD. See b/77548890 for more details.
socket.getSoLinger();
applyTransportModeTransform(socket.getFileDescriptor$(), direction, transform);
}
@@ -440,6 +443,9 @@ public final class IpSecManager {
* @throws IOException indicating that the transform could not be removed from the socket
*/
public void removeTransportModeTransforms(@NonNull Socket socket) throws IOException {
// Ensure creation of FD. See b/77548890 for more details.
socket.getSoLinger();
removeTransportModeTransforms(socket.getFileDescriptor$());
}

View File

@@ -37,6 +37,7 @@ import android.system.Os;
import com.android.server.IpSecService;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import org.junit.Before;
@@ -187,6 +188,33 @@ public class IpSecManagerTest {
verify(mMockIpSecService).closeUdpEncapsulationSocket(DUMMY_RESOURCE_ID);
}
@Test
public void testApplyTransportModeTransformEnsuresSocketCreation() throws Exception {
Socket socket = new Socket();
IpSecConfig dummyConfig = new IpSecConfig();
IpSecTransform dummyTransform = new IpSecTransform(null, dummyConfig);
// Even if underlying SocketImpl is not initalized, this should force the init, and
// thereby succeed.
mIpSecManager.applyTransportModeTransform(
socket, IpSecManager.DIRECTION_IN, dummyTransform);
// Check to make sure the FileDescriptor is non-null
assertNotNull(socket.getFileDescriptor$());
}
@Test
public void testRemoveTransportModeTransformsForcesSocketCreation() throws Exception {
Socket socket = new Socket();
// Even if underlying SocketImpl is not initalized, this should force the init, and
// thereby succeed.
mIpSecManager.removeTransportModeTransforms(socket);
// Check to make sure the FileDescriptor is non-null
assertNotNull(socket.getFileDescriptor$());
}
@Test
public void testOpenEncapsulationSocketOnRandomPort() throws Exception {
IpSecUdpEncapResponse udpEncapResp =