blob: 03cd1b78a7e7bc45453d113c448be228ed4212b4 [file] [log] [blame]
duke6e45e102007-12-01 00:00:00 +00001/*
2 * Copyright 2003-2005 Sun Microsystems, Inc. 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
20 * CA 95054 USA or visit www.sun.com if you need additional information or
21 * have any questions.
22 */
23
24/* @test
25 @bug 4889870 4890033
26 @summary java -Xcheck:jni failing in net code on Solaris / [Datagram]Socket.getLocalAddress() failure
27 @run main/othervm -Xcheck:jni CheckJNI
28*/
29
30import java.net.*;
31import java.util.*;
32
33public class CheckJNI {
34 static Socket s;
35 static ServerSocket server;
36 static DatagramSocket dg1, dg2;
37
38 public static void main (String[] args) throws Exception {
39 /* try to invoke as much java.net native code as possible */
40
41 System.out.println ("Testing IPv4 Socket/ServerSocket");
42 server = new ServerSocket (0);
43 s = new Socket ("127.0.0.1", server.getLocalPort());
44 s.close();
45 server.close();
46
47 System.out.println ("Testing IPv4 DatagramSocket");
48 dg1 = new DatagramSocket (0, InetAddress.getByName ("127.0.0.1"));
49 dg2 = new DatagramSocket (0, InetAddress.getByName ("127.0.0.1"));
50 testDatagrams (dg1, dg2);
51
52 /* Use NetworkInterface to find link local IPv6 addrs to test */
53
54 Enumeration ifs = NetworkInterface.getNetworkInterfaces();
55 server = new ServerSocket (0);
56
57 while (ifs.hasMoreElements()) {
58 NetworkInterface nif = (NetworkInterface)ifs.nextElement();
59 Enumeration addrs = nif.getInetAddresses();
60 while (addrs.hasMoreElements()) {
61 InetAddress addr = (InetAddress) addrs.nextElement();
62 if (addr instanceof Inet6Address) {
63 Inet6Address ia6 = (Inet6Address) addr;
64 if (ia6.isLinkLocalAddress()) {
65 System.out.println ("Testing IPv6 Socket");
66 s = new Socket (ia6, server.getLocalPort());
67 s.close();
68
69 System.out.println ("Testing IPv6 DatagramSocket");
70 dg1 = new DatagramSocket (0, ia6);
71 dg2 = new DatagramSocket (0, ia6);
72 testDatagrams (dg1, dg2);
73 }
74 }
75 }
76 }
77 server.close();
78 System.out.println ("OK");
79 }
80
81 static void testDatagrams (DatagramSocket s1, DatagramSocket s2) throws Exception {
82 DatagramPacket p1 = new DatagramPacket (
83 "hello world".getBytes(),
84 0, "hello world".length(), s2.getLocalAddress(),
85 s2.getLocalPort()
86 );
87
88 DatagramPacket p2 = new DatagramPacket (new byte[128], 128);
89 s1.send (p1);
90 s2.receive (p2);
91 s1.close ();
92 s2.close ();
93 }
94}