Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mobile
Path: blob/master/test/jdk/java/net/SocketOption/NullsAndBadValues.java
41149 views
1
/*
2
* Copyright (c) 2019, 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
/*
25
* @test
26
* @bug 8224477
27
* @summary Basic test for NPE, UOE, and IAE for get/setOption
28
* @run testng NullsAndBadValues
29
* @run testng/othervm -Djdk.net.usePlainSocketImpl NullsAndBadValues
30
* @run testng/othervm -Dsun.net.useExclusiveBind=false NullsAndBadValues
31
*/
32
33
import java.net.DatagramSocket;
34
import java.net.MulticastSocket;
35
import java.net.ServerSocket;
36
import java.net.Socket;
37
import java.net.SocketOption;
38
import java.nio.channels.DatagramChannel;
39
import java.nio.channels.ServerSocketChannel;
40
import java.nio.channels.SocketChannel;
41
import java.util.ArrayList;
42
import java.util.Arrays;
43
import java.util.HashMap;
44
import java.util.List;
45
import java.util.Map;
46
import java.util.stream.Stream;
47
import org.testng.annotations.DataProvider;
48
import org.testng.annotations.Test;
49
import static java.lang.Boolean.*;
50
import static java.net.StandardSocketOptions.*;
51
import static org.testng.Assert.expectThrows;
52
53
public class NullsAndBadValues {
54
55
static final Class<NullPointerException> NPE = NullPointerException.class;
56
static final Class<IllegalArgumentException> IAE = IllegalArgumentException.class;
57
static final Class<UnsupportedOperationException> UOE = UnsupportedOperationException.class;
58
59
@Test
60
public void nulls() throws Exception {
61
try (Socket s = new Socket()) {
62
expectThrows(NPE, () -> s.setOption(null, null));
63
expectThrows(NPE, () -> s.setOption(null, ""));
64
expectThrows(NPE, () -> s.setOption(null, 1));
65
expectThrows(NPE, () -> s.getOption(null));
66
}
67
try (ServerSocket ss = new ServerSocket()) {
68
expectThrows(NPE, () -> ss.setOption(null, null));
69
expectThrows(NPE, () -> ss.setOption(null, ""));
70
expectThrows(NPE, () -> ss.setOption(null, 1));
71
expectThrows(NPE, () -> ss.getOption(null));
72
}
73
try (DatagramSocket ds = new DatagramSocket()) {
74
expectThrows(NPE, () -> ds.setOption(null, null));
75
expectThrows(NPE, () -> ds.setOption(null, ""));
76
expectThrows(NPE, () -> ds.setOption(null, 1));
77
expectThrows(NPE, () -> ds.getOption(null));
78
}
79
try (MulticastSocket ms = new MulticastSocket()) {
80
expectThrows(NPE, () -> ms.setOption(null, null));
81
expectThrows(NPE, () -> ms.setOption(null, ""));
82
expectThrows(NPE, () -> ms.setOption(null, 1));
83
expectThrows(NPE, () -> ms.getOption(null));
84
}
85
try (Socket sa = SocketChannel.open().socket()) {
86
expectThrows(NPE, () -> sa.setOption(null, null));
87
expectThrows(NPE, () -> sa.setOption(null, ""));
88
expectThrows(NPE, () -> sa.setOption(null, 1));
89
expectThrows(NPE, () -> sa.getOption(null));
90
}
91
try (ServerSocket ssa = ServerSocketChannel.open().socket()) {
92
expectThrows(NPE, () -> ssa.setOption(null, null));
93
expectThrows(NPE, () -> ssa.setOption(null, ""));
94
expectThrows(NPE, () -> ssa.setOption(null, 1));
95
expectThrows(NPE, () -> ssa.getOption(null));
96
}
97
try (DatagramSocket dsa = DatagramChannel.open().socket()) {
98
expectThrows(NPE, () -> dsa.setOption(null, null));
99
expectThrows(NPE, () -> dsa.setOption(null, ""));
100
expectThrows(NPE, () -> dsa.setOption(null, 1));
101
expectThrows(NPE, () -> dsa.getOption(null));
102
}
103
}
104
105
static final SocketOption<Boolean> FAKE_SOCK_OPT = new SocketOption<>() {
106
@Override public String name() { return "FAKE_SOCK_OPT"; }
107
@Override public Class<Boolean> type() { return Boolean.class; }
108
};
109
110
static final SocketOption RAW_SOCK_OPT = new SocketOption() {
111
@Override public String name() { return "RAW_SOCK_OPT"; }
112
@Override public Class type() { return Boolean.class; }
113
};
114
115
@Test
116
public void uoe() throws Exception {
117
try (Socket s = new Socket()) {
118
expectThrows(UOE, () -> s.setOption(FAKE_SOCK_OPT, null));
119
expectThrows(UOE, () -> s.setOption(FAKE_SOCK_OPT, TRUE));
120
expectThrows(UOE, () -> s.setOption(FAKE_SOCK_OPT, FALSE));
121
expectThrows(UOE, () -> s.setOption(RAW_SOCK_OPT, ""));
122
expectThrows(UOE, () -> s.setOption(RAW_SOCK_OPT, 1));
123
expectThrows(UOE, () -> s.getOption(FAKE_SOCK_OPT));
124
expectThrows(UOE, () -> s.getOption(RAW_SOCK_OPT));
125
}
126
try (ServerSocket ss = new ServerSocket()) {
127
expectThrows(UOE, () -> ss.setOption(FAKE_SOCK_OPT, null));
128
expectThrows(UOE, () -> ss.setOption(FAKE_SOCK_OPT, TRUE));
129
expectThrows(UOE, () -> ss.setOption(FAKE_SOCK_OPT, FALSE));
130
expectThrows(UOE, () -> ss.setOption(RAW_SOCK_OPT, ""));
131
expectThrows(UOE, () -> ss.setOption(RAW_SOCK_OPT, 1));
132
expectThrows(UOE, () -> ss.getOption(FAKE_SOCK_OPT));
133
expectThrows(UOE, () -> ss.getOption(RAW_SOCK_OPT));
134
}
135
try (DatagramSocket ds = new DatagramSocket()) {
136
expectThrows(UOE, () -> ds.setOption(FAKE_SOCK_OPT, null));
137
expectThrows(UOE, () -> ds.setOption(FAKE_SOCK_OPT, TRUE));
138
expectThrows(UOE, () -> ds.setOption(FAKE_SOCK_OPT, FALSE));
139
expectThrows(UOE, () -> ds.setOption(RAW_SOCK_OPT, ""));
140
expectThrows(UOE, () -> ds.setOption(RAW_SOCK_OPT, 1));
141
expectThrows(UOE, () -> ds.getOption(FAKE_SOCK_OPT));
142
expectThrows(UOE, () -> ds.getOption(RAW_SOCK_OPT));
143
}
144
try (MulticastSocket ms = new MulticastSocket()) {
145
expectThrows(UOE, () -> ms.setOption(FAKE_SOCK_OPT, null));
146
expectThrows(UOE, () -> ms.setOption(FAKE_SOCK_OPT, TRUE));
147
expectThrows(UOE, () -> ms.setOption(FAKE_SOCK_OPT, FALSE));
148
expectThrows(UOE, () -> ms.setOption(RAW_SOCK_OPT, ""));
149
expectThrows(UOE, () -> ms.setOption(RAW_SOCK_OPT, 1));
150
expectThrows(UOE, () -> ms.getOption(FAKE_SOCK_OPT));
151
expectThrows(UOE, () -> ms.getOption(RAW_SOCK_OPT));
152
}
153
try (Socket sa = SocketChannel.open().socket()) {
154
expectThrows(UOE, () -> sa.setOption(FAKE_SOCK_OPT, null));
155
expectThrows(UOE, () -> sa.setOption(FAKE_SOCK_OPT, TRUE));
156
expectThrows(UOE, () -> sa.setOption(FAKE_SOCK_OPT, FALSE));
157
expectThrows(UOE, () -> sa.setOption(RAW_SOCK_OPT, ""));
158
expectThrows(UOE, () -> sa.setOption(RAW_SOCK_OPT, 1));
159
expectThrows(UOE, () -> sa.getOption(FAKE_SOCK_OPT));
160
expectThrows(UOE, () -> sa.getOption(RAW_SOCK_OPT));
161
}
162
try (ServerSocket ssa = ServerSocketChannel.open().socket()) {
163
expectThrows(UOE, () -> ssa.setOption(FAKE_SOCK_OPT, null));
164
expectThrows(UOE, () -> ssa.setOption(FAKE_SOCK_OPT, TRUE));
165
expectThrows(UOE, () -> ssa.setOption(FAKE_SOCK_OPT, FALSE));
166
expectThrows(UOE, () -> ssa.setOption(RAW_SOCK_OPT, ""));
167
expectThrows(UOE, () -> ssa.setOption(RAW_SOCK_OPT, 1));
168
expectThrows(UOE, () -> ssa.getOption(FAKE_SOCK_OPT));
169
expectThrows(UOE, () -> ssa.getOption(RAW_SOCK_OPT));
170
}
171
try (DatagramSocket dsa = DatagramChannel.open().socket()) {
172
expectThrows(UOE, () -> dsa.setOption(FAKE_SOCK_OPT, null));
173
expectThrows(UOE, () -> dsa.setOption(FAKE_SOCK_OPT, TRUE));
174
expectThrows(UOE, () -> dsa.setOption(FAKE_SOCK_OPT, FALSE));
175
expectThrows(UOE, () -> dsa.setOption(RAW_SOCK_OPT, ""));
176
expectThrows(UOE, () -> dsa.setOption(RAW_SOCK_OPT, 1));
177
expectThrows(UOE, () -> dsa.getOption(FAKE_SOCK_OPT));
178
expectThrows(UOE, () -> dsa.getOption(RAW_SOCK_OPT));
179
}
180
}
181
182
static Map<SocketOption<?>,List<Object>> BAD_OPTION_VALUES = badOptionValues();
183
184
static Map<SocketOption<?>,List<Object>> badOptionValues() {
185
Map<SocketOption<?>,List<Object>> map = new HashMap<>();
186
map.put(IP_MULTICAST_IF, listOf(null) );
187
map.put(IP_MULTICAST_LOOP, listOf(null) );
188
map.put(IP_MULTICAST_TTL, listOf(null, -1, 256));
189
map.put(IP_TOS, listOf(null, -1, 256));
190
map.put(SO_BROADCAST, listOf(null) );
191
map.put(SO_KEEPALIVE, listOf(null) );
192
map.put(SO_LINGER, listOf(null) );
193
map.put(SO_RCVBUF, listOf(null, -1) );
194
map.put(SO_REUSEADDR, listOf(null) );
195
map.put(SO_REUSEPORT, listOf(null) );
196
map.put(SO_SNDBUF, listOf(null, -1) );
197
map.put(TCP_NODELAY, listOf(null) );
198
// extended options, not in the map, will get a null value
199
return map;
200
}
201
202
// -- Socket
203
204
@DataProvider(name = "socketBadOptionValues")
205
public Object[][] socketBadOptionValues() throws Exception {
206
try (Socket s = new Socket()) {
207
return s.supportedOptions().stream()
208
.flatMap(NullsAndBadValues::socketOptionToBadValues)
209
.toArray(Object[][]::new);
210
}
211
}
212
213
@Test(dataProvider = "socketBadOptionValues")
214
public <T> void socket(SocketOption<T> option, T value)
215
throws Exception
216
{
217
try (Socket s = new Socket()) {
218
expectThrows(IAE, () -> s.setOption(option, value));
219
}
220
}
221
222
@Test(dataProvider = "socketBadOptionValues")
223
public <T> void socketAdapter(SocketOption<T> option, T value)
224
throws Exception
225
{
226
try (Socket s = SocketChannel.open().socket()) {
227
expectThrows(IAE, () -> s.setOption(option, value));
228
}
229
}
230
231
// -- ServerSocket
232
233
@DataProvider(name = "serverSocketBadOptionValues")
234
public Object[][] serverSocketBadOptionValues() throws Exception {
235
try (ServerSocket ss = new ServerSocket()) {
236
return ss.supportedOptions().stream()
237
.flatMap(NullsAndBadValues::socketOptionToBadValues)
238
.toArray(Object[][]::new);
239
}
240
}
241
242
@Test(dataProvider = "serverSocketBadOptionValues")
243
public <T> void serverSocket(SocketOption<T> option, T value)
244
throws Exception
245
{
246
try (ServerSocket ss = new ServerSocket()) {
247
expectThrows(IAE, () -> ss.setOption(option, value));
248
}
249
}
250
251
@Test(dataProvider = "serverSocketBadOptionValues")
252
public <T> void serverSocketAdapter(SocketOption<T> option, T value)
253
throws Exception
254
{
255
if (option == IP_TOS)
256
return; // SSC does not support IP_TOS
257
258
try (ServerSocket ss = ServerSocketChannel.open().socket()) {
259
expectThrows(IAE, () -> ss.setOption(option, value));
260
}
261
}
262
263
// -- DatagramSocket
264
265
@DataProvider(name = "datagramSocketBadOptionValues")
266
public Object[][] datagramSocketBadOptionValues() throws Exception {
267
try (DatagramSocket ds = new DatagramSocket()) {
268
return ds.supportedOptions().stream()
269
.flatMap(NullsAndBadValues::socketOptionToBadValues)
270
.toArray(Object[][]::new);
271
}
272
}
273
274
@Test(dataProvider = "datagramSocketBadOptionValues")
275
public <T> void datagramSocket(SocketOption<T> option, T value)
276
throws Exception
277
{
278
try (DatagramSocket ds = new DatagramSocket()) {
279
expectThrows(IAE, () -> ds.setOption(option, value));
280
}
281
}
282
283
@Test(dataProvider = "datagramSocketBadOptionValues")
284
public <T> void datagramSocketAdapter(SocketOption<T> option, T value)
285
throws Exception
286
{
287
try (DatagramSocket ds = DatagramChannel.open().socket()) {
288
expectThrows(IAE, () -> ds.setOption(option, value));
289
}
290
}
291
292
// -- MulticastSocket
293
294
@DataProvider(name = "multicastSocketBadOptionValues")
295
public Object[][] multicastSocketBadOptionValues() throws Exception {
296
try (MulticastSocket ms = new MulticastSocket()) {
297
return ms.supportedOptions().stream()
298
.flatMap(NullsAndBadValues::socketOptionToBadValues)
299
.toArray(Object[][]::new);
300
}
301
}
302
303
@Test(dataProvider = "multicastSocketBadOptionValues")
304
public <T> void multicastSocket(SocketOption<T> option, T value)
305
throws Exception
306
{
307
try (MulticastSocket ms = new MulticastSocket()) {
308
expectThrows(IAE, () -> ms.setOption(option, value));
309
}
310
}
311
312
// --
313
314
static List<Object> listOf(Object... objs) {
315
List<Object> l = new ArrayList<>();
316
if (objs == null)
317
l.add(null);
318
else
319
Arrays.stream(objs).forEachOrdered(l::add);
320
return l;
321
}
322
323
static Stream<Object[]> socketOptionToBadValues(SocketOption<?> socketOption) {
324
List<Object> values = BAD_OPTION_VALUES.get(socketOption);
325
if (values == null) {
326
Object[][] a = new Object[][] { new Object[] { socketOption, null } };
327
return Stream.of(a);
328
}
329
return values.stream()
330
.flatMap(v -> Stream.of(new Object[][] { new Object[] { socketOption, v } }) );
331
}
332
}
333
334