Path: blob/master/test/jdk/java/net/SocketImpl/ImplSupportedOptions.java
41149 views
/*1* Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.2* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.3*4* This code is free software; you can redistribute it and/or modify it5* under the terms of the GNU General Public License version 2 only, as6* published by the Free Software Foundation.7*8* This code is distributed in the hope that it will be useful, but WITHOUT9* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or10* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License11* version 2 for more details (a copy is included in the LICENSE file that12* accompanied this code).13*14* You should have received a copy of the GNU General Public License version15* 2 along with this work; if not, write to the Free Software Foundation,16* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.17*18* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA19* or visit www.oracle.com if you need additional information or have any20* questions.21*/2223/*24* @test25* @bug 821341826* @summary Ensure correct impl supported socket options27* @run testng ImplSupportedOptions28*/2930import java.io.IOException;31import java.io.InputStream;32import java.io.OutputStream;33import java.net.InetAddress;34import java.net.ServerSocket;35import java.net.Socket;36import java.net.SocketAddress;37import java.net.SocketException;38import java.net.SocketImpl;39import java.net.SocketOption;40import java.net.StandardSocketOptions;41import java.util.Set;42import org.testng.annotations.Test;43import static org.testng.Assert.assertEquals;44import static org.testng.Assert.assertTrue;4546public class ImplSupportedOptions {4748@Test49public void socketSupportedOptions() throws Exception {50Socket s = new Socket();51Set<?> standardOptions = s.supportedOptions();52assertTrue(standardOptions.contains(StandardSocketOptions.SO_LINGER),53"Expected SO_LINGER, in:" + standardOptions);54assertEquals(standardOptions, s.supportedOptions());55assertEquals(standardOptions, s.supportedOptions());5657s = new DummySocket();58Set<?> dummyOptions = s.supportedOptions();59assertEquals(dummyOptions.size(), 1);60assertTrue(dummyOptions.contains(DummySocketImpl.SOCKET_OPT));61assertEquals(dummyOptions, s.supportedOptions());62assertEquals(dummyOptions, s.supportedOptions());6364s = new Socket();65standardOptions = s.supportedOptions();66assertTrue(standardOptions.contains(StandardSocketOptions.SO_LINGER),67"Expected SO_LINGER, in:" + standardOptions);68assertEquals(standardOptions, s.supportedOptions());69assertEquals(standardOptions, s.supportedOptions());7071s = new DummySocket();72dummyOptions = s.supportedOptions();73assertEquals(dummyOptions.size(), 1);74assertTrue(dummyOptions.contains(DummySocketImpl.SOCKET_OPT));75assertEquals(dummyOptions, s.supportedOptions());76assertEquals(dummyOptions, s.supportedOptions());77}7879@Test80public void serverSocketSupportedOptions() throws Exception {81ServerSocket s = new ServerSocket();82Set<?> standardOptions = s.supportedOptions();83assertTrue(standardOptions.contains(StandardSocketOptions.SO_REUSEADDR),84"Expected SO_REUSEADDR, in:" + standardOptions);85assertEquals(standardOptions, s.supportedOptions());86assertEquals(standardOptions, s.supportedOptions());8788s = new DummyServerSocket();89Set<?> dummyOptions = s.supportedOptions();90assertEquals(dummyOptions.size(), 1);91assertTrue(dummyOptions.contains(DummySocketImpl.SOCKET_OPT));92assertEquals(dummyOptions, s.supportedOptions());93assertEquals(dummyOptions, s.supportedOptions());9495s = new ServerSocket();96standardOptions = s.supportedOptions();97assertTrue(standardOptions.contains(StandardSocketOptions.SO_REUSEADDR),98"Expected SO_REUSEADDR, in:" + standardOptions);99assertEquals(standardOptions, s.supportedOptions());100assertEquals(standardOptions, s.supportedOptions());101102s = new DummyServerSocket();103dummyOptions = s.supportedOptions();104assertEquals(dummyOptions.size(), 1);105assertTrue(dummyOptions.contains(DummySocketImpl.SOCKET_OPT));106assertEquals(dummyOptions, s.supportedOptions());107assertEquals(dummyOptions, s.supportedOptions());108}109110static class DummySocket extends Socket {111DummySocket() throws IOException {112super(new DummySocketImpl());113}114}115116static class DummyServerSocket extends ServerSocket {117DummyServerSocket() throws IOException {118super(new DummySocketImpl());119}120}121122static class DummySocketImpl extends SocketImpl {123124public static final SocketOption<String> SOCKET_OPT =125new ImplSocketOption<>("SOCKET_OPT", String.class);126127private static class ImplSocketOption<T> implements SocketOption<T> {128private final String name;129private final Class<T> type;130ImplSocketOption(String name, Class<T> type) {131this.name = name;132this.type = type;133}134@Override public String name() { return name; }135@Override public Class<T> type() { return type; }136@Override public String toString() { return name; }137}138139private final Set<SocketOption<?>> SO = Set.of(SOCKET_OPT);140141@Override142public Set<SocketOption<?>> supportedOptions() { return SO; }143144// ---145146@Override147protected void create(boolean stream) throws IOException { }148149@Override150protected void connect(String host, int port) throws IOException { }151152@Override153protected void connect(InetAddress address, int port) throws IOException { }154155@Override156protected void connect(SocketAddress address, int timeout) throws IOException { }157158@Override159protected void bind(InetAddress host, int port) throws IOException { }160161@Override162protected void listen(int backlog) throws IOException { }163164@Override165protected void accept(SocketImpl s) throws IOException { }166167@Override168protected InputStream getInputStream() throws IOException { return null; }169170@Override171protected OutputStream getOutputStream() throws IOException { return null; }172173@Override174protected int available() throws IOException { return 0; }175176@Override177protected void close() throws IOException { }178179@Override180protected void sendUrgentData(int data) throws IOException { }181182@Override183public void setOption(int optID, Object value) throws SocketException { }184185@Override186public Object getOption(int optID) throws SocketException { return null; }187}188}189190191