1dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes/* 2dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * Licensed to the Apache Software Foundation (ASF) under one or more 3dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * contributor license agreements. See the NOTICE file distributed with 4dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * this work for additional information regarding copyright ownership. 5dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * The ASF licenses this file to You under the Apache License, Version 2.0 6dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * (the "License"); you may not use this file except in compliance with 7dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * the License. You may obtain a copy of the License at 8dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * 9dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * http://www.apache.org/licenses/LICENSE-2.0 10dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * 11dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * Unless required by applicable law or agreed to in writing, software 12dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * distributed under the License is distributed on an "AS IS" BASIS, 13dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * See the License for the specific language governing permissions and 15dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * limitations under the License. 16dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 17dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 18dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughespackage org.apache.harmony.nio.tests.java.nio.channels; 19dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 20dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.io.IOException; 21dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.io.InputStream; 22dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.io.OutputStream; 23dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.net.InetSocketAddress; 24dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.net.ServerSocket; 25dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.net.Socket; 26dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.nio.ByteBuffer; 27dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.nio.channels.AsynchronousCloseException; 28dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.nio.channels.ClosedChannelException; 29dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.nio.channels.IllegalBlockingModeException; 30dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.nio.channels.NotYetBoundException; 31dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.nio.channels.SelectionKey; 32dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.nio.channels.ServerSocketChannel; 33dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.nio.channels.SocketChannel; 34dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.nio.channels.spi.SelectorProvider; 35dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 36dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport junit.framework.TestCase; 37dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport tests.support.Support_PortManager; 38dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 39dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes/* 40dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * test for ServerSocketChannel 41dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 42dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughespublic class ServerSocketChannelTest extends TestCase { 43dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 44dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes private static final int CAPACITY_NORMAL = 200; 45dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 46dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes private static final int CAPACITY_64KB = 65536; 47dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 48dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes private static final int TIME_UNIT = 200; 49dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 50dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes private InetSocketAddress localAddr1; 51dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 52dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes private ServerSocketChannel serverChannel; 53dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 54dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes private SocketChannel clientChannel; 55dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 56dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes protected void setUp() throws Exception { 57dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes super.setUp(); 58dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.localAddr1 = new InetSocketAddress( 59dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes "127.0.0.1", Support_PortManager 60dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes .getNextPort()); 61dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.serverChannel = ServerSocketChannel.open(); 62dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.clientChannel = SocketChannel.open(); 63dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 64dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 65dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes protected void tearDown() throws Exception { 66dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes if (null != this.serverChannel) { 67dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 68dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.serverChannel.close(); 69dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (Exception e) { 70dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes //ignore 71dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 72dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 73dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 74dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes if (null != this.clientChannel) { 75dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 76dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.clientChannel.close(); 77dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (Exception e) { 78dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes //ignore 79dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 80dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 81dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes super.tearDown(); 82dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 83dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 84dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // ------------------------------------------------------------------- 85dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // Test for methods in abstract class. 86dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // ------------------------------------------------------------------- 87dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 88dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /* 89dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * Test method for 'java.nio.channels.ServerSocketChannel.validOps()' 90dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 91dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void testValidOps() { 92dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes MockServerSocketChannel testMSChnlnull = new MockServerSocketChannel( 93dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes null); 94dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes MockServerSocketChannel testMSChnl = new MockServerSocketChannel( 95dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes SelectorProvider.provider()); 96dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(SelectionKey.OP_ACCEPT, this.serverChannel.validOps()); 97dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(SelectionKey.OP_ACCEPT, testMSChnl.validOps()); 98dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(SelectionKey.OP_ACCEPT, testMSChnlnull.validOps()); 99dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 100dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 101dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 102dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /* 103dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * Test method for 'java.nio.channels.ServerSocketChannel.open()' 104dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 105dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void testOpen() { 106dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes MockServerSocketChannel testMSChnl = new MockServerSocketChannel(null); 107dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes MockServerSocketChannel testMSChnlnotnull = new MockServerSocketChannel( 108dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes SelectorProvider.provider()); 109dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(SelectionKey.OP_ACCEPT, testMSChnlnotnull.validOps()); 110dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertNull(testMSChnl.provider()); 111dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertNotNull(testMSChnlnotnull.provider()); 112dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertNotNull(this.serverChannel.provider()); 113dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(testMSChnlnotnull.provider(), this.serverChannel 114dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes .provider()); 115dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 116dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 117dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // ------------------------------------------------------------------- 118dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // Test for socket() 119dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // ------------------------------------------------------------------- 120dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 121dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /* 122dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * Test method for 'java.nio.channels.ServerSocketChannel.socket()' 123dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 124dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void testSocket_Block_BeforeClose() throws Exception { 125dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.serverChannel.isOpen()); 126dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.serverChannel.isBlocking()); 127dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ServerSocket s1 = this.serverChannel.socket(); 128dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(s1.isClosed()); 129dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertSocketNotAccepted(s1); 130dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ServerSocket s2 = this.serverChannel.socket(); 131dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // same 132dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertSame(s1, s2); 133dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 134dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // socket close makes the channel close 135dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes s1.close(); 136dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.serverChannel.isOpen()); 137dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 138dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 139dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 140dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void testSocket_NonBlock_BeforeClose() throws Exception { 141dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.serverChannel.isOpen()); 142dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.serverChannel.configureBlocking(false); 143dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ServerSocket s1 = this.serverChannel.socket(); 144dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(s1.isClosed()); 145dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertSocketNotAccepted(s1); 146dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ServerSocket s2 = this.serverChannel.socket(); 147dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // same 148dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertSame(s1, s2); 149dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 150dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // socket close makes the channel close 151dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes s1.close(); 152dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.serverChannel.isOpen()); 153dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 154dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 155dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 156dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void testSocket_Block_Closed() throws Exception { 157dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.serverChannel.close(); 158dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.serverChannel.isOpen()); 159dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.serverChannel.isBlocking()); 160dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ServerSocket s1 = this.serverChannel.socket(); 161dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(s1.isClosed()); 162dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertSocketNotAccepted(s1); 163dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ServerSocket s2 = this.serverChannel.socket(); 164dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // same 165dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertSame(s1, s2); 166dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 167dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 168dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void testSocket_NonBlock_Closed() throws Exception { 169dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.serverChannel.configureBlocking(false); 170dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.serverChannel.close(); 171dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.serverChannel.isBlocking()); 172dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.serverChannel.isOpen()); 173dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ServerSocket s1 = this.serverChannel.socket(); 174dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(s1.isClosed()); 175dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertSocketNotAccepted(s1); 176dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ServerSocket s2 = this.serverChannel.socket(); 177dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // same 178dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertSame(s1, s2); 179dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 180dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 181dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes private void assertSocketNotAccepted(ServerSocket s) throws IOException { 182dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(s.isBound()); 183dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertNull(s.getInetAddress()); 184dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(-1, s.getLocalPort()); 185dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertNull(s.getLocalSocketAddress()); 186dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 187dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(0, s.getSoTimeout()); 188dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IOException expected) { 189dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // Android doesn't cache the timeout, so the getsockopt(2) fails and throws. 190dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 191dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 192dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 193dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void testChannelBasicStatus() { 194dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ServerSocket gotSocket = this.serverChannel.socket(); 195dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(gotSocket.isClosed()); 196dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.serverChannel.isBlocking()); 197dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.serverChannel.isRegistered()); 198dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(SelectionKey.OP_ACCEPT, this.serverChannel.validOps()); 199dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(SelectorProvider.provider(), this.serverChannel.provider()); 200dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 201dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 202dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // ------------------------------------------------------------------- 203dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // Test for accept() 204dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // ------------------------------------------------------------------- 205dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 206dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /* 207dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * Test method for 'java.nio.channels.ServerSocketChannel.accept()' 208dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 209dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 210dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void testAccept_Block_NotYetBound() throws IOException { 211dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.serverChannel.isOpen()); 212dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.serverChannel.isBlocking()); 213dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 214dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.serverChannel.accept(); 215dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw NotYetBoundException"); 216dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NotYetBoundException e) { 217dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // correct 218dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 219dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 220dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 221dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void testAccept_NonBlock_NotYetBound() throws IOException { 222dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.serverChannel.isOpen()); 223dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.serverChannel.configureBlocking(false); 224dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 225dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.serverChannel.accept(); 226dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw NotYetBoundException"); 227dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NotYetBoundException e) { 228dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // correct 229dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 230dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 231dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 232dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void testAccept_ClosedChannel() throws Exception { 233dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.serverChannel.close(); 234dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.serverChannel.isOpen()); 235dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 236dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.serverChannel.accept(); 237dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw ClosedChannelException"); 238dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ClosedChannelException e) { 239dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // OK. 240dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 241dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 242dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 243dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void testAccept_Block_NoConnect() throws IOException { 244dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.serverChannel.isBlocking()); 245dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ServerSocket gotSocket = this.serverChannel.socket(); 246dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes gotSocket.bind(localAddr1); 247dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // blocking mode , will block and wait for ever... 248dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // so must close the server channel with another thread. 249dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes new Thread() { 250dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void run() { 251dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 252dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes Thread.sleep(TIME_UNIT); 253dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ServerSocketChannelTest.this.serverChannel.close(); 254dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (Exception e) { 255dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Fail to close the server channel because of" 256dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes + e.getClass().getName()); 257dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 258dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 259dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes }.start(); 260dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 261dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.serverChannel.accept(); 262dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw a AsynchronousCloseException"); 263dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (AsynchronousCloseException e) { 264dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // OK. 265dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 266dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 267dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 268dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void testAccept_NonBlock_NoConnect() throws IOException { 269dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ServerSocket gotSocket = this.serverChannel.socket(); 270dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes gotSocket.bind(localAddr1); 271dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.serverChannel.configureBlocking(false); 272dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // non-blocking mode , will immediately return 273dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertNull(this.serverChannel.accept()); 274dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 275dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 276dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 277dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests ServerSocketChannel#accept().socket() 278dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 279dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_read_Blocking_RealData() throws IOException { 280dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes serverChannel.socket().bind(localAddr1); 281dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer buf = ByteBuffer.allocate(CAPACITY_NORMAL); 282dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 283dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes for (int i = 0; i < CAPACITY_NORMAL; i++) { 284dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes buf.put((byte) i); 285dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 286dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes clientChannel.connect(localAddr1); 287dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes Socket serverSocket = serverChannel.accept().socket(); 288dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes InputStream in = serverSocket.getInputStream(); 289dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes buf.flip(); 290dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes clientChannel.write(buf); 291dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes clientChannel.close(); 292dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertReadResult(in,CAPACITY_NORMAL); 293dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 294dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 295dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 296dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * Asserts read content. The read content should contain <code>size</code> 297dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * bytes, and the value should be a sequence from 0 to size-1 298dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * ([0,1,...size-1]). Otherwise, the method throws Exception. 299dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * 300dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 301dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes private void assertReadResult(InputStream in, int size) throws IOException{ 302dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes byte[] readContent = new byte[size + 1]; 303dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes int count = 0; 304dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes int total = 0; 305dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes while ((count = in.read(readContent, total, size + 1 - total)) != -1) { 306dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes total = total + count; 307dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 308dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(size, total); 309dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes for (int i = 0; i < size; i++) { 310dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals((byte) i, readContent[i]); 311dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 312dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 313dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 314dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 315dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests ServerSocketChannel#accept().socket() 316dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 317dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_read_NonBlocking_RealData() throws Exception { 318dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes serverChannel.configureBlocking(false); 319dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes serverChannel.socket().bind(localAddr1); 320dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer buf = ByteBuffer.allocate(CAPACITY_NORMAL); 321dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes for (int i = 0; i < CAPACITY_NORMAL; i++) { 322dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes buf.put((byte) i); 323dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 324dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes buf.flip(); 325dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes clientChannel.connect(localAddr1); 326dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes Socket serverSocket = serverChannel.accept().socket(); 327dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes InputStream in = serverSocket.getInputStream(); 328dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes clientChannel.write(buf); 329dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes clientChannel.close(); 330dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertReadResult(in,CAPACITY_NORMAL); 331dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 332dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 333dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 334dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests ServerSocketChannel#accept().socket() 335dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 336dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_write_Blocking_RealData() throws IOException { 337dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(serverChannel.isBlocking()); 338dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ServerSocket serverSocket = serverChannel.socket(); 339dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes serverSocket.bind(localAddr1); 340dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 341dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes byte[] writeContent = new byte[CAPACITY_NORMAL]; 342dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes for (int i = 0; i < writeContent.length; i++) { 343dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeContent[i] = (byte) i; 344dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 345dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes clientChannel.connect(localAddr1); 346dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes Socket socket = serverChannel.accept().socket(); 347dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes OutputStream out = socket.getOutputStream(); 348dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes out.write(writeContent); 349dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes out.flush(); 350dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes socket.close(); 351dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertWriteResult(CAPACITY_NORMAL); 352dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 353dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 354dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 355dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 356dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests ServerSocketChannel#accept().socket() 357dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 358dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_write_NonBlocking_RealData() throws Exception { 359dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes serverChannel.configureBlocking(false); 360dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ServerSocket serverSocket = serverChannel.socket(); 361dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes serverSocket.bind(localAddr1); 362dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 363dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes byte[] writeContent = new byte[CAPACITY_NORMAL]; 364dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes for (int i = 0; i < CAPACITY_NORMAL; i++) { 365dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeContent[i] = (byte) i; 366dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 367dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes clientChannel.connect(localAddr1); 368dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes Socket clientSocket = serverChannel.accept().socket(); 369dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes OutputStream out = clientSocket.getOutputStream(); 370dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes out.write(writeContent); 371dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes clientSocket.close(); 372dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertWriteResult(CAPACITY_NORMAL); 373dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 374dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 375dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 376dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @throws InterruptedException 377dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests ServerSocketChannel#accept().socket() 378dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 379dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_read_LByteBuffer_Blocking_ReadWriteRealLargeData() 380dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes throws IOException, InterruptedException { 381dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes serverChannel.socket().bind(localAddr1); 382dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer buf = ByteBuffer.allocate(CAPACITY_64KB); 383dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes for (int i = 0; i < CAPACITY_64KB; i++) { 384dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes buf.put((byte) i); 385dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 386dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes buf.flip(); 387dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes clientChannel.connect(localAddr1); 388dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes WriteChannelThread writeThread = new WriteChannelThread(clientChannel, buf); 389dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeThread.start(); 390dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes Socket socket = serverChannel.accept().socket(); 391dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes InputStream in = socket.getInputStream(); 392dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertReadResult(in,CAPACITY_64KB); 393dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeThread.join(); 394dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // check if the thread threw any exceptions 395dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes if (writeThread.exception != null) { 396dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes throw writeThread.exception; 397dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 398dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 399dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 400dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes class WriteChannelThread extends Thread { 401dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes SocketChannel channel; 402dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer buffer; 403dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes IOException exception; 404dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 405dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public WriteChannelThread(SocketChannel channel, ByteBuffer buffer) { 406dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel = channel; 407dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.buffer = buffer; 408dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 409dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 410dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void run() { 411dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 412dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes channel.write(buffer); 413dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes channel.close(); 414dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IOException e) { 415dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes exception = e; 416dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 417dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 418dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 419dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 420dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 421dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests ServerSocketChannel#accept().socket() 422dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 423dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_read_LByteBuffer_NonBlocking_ReadWriteRealLargeData() 424dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes throws Exception { 425dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes serverChannel.configureBlocking(false); 426dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes serverChannel.socket().bind(localAddr1); 427dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer buf = ByteBuffer.allocate(CAPACITY_64KB); 428dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes for (int i = 0; i < CAPACITY_64KB; i++) { 429dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes buf.put((byte) i); 430dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 431dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes buf.flip(); 432dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes clientChannel.connect(localAddr1); 433dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes WriteChannelThread writeThread = new WriteChannelThread(clientChannel, buf); 434dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeThread.start(); 435dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes Socket socket = serverChannel.accept().socket(); 436dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes InputStream in = socket.getInputStream(); 437dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertReadResult(in,CAPACITY_64KB); 438dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeThread.join(); 439dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // check if the thread threw any exceptions 440dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes if (writeThread.exception != null) { 441dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes throw writeThread.exception; 442dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 443dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 444dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 445dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 446dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests ServerSocketChannel#accept().socket() 447dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 448dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_write_LByteBuffer_NonBlocking_ReadWriteRealLargeData() 449dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes throws Exception { 450dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes serverChannel.configureBlocking(false); 451dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes serverChannel.socket().bind(localAddr1); 452dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes byte[] writeContent = new byte[CAPACITY_64KB]; 453dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes for (int i = 0; i < writeContent.length; i++) { 454dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeContent[i] = (byte) i; 455dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 456dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes clientChannel.connect(localAddr1); 457dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes Socket socket = serverChannel.accept().socket(); 458dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes WriteSocketThread writeThread = new WriteSocketThread(socket, writeContent); 459dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeThread.start(); 460dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertWriteResult(CAPACITY_64KB); 461dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeThread.join(); 462dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // check if the thread threw any exceptions 463dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes if (writeThread.exception != null) { 464dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes throw writeThread.exception; 465dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 466dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 467dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 468dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes class WriteSocketThread extends Thread { 469dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes Socket socket; 470dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes byte[] buffer; 471dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes IOException exception; 472dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 473dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public WriteSocketThread(Socket socket, byte[] buffer) { 474dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.socket = socket; 475dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.buffer = buffer; 476dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 477dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 478dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void run() { 479dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 480dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes OutputStream out = socket.getOutputStream(); 481dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes out.write(buffer); 482dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes socket.close(); 483dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IOException e) { 484dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes exception = e; 485dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 486dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 487dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 488dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 489dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 490dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests ServerSocketChannel#accept().socket() 491dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 492dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_write_LByteBuffer_Blocking_ReadWriteRealLargeData() 493dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes throws Exception { 494dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes serverChannel.socket().bind(localAddr1); 495dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes byte[] writeContent = new byte[CAPACITY_64KB]; 496dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes for (int i = 0; i < writeContent.length; i++) { 497dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeContent[i] = (byte) i; 498dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 499dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes clientChannel.connect(localAddr1); 500dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes Socket socket = serverChannel.accept().socket(); 501dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes WriteSocketThread writeThread = new WriteSocketThread(socket, writeContent); 502dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeThread.start(); 503dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertWriteResult(CAPACITY_64KB); 504dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeThread.join(); 505dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // check if the thread threw any exceptions 506dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes if (writeThread.exception != null) { 507dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes throw writeThread.exception; 508dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 509dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 510dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 511dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 512dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * Uses SocketChannel.read(ByteBuffer) to verify write result. 513dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 514dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes private void assertWriteResult(int size) throws IOException{ 515dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer buf = ByteBuffer.allocate(size + 1); 516dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes int count = 0; 517dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes int total = 0; 518dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes long beginTime = System.currentTimeMillis(); 519dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes while ((count = clientChannel.read(buf)) != -1) { 520dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes total = total + count; 521dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // 10s timeout to avoid dead loop 522dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes if (System.currentTimeMillis() - beginTime > 10000){ 523dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes break; 524dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 525dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 526dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(total, size); 527dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes buf.flip(); 528dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes for (int i = 0; i < count; i++) { 529dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals((byte) i, buf.get(i)); 530dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 531dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 532dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 533dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 534dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests ServerSocketChannel#socket().getSoTimeout() 535dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 536dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_accept_SOTIMEOUT() throws IOException { 537dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // regression test for Harmony-707 538dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes final int SO_TIMEOUT = 10; 539dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ServerSocketChannel sc = ServerSocketChannel.open(); 540dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 541dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ServerSocket ss = sc.socket(); 542dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ss.bind(localAddr1); 543dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes sc.configureBlocking(false); 544dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ss.setSoTimeout(SO_TIMEOUT); 545dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes SocketChannel client = sc.accept(); 546dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // non blocking mode, returns null since there are no pending connections. 547dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertNull(client); 548dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes int soTimeout = ss.getSoTimeout(); 549dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // Harmony fails here. 550dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(SO_TIMEOUT, soTimeout); 551dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } finally { 552dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes sc.close(); 553dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 554dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 555dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 556dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 557dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests ServerSocket#socket().accept() 558dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 559dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_socket_accept_Blocking_NotBound() throws IOException { 560dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // regression test for Harmony-748 561dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ServerSocket gotSocket = serverChannel.socket(); 562dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes serverChannel.configureBlocking(true); 563dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 564dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes gotSocket.accept(); 565dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw an IllegalBlockingModeException"); 566dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IllegalBlockingModeException e) { 567dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 568dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 569dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes serverChannel.close(); 570dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 571dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes gotSocket.accept(); 572dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw an IllegalBlockingModeException"); 573dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IllegalBlockingModeException e) { 574dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 575dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 576dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 577dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 578dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 579dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests ServerSocket#socket().accept() 580dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 581dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_socket_accept_Nonblocking_NotBound() throws IOException { 582dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // regression test for Harmony-748 583dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ServerSocket gotSocket = serverChannel.socket(); 584dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes serverChannel.configureBlocking(false); 585dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 586dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes gotSocket.accept(); 587dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw an IllegalBlockingModeException"); 588dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IllegalBlockingModeException e) { 589dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 590dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 591dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes serverChannel.close(); 592dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 593dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes gotSocket.accept(); 594dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw an IllegalBlockingModeException"); 595dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IllegalBlockingModeException e) { 596dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 597dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 598dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 599dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 600dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 601dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests ServerSocket#socket().accept() 602dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 603dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_socket_accept_Nonblocking_Bound() throws IOException { 604dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // regression test for Harmony-748 605dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes serverChannel.configureBlocking(false); 606dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ServerSocket gotSocket = serverChannel.socket(); 607dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes gotSocket.bind(localAddr1); 608dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 609dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes gotSocket.accept(); 610dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw an IllegalBlockingModeException"); 611dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IllegalBlockingModeException e) { 612dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 613dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 614dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes serverChannel.close(); 615dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 616dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes gotSocket.accept(); 617dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw a ClosedChannelException"); 618dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ClosedChannelException e) { 619dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 620dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 621dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 622dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 623dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 624dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests ServerSocket#socket().accept() 625dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 626dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_socket_accept_Blocking_Bound() throws IOException { 627dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // regression test for Harmony-748 628dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes serverChannel.configureBlocking(true); 629dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ServerSocket gotSocket = serverChannel.socket(); 630dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes gotSocket.bind(localAddr1); 631dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes serverChannel.close(); 632dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 633dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes gotSocket.accept(); 634dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw a ClosedChannelException"); 635dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ClosedChannelException e) { 636dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 637dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 638dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 639dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 640dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * Regression test for HARMONY-4961 641dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 642dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_socket_getLocalPort() throws IOException { 643dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes serverChannel.socket().bind(localAddr1); 644dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes clientChannel.connect(localAddr1); 645dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes SocketChannel myChannel = serverChannel.accept(); 646dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes int port = myChannel.socket().getLocalPort(); 647dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(localAddr1.getPort(), port); 648dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes myChannel.close(); 649dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes clientChannel.close(); 650dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes serverChannel.close(); 651dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 652dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 653dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 654dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * Regression test for HARMONY-6375 655dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 656dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_accept_configureBlocking() throws Exception { 657dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes InetSocketAddress localAddr = new InetSocketAddress("localhost", 0); 658dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes serverChannel.socket().bind(localAddr); 659dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 660dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // configure the channel non-blocking 661dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // when it is accepting in main thread 662dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes new Thread() { 663dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void run() { 664dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 665dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes Thread.sleep(TIME_UNIT); 666dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes serverChannel.configureBlocking(false); 667dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes serverChannel.close(); 668dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (Exception e) { 669dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes e.printStackTrace(); 670dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 671dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 672dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes }.start(); 673dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 674dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 675dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes serverChannel.accept(); 676dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw AsynchronousCloseException"); 677dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (AsynchronousCloseException e) { 678dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 679dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 680dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes serverChannel.close(); 681dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 682dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes} 683