blob: fb635128ac91d704d3ee8935a62a8ee602da948a [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package libcore.java.nio.channels;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.nio.channels.ClosedByInterruptException;
import java.nio.channels.ServerSocketChannel;
import java.nio.channels.SocketChannel;
import java.nio.channels.spi.SelectorProvider;
import junit.framework.TestCase;
import tests.support.Support_PortManager;
/*
* test for ServerSocketChannel
*/
public class OldServerSocketChannelTest extends TestCase {
private static final int TIME_UNIT = 200;
private InetSocketAddress localAddr1;
private ServerSocketChannel serverChannel;
private SocketChannel clientChannel;
protected void setUp() throws Exception {
super.setUp();
this.localAddr1 = new InetSocketAddress(
"127.0.0.1", Support_PortManager
.getNextPort());
this.serverChannel = ServerSocketChannel.open();
this.clientChannel = SocketChannel.open();
}
protected void tearDown() throws Exception {
if (null != this.serverChannel) {
try {
this.serverChannel.close();
} catch (Exception e) {
//ignore
}
}
if (null != this.clientChannel) {
try {
this.clientChannel.close();
} catch (Exception e) {
//ignore
}
}
super.tearDown();
}
// -------------------------------------------------------------------
// Test for methods in abstract class.
// -------------------------------------------------------------------
public void testConstructor() throws IOException {
ServerSocketChannel channel =
SelectorProvider.provider().openServerSocketChannel();
assertNotNull(channel);
assertSame(SelectorProvider.provider(),channel.provider());
}
public void testIsOpen() throws Exception {
assertTrue(this.serverChannel.isOpen());
this.serverChannel.close();
assertFalse(this.serverChannel.isOpen());
}
public void test_accept_Block_NoConnect_interrupt() throws IOException {
assertTrue(this.serverChannel.isBlocking());
ServerSocket gotSocket = this.serverChannel.socket();
gotSocket.bind(localAddr1);
class MyThread extends Thread {
public String errMsg = null;
public void run() {
try {
serverChannel.accept();
errMsg = "should throw ClosedByInterruptException";
} catch (ClosedByInterruptException e) {
// expected
} catch (Exception e) {
errMsg = "caught wrong Exception: " + e.getClass() + ": " +
e.getMessage();
}
}
}
MyThread thread = new MyThread();
thread.start();
try {
Thread.currentThread().sleep(TIME_UNIT);
thread.interrupt();
} catch (InterruptedException e) {
fail("Should not throw a InterruptedException");
}
if (thread.errMsg != null) {
fail(thread.errMsg);
}
}
}