Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mobile
Path: blob/master/test/jdk/java/net/MulticastSocket/SendPortZero.java
41149 views
1
/*
2
* Copyright (c) 2020, 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
import org.testng.annotations.AfterTest;
25
import org.testng.annotations.BeforeTest;
26
import org.testng.annotations.DataProvider;
27
import org.testng.annotations.Test;
28
29
import java.io.IOException;
30
import java.net.DatagramPacket;
31
import java.net.MulticastSocket;
32
import java.net.InetAddress;
33
import java.net.MulticastSocket;
34
import java.net.SocketException;
35
import java.net.SocketPermission;
36
import java.nio.channels.DatagramChannel;
37
import java.security.AccessControlException;
38
import java.security.Permission;
39
import java.security.PermissionCollection;
40
import java.security.Permissions;
41
import java.security.Policy;
42
import java.security.ProtectionDomain;
43
44
import static org.testng.Assert.assertThrows;
45
46
/*
47
* @test
48
* @bug 8243408
49
* @summary Check that MulticastSocket throws expected
50
* Exception when sending a DatagramPacket with port 0
51
* @run testng/othervm -Djava.security.manager=allow SendPortZero
52
* @run testng/othervm -Djava.security.manager=allow -Djdk.net.usePlainDatagramSocketImpl SendPortZero
53
*/
54
55
public class SendPortZero {
56
private InetAddress loopbackAddr, wildcardAddr;
57
private MulticastSocket multicastSocket;
58
private DatagramPacket loopbackZeroPkt, wildcardZeroPkt, wildcardValidPkt;
59
60
private static final Class<SocketException> SE = SocketException.class;
61
private static final Class<AccessControlException> ACE =
62
AccessControlException.class;
63
64
@BeforeTest
65
public void setUp() throws IOException {
66
multicastSocket = new MulticastSocket();
67
68
byte[] buf = "test".getBytes();
69
70
// Addresses
71
loopbackAddr = InetAddress.getLoopbackAddress();
72
//wildcardAddr = new InetSocketAddress(0).getAddress();
73
74
// Packets
75
// loopback w/port 0
76
loopbackZeroPkt = new DatagramPacket(buf, 0, buf.length);
77
loopbackZeroPkt.setAddress(loopbackAddr);
78
loopbackZeroPkt.setPort(0);
79
80
/*
81
//Commented until JDK-8236852 is fixed
82
83
// wildcard w/port 0
84
wildcardZeroPkt = new DatagramPacket(buf, 0, buf.length);
85
wildcardZeroPkt.setAddress(wildcardAddr);
86
wildcardZeroPkt.setPort(0);
87
88
//Commented until JDK-8236807 is fixed
89
90
// wildcard addr w/valid port
91
wildcardValidPkt = new DatagramPacket(buf, 0, buf.length);
92
var addr = socket.getAddress();
93
wildcardValidPkt.setAddress(addr);
94
wildcardValidPkt.setPort(socket.getLocalPort());
95
*/
96
}
97
98
@DataProvider(name = "data")
99
public Object[][] variants() {
100
return new Object[][]{
101
{ multicastSocket, loopbackZeroPkt }
102
};
103
}
104
105
@Test(dataProvider = "data")
106
public void testSend(MulticastSocket ms, DatagramPacket pkt) {
107
assertThrows(SE, () -> ms.send(pkt));
108
assertThrows(SE, () -> ms.send(pkt, (byte) 0));
109
}
110
111
// Check that 0 port check doesn't override security manager check
112
@Test(dataProvider = "data")
113
public void testSendWithSecurityManager(MulticastSocket ms,
114
DatagramPacket pkt) {
115
Policy defaultPolicy = Policy.getPolicy();
116
try {
117
Policy.setPolicy(new NoSendPolicy());
118
System.setSecurityManager(new SecurityManager());
119
120
assertThrows(ACE, () -> ms.send(pkt));
121
assertThrows(ACE, () -> ms.send(pkt, (byte) 0));
122
} finally {
123
System.setSecurityManager(null);
124
Policy.setPolicy(defaultPolicy);
125
}
126
}
127
128
static class NoSendPolicy extends Policy {
129
final PermissionCollection perms = new Permissions();
130
{ perms.add(
131
new SocketPermission("*:0", "connect")); }
132
133
public boolean implies(ProtectionDomain domain, Permission perm) {
134
return !perms.implies(perm);
135
}
136
}
137
138
@AfterTest
139
public void tearDown() {
140
multicastSocket.close();
141
}
142
}
143
144