Path: blob/master/test/jdk/java/net/MulticastSocket/SendPortZero.java
41149 views
/*1* Copyright (c) 2020, 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*/2223import org.testng.annotations.AfterTest;24import org.testng.annotations.BeforeTest;25import org.testng.annotations.DataProvider;26import org.testng.annotations.Test;2728import java.io.IOException;29import java.net.DatagramPacket;30import java.net.MulticastSocket;31import java.net.InetAddress;32import java.net.MulticastSocket;33import java.net.SocketException;34import java.net.SocketPermission;35import java.nio.channels.DatagramChannel;36import java.security.AccessControlException;37import java.security.Permission;38import java.security.PermissionCollection;39import java.security.Permissions;40import java.security.Policy;41import java.security.ProtectionDomain;4243import static org.testng.Assert.assertThrows;4445/*46* @test47* @bug 824340848* @summary Check that MulticastSocket throws expected49* Exception when sending a DatagramPacket with port 050* @run testng/othervm -Djava.security.manager=allow SendPortZero51* @run testng/othervm -Djava.security.manager=allow -Djdk.net.usePlainDatagramSocketImpl SendPortZero52*/5354public class SendPortZero {55private InetAddress loopbackAddr, wildcardAddr;56private MulticastSocket multicastSocket;57private DatagramPacket loopbackZeroPkt, wildcardZeroPkt, wildcardValidPkt;5859private static final Class<SocketException> SE = SocketException.class;60private static final Class<AccessControlException> ACE =61AccessControlException.class;6263@BeforeTest64public void setUp() throws IOException {65multicastSocket = new MulticastSocket();6667byte[] buf = "test".getBytes();6869// Addresses70loopbackAddr = InetAddress.getLoopbackAddress();71//wildcardAddr = new InetSocketAddress(0).getAddress();7273// Packets74// loopback w/port 075loopbackZeroPkt = new DatagramPacket(buf, 0, buf.length);76loopbackZeroPkt.setAddress(loopbackAddr);77loopbackZeroPkt.setPort(0);7879/*80//Commented until JDK-8236852 is fixed8182// wildcard w/port 083wildcardZeroPkt = new DatagramPacket(buf, 0, buf.length);84wildcardZeroPkt.setAddress(wildcardAddr);85wildcardZeroPkt.setPort(0);8687//Commented until JDK-8236807 is fixed8889// wildcard addr w/valid port90wildcardValidPkt = new DatagramPacket(buf, 0, buf.length);91var addr = socket.getAddress();92wildcardValidPkt.setAddress(addr);93wildcardValidPkt.setPort(socket.getLocalPort());94*/95}9697@DataProvider(name = "data")98public Object[][] variants() {99return new Object[][]{100{ multicastSocket, loopbackZeroPkt }101};102}103104@Test(dataProvider = "data")105public void testSend(MulticastSocket ms, DatagramPacket pkt) {106assertThrows(SE, () -> ms.send(pkt));107assertThrows(SE, () -> ms.send(pkt, (byte) 0));108}109110// Check that 0 port check doesn't override security manager check111@Test(dataProvider = "data")112public void testSendWithSecurityManager(MulticastSocket ms,113DatagramPacket pkt) {114Policy defaultPolicy = Policy.getPolicy();115try {116Policy.setPolicy(new NoSendPolicy());117System.setSecurityManager(new SecurityManager());118119assertThrows(ACE, () -> ms.send(pkt));120assertThrows(ACE, () -> ms.send(pkt, (byte) 0));121} finally {122System.setSecurityManager(null);123Policy.setPolicy(defaultPolicy);124}125}126127static class NoSendPolicy extends Policy {128final PermissionCollection perms = new Permissions();129{ perms.add(130new SocketPermission("*:0", "connect")); }131132public boolean implies(ProtectionDomain domain, Permission perm) {133return !perms.implies(perm);134}135}136137@AfterTest138public void tearDown() {139multicastSocket.close();140}141}142143144