Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/openjdk-multiarch-jdk8u
Path: blob/aarch64-shenandoah-jdk8u272-b10/jdk/test/java/nio/channels/ServerSocketChannel/SocketOptionTests.java
38828 views
1
/*
2
* Copyright (c) 2007, 2018, Oracle and/or its affiliates. All rights reserved.
3
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4
*
5
* This code is free software; you can redistribute it and/or modify it
6
* under the terms of the GNU General Public License version 2 only, as
7
* published by the Free Software Foundation.
8
*
9
* This code is distributed in the hope that it will be useful, but WITHOUT
10
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12
* version 2 for more details (a copy is included in the LICENSE file that
13
* accompanied this code).
14
*
15
* You should have received a copy of the GNU General Public License version
16
* 2 along with this work; if not, write to the Free Software Foundation,
17
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18
*
19
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20
* or visit www.oracle.com if you need additional information or have any
21
* questions.
22
*/
23
24
/* @test
25
* @bug 4640544
26
* @summary Unit test for ServerSocketChannel setOption/getOption/options
27
* methods.
28
*/
29
30
import java.nio.*;
31
import java.nio.channels.*;
32
import java.net.*;
33
import java.io.IOException;
34
import java.util.*;
35
import static java.net.StandardSocketOptions.*;
36
import static jdk.net.ExtendedSocketOptions.*;
37
38
public class SocketOptionTests {
39
40
private static final int DEFAULT_KEEP_ALIVE_PROBES = 7;
41
private static final int DEFAULT_KEEP_ALIVE_TIME = 1973;
42
private static final int DEFAULT_KEEP_ALIVE_INTVL = 53;
43
44
static void checkOption(ServerSocketChannel ssc, SocketOption name, Object expectedValue)
45
throws IOException
46
{
47
Object value = ssc.getOption(name);
48
if (!value.equals(expectedValue))
49
throw new RuntimeException("value not as expected");
50
}
51
52
public static void main(String[] args) throws IOException {
53
ServerSocketChannel ssc = ServerSocketChannel.open();
54
55
// check supported options
56
Set<SocketOption<?>> options = ssc.supportedOptions();
57
if (!options.contains(SO_REUSEADDR))
58
throw new RuntimeException("SO_REUSEADDR should be supported");
59
if (!options.contains(SO_RCVBUF))
60
throw new RuntimeException("SO_RCVBUF should be supported");
61
62
// allowed to change when not bound
63
ssc.setOption(SO_RCVBUF, 256*1024); // can't check
64
int before = ssc.getOption(SO_RCVBUF);
65
int after = ssc.setOption(SO_RCVBUF, Integer.MAX_VALUE).getOption(SO_RCVBUF);
66
if (after < before)
67
throw new RuntimeException("setOption caused SO_RCVBUF to decrease");
68
ssc.setOption(SO_REUSEADDR, true);
69
checkOption(ssc, SO_REUSEADDR, true);
70
ssc.setOption(SO_REUSEADDR, false);
71
checkOption(ssc, SO_REUSEADDR, false);
72
73
// NullPointerException
74
try {
75
ssc.setOption(null, "value");
76
throw new RuntimeException("NullPointerException not thrown");
77
} catch (NullPointerException x) {
78
}
79
try {
80
ssc.getOption(null);
81
throw new RuntimeException("NullPointerException not thrown");
82
} catch (NullPointerException x) {
83
}
84
List<SocketOption<?>> keepAliveOpts = Arrays.asList(TCP_KEEPCOUNT, TCP_KEEPIDLE,
85
TCP_KEEPINTERVAL);
86
if (ssc.supportedOptions().containsAll(keepAliveOpts)) {
87
ssc.setOption(TCP_KEEPCOUNT, DEFAULT_KEEP_ALIVE_PROBES);
88
checkOption(ssc, TCP_KEEPCOUNT, DEFAULT_KEEP_ALIVE_PROBES);
89
ssc.setOption(TCP_KEEPIDLE, DEFAULT_KEEP_ALIVE_TIME);
90
checkOption(ssc, TCP_KEEPIDLE, DEFAULT_KEEP_ALIVE_TIME);
91
ssc.setOption(TCP_KEEPINTERVAL, DEFAULT_KEEP_ALIVE_INTVL);
92
checkOption(ssc, TCP_KEEPINTERVAL, DEFAULT_KEEP_ALIVE_INTVL);
93
94
}
95
96
// ClosedChannelException
97
ssc.close();
98
try {
99
ssc.setOption(SO_REUSEADDR, true);
100
throw new RuntimeException("ClosedChannelException not thrown");
101
} catch (ClosedChannelException x) {
102
}
103
}
104
}
105
106