test/jdk/java/net/SocketImpl/SocketImplCombinations.java
author chegar
Thu, 17 Oct 2019 20:54:25 +0100
branchdatagramsocketimpl-branch
changeset 58679 9c3209ff7550
parent 58678 9cf78a70fa4f
parent 58423 54de0c861d32
permissions -rw-r--r--
datagramsocketimpl-branch: merge with default
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
54155
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
     1
/*
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
     2
 * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
     4
 *
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
     7
 * published by the Free Software Foundation.
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
     8
 *
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
    13
 * accompanied this code).
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
    14
 *
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
    18
 *
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
    21
 * questions.
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
    22
 */
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
    23
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
    24
/*
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
    25
 * @test
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
    26
 * @bug 8220493
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
    27
 * @modules java.base/java.net:+open java.base/sun.nio.ch:+open
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
    28
 * @run testng/othervm SocketImplCombinations
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
    29
 * @summary Test Socket and ServerSocket with combinations of SocketImpls
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
    30
 */
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
    31
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
    32
import java.io.FileDescriptor;
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
    33
import java.io.IOException;
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
    34
import java.io.InputStream;
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
    35
import java.io.OutputStream;
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
    36
import java.lang.reflect.Field;
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
    37
import java.net.InetAddress;
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
    38
import java.net.InetSocketAddress;
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
    39
import java.net.Proxy;
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
    40
import java.net.ServerSocket;
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
    41
import java.net.Socket;
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
    42
import java.net.SocketAddress;
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
    43
import java.net.SocketImpl;
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
    44
import java.net.SocketImplFactory;
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
    45
import java.nio.channels.ServerSocketChannel;
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
    46
import java.nio.channels.SocketChannel;
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
    47
import java.util.function.BiConsumer;
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
    48
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
    49
import org.testng.annotations.Test;
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
    50
import static org.testng.Assert.*;
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
    51
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
    52
@Test
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
    53
public class SocketImplCombinations {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
    54
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
    55
    /**
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
    56
     * Test creating an unconnected Socket, it should be created with a platform SocketImpl.
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
    57
     */
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
    58
    public void testNewSocket1() throws IOException {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
    59
        try (Socket s = new Socket()) {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
    60
            SocketImpl si = getSocketImpl(s);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
    61
            assertTrue(isSocksSocketImpl(si));
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
    62
            SocketImpl delegate = getDelegate(si);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
    63
            assertTrue(isPlatformSocketImpl(delegate));
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
    64
        }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
    65
    }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
    66
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
    67
    /**
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
    68
     * Test creating a connected Socket, it should be created with a platform SocketImpl.
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
    69
     */
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
    70
    public void testNewSocket2() throws IOException {
58423
54de0c861d32 8231506: Fix some instabilities in a few networking tests
dfuchs
parents: 54155
diff changeset
    71
        try (ServerSocket ss = boundServerSocket()) {
54155
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
    72
            try (Socket s = new Socket(ss.getInetAddress(), ss.getLocalPort())) {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
    73
                SocketImpl si = getSocketImpl(s);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
    74
                assertTrue(isSocksSocketImpl(si));
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
    75
                SocketImpl delegate = getDelegate(si);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
    76
                assertTrue(isPlatformSocketImpl(delegate));
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
    77
            }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
    78
        }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
    79
    }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
    80
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
    81
    /**
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
    82
     * Test creating a Socket for a DIRECT connection, it should be created with a
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
    83
     * platform SocketImpl.
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
    84
     */
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
    85
    public void testNewSocket3() throws IOException {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
    86
        try (Socket s = new Socket(Proxy.NO_PROXY)) {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
    87
            SocketImpl si = getSocketImpl(s);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
    88
            assertTrue(isPlatformSocketImpl(si));
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
    89
        }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
    90
    }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
    91
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
    92
    /**
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
    93
     * Test creating a Socket for a SOCKS connection, it should be created with a
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
    94
     * SOCKS SocketImpl.
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
    95
     */
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
    96
    public void testNewSocket4() throws IOException {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
    97
        var address = new InetSocketAddress("127.0.0.1", 1080);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
    98
        var socksProxy = new Proxy(Proxy.Type.SOCKS, address);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
    99
        try (Socket s = new Socket(socksProxy)) {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   100
            SocketImpl si = getSocketImpl(s);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   101
            assertTrue(isSocksSocketImpl(si));
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   102
            SocketImpl delegate = getDelegate(si);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   103
            assertTrue(isPlatformSocketImpl(delegate));
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   104
        }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   105
    }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   106
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   107
    /**
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   108
     * Test creating a Socket for a HTTP proxy connection, it should be created with
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   109
     * a HTTP proxy SocketImpl.
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   110
     */
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   111
    public void testNewSocket5() throws IOException {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   112
        var address = new InetSocketAddress("127.0.0.1", 8080);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   113
        var httpProxy = new Proxy(Proxy.Type.HTTP, address);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   114
        try (Socket s = new Socket(httpProxy)) {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   115
            SocketImpl si = getSocketImpl(s);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   116
            assertTrue(isHttpConnectSocketImpl(si));
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   117
            SocketImpl delegate = getDelegate(si);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   118
            assertTrue(isPlatformSocketImpl(delegate));
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   119
        }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   120
    }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   121
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   122
    /**
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   123
     * Test creating a Socket no SocketImpl. A platform SocketImpl should be
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   124
     * created lazily.
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   125
     */
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   126
    public void testNewSocket6() throws IOException {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   127
        Socket s = new Socket((SocketImpl) null) { };
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   128
        try (s) {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   129
            assertTrue(getSocketImpl(s) == null);
58423
54de0c861d32 8231506: Fix some instabilities in a few networking tests
dfuchs
parents: 54155
diff changeset
   130
            s.bind(loopbackSocketAddress());   // force SocketImpl to be created
54155
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   131
            SocketImpl si = getSocketImpl(s);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   132
            assertTrue(isSocksSocketImpl(si));
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   133
            SocketImpl delegate = getDelegate(si);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   134
            assertTrue(isPlatformSocketImpl(delegate));
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   135
        }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   136
    }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   137
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   138
    /**
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   139
     * Test creating a Socket with a custom SocketImpl.
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   140
     */
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   141
    public void testNewSocket7() throws IOException {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   142
        Socket s = new Socket(new CustomSocketImpl(false)) { };
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   143
        try (s) {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   144
            SocketImpl si = getSocketImpl(s);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   145
            assertTrue(si instanceof CustomSocketImpl);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   146
        }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   147
    }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   148
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   149
    /**
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   150
     * Test creating a Socket when there is a SocketImplFactory set.
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   151
     */
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   152
    public void testNewSocket8() throws IOException {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   153
        setSocketSocketImplFactory(() -> new CustomSocketImpl(false));
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   154
        try (Socket s = new Socket()) {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   155
            SocketImpl si = getSocketImpl(s);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   156
            assertTrue(si instanceof CustomSocketImpl);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   157
        } finally {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   158
            setSocketSocketImplFactory(null);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   159
        }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   160
    }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   161
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   162
    /**
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   163
     * Test creating a Socket for a DIRECT connection when there is a
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   164
     * SocketImplFactory set.
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   165
     */
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   166
    public void testNewSocket9() throws IOException {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   167
        setSocketSocketImplFactory(() -> new CustomSocketImpl(false));
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   168
        try (Socket s = new Socket(Proxy.NO_PROXY)) {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   169
            SocketImpl si = getSocketImpl(s);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   170
            assertTrue(si instanceof CustomSocketImpl);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   171
        } finally {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   172
            setSocketSocketImplFactory(null);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   173
        }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   174
    }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   175
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   176
    /**
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   177
     * Test creating a Socket for a SOCKS connection when there is a
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   178
     * SocketImplFactory set.
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   179
     */
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   180
    public void testNewSocket10() throws IOException {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   181
        var address = new InetSocketAddress("127.0.0.1", 1080);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   182
        var socksProxy = new Proxy(Proxy.Type.SOCKS, address);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   183
        setSocketSocketImplFactory(() -> new CustomSocketImpl(false));
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   184
        try (Socket s = new Socket(socksProxy)) {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   185
            SocketImpl si = getSocketImpl(s);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   186
            assertTrue(isSocksSocketImpl(si));
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   187
            SocketImpl delegate = getDelegate(si);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   188
            assertTrue(isPlatformSocketImpl(delegate));
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   189
        } finally {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   190
            setSocketSocketImplFactory(null);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   191
        }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   192
    }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   193
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   194
    /**
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   195
     * Test creating a Socket for a HTTP proxy connection when there is a
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   196
     * SocketImplFactory set.
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   197
     */
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   198
    public void testNewSocket11() throws IOException {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   199
        var address = new InetSocketAddress("127.0.0.1", 8080);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   200
        var httpProxy = new Proxy(Proxy.Type.HTTP, address);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   201
        setSocketSocketImplFactory(() -> new CustomSocketImpl(false));
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   202
        try (Socket s = new Socket(httpProxy)) {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   203
            SocketImpl si = getSocketImpl(s);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   204
            assertTrue(isHttpConnectSocketImpl(si));
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   205
            SocketImpl delegate = getDelegate(si);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   206
            assertTrue(isPlatformSocketImpl(delegate));
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   207
        } finally {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   208
            setSocketSocketImplFactory(null);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   209
        }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   210
    }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   211
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   212
    /**
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   213
     * Test creating a Socket no SocketImpl when there is a SocketImplFactory set.
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   214
     */
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   215
    public void testNewSocket12() throws IOException {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   216
        setSocketSocketImplFactory(() -> new CustomSocketImpl(false));
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   217
        try {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   218
            Socket s = new Socket((SocketImpl) null) { };
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   219
            try (s) {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   220
                assertTrue(getSocketImpl(s) == null);
58423
54de0c861d32 8231506: Fix some instabilities in a few networking tests
dfuchs
parents: 54155
diff changeset
   221
                s.bind(loopbackSocketAddress());   // force SocketImpl to be created
54155
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   222
                assertTrue(getSocketImpl(s) instanceof CustomSocketImpl);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   223
            }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   224
        } finally {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   225
            setSocketSocketImplFactory(null);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   226
        }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   227
    }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   228
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   229
    /**
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   230
     * Test creating an unbound ServerSocket, it should be created with a platform
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   231
     * SocketImpl.
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   232
     */
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   233
    public void testNewServerSocket1() throws IOException {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   234
        try (ServerSocket ss = new ServerSocket()) {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   235
            SocketImpl si = getSocketImpl(ss);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   236
            assertTrue(isPlatformSocketImpl(si));
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   237
        }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   238
    }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   239
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   240
    /**
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   241
     * Test creating a bound ServerSocket, it should be created with a platform
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   242
     * SocketImpl.
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   243
     */
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   244
    public void testNewServerSocket2() throws IOException {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   245
        try (ServerSocket ss = new ServerSocket(0)) {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   246
            SocketImpl si = getSocketImpl(ss);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   247
            assertTrue(isPlatformSocketImpl(si));
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   248
        }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   249
    }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   250
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   251
    /**
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   252
     * Test creating a ServerSocket with a custom SocketImpl.
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   253
     */
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   254
    public void testNewServerSocket3() throws IOException {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   255
        ServerSocket ss = new ServerSocket(new CustomSocketImpl(true)) { };
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   256
        try (ss) {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   257
            SocketImpl si = getSocketImpl(ss);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   258
            assertTrue(si instanceof CustomSocketImpl);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   259
        }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   260
    }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   261
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   262
    /**
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   263
     * Test creating an unbound ServerSocket when there is a SocketImplFactory set.
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   264
     */
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   265
    public void testNewServerSocket4() throws IOException {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   266
        setServerSocketImplFactory(() -> new CustomSocketImpl(true));
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   267
        try (ServerSocket ss = new ServerSocket()) {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   268
            SocketImpl si = getSocketImpl(ss);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   269
            assertTrue(si instanceof CustomSocketImpl);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   270
        } finally {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   271
            setServerSocketImplFactory(null);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   272
        }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   273
    }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   274
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   275
    /**
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   276
     * Test creating a bound ServerSocket when there is a SocketImplFactory set.
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   277
     */
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   278
    public void testNewServerSocket5() throws IOException {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   279
        setServerSocketImplFactory(() -> new CustomSocketImpl(true));
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   280
        try (ServerSocket ss = new ServerSocket(0)) {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   281
            SocketImpl si = getSocketImpl(ss);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   282
            assertTrue(si instanceof CustomSocketImpl);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   283
        } finally {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   284
            setServerSocketImplFactory(null);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   285
        }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   286
    }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   287
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   288
    /**
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   289
     * Test ServerSocket.accept. The ServerSocket uses a platform SocketImpl,
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   290
     * the Socket to accept is created with no SocketImpl.
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   291
     */
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   292
    public void testServerSocketAccept1() throws IOException {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   293
        var socket = new Socket((SocketImpl) null) { };
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   294
        assertTrue(getSocketImpl(socket) == null);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   295
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   296
        serverSocketAccept(socket, (ss, s) -> {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   297
            assertTrue(isPlatformSocketImpl(getSocketImpl(ss)));
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   298
            assertTrue(s == socket);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   299
            SocketImpl si = getSocketImpl(s);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   300
            assertTrue(isPlatformSocketImpl(si));
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   301
            checkFields(si);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   302
        });
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   303
    }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   304
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   305
    /**
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   306
     * Test ServerSocket.accept. The ServerSocket uses a platform SocketImpl,
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   307
     * the Socket to accept is created with no SocketImpl, and there is a custom
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   308
     * client SocketImplFactory set.
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   309
     */
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   310
    public void testServerSocketAccept2() throws IOException {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   311
        var socket = new Socket((SocketImpl) null) { };
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   312
        assertTrue(getSocketImpl(socket) == null);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   313
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   314
        serverSocketAccept(socket, () -> new CustomSocketImpl(false), (ss, s) -> {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   315
            assertTrue(isPlatformSocketImpl(getSocketImpl(ss)));
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   316
            assertTrue(s == socket);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   317
            SocketImpl si = getSocketImpl(s);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   318
            assertTrue(isPlatformSocketImpl(si));
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   319
            checkFields(si);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   320
        });
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   321
    }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   322
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   323
    /**
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   324
     * Test ServerSocket.accept. The ServerSocket uses a platform SocketImpl,
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   325
     * the Socket to accept is created with a SocketImpl that delegates to a
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   326
     * platform SocketImpl.
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   327
     */
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   328
    public void testServerSocketAccept3() throws IOException {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   329
        var socket = new Socket();
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   330
        SocketImpl si = getSocketImpl(socket);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   331
        assertTrue(isSocksSocketImpl(si));
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   332
        SocketImpl delegate = getDelegate(si);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   333
        assertTrue(isPlatformSocketImpl(delegate));
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   334
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   335
        serverSocketAccept(socket, (ss, s) -> {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   336
            assertTrue(isPlatformSocketImpl(getSocketImpl(ss)));
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   337
            assertTrue(s == socket);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   338
            SocketImpl psi = getSocketImpl(socket);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   339
            assertTrue(isPlatformSocketImpl(psi));
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   340
            checkFields(psi);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   341
        });
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   342
    }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   343
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   344
    /**
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   345
     * Test ServerSocket.accept. The ServerSocket uses a platform SocketImpl,
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   346
     * the Socket to accept is created with a custom SocketImpl.
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   347
     */
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   348
    public void testServerSocketAccept4a() throws IOException {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   349
        SocketImpl clientImpl = new CustomSocketImpl(false);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   350
        Socket socket = new Socket(clientImpl) { };
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   351
        assertTrue(getSocketImpl(socket) == clientImpl);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   352
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   353
        try (ServerSocket ss = serverSocketToAccept(socket)) {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   354
            expectThrows(IOException.class, ss::accept);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   355
        } finally {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   356
            socket.close();
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   357
        }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   358
    }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   359
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   360
    public void testServerSocketAccept4b() throws IOException {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   361
        SocketImpl clientImpl = new CustomSocketImpl(false);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   362
        Socket socket = new Socket(clientImpl) { };
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   363
        assertTrue(getSocketImpl(socket) == clientImpl);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   364
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   365
        setSocketSocketImplFactory(() -> new CustomSocketImpl(false));
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   366
        try (ServerSocket ss = serverSocketToAccept(socket)) {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   367
            expectThrows(IOException.class, ss::accept);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   368
        } finally {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   369
            setSocketSocketImplFactory(null);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   370
            socket.close();
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   371
        }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   372
    }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   373
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   374
    /**
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   375
     * Test ServerSocket.accept. The ServerSocket uses a custom SocketImpl,
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   376
     * the Socket to accept is created no SocketImpl.
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   377
     */
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   378
    public void testServerSocketAccept5a() throws IOException {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   379
        SocketImpl serverImpl = new CustomSocketImpl(true);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   380
        try (ServerSocket ss = new ServerSocket(serverImpl) { }) {
58423
54de0c861d32 8231506: Fix some instabilities in a few networking tests
dfuchs
parents: 54155
diff changeset
   381
            ss.bind(loopbackSocketAddress());
54155
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   382
            expectThrows(IOException.class, ss::accept);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   383
        }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   384
    }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   385
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   386
    public void testServerSocketAccept5b() throws IOException {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   387
        var socket = new Socket((SocketImpl) null) { };
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   388
        assertTrue(getSocketImpl(socket) == null);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   389
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   390
        SocketImpl serverImpl = new CustomSocketImpl(true);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   391
        try (ServerSocket ss = serverSocketToAccept(serverImpl, socket)) {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   392
            expectThrows(IOException.class, ss::accept);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   393
        } finally {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   394
            socket.close();
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   395
        }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   396
    }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   397
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   398
    public void testServerSocketAccept5c() throws IOException {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   399
        setServerSocketImplFactory(() -> new CustomSocketImpl(true));
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   400
        try (ServerSocket ss = new ServerSocket(0)) {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   401
            expectThrows(IOException.class, ss::accept);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   402
        } finally {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   403
            setServerSocketImplFactory(null);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   404
        }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   405
    }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   406
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   407
    public void testServerSocketAccept5d() throws IOException {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   408
        var socket = new Socket((SocketImpl) null) { };
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   409
        assertTrue(getSocketImpl(socket) == null);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   410
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   411
        setServerSocketImplFactory(() -> new CustomSocketImpl(true));
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   412
        try (ServerSocket ss = serverSocketToAccept(socket)) {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   413
            expectThrows(IOException.class, ss::accept);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   414
        } finally {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   415
            setServerSocketImplFactory(null);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   416
            socket.close();
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   417
        }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   418
    }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   419
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   420
    /**
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   421
     * Test ServerSocket.accept. The ServerSocket uses a custom SocketImpl,
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   422
     * the Socket to accept is created with no SocketImpl, and there is a custom
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   423
     * client SocketImplFactory set.
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   424
     */
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   425
    public void testServerSocketAccept6() throws Exception {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   426
        var socket = new Socket((SocketImpl) null) { };
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   427
        assertTrue(getSocketImpl(socket) == null);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   428
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   429
        SocketImpl serverImpl = new CustomSocketImpl(true);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   430
        SocketImplFactory clientFactory = () -> new CustomSocketImpl(false);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   431
        serverSocketAccept(serverImpl, socket, clientFactory, (ss, s) -> {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   432
            assertTrue(getSocketImpl(ss) == serverImpl);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   433
            SocketImpl si = getSocketImpl(s);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   434
            assertTrue(si instanceof CustomSocketImpl);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   435
            checkFields(si);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   436
        });
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   437
    }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   438
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   439
    /**
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   440
     * Test ServerSocket.accept. The ServerSocket uses a custom SocketImpl,
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   441
     * the Socket to accept is created with a SocketImpl that delegates to a
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   442
     * platform SocketImpl.
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   443
     */
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   444
    public void testServerSocketAccept7a() throws IOException {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   445
        var socket = new Socket();
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   446
        SocketImpl si = getSocketImpl(socket);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   447
        assertTrue(isSocksSocketImpl(si));
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   448
        SocketImpl delegate = getDelegate(si);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   449
        assertTrue(isPlatformSocketImpl(delegate));
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   450
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   451
        SocketImpl serverImpl = new CustomSocketImpl(true);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   452
        try (ServerSocket ss = serverSocketToAccept(serverImpl, socket)) {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   453
            expectThrows(IOException.class, ss::accept);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   454
        } finally {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   455
            socket.close();
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   456
        }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   457
    }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   458
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   459
    public void testServerSocketAccept7b() throws IOException {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   460
        var socket = new Socket();
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   461
        SocketImpl si = getSocketImpl(socket);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   462
        assertTrue(isSocksSocketImpl(si));
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   463
        SocketImpl delegate = getDelegate(si);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   464
        assertTrue(isPlatformSocketImpl(delegate));
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   465
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   466
        setServerSocketImplFactory(() -> new CustomSocketImpl(true));
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   467
        try (ServerSocket ss = serverSocketToAccept(socket)) {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   468
            expectThrows(IOException.class, ss::accept);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   469
        } finally {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   470
            setServerSocketImplFactory(null);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   471
            socket.close();
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   472
        }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   473
    }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   474
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   475
    /**
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   476
     * Test ServerSocket.accept. The ServerSocket uses a custom SocketImpl,
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   477
     * the Socket to accept is created with a custom SocketImpl.
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   478
     */
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   479
    public void testServerSocketAccept8() throws Exception {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   480
        SocketImpl clientImpl = new CustomSocketImpl(false);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   481
        Socket socket = new Socket(clientImpl) { };
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   482
        assertTrue(getSocketImpl(socket) == clientImpl);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   483
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   484
        SocketImpl serverImpl = new CustomSocketImpl(true);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   485
        SocketImplFactory clientFactory = () -> new CustomSocketImpl(false);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   486
        serverSocketAccept(serverImpl, socket, clientFactory, (ss, s) -> {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   487
            assertTrue(getSocketImpl(ss) == serverImpl);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   488
            assertTrue(getSocketImpl(s) == clientImpl);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   489
            checkFields(clientImpl);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   490
        });
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   491
    }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   492
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   493
    /**
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   494
     * Creates a ServerSocket that returns the given Socket from accept.
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   495
     * The consumer is invoked with the server socket and the accepted socket.
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   496
     */
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   497
    static void serverSocketAccept(Socket socket,
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   498
                                   BiConsumer<ServerSocket, Socket> consumer)
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   499
        throws IOException
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   500
    {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   501
        Socket s1 = null;
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   502
        Socket s2 = null;
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   503
        try (ServerSocket ss = serverSocketToAccept(socket)) {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   504
            s1 = new Socket(ss.getInetAddress(), ss.getLocalPort());
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   505
            s2 = ss.accept();
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   506
            consumer.accept(ss, s2);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   507
        } finally {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   508
            if (s1 != null) s1.close();
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   509
            if (s2 != null) s2.close();
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   510
        }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   511
    }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   512
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   513
    /**
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   514
     * Creates a ServerSocket that returns the given Socket from accept. The
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   515
     * given SocketImplFactory is set during the accept and the consumer is
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   516
     * invoked when the server socket and the accepted socket.
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   517
     */
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   518
    static void serverSocketAccept(Socket socket,
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   519
                                   SocketImplFactory factory,
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   520
                                   BiConsumer<ServerSocket, Socket> consumer)
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   521
        throws IOException
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   522
    {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   523
        Socket s1 = null;
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   524
        Socket s2 = null;
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   525
        try (ServerSocket ss = serverSocketToAccept(socket)) {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   526
            s1 = new Socket(ss.getInetAddress(), ss.getLocalPort());
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   527
            setSocketSocketImplFactory(factory);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   528
            try {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   529
                s2 = ss.accept();
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   530
            } finally {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   531
                setSocketSocketImplFactory(null);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   532
            }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   533
            consumer.accept(ss, s2);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   534
        } finally {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   535
            if (s1 != null) s1.close();
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   536
            if (s2 != null) s2.close();
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   537
        }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   538
    }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   539
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   540
    /**
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   541
     * Creates a ServerSocket with a SocketImpl returns the given Socket from
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   542
     * accept. The given SocketImplFactory is set during the accept and the
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   543
     * consumer is invoked when the server socket and the accepted socket.
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   544
     */
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   545
    static void serverSocketAccept(SocketImpl impl,
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   546
                                   Socket socket,
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   547
                                   SocketImplFactory factory,
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   548
                                   BiConsumer<ServerSocket, Socket> consumer)
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   549
        throws IOException
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   550
    {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   551
        Socket s1 = null;
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   552
        Socket s2 = null;
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   553
        try (ServerSocket ss = serverSocketToAccept(impl, socket)) {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   554
            s1 = new Socket(ss.getInetAddress(), ss.getLocalPort());
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   555
            setSocketSocketImplFactory(factory);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   556
            try {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   557
                s2 = ss.accept();
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   558
            } finally {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   559
                setSocketSocketImplFactory(null);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   560
            }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   561
            consumer.accept(ss, s2);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   562
        } finally {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   563
            if (s1 != null) s1.close();
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   564
            if (s2 != null) s2.close();
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   565
        }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   566
    }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   567
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   568
    /**
58423
54de0c861d32 8231506: Fix some instabilities in a few networking tests
dfuchs
parents: 54155
diff changeset
   569
     * Returns a new InetSocketAddress with the loopback interface
54de0c861d32 8231506: Fix some instabilities in a few networking tests
dfuchs
parents: 54155
diff changeset
   570
     * and port 0.
54de0c861d32 8231506: Fix some instabilities in a few networking tests
dfuchs
parents: 54155
diff changeset
   571
     */
54de0c861d32 8231506: Fix some instabilities in a few networking tests
dfuchs
parents: 54155
diff changeset
   572
    static InetSocketAddress loopbackSocketAddress() {
54de0c861d32 8231506: Fix some instabilities in a few networking tests
dfuchs
parents: 54155
diff changeset
   573
        InetAddress loopback = InetAddress.getLoopbackAddress();
54de0c861d32 8231506: Fix some instabilities in a few networking tests
dfuchs
parents: 54155
diff changeset
   574
        return new InetSocketAddress(loopback, 0);
54de0c861d32 8231506: Fix some instabilities in a few networking tests
dfuchs
parents: 54155
diff changeset
   575
    }
54de0c861d32 8231506: Fix some instabilities in a few networking tests
dfuchs
parents: 54155
diff changeset
   576
54de0c861d32 8231506: Fix some instabilities in a few networking tests
dfuchs
parents: 54155
diff changeset
   577
    /**
54de0c861d32 8231506: Fix some instabilities in a few networking tests
dfuchs
parents: 54155
diff changeset
   578
     * Returns a ServerSocket bound to a port on the loopback address
54de0c861d32 8231506: Fix some instabilities in a few networking tests
dfuchs
parents: 54155
diff changeset
   579
     */
54de0c861d32 8231506: Fix some instabilities in a few networking tests
dfuchs
parents: 54155
diff changeset
   580
    static ServerSocket boundServerSocket() throws IOException {
54de0c861d32 8231506: Fix some instabilities in a few networking tests
dfuchs
parents: 54155
diff changeset
   581
        ServerSocket ss = new ServerSocket();
54de0c861d32 8231506: Fix some instabilities in a few networking tests
dfuchs
parents: 54155
diff changeset
   582
        ss.bind(loopbackSocketAddress());
54de0c861d32 8231506: Fix some instabilities in a few networking tests
dfuchs
parents: 54155
diff changeset
   583
        return ss;
54de0c861d32 8231506: Fix some instabilities in a few networking tests
dfuchs
parents: 54155
diff changeset
   584
    }
54de0c861d32 8231506: Fix some instabilities in a few networking tests
dfuchs
parents: 54155
diff changeset
   585
54de0c861d32 8231506: Fix some instabilities in a few networking tests
dfuchs
parents: 54155
diff changeset
   586
    /**
54155
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   587
     * Creates a ServerSocket that returns the given Socket from accept.
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   588
     */
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   589
    static ServerSocket serverSocketToAccept(Socket s) throws IOException {
58423
54de0c861d32 8231506: Fix some instabilities in a few networking tests
dfuchs
parents: 54155
diff changeset
   590
        ServerSocket ss = new ServerSocket() {
54155
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   591
            @Override
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   592
            public Socket accept() throws IOException {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   593
                implAccept(s);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   594
                return s;
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   595
            }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   596
        };
58423
54de0c861d32 8231506: Fix some instabilities in a few networking tests
dfuchs
parents: 54155
diff changeset
   597
        ss.bind(loopbackSocketAddress());
54de0c861d32 8231506: Fix some instabilities in a few networking tests
dfuchs
parents: 54155
diff changeset
   598
        return ss;
54155
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   599
    }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   600
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   601
    /**
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   602
     * Creates a ServerSocket with a SocketImpl that returns the given Socket
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   603
     * from accept.
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   604
     */
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   605
    static ServerSocket serverSocketToAccept(SocketImpl impl, Socket s) throws IOException {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   606
        ServerSocket ss = new ServerSocket(impl) {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   607
            @Override
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   608
            public Socket accept() throws IOException {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   609
                implAccept(s);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   610
                return s;
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   611
            }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   612
        };
58423
54de0c861d32 8231506: Fix some instabilities in a few networking tests
dfuchs
parents: 54155
diff changeset
   613
        ss.bind(loopbackSocketAddress());
54155
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   614
        return ss;
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   615
    }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   616
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   617
    /**
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   618
     * Returns the socket's SocketImpl
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   619
     */
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   620
    static SocketImpl getSocketImpl(Socket s) {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   621
        try {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   622
            Field f = Socket.class.getDeclaredField("impl");
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   623
            f.setAccessible(true);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   624
            return (SocketImpl) f.get(s);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   625
        } catch (Exception e) {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   626
            throw new RuntimeException(e);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   627
        }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   628
    }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   629
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   630
    /**
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   631
     * Returns the server socket's SocketImpl
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   632
     */
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   633
    static SocketImpl getSocketImpl(ServerSocket ss) {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   634
        try {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   635
            Field f = ServerSocket.class.getDeclaredField("impl");
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   636
            f.setAccessible(true);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   637
            return (SocketImpl) f.get(ss);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   638
        } catch (Exception e) {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   639
            throw new RuntimeException(e);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   640
        }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   641
    }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   642
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   643
    /**
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   644
     * Returns the SocketImpl that the given SocketImpl delegates to
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   645
     */
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   646
    static SocketImpl getDelegate(SocketImpl si) {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   647
        try {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   648
            Class<?> clazz = Class.forName("java.net.DelegatingSocketImpl");
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   649
            Field f = clazz.getDeclaredField("delegate");
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   650
            f.setAccessible(true);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   651
            return (SocketImpl) f.get(si);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   652
        } catch (Exception e) {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   653
            throw new RuntimeException(e);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   654
        }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   655
    }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   656
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   657
    /**
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   658
     * Returns the value of a SocketImpl field
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   659
     */
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   660
    static <T> T get(SocketImpl si, String name) {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   661
        try {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   662
            Field f = SocketImpl.class.getDeclaredField(name);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   663
            f.setAccessible(true);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   664
            return (T) f.get(si);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   665
        } catch (Exception e) {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   666
            throw new RuntimeException(e);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   667
        }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   668
    }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   669
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   670
    /**
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   671
     * Sets the value of SocketImpl field
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   672
     */
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   673
    static void set(SocketImpl si, String name, Object value) {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   674
        try {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   675
            Field f = SocketImpl.class.getDeclaredField(name);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   676
            f.setAccessible(true);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   677
            f.set(si, value);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   678
        } catch (Exception e) {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   679
            throw new RuntimeException(e);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   680
        }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   681
    }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   682
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   683
    /**
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   684
     * Returns true if the SocketImpl is a PlatformSocketImpl
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   685
     */
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   686
    static boolean isPlatformSocketImpl(SocketImpl si) {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   687
        try {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   688
            Class<?> clazz = Class.forName("sun.net.PlatformSocketImpl");
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   689
            return clazz.isInstance(si);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   690
        } catch (Exception e) {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   691
            throw new RuntimeException(e);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   692
        }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   693
    }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   694
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   695
    /**
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   696
     * Returns true if the SocketImpl is a SocksSocketImpl
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   697
     */
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   698
    static boolean isSocksSocketImpl(SocketImpl si) {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   699
        try {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   700
            Class<?> clazz = Class.forName("java.net.SocksSocketImpl");
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   701
            return clazz.isInstance(si);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   702
        } catch (Exception e) {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   703
            throw new RuntimeException(e);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   704
        }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   705
    }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   706
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   707
    /**
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   708
     * Returns true if the SocketImpl is a HttpConnectSocketImpl
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   709
     */
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   710
    static boolean isHttpConnectSocketImpl(SocketImpl si) {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   711
        try {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   712
            Class<?> clazz = Class.forName("java.net.HttpConnectSocketImpl");
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   713
            return clazz.isInstance(si);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   714
        } catch (Exception e) {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   715
            throw new RuntimeException(e);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   716
        }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   717
    }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   718
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   719
    /**
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   720
     * Socket.setSocketImplFactory(SocketImplFactory)
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   721
     */
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   722
    static void setSocketSocketImplFactory(SocketImplFactory factory) {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   723
        try {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   724
            Field f = Socket.class.getDeclaredField("factory");
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   725
            f.setAccessible(true);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   726
            f.set(null, factory);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   727
        } catch (Exception e) {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   728
            throw new RuntimeException(e);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   729
        }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   730
    }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   731
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   732
    /**
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   733
     * ServerSocket.setSocketFactory(SocketImplFactory)
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   734
     */
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   735
    static void setServerSocketImplFactory(SocketImplFactory factory) {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   736
        try {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   737
            Field f = ServerSocket.class.getDeclaredField("factory");
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   738
            f.setAccessible(true);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   739
            f.set(null, factory);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   740
        } catch (Exception e) {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   741
            throw new RuntimeException(e);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   742
        }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   743
    }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   744
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   745
    /**
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   746
     * Checks the 4 protected fields of a SocketImpl to make sure that they
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   747
     * have been initialized.
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   748
     */
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   749
    static void checkFields(SocketImpl si) {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   750
        FileDescriptor fd = get(si, "fd");
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   751
        InetAddress address = get(si, "address");
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   752
        int port = get(si, "port");
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   753
        int localport = get(si, "localport");
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   754
        assertTrue(fd.valid() && address != null && port != 0 && localport != 0);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   755
    }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   756
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   757
    /**
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   758
     * Custom SocketImpl that is layed on a SocketChannel or ServerSocketChannel
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   759
     */
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   760
    static class CustomSocketImpl extends SocketImpl {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   761
        private final boolean server;
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   762
        private ServerSocketChannel ssc;
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   763
        private SocketChannel sc;
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   764
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   765
        CustomSocketImpl(boolean server) {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   766
            this.server = server;
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   767
        }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   768
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   769
        @Override
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   770
        protected void create(boolean stream) throws IOException {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   771
            if (server) {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   772
                ssc = ServerSocketChannel.open();
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   773
            } else {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   774
                sc = SocketChannel.open();
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   775
            }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   776
        }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   777
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   778
        @Override
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   779
        protected void connect(String host, int port) throws IOException {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   780
            connect(new InetSocketAddress(host, port), 0);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   781
        }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   782
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   783
        @Override
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   784
        protected void connect(InetAddress address, int port) throws IOException {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   785
            connect(new InetSocketAddress(address, port), 0);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   786
        }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   787
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   788
        @Override
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   789
        protected void connect(SocketAddress remote, int timeout) throws IOException {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   790
            sc.connect(remote);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   791
            super.address = ((InetSocketAddress) remote).getAddress();
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   792
            super.port = ((InetSocketAddress) remote).getPort();
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   793
        }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   794
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   795
        @Override
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   796
        protected void bind(InetAddress address, int port) throws IOException {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   797
            if (server) {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   798
                ssc.bind(new InetSocketAddress(address, port));
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   799
                super.localport = ssc.socket().getLocalPort();
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   800
            } else {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   801
                sc.bind(new InetSocketAddress(address, port));
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   802
                super.localport = sc.socket().getLocalPort();
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   803
            }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   804
            super.address = address;
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   805
        }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   806
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   807
        @Override
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   808
        protected void listen(int backlog) {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   809
            // do nothing
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   810
        }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   811
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   812
        @Override
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   813
        protected void accept(SocketImpl si) throws IOException {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   814
            SocketChannel peer = ssc.accept();
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   815
            FileDescriptor fd;
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   816
            try {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   817
                Class<?> clazz = Class.forName("sun.nio.ch.SocketChannelImpl");
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   818
                Field f = clazz.getDeclaredField("fd");
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   819
                f.setAccessible(true);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   820
                fd = (FileDescriptor) f.get(peer);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   821
            } catch (Exception e) {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   822
                throw new RuntimeException(e);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   823
            }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   824
            set(si, "fd", fd);
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   825
            set(si, "address", peer.socket().getInetAddress());
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   826
            set(si, "port", peer.socket().getPort());
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   827
            set(si, "localport", peer.socket().getLocalPort());
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   828
        }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   829
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   830
        @Override
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   831
        protected InputStream getInputStream() {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   832
            throw new RuntimeException();
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   833
        }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   834
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   835
        @Override
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   836
        protected OutputStream getOutputStream() {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   837
            throw new RuntimeException();
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   838
        }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   839
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   840
        @Override
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   841
        protected int available() {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   842
            return 0;
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   843
        }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   844
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   845
        @Override
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   846
        protected void close() {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   847
        }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   848
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   849
        @Override
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   850
        protected void sendUrgentData(int data) {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   851
            throw new RuntimeException();
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   852
        }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   853
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   854
        @Override
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   855
        public void setOption(int option, Object value) {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   856
            throw new RuntimeException();
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   857
        }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   858
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   859
        @Override
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   860
        public Object getOption(int option) {
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   861
            throw new RuntimeException();
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   862
        }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   863
    }
b5a73f22b2bd 8220493: Prepare Socket/ServerSocket for alternative platform SocketImpl
alanb
parents:
diff changeset
   864
}