/*
* Copyright ( c ) 2001 , Oracle and / or its affiliates . All rights reserved .
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER .
*
* This code is free software ; you can redistribute it and / or modify it
* under the terms of the GNU General Public License version 2 only , as
* published by the Free Software Foundation .
*
* This code is distributed in the hope that it will be useful , but WITHOUT
* ANY WARRANTY ; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE . See the GNU General Public License
* version 2 for more details ( a copy is included in the LICENSE file that
* accompanied this code ) .
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work ; if not , write to the Free Software Foundation ,
* Inc . , 51 Franklin St , Fifth Floor , Boston , MA 02110 - 1301 USA .
*
* Please contact Oracle , 500 Oracle Parkway , Redwood Shores , CA 94065 USA
* or visit www . oracle . com if you need additional information or have any
* questions .
*/
/**
* @ test
* @ bug 4413768
* @ summary Checking that PortUnreachableException is thrown when
* ICMP Port Unreachable is received .
*/
import java.net.*;
import java.util.Properties;
public class Test {
/*
* Return an available port
*/
int getPort() throws Exception {
DatagramSocket s = new DatagramSocket(0 );
int port = s.getLocalPort();
s.close();
return port;
}
/*
* Perform test by sending to remote_host : port
* sendOnly = > send datagram to host and expect PUE on subsequent
* send
* ! sendOnly = > send datagram to host and expect PUE on subsequent
* send or receive .
*/
void doTest(String remote_host, int port, boolean sendOnly) throws Exception {
System.out.println("***" );
System.out.println("Test Description:" );
System.out.println(" DatagramSocket.connect" );
System.out.println(" Loop: DatagramSocket.send" );
if (!sendOnly) {
System.out.println(" DatagramSocket.receive" );
}
System.out.println("" );
System.out.println("Test Run:" );
InetAddress ia = InetAddress.getByName(remote_host);
DatagramSocket s = new DatagramSocket(0 );
s.setSoTimeout(1000 );
s.connect(ia, port);
byte [] b = "Hello" .getBytes();
DatagramPacket p1 = new DatagramPacket(b, b.length, ia, port);
DatagramPacket p2 = new DatagramPacket(b, b.length);
int i = 0 ;
boolean gotPUE = false ;
do {
System.out.println("Sending datagram to unreachable port..." );
try {
s.send(p1);
} catch (PortUnreachableException e) {
System.out.println("DatagramSocket.send threw PUE" );
gotPUE = true ;
}
if (!gotPUE) {
Thread .currentThread().sleep(1000 );
}
if (!sendOnly && !gotPUE) {
System.out.println("DatagramSocket.receive..." );
try {
s.receive(p2);
} catch (PortUnreachableException e) {
System.out.println("DatagramSocket.receive threw PUE" );
gotPUE = true ;
} catch (SocketTimeoutException e) {
System.out.println("DatagramSocket.receive timed out - no PUE" );
}
}
i++;
} while (i < 10 && !gotPUE);
if (!gotPUE) {
System.out.println("DatagramSocket.{send,receive} didn't throw " +
"PortUnreachableException - passing anyway!" );
} else {
System.out.println(" Test passed." );
}
System.out.println("" );
}
/*
* Perform tests via remote_host .
*/
Test(String remote_host) throws Exception {
int port = getPort();
doTest(remote_host, port, true );
doTest(remote_host, port, false );
}
public static void main(String args[]) throws Exception {
String remote_host = "localhost" ;
if (args.length > 0 ) {
remote_host = args[0 ];
}
new Test(remote_host);
}
}
Messung V0.5 in Prozent C=93 H=86 G=89
¤ Dauer der Verarbeitung: 0.4 Sekunden
¤
*© Formatika GbR, Deutschland