8178912: Remove sample/chatserver/ChatTest.java and sample/mergesort/MergeSortTest.java
Reviewed-by: psandoz
This commit is contained in:
parent
38d511cc73
commit
5024b5321b
@ -301,7 +301,4 @@ javax/rmi/PortableRemoteObject/8146975/RmiIiopReturnValueTest.java 8169737 linux
|
||||
|
||||
org/omg/CORBA/OrbPropertiesTest.java 8175177 generic-all
|
||||
|
||||
sample/mergesort/MergeSortTest.java 8178912 generic-all
|
||||
sample/chatserver/ChatTest.java 8178912 generic-all
|
||||
|
||||
############################################################################
|
||||
|
@ -272,8 +272,7 @@ jdk_other = \
|
||||
com/sun/jndi \
|
||||
com/sun/corba \
|
||||
org/omg/CORBA \
|
||||
lib/testlibrary \
|
||||
sample
|
||||
lib/testlibrary
|
||||
|
||||
#
|
||||
# SCTP is its own group as it is highly sensitive to kernel/network config
|
||||
@ -774,7 +773,6 @@ compact1_minimal = \
|
||||
javax \
|
||||
jdk \
|
||||
lib \
|
||||
sample \
|
||||
sun \
|
||||
vm \
|
||||
-:needs_full_vm_compact1 \
|
||||
|
@ -1 +0,0 @@
|
||||
external.lib.roots = ../../
|
@ -1,402 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2011 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
|
||||
* @summary Test chat server chatserver test
|
||||
*
|
||||
* @library /src/sample/share/nio/chatserver
|
||||
* @build ChatTest ChatServer Client ClientReader DataReader MessageReader NameReader
|
||||
* @run testng ChatTest
|
||||
*/
|
||||
|
||||
import java.io.*;
|
||||
import java.net.InetSocketAddress;
|
||||
import java.net.Socket;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.CyclicBarrier;
|
||||
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
public class ChatTest {
|
||||
public static int listeningPort = 0;
|
||||
|
||||
@Test
|
||||
public static void doTest() throws Throwable {
|
||||
testStartStop();
|
||||
testPortOpen();
|
||||
testAsksForName();
|
||||
testUseName();
|
||||
testConnectDisconnectConnect();
|
||||
testUsernameAndMessage();
|
||||
testDontReceiveMessageInNameState();
|
||||
}
|
||||
|
||||
private static ChatServer startServer() throws IOException {
|
||||
ChatServer server = new ChatServer(0);
|
||||
InetSocketAddress address = (InetSocketAddress) server.getSocketAddress();
|
||||
listeningPort = address.getPort();
|
||||
server.run();
|
||||
return server;
|
||||
}
|
||||
|
||||
public static void testStartStop() throws Exception {
|
||||
ChatServer server = startServer();
|
||||
server.shutdown();
|
||||
}
|
||||
|
||||
public static void testPortOpen() throws Exception {
|
||||
ChatServer server = startServer();
|
||||
try {
|
||||
Socket socket = new Socket("localhost", listeningPort);
|
||||
if (!socket.isConnected()) {
|
||||
throw new RuntimeException("Failed to connect to server: port not open");
|
||||
}
|
||||
} finally {
|
||||
server.shutdown();
|
||||
}
|
||||
}
|
||||
|
||||
public static void testAsksForName() throws Exception {
|
||||
ChatServer server = startServer();
|
||||
try {
|
||||
Socket socket = new Socket("localhost", listeningPort);
|
||||
|
||||
Reader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
|
||||
String string = readAvailableString(reader);
|
||||
if (!string.equals("Name: ")) {
|
||||
throw new RuntimeException("Server doesn't send Name: ");
|
||||
}
|
||||
} finally {
|
||||
server.shutdown();
|
||||
}
|
||||
}
|
||||
|
||||
public static void testUseName() throws Throwable {
|
||||
ChatServer server = startServer();
|
||||
try {
|
||||
performTestUseName();
|
||||
} finally {
|
||||
server.shutdown();
|
||||
}
|
||||
}
|
||||
|
||||
public static void testConnectDisconnectConnect() throws Exception {
|
||||
ChatServer server = startServer();
|
||||
try {
|
||||
performTestConnectDisconnectConnect();
|
||||
} finally {
|
||||
server.shutdown();
|
||||
}
|
||||
}
|
||||
|
||||
public static void testUsernameAndMessage() throws Exception {
|
||||
ChatServer server = startServer();
|
||||
try {
|
||||
performTestUsernameAndMessage();
|
||||
} finally {
|
||||
server.shutdown();
|
||||
}
|
||||
}
|
||||
|
||||
public static void testDontReceiveMessageInNameState() throws Exception {
|
||||
ChatServer server = startServer();
|
||||
try {
|
||||
performDontReceiveMessageInNameState();
|
||||
} finally {
|
||||
server.shutdown();
|
||||
}
|
||||
}
|
||||
|
||||
private static void assertEqual(List<Exception> exception, Object value, Object expected) {
|
||||
if (expected == value) {
|
||||
return;
|
||||
}
|
||||
if (expected == null) {
|
||||
exception.add(new RuntimeException("Expected null, but was: " + value));
|
||||
return;
|
||||
}
|
||||
if (!expected.equals(value)) {
|
||||
exception.add(new RuntimeException("Expected: " + expected + " but was: " + value));
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
private static void performDontReceiveMessageInNameState() throws Exception {
|
||||
final CyclicBarrier barrier1 = new CyclicBarrier(2);
|
||||
final CyclicBarrier barrier2 = new CyclicBarrier(2);
|
||||
final CyclicBarrier barrier3 = new CyclicBarrier(2);
|
||||
final List<Exception> exceptions = Collections.synchronizedList(new ArrayList<Exception>());
|
||||
|
||||
ChatConnection chatConnection = new ChatConnection() {
|
||||
@Override
|
||||
public void run(Socket socket, BufferedReader reader, Writer writer) throws Exception {
|
||||
String string = readAvailableString(reader);
|
||||
assertEqual(exceptions, string, "Name: ");
|
||||
writer.write("testClient1\n");
|
||||
waitForJoin(reader, "testClient1");
|
||||
barrier1.await();
|
||||
writer.write("Ignore this!\n");
|
||||
barrier2.await();
|
||||
barrier3.await();
|
||||
}
|
||||
};
|
||||
|
||||
Thread client2 = new Thread(new ChatConnection() {
|
||||
@Override
|
||||
public void run(Socket socket, BufferedReader reader, Writer writer) throws Exception {
|
||||
barrier1.await();
|
||||
barrier2.await();
|
||||
String string = readAvailableString(reader);
|
||||
assertEqual(exceptions, string, "Name: ");
|
||||
string = readAvailableString(reader, true);
|
||||
assertEqual(exceptions, string, null);
|
||||
writer.write("testClient2\n");
|
||||
barrier3.await();
|
||||
}
|
||||
});
|
||||
|
||||
client2.start();
|
||||
chatConnection.run();
|
||||
if (!exceptions.isEmpty()) {
|
||||
throw exceptions.get(0);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private static void waitForJoin(BufferedReader reader, String s) throws IOException {
|
||||
String joined;
|
||||
do {
|
||||
joined = readAvailableString(reader);
|
||||
} while (!(joined != null && joined.contains("Welcome " + s)));
|
||||
}
|
||||
|
||||
private static void performTestUsernameAndMessage() throws Exception {
|
||||
final CyclicBarrier barrier1 = new CyclicBarrier(2);
|
||||
final CyclicBarrier barrier2 = new CyclicBarrier(2);
|
||||
final CyclicBarrier barrier3 = new CyclicBarrier(2);
|
||||
final List<Exception> exceptions = Collections.synchronizedList(new ArrayList<Exception>());
|
||||
|
||||
ChatConnection chatConnection = new ChatConnection() {
|
||||
@Override
|
||||
public void run(Socket socket, BufferedReader reader, Writer writer) throws Exception {
|
||||
String string = readAvailableString(reader);
|
||||
assertEqual(exceptions, string, "Name: ");
|
||||
writer.write("testClient1\n");
|
||||
waitForJoin(reader, "testClient1");
|
||||
barrier1.await();
|
||||
barrier2.await();
|
||||
string = readAvailableString(reader);
|
||||
assertEqual(exceptions, string, "testClient2: Hello world!\n");
|
||||
barrier3.await();
|
||||
}
|
||||
};
|
||||
|
||||
Thread client2 = new Thread(new ChatConnection() {
|
||||
@Override
|
||||
public void run(Socket socket, BufferedReader reader, Writer writer) throws Exception {
|
||||
String string = readAvailableString(reader);
|
||||
assertEqual(exceptions, string, "Name: ");
|
||||
barrier1.await();
|
||||
writer.write("testClient2\nHello world!\n");
|
||||
barrier2.await();
|
||||
barrier3.await();
|
||||
}
|
||||
});
|
||||
|
||||
client2.start();
|
||||
chatConnection.run();
|
||||
if (!exceptions.isEmpty()) {
|
||||
throw exceptions.get(0);
|
||||
}
|
||||
}
|
||||
|
||||
private static void performTestConnectDisconnectConnect() throws Exception {
|
||||
final CyclicBarrier barrier1 = new CyclicBarrier(2);
|
||||
final CyclicBarrier barrier2 = new CyclicBarrier(2);
|
||||
final CyclicBarrier barrier3 = new CyclicBarrier(2);
|
||||
final List<Exception> exceptions = new ArrayList<Exception>();
|
||||
|
||||
ChatConnection chatConnection = new ChatConnection() {
|
||||
@Override
|
||||
public void run(Socket socket, BufferedReader reader, Writer writer) throws Exception {
|
||||
String string = readAvailableString(reader);
|
||||
assertEqual(exceptions, string, "Name: ");
|
||||
writer.write("testClient1\n");
|
||||
}
|
||||
};
|
||||
|
||||
ChatConnection chatConnection2 = new ChatConnection() {
|
||||
@Override
|
||||
public void run(Socket socket, BufferedReader reader, Writer writer) throws Exception {
|
||||
readAvailableString(reader);
|
||||
writer.write("testClient1\n");
|
||||
waitForJoin(reader, "testClient1");
|
||||
barrier1.await();
|
||||
writer.write("Good morning!\n");
|
||||
barrier2.await();
|
||||
String string = readAvailableString(reader);
|
||||
assertEqual(exceptions, string, "testClient2: Hello world!\n");
|
||||
barrier3.await();
|
||||
}
|
||||
};
|
||||
|
||||
Thread client2 = new Thread(new ChatConnection() {
|
||||
@Override
|
||||
public void run(Socket socket, BufferedReader reader, Writer writer) throws Exception {
|
||||
readAvailableString(reader);
|
||||
writer.write("testClient2\n");
|
||||
waitForJoin(reader, "testClient2");
|
||||
barrier1.await();
|
||||
writer.write("Hello world!\n");
|
||||
barrier2.await();
|
||||
String string = readAvailableString(reader);
|
||||
assertEqual(exceptions, string, "testClient1: Good morning!\n");
|
||||
barrier3.await();
|
||||
}
|
||||
});
|
||||
|
||||
client2.start();
|
||||
chatConnection.run();
|
||||
chatConnection2.run();
|
||||
if (!exceptions.isEmpty()) {
|
||||
throw exceptions.get(0);
|
||||
}
|
||||
}
|
||||
|
||||
private static void performTestUseName() throws Exception {
|
||||
final CyclicBarrier barrier1 = new CyclicBarrier(2);
|
||||
final CyclicBarrier barrier2 = new CyclicBarrier(2);
|
||||
final CyclicBarrier barrier3 = new CyclicBarrier(2);
|
||||
final List<Exception> exceptions = new ArrayList<Exception>();
|
||||
|
||||
ChatConnection chatConnection = new ChatConnection() {
|
||||
@Override
|
||||
public void run(Socket socket, BufferedReader reader, Writer writer) throws Exception {
|
||||
String string = readAvailableString(reader);
|
||||
if (!"Name: ".equals(string)) {
|
||||
exceptions.add(new RuntimeException("Expected Name: "));
|
||||
}
|
||||
writer.write("testClient1\n");
|
||||
waitForJoin(reader, "testClient1");
|
||||
barrier1.await();
|
||||
barrier2.await();
|
||||
string = readAvailableString(reader);
|
||||
if (!"testClient2: Hello world!\n".equals(string)) {
|
||||
exceptions.add(new RuntimeException("testClient2: Hello world!\n"));
|
||||
}
|
||||
barrier3.await();
|
||||
}
|
||||
};
|
||||
|
||||
Thread client2 = new Thread(new ChatConnection() {
|
||||
@Override
|
||||
public void run(Socket socket, BufferedReader reader, Writer writer) throws Exception {
|
||||
String string = readAvailableString(reader);
|
||||
if (!"Name: ".equals(string)) {
|
||||
exceptions.add(new RuntimeException("Expected Name: "));
|
||||
}
|
||||
writer.write("testClient2\n");
|
||||
waitForJoin(reader, "testClient2");
|
||||
barrier1.await();
|
||||
writer.write("Hello world!\n");
|
||||
barrier2.await();
|
||||
barrier3.await();
|
||||
}
|
||||
});
|
||||
|
||||
client2.start();
|
||||
chatConnection.run();
|
||||
if (!exceptions.isEmpty()) {
|
||||
throw exceptions.get(0);
|
||||
}
|
||||
}
|
||||
|
||||
private static String readAvailableString(Reader reader) throws IOException {
|
||||
return readAvailableString(reader, false);
|
||||
}
|
||||
|
||||
private static String readAvailableString(Reader reader, boolean now) throws IOException {
|
||||
StringBuilder builder = new StringBuilder();
|
||||
int bytes;
|
||||
if (now && !reader.ready()) {
|
||||
return null;
|
||||
}
|
||||
do {
|
||||
char[] buf = new char[256];
|
||||
bytes = reader.read(buf);
|
||||
builder.append(buf, 0, bytes);
|
||||
} while (bytes == 256);
|
||||
return builder.toString();
|
||||
}
|
||||
|
||||
private abstract static class ChatConnection implements Runnable {
|
||||
public Exception exception;
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
try (Socket socket = new Socket("localhost", listeningPort);
|
||||
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
|
||||
Writer writer = new FlushingWriter(new OutputStreamWriter(socket.getOutputStream()))) {
|
||||
socket.setTcpNoDelay(true);
|
||||
|
||||
run(socket, reader, writer);
|
||||
} catch (Exception e) {
|
||||
exception = e;
|
||||
}
|
||||
}
|
||||
|
||||
public abstract void run(Socket socket, BufferedReader reader, Writer writer) throws Exception;
|
||||
}
|
||||
|
||||
private static class FlushingWriter extends Writer {
|
||||
public final Writer delegate;
|
||||
|
||||
private FlushingWriter(Writer delegate) {
|
||||
this.delegate = delegate;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void write(char[] cbuf, int off, int len) throws IOException {
|
||||
delegate.write(cbuf, off, len);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void flush() throws IOException {
|
||||
delegate.flush();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void close() throws IOException {
|
||||
delegate.close();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void write(String str) throws IOException {
|
||||
super.write(str);
|
||||
flush();
|
||||
}
|
||||
}
|
||||
}
|
@ -1,105 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2011 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
|
||||
* @summary Test MergeSort
|
||||
*
|
||||
* @library /src/sample/share/forkjoin/mergesort
|
||||
* @build MergeSortTest MergeDemo MergeSort
|
||||
* @run testng MergeSortTest
|
||||
*/
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Random;
|
||||
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
public class MergeSortTest {
|
||||
private Random random;
|
||||
private MergeSort target;
|
||||
|
||||
public MergeSortTest(Random random, MergeSort target) {
|
||||
this.random = random;
|
||||
this.target = target;
|
||||
}
|
||||
|
||||
@Test
|
||||
public static void doTest() {
|
||||
MergeSortTest test = new MergeSortTest(new Random(), new MergeSort(Runtime.getRuntime().availableProcessors() * 4));
|
||||
test.run();
|
||||
}
|
||||
|
||||
private int[] generateArray(int elements) {
|
||||
int[] array = new int[elements];
|
||||
for (int i = 0; i < array.length; ++i) {
|
||||
array[i] = random.nextInt(10);
|
||||
}
|
||||
return array;
|
||||
}
|
||||
|
||||
private void run() {
|
||||
testSort();
|
||||
testSortSingle();
|
||||
testSortEmpty();
|
||||
testLong();
|
||||
}
|
||||
|
||||
public void testLong() {
|
||||
for (int i = 0; i < 1000; ++i) {
|
||||
int elements = 1 + i * 100;
|
||||
|
||||
int[] array = generateArray(elements);
|
||||
int[] copy = Arrays.copyOf(array, array.length);
|
||||
Arrays.sort(copy);
|
||||
target.sort(array);
|
||||
assertEqual(copy, array);
|
||||
}
|
||||
}
|
||||
|
||||
private void testSortEmpty() {
|
||||
int[] array = { };
|
||||
target.sort(array);
|
||||
assertEqual(new int[] { }, array);
|
||||
}
|
||||
|
||||
private void testSortSingle() {
|
||||
int[] array = { 1 };
|
||||
target.sort(array);
|
||||
assertEqual(new int[] { 1 }, array);
|
||||
}
|
||||
|
||||
private void testSort() {
|
||||
int[] array = { 7, 3, 9, 0, -6, 12, 54, 3, -6, 88, 1412};
|
||||
target.sort(array);
|
||||
assertEqual(new int[] { -6, -6, 0, 3, 3, 7, 9, 12, 54, 88, 1412 }, array);
|
||||
}
|
||||
|
||||
private void assertEqual(int[] expected, int[] array) {
|
||||
if (!Arrays.equals(expected, array)) {
|
||||
throw new RuntimeException("Invalid sorted array!");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user