On Thu, 28 Nov 2024 15:30:00 GMT, Alan Bateman <al...@openjdk.org> wrote:

>> It would make them similar to the other test methods but would be a bit 
>> strange since the test method would be called only once with a single 
>> parameter set. 
>> I mean, the other test methods get two sockets, but these will only ever 
>> take one.
>
> It should be called twice with a new created Socket.  Socket.connect is 
> specified to throw IOException if already connected, we shouldn't be throwing 
> (or testing for) AlreadyConnectedException here. It may be that 
> Net.translateToSocketException is missing that mapping (we should check that).

I need to verify the thrown exception in the test:

* If the socket passed created using `Socket::new`, a `SocketException("already 
connected")` is thrown
* If the socket passed created using `SocketChannel.open().socket()`, an 
`AlreadyConnectedException` is thrown

AFAICT, the verifier needs to be passed along with the socket, and this implies 
either separate tests, which is what the current code does, or a separate test 
method source as in


static List<Arguments> connectedSocketFactoriesAndReconnectFailureVerifiers() {
    return List.of(
            Arguments.of(
                    (Function<SocketAddress, Socket>) 
ConnectFailTest::createConnectedSocket,
                    (Consumer<Executable>) executable -> {
                        SocketException exception = 
assertThrows(SocketException.class, executable);
                        assertEquals("already connected", 
exception.getMessage());
                    }),
            Arguments.of(
                    (Function<SocketAddress, Socket>) 
ConnectFailTest::createConnectedNioSocket,
                    (Consumer<Executable>) executable -> 
assertThrows(AlreadyConnectedException.class, executable))
    );
}


Am I mistaken?

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/22160#discussion_r1862410159

Reply via email to