/* * Copyright (c) 2009, 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.
*/
if (!Util.isSCTPSupported()) {
out.println("SCTP protocol is not supported");
out.println("Test cannot be run"); return;
}
if (args.length == 2) { /* requested to connecct to a specific address */ try { int port = Integer.valueOf(args[1]);
address = new InetSocketAddress(args[0], port);
} catch (NumberFormatException nfe) {
err.println(nfe);
}
} else { /* start server on local machine, default */ try {
server = new ShutdownServer();
server.start();
address = server.address();
debug("Server started and listening on " + address);
} catch (IOException ioe) {
ioe.printStackTrace(); return;
}
}
/* TEST 2: receive data sent before shutdown */ do {
debug("Test 2: invoking receive");
info = channel.receive(buffer, null, null); if (info == null) {
fail("unexpected null from receive"); return;
}
} while (!info.isComplete());
buffer.flip();
check(info != null, "info is null");
check(info.bytes() == Util.SMALL_MESSAGE.getBytes("ISO-8859-1").
length, "bytes received not equal to message length");
check(info.bytes() == buffer.remaining(), "bytes != remaining");
check(Util.compare(buffer, Util.SMALL_MESSAGE), "received message not the same as sent message");
buffer.clear();
/* TEST 3: receive notifications on the SCTP stack */
debug("Test 3: receive notifications"); while ((info = channel.receive(buffer, null, null )) != null &&
info.bytes() != -1 );
/* TEST 4: If the channel is already shutdown then invoking this
* method has no effect. */
debug("Test 4: no-op"); try {
channel.shutdown();
pass();
} catch (IOException ioe) {
unexpected(ioe);
}
/* TEST 5: Further sends will throw ClosedChannelException */
debug("Test 5: ClosedChannelException");
info = MessageInfo.createOutgoing(null, 1); try {
channel.send(buffer, info);
fail("shutdown not throwing expected ClosedChannelException");
} catch (ClosedChannelException unused) {
pass();
} catch (IOException ioe) {
unexpected(ioe);
}
/* TEST 6: getRemoteAddresses */
debug("Test 6: getRemoteAddresses"); try {
java.util.Set<SocketAddress> remoteAddrs = channel.getRemoteAddresses();
check(remoteAddrs.isEmpty(), "A shutdown channel should not have remote addresses");
} catch (IOException ioe) {
unexpected(ioe);
}
} catch (IOException ioe) {
unexpected(ioe);
} catch (InterruptedException ie) {
unexpected(ie);
}finally {
finishedLatch.countDown(); try { if (channel != null) channel.close(); } catch (IOException e) { unexpected(e);}
}
}
class ShutdownServer implements Runnable
{ final InetSocketAddress serverAddr; private SctpServerChannel ssc;
/* send a message */
MessageInfo info = MessageInfo.createOutgoing(null, 1);
ByteBuffer buf = ByteBuffer.allocateDirect(Util.SMALL_BUFFER);
buf.put(Util.SMALL_MESSAGE.getBytes("ISO-8859-1"));
buf.flip();
sc.send(buf, info);
/* notify client that the data has been sent */
sentLatch.countDown();
/* wait until after the client has finished its tests */
finishedLatch.await();
buf.clear();
ShutdownNotificationHandler handler = new ShutdownNotificationHandler();
BooleanWrapper bool = new BooleanWrapper();
sc.configureBlocking(false);
sc.receive(buf, bool, handler);
check(bool.booleanValue(), "SHUTDOWN not received on Server");
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.