blob: 9683f348aa7489013218411444c53c7c9d972111 [file] [log] [blame]
J. Duke319a3b92007-12-01 00:00:00 +00001/*
2 * Copyright 2001-2002 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 * @summary Unit test for socket-channel adaptors
26 * @library ..
27 */
28
29import java.io.*;
30import java.net.*;
31import java.nio.*;
32import java.nio.channels.*;
33import java.nio.charset.*;
34
35
36public class AdaptSocket {
37
38 static java.io.PrintStream out = System.out;
39
40 static final int ECHO_PORT = 7;
41 static final int DAYTIME_PORT = 13;
42 static final String REMOTE_HOST = TestUtil.HOST;
43 static final String VERY_REMOTE_HOST = TestUtil.FAR_HOST;
44
45 static void test(String hn, int timeout, boolean shouldTimeout)
46 throws Exception
47 {
48 out.println();
49
50 InetSocketAddress isa
51 = new InetSocketAddress(InetAddress.getByName(hn),
52 DAYTIME_PORT);
53 SocketChannel sc = SocketChannel.open();
54 Socket so = sc.socket();
55 out.println("opened: " + so);
56 out.println(" " + sc);
57
58 //out.println("opts: " + sc.options());
59 so.setTcpNoDelay(true);
60 //so.setTrafficClass(SocketOpts.IP.TOS_THROUGHPUT);
61 so.setKeepAlive(true);
62 so.setSoLinger(true, 42);
63 so.setOOBInline(true);
64 so.setReceiveBufferSize(512);
65 so.setSendBufferSize(512);
66 //out.println(" " + sc.options());
67
68 if (timeout == 0)
69 so.connect(isa);
70 else {
71 try {
72 so.connect(isa, timeout);
73 } catch (SocketTimeoutException x) {
74 if (shouldTimeout) {
75 out.println("Connection timed out, as expected");
76 return;
77 } else {
78 throw x;
79 }
80 }
81 if (shouldTimeout)
82 throw new Exception("Connection did not time out");
83 }
84 out.println("connected: " + so);
85 out.println(" " + sc);
86 byte[] bb = new byte[100];
87 int n = so.getInputStream().read(bb);
88 String s = new String(bb, 0, n - 2, "US-ASCII");
89 out.println(isa + " says: \"" + s + "\"");
90 so.shutdownInput();
91 out.println("ishut: " + sc);
92 so.shutdownOutput();
93 out.println("oshut: " + sc);
94 so.close();
95 out.println("closed: " + so);
96 out.println(" " + sc);
97 }
98
99 static String dataString = "foo\r\n";
100
101 static void testRead(Socket so, boolean shouldTimeout)
102 throws Exception
103 {
104 String data = "foo\r\n";
105 so.getOutputStream().write(dataString.getBytes("US-ASCII"));
106 InputStream is = so.getInputStream();
107 try {
108 byte[] b = new byte[100];
109 int n = is.read(b);
110 if (n != 5)
111 throw new Exception("Incorrect number of bytes read: " + n);
112 if (!dataString.equals(new String(b, 0, n, "US-ASCII")))
113 throw new Exception("Incorrect data read: " + n);
114 } catch (SocketTimeoutException x) {
115 if (shouldTimeout) {
116 out.println("Read timed out, as expected");
117 return;
118 }
119 throw x;
120 }
121 if (shouldTimeout)
122 throw new Exception("Read did not time out");
123 }
124
125 static void testRead(String hn, int timeout, boolean shouldTimeout)
126 throws Exception
127 {
128 out.println();
129
130 InetSocketAddress isa
131 = new InetSocketAddress(InetAddress.getByName(hn), ECHO_PORT);
132 SocketChannel sc = SocketChannel.open();
133 sc.connect(isa);
134 Socket so = sc.socket();
135 out.println("connected: " + so);
136 out.println(" " + sc);
137
138 if (timeout > 0)
139 so.setSoTimeout(timeout);
140 out.println("timeout: " + so.getSoTimeout());
141
142 testRead(so, shouldTimeout);
143 if (!TestUtil.onME())
144 for (int i = 0; i < 4; i++)
145 testRead(so, shouldTimeout);
146
147 sc.close();
148 }
149
150 public static void main(String[] args) throws Exception {
151
152 test(REMOTE_HOST, 0, false);
153 test(REMOTE_HOST, 1000, false);
154 test(VERY_REMOTE_HOST, 10, true);
155
156 testRead(REMOTE_HOST, 0, false);
157 testRead(REMOTE_HOST, 8000, false);
158 testRead(VERY_REMOTE_HOST, 10, true);
159
160 }
161
162}