blob: 7b6a8dca187f9fe6925ffbd081a264db2247d455 [file] [log] [blame]
duke6e45e102007-12-01 00:00:00 +00001/*
ohair2283b9d2010-05-25 15:58:33 -07002 * Copyright (c) 2001, Oracle and/or its affiliates. All rights reserved.
duke6e45e102007-12-01 00:00:00 +00003 * 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 *
ohair2283b9d2010-05-25 15:58:33 -070019 * 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.
duke6e45e102007-12-01 00:00:00 +000022 */
23
24/*
25 * @test
26 * @bug 4092038
27 * @summary TCP Urgent data support
28 *
29 */
30
31import java.net.*;
32import java.io.*;
33
34public class UrgentDataTest {
35
36 Object opref;
37 boolean isClient, isServer;
38 String clHost;
39 ServerSocket listener;
40 Socket client, server;
41 int clPort;
42 InputStream clis, sis;
43 OutputStream clos, sos;
44
45 static void usage () {
46 System.out.println (" usage: java UrgentDataTest <runs client and server together>");
47 System.out.println (" usage: java UrgentDataTest -server <runs server alone>");
48 System.out.println (" usage: java UrgentDataTest -client host port <runs client and connects to"+
49 " specified server>");
50 }
51
52 public static void main (String args[]) {
53 try {
54 UrgentDataTest test = new UrgentDataTest ();
55 if (args.length == 0) {
56 test.listener = new ServerSocket (0);
57 test.isClient = true;
58 test.isServer = true;
59 test.clHost = "127.0.0.1";
60 test.clPort = test.listener.getLocalPort();
61 test.run();
62 } else if (args[0].equals ("-server")) {
63 test.listener = new ServerSocket (0);
64 System.out.println ("Server listening on port " + test.listener.getLocalPort());
65 test.isClient = false;
66 test.isServer = true;
67 test.run();
68 System.out.println ("Server: Completed OK");
69 } else if (args[0].equals ("-client")) {
70 test.isClient = true;
71 test.isServer = false;
72 test.clHost = args [1];
73 test.clPort = Integer.parseInt (args[2]);
74 test.run();
75 System.out.println ("Client: Completed OK");
76 } else {
77 usage ();
78 }
79 }
80 catch (ArrayIndexOutOfBoundsException e) {
81 usage();
82 }
83 catch (NumberFormatException e) {
84 usage();
85 }
86 catch (Exception e) {
87 e.printStackTrace ();
88 throw new RuntimeException ("Exception caught");
89 }
90 }
91
92 public void run () throws Exception {
93 if (isClient) {
94 client = new Socket (clHost, clPort);
95 clis = client.getInputStream();
96 clos = client.getOutputStream();
97 client.setOOBInline (true);
98 if (client.getOOBInline() != true) {
99 throw new RuntimeException ("Setting OOBINLINE failed");
100 }
101 }
102 if (isServer) {
103 server = listener.accept ();
104 sis = server.getInputStream();
105 sos = server.getOutputStream();
106 }
107 if (isClient) {
108 clos.write ("Hello".getBytes ());
109 client.sendUrgentData (100);
110 clos.write ("world".getBytes ());
111 }
112 // read Hello world from server (during which oob byte must have been dropped)
113 String s = "Helloworld";
114 if (isServer) {
115 for (int y=0; y<s.length(); y++) {
116 int c = sis.read ();
117 if (c != (int)s.charAt (y)) {
118 throw new RuntimeException ("Unexpected character read");
119 }
120 }
121 // Do the same from server to client
122 sos.write ("Hello".getBytes ());
123 server.sendUrgentData (101);
124 sos.write ("World".getBytes ());
125 }
126 if (isClient) {
127 // read Hello world from client (during which oob byte must have been read)
128 s="Hello";
129 for (int y=0; y<s.length(); y++) {
130 int c = clis.read ();
131 if (c != (int)s.charAt (y)) {
132 throw new RuntimeException ("Unexpected character read");
133 }
134 }
135 if (clis.read() != 101) {
136 throw new RuntimeException ("OOB byte not received");
137 }
138 s="World";
139 for (int y=0; y<s.length(); y++) {
140 int c = clis.read ();
141 if (c != (int)s.charAt (y)) {
142 throw new RuntimeException ("Unexpected character read");
143 }
144 }
145 }
146
147 if (isClient)
148 client.close ();
149 if (isServer)
150 server.close ();
151 }
152}