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 18e5fea3d504609d22337a5311d3ce0e72314bceeeNarayan Kamathpackage org.apache.harmony.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.BindException; 24dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.net.ConnectException; 25dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.net.InetAddress; 26dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.net.InetSocketAddress; 27dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.net.ServerSocket; 28dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.net.Socket; 29dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.net.SocketAddress; 303d43823e17818b3c5f45831f830884917b181454Piotr Jastrzebskiimport java.net.SocketOption; 31dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.net.SocketException; 32dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.nio.Buffer; 33dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.nio.ByteBuffer; 342808d7d77be71a40b9724172fc6be4c3db68d507Narayan Kamathimport java.nio.channels.AlreadyBoundException; 35dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.nio.channels.AlreadyConnectedException; 36dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.nio.channels.ClosedChannelException; 37dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.nio.channels.ConnectionPendingException; 38dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.nio.channels.IllegalBlockingModeException; 39dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.nio.channels.NoConnectionPendingException; 40dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.nio.channels.NotYetConnectedException; 41dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.nio.channels.ServerSocketChannel; 42dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.nio.channels.SocketChannel; 43dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.nio.channels.UnresolvedAddressException; 44dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.nio.channels.UnsupportedAddressTypeException; 45dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.nio.channels.spi.SelectorProvider; 463d43823e17818b3c5f45831f830884917b181454Piotr Jastrzebskiimport java.util.Set; 47dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport junit.framework.TestCase; 48dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 49dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes/** 50dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * Tests for SocketChannel and its default implementation. 51dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 52dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughespublic class SocketChannelTest extends TestCase { 53dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 54dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes private static final int CAPACITY_NORMAL = 200; 55dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 56dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes private InetSocketAddress localAddr1; 57dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes private InetSocketAddress localAddr2; 58dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 59dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes private SocketChannel channel1; 60dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 61dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes private SocketChannel channel2; 62dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 63dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes private ServerSocket server1; 64dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 65dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes private ServerSocket server2; 66dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 67dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes private final static int TIMEOUT = 60000; 68dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 69dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes private final static int EOF = -1; 70dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 71dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes protected void setUp() throws Exception { 72dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes super.setUp(); 73dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1 = SocketChannel.open(); 74dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel2 = SocketChannel.open(); 7582c642531ba3c9ad29cb3125f7547a226b661b11Narayan Kamath this.server1 = new ServerSocket(0); 7682c642531ba3c9ad29cb3125f7547a226b661b11Narayan Kamath this.localAddr1 = new InetSocketAddress("127.0.0.1", server1.getLocalPort()); 7782c642531ba3c9ad29cb3125f7547a226b661b11Narayan Kamath 7882c642531ba3c9ad29cb3125f7547a226b661b11Narayan Kamath this.server2 = new ServerSocket(0); 7982c642531ba3c9ad29cb3125f7547a226b661b11Narayan Kamath this.localAddr2 = new InetSocketAddress("127.0.0.1", server2.getLocalPort()); 80dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 81dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 82dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes protected void tearDown() throws Exception { 83dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes super.tearDown(); 84dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes if (null != this.channel1) { 85dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 86dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.close(); 87dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (Exception e) { 88dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes //ignore 89dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 90dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 91dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes if (null != this.channel2) { 92dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 93dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel2.close(); 94dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (Exception e) { 95dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes //ignore 96dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 97dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 98dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes if (null != this.server1) { 99dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 100dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.server1.close(); 101dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (Exception e) { 102dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes //ignore 103dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 104dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 105dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes if (null != this.server2) { 106dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 107dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.server2.close(); 108dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (Exception e) { 109dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes //ignore 110dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 111dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 112dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 113dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 114dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // ------------------------------------------------------------------- 115dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // Test for methods in abstract class. 116dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // ------------------------------------------------------------------- 117dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /* 118dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * Test method for 'java.nio.channels.SocketChannel.validOps()' 119dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 120dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void testValidOps() { 121dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes MockSocketChannel testMSChannel = new MockSocketChannel(null); 122dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(13, this.channel1.validOps()); 123dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(13, testMSChannel.validOps()); 124dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 125dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 126dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /* 127dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * Test method for 'java.nio.channels.SocketChannel.open()' 128dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 129dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void testOpen() throws IOException { 130dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes java.nio.ByteBuffer[] buf = new java.nio.ByteBuffer[1]; 131dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes buf[0] = java.nio.ByteBuffer.allocateDirect(CAPACITY_NORMAL); 132dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes MockSocketChannel testMSChannel = new MockSocketChannel(null); 133dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes MockSocketChannel testMSChannelnotnull = new MockSocketChannel( 134dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes SelectorProvider.provider()); 135dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertNull(testMSChannel.provider()); 136dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertNotNull(testMSChannelnotnull.provider()); 137dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertNotNull(this.channel1); 138dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(this.channel1.provider(), testMSChannelnotnull.provider()); 139dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 140dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.write(buf); 141dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw NotYetConnectedException"); 142dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NotYetConnectedException e) { 143dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // correct 144dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 145dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 146dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 147dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /* 148dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * Test method for 'java.nio.channels.SocketChannel.open(SocketAddress)' 149dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 150dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void testOpenSocketAddress_Null() throws IOException { 151dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 152933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller SocketChannel.open(null); 153dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw an IllegalArgumentException"); 154dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IllegalArgumentException e) { 155dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // correct 156dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 157dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 158dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 15947ae0b5a1d96c8030e0963ccc5b44c3ee66aaec3Neil Fuller public void testBind_Null() throws Exception { 16063744c884dd4b4f4307f2b021fb894af164972afElliott Hughes assertNull(channel1.socket().getLocalSocketAddress()); 16147ae0b5a1d96c8030e0963ccc5b44c3ee66aaec3Neil Fuller 16263744c884dd4b4f4307f2b021fb894af164972afElliott Hughes channel1.socket().bind(null); 16347ae0b5a1d96c8030e0963ccc5b44c3ee66aaec3Neil Fuller 16463744c884dd4b4f4307f2b021fb894af164972afElliott Hughes InetSocketAddress localAddress = (InetSocketAddress) channel1.socket().getLocalSocketAddress(); 16547ae0b5a1d96c8030e0963ccc5b44c3ee66aaec3Neil Fuller assertTrue(localAddress.getAddress().isAnyLocalAddress()); 16647ae0b5a1d96c8030e0963ccc5b44c3ee66aaec3Neil Fuller assertTrue(localAddress.getPort() > 0); 16747ae0b5a1d96c8030e0963ccc5b44c3ee66aaec3Neil Fuller } 16847ae0b5a1d96c8030e0963ccc5b44c3ee66aaec3Neil Fuller 16947ae0b5a1d96c8030e0963ccc5b44c3ee66aaec3Neil Fuller public void testBind_Failure() throws Exception { 17063744c884dd4b4f4307f2b021fb894af164972afElliott Hughes assertNull(channel1.socket().getLocalSocketAddress()); 17147ae0b5a1d96c8030e0963ccc5b44c3ee66aaec3Neil Fuller 17247ae0b5a1d96c8030e0963ccc5b44c3ee66aaec3Neil Fuller try { 17347ae0b5a1d96c8030e0963ccc5b44c3ee66aaec3Neil Fuller // Bind to a local address that is in use 17463744c884dd4b4f4307f2b021fb894af164972afElliott Hughes channel1.socket().bind(localAddr1); 17547ae0b5a1d96c8030e0963ccc5b44c3ee66aaec3Neil Fuller fail(); 17647ae0b5a1d96c8030e0963ccc5b44c3ee66aaec3Neil Fuller } catch (IOException expected) { 17747ae0b5a1d96c8030e0963ccc5b44c3ee66aaec3Neil Fuller } 17847ae0b5a1d96c8030e0963ccc5b44c3ee66aaec3Neil Fuller } 17947ae0b5a1d96c8030e0963ccc5b44c3ee66aaec3Neil Fuller 18047ae0b5a1d96c8030e0963ccc5b44c3ee66aaec3Neil Fuller public void testBind_Closed() throws Exception { 18147ae0b5a1d96c8030e0963ccc5b44c3ee66aaec3Neil Fuller channel1.close(); 18247ae0b5a1d96c8030e0963ccc5b44c3ee66aaec3Neil Fuller 18347ae0b5a1d96c8030e0963ccc5b44c3ee66aaec3Neil Fuller try { 18463744c884dd4b4f4307f2b021fb894af164972afElliott Hughes channel1.socket().bind(null); 18547ae0b5a1d96c8030e0963ccc5b44c3ee66aaec3Neil Fuller fail(); 18663744c884dd4b4f4307f2b021fb894af164972afElliott Hughes } catch (IOException expected) { 18747ae0b5a1d96c8030e0963ccc5b44c3ee66aaec3Neil Fuller } 18847ae0b5a1d96c8030e0963ccc5b44c3ee66aaec3Neil Fuller } 18947ae0b5a1d96c8030e0963ccc5b44c3ee66aaec3Neil Fuller 19047ae0b5a1d96c8030e0963ccc5b44c3ee66aaec3Neil Fuller public void testBind_explicitPort() throws Exception { 19147ae0b5a1d96c8030e0963ccc5b44c3ee66aaec3Neil Fuller ServerSocketChannel portPickingChannel = ServerSocketChannel.open(); 19247ae0b5a1d96c8030e0963ccc5b44c3ee66aaec3Neil Fuller // Have the OS find a free port. 19363744c884dd4b4f4307f2b021fb894af164972afElliott Hughes portPickingChannel.socket().bind(null); 19463744c884dd4b4f4307f2b021fb894af164972afElliott Hughes InetSocketAddress address = (InetSocketAddress) portPickingChannel.socket().getLocalSocketAddress(); 19547ae0b5a1d96c8030e0963ccc5b44c3ee66aaec3Neil Fuller assertTrue(address.getPort() > 0); 19647ae0b5a1d96c8030e0963ccc5b44c3ee66aaec3Neil Fuller portPickingChannel.close(); 19747ae0b5a1d96c8030e0963ccc5b44c3ee66aaec3Neil Fuller 19847ae0b5a1d96c8030e0963ccc5b44c3ee66aaec3Neil Fuller // There is a risk of flakiness here if the port is allocated to something else between 19947ae0b5a1d96c8030e0963ccc5b44c3ee66aaec3Neil Fuller // close() and bind(). 20047ae0b5a1d96c8030e0963ccc5b44c3ee66aaec3Neil Fuller InetSocketAddress bindAddress = new InetSocketAddress("localhost", address.getPort()); 20147ae0b5a1d96c8030e0963ccc5b44c3ee66aaec3Neil Fuller // Allow the socket to bind to a port we know is already in use. 20247ae0b5a1d96c8030e0963ccc5b44c3ee66aaec3Neil Fuller channel1.socket().setReuseAddress(true); 20363744c884dd4b4f4307f2b021fb894af164972afElliott Hughes channel1.socket().bind(bindAddress); 20447ae0b5a1d96c8030e0963ccc5b44c3ee66aaec3Neil Fuller 20563744c884dd4b4f4307f2b021fb894af164972afElliott Hughes InetSocketAddress boundAddress = (InetSocketAddress) channel1.socket().getLocalSocketAddress(); 20647ae0b5a1d96c8030e0963ccc5b44c3ee66aaec3Neil Fuller assertEquals(bindAddress.getHostName(), boundAddress.getHostName()); 20747ae0b5a1d96c8030e0963ccc5b44c3ee66aaec3Neil Fuller assertEquals(bindAddress.getPort(), boundAddress.getPort()); 20847ae0b5a1d96c8030e0963ccc5b44c3ee66aaec3Neil Fuller } 20947ae0b5a1d96c8030e0963ccc5b44c3ee66aaec3Neil Fuller 21047ae0b5a1d96c8030e0963ccc5b44c3ee66aaec3Neil Fuller public void test_getLocalSocketAddress_afterClose() throws IOException { 21147ae0b5a1d96c8030e0963ccc5b44c3ee66aaec3Neil Fuller SocketChannel sc = SocketChannel.open(); 21263744c884dd4b4f4307f2b021fb894af164972afElliott Hughes assertNull(sc.socket().getLocalSocketAddress()); 21347ae0b5a1d96c8030e0963ccc5b44c3ee66aaec3Neil Fuller 21447ae0b5a1d96c8030e0963ccc5b44c3ee66aaec3Neil Fuller InetSocketAddress bindAddr = new InetSocketAddress("localhost", 0); 21563744c884dd4b4f4307f2b021fb894af164972afElliott Hughes sc.socket().bind(bindAddr); 21647ae0b5a1d96c8030e0963ccc5b44c3ee66aaec3Neil Fuller 21763744c884dd4b4f4307f2b021fb894af164972afElliott Hughes assertNotNull(sc.socket().getLocalSocketAddress()); 21847ae0b5a1d96c8030e0963ccc5b44c3ee66aaec3Neil Fuller 21947ae0b5a1d96c8030e0963ccc5b44c3ee66aaec3Neil Fuller sc.close(); 22047ae0b5a1d96c8030e0963ccc5b44c3ee66aaec3Neil Fuller 22147ae0b5a1d96c8030e0963ccc5b44c3ee66aaec3Neil Fuller assertFalse(sc.isOpen()); 22247ae0b5a1d96c8030e0963ccc5b44c3ee66aaec3Neil Fuller 22363744c884dd4b4f4307f2b021fb894af164972afElliott Hughes sc.socket().getLocalSocketAddress(); 22447ae0b5a1d96c8030e0963ccc5b44c3ee66aaec3Neil Fuller } 22547ae0b5a1d96c8030e0963ccc5b44c3ee66aaec3Neil Fuller 226dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /* 227dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * Test method for 'java.nio.channels.SocketChannel.read(ByteBuffer[])' 228dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 229dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void testReadByteBufferArray() throws IOException { 230dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes java.nio.ByteBuffer[] byteBuf = null; 231dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes MockSocketChannel testMSChannelnull = new MockSocketChannel(null); 232dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes MockSocketChannel testMSChannel = new MockSocketChannel( 233dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes SelectorProvider.provider()); 23482c642531ba3c9ad29cb3125f7547a226b661b11Narayan Kamath ServerSocket testServer = new ServerSocket(0); 235dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 236dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 237dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.read(byteBuf); 238dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw NPE"); 239dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NullPointerException e) { 240dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // correct 241dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 242dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes byteBuf = new java.nio.ByteBuffer[CAPACITY_NORMAL]; 243dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 244dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.read(byteBuf); 245dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw NotYetConnectedException"); 246dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NotYetConnectedException e) { 247dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // correct 248dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 249933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller long readNum = testMSChannel.read(byteBuf); 250dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(0, readNum); 251dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readNum = CAPACITY_NORMAL; 252dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readNum = testMSChannelnull.read(byteBuf); 253dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(0, readNum); 254dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } finally { 255dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes testServer.close(); 256dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 257dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 258dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 259dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /* 260dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * Test method for 'java.nio.channels.SocketChannel.read(ByteBuffer[])' 261dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 262dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void testReadByteBufferArray_BufNull() throws IOException { 263dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes java.nio.ByteBuffer[] byteBuf = null; 264dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes MockSocketChannel testMSChannelnull = new MockSocketChannel(null); 265dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes MockSocketChannel testMSChannel = new MockSocketChannel( 266dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes SelectorProvider.provider()); 267dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 268dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.read(byteBuf); 269dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw NPE"); 270dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NullPointerException e) { 271dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // correct 272dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 273dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 274dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes testMSChannel.read(byteBuf); 275dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw NPE"); 276dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NullPointerException e) { 277dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // correct 278dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 279dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 280dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes testMSChannelnull.read(byteBuf); 281dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw NPE"); 282dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NullPointerException e) { 283dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // correct 284dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 285dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 286dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 287dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /* 288dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * Test method for 'java.nio.channels.SocketChannel.write(ByteBuffer[])' 289dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 290dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void testWriteByteBufferArray() throws IOException { 291dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes java.nio.ByteBuffer[] byteBuf = null; 292dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes MockSocketChannel testMSChannelnull = new MockSocketChannel(null); 293dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes MockSocketChannel testMSChannel = new MockSocketChannel( 294dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes SelectorProvider.provider()); 295dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 296dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.write(byteBuf); 297dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw NPE"); 298dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NullPointerException e) { 299dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // correct 300dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 301dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes byteBuf = new java.nio.ByteBuffer[CAPACITY_NORMAL]; 302dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 303dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.write(byteBuf); 304dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw NotYetConnectedException"); 305dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NotYetConnectedException e) { 306dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // correct 307dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 308dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes testMSChannel.write(byteBuf); 309dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes testMSChannelnull.write(byteBuf); 310dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 311dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 312dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /* 313dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * Test method for 'java.nio.channels.SocketChannel.write(ByteBuffer[])' 314dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 315dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void testWriteByteBufferArray_BufNull() throws IOException { 316dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes java.nio.ByteBuffer[] byteBuf = null; 317dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes MockSocketChannel testMSChannelnull = new MockSocketChannel(null); 318dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes MockSocketChannel testMSChannel = new MockSocketChannel( 319dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes SelectorProvider.provider()); 320dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 321dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.write(byteBuf); 322dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw NPE"); 323dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NullPointerException e) { 324dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // correct 325dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 326dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 327dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes testMSChannel.write(byteBuf); 328dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw NPE"); 329dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NullPointerException e) { 330dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // correct 331dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 332dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 333dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes testMSChannelnull.write(byteBuf); 334dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw NPE"); 335dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NullPointerException e) { 336dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // correct 337dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 338dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 339dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 340dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void testSocket_BasicStatusBeforeConnect() throws IOException { 341dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.isConnected());// not connected 342dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes Socket s1 = this.channel1.socket(); 343933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller assertSocketBeforeBind(s1); 344dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertSocketBeforeConnect(s1); 345dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes Socket s2 = this.channel1.socket(); 346dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // same 347dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertSame(s1, s2); 348dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 349dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 350dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void testSocket_Block_BasicStatusAfterConnect() throws IOException { 351dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.isConnected());// not connected 352dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.channel1.connect(localAddr1)); 353dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 354dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.channel1.isConnected()); 355dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes Socket s1 = this.channel1.socket(); 356dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 357dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertSocketAfterConnect(s1, localAddr1); 358dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes Socket s2 = this.channel1.socket(); 359dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // same 360dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertSame(s1, s2); 361dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 362dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 363dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void testSocket_NonBlock_BasicStatusAfterConnect() throws Exception { 364dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.isConnected());// not connected 365dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.configureBlocking(false); 366dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes boolean connected = channel1.connect(localAddr1); 367933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller Socket s1; 368933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller Socket s2; 369dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes if (!connected) { 370dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.isConnected()); 371dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.channel1.isConnectionPending()); 372dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes s1 = this.channel1.socket(); 373933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller // A connect() causes an implicit bind() 374933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller assertSocketAfterImplicitBind(s1); 375933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller 376dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // status of not connected 377dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertSocketBeforeConnect(s1); 378dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes s2 = this.channel1.socket(); 379dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // same 380dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertSame(s1, s2); 381dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 382dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 383dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes if (tryFinish()) { 384dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.channel1.isConnected()); 385dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes s1 = this.channel1.socket(); 386dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertSocketAfterConnect(s1, localAddr1); 387dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes s2 = this.channel1.socket(); 388dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // same 389dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertSame(s1, s2); 390dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 391dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 392dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 393dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void testSocket_Block_ActionsBeforeConnect() throws IOException { 394dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.isConnected());// not connected 395dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes Socket s = this.channel1.socket(); 396dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertSocketAction_Block_BeforeConnect(s); 397dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 398dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 399dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void testSocket_Block_ActionsAfterConnect() throws IOException { 400dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.isConnected());// not connected 401dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.channel1.connect(localAddr1)); 402dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.channel1.isConnected()); 403dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes Socket s = this.channel1.socket(); 404dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertSocketAction_Block_AfterConnect(s); 405dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 406dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 407dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 408dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void testSocket_NonBlock_ActionsAfterConnectBeforeFinish() 409dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes throws IOException { 410dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.isConnected());// not connected 411dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.configureBlocking(false); 412dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes boolean connected = channel1.connect(localAddr1); 413dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes if (!connected) { 414dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.isConnected()); 415dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.channel1.isConnectionPending()); 416dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes Socket s1 = this.channel1.socket(); 417dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // Action of not connected 418dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertSocketAction_NonBlock_BeforeConnect(s1); 419dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes Socket s2 = this.channel1.socket(); 420dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // same 421dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertSame(s1, s2); 422dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 423dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 424dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 425dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void testSocket_NonBlock_ActionsAfterConnectAfterFinish() 426dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes throws Exception { 427dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.isConnected());// not connected 428dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.configureBlocking(false); 429dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes channel1.connect(localAddr1); 430dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes if (tryFinish()) { 431dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes Socket s1 = this.channel1.socket(); 432dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertSocketAction_NonBlock_AfterConnect(s1); 433dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes Socket s2 = this.channel1.socket(); 434dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // same 435dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertSame(s1, s2); 436dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 437dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 438dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 439dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void testSocket_getInetAddress() throws Exception { 440dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes Socket socket = channel1.socket(); 441dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertNull(socket.getInetAddress()); 442dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 443dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes channel1.connect(localAddr1); 444dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 445dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertNotNull(socket.getInetAddress()); 446dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(localAddr1.getAddress(), socket.getInetAddress()); 447dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 448dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 449dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void testSocket_getRemoteSocketAddress() throws Exception { 450dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes Socket socket = channel1.socket(); 451dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertNull(socket.getRemoteSocketAddress()); 452dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 453dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes channel1.connect(localAddr1); 454dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 455dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertNotNull(socket.getRemoteSocketAddress()); 456dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(localAddr1, socket.getRemoteSocketAddress()); 457dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 458dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 459dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void testSocket_getPort() throws Exception { 460dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes Socket socket = channel1.socket(); 461dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(0, socket.getPort()); 462dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 463dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes channel1.connect(localAddr1); 464dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 465dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(localAddr1.getPort(), socket.getPort()); 466dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 467dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 468dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void testSocket_getLocalAddress() throws Exception { 469dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes Socket socket = channel1.socket(); 470dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 471dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes channel1.connect(localAddr1); 472dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 47363744c884dd4b4f4307f2b021fb894af164972afElliott Hughes assertNotNull(socket.getLocalSocketAddress()); 474dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 475dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 476dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void testSocket_getLocalSocketAddress() throws Exception { 477dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes Socket socket = channel1.socket(); 478dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertNull(socket.getLocalSocketAddress()); 479dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 480dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes channel1.connect(localAddr1); 481dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 482dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertNotNull(socket.getLocalSocketAddress()); 483dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 484dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 485dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void testSocket_getLocalPort() throws Exception { 486dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes Socket socket = channel1.socket(); 487dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(-1, socket.getLocalPort()); 488dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 489dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes channel1.connect(localAddr1); 490dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 491dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(-1 != socket.getLocalPort()); 492dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(0 != socket.getLocalPort()); 493dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 494dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 495dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void testSocket_bind() throws Exception { 496dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes Socket socket = channel1.socket(); 497dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes socket.bind(new InetSocketAddress("127.0.0.1", 0)); 498dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals("127.0.0.1", socket.getLocalAddress().getHostAddress()); 499dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(socket.getLocalPort() != -1); 500dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 501dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 502933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller private void assertSocketBeforeBind(Socket s) { 503dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(s.isBound()); 504933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller assertTrue(s.getLocalAddress().isAnyLocalAddress()); 505933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller // RI fails here. RI returns 0 while spec says unbound socket should 506933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller // return -1. 507933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller assertEquals(-1, s.getLocalPort()); 508933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller assertNull(s.getLocalSocketAddress()); 509933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller } 510933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller 511933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller private void assertSocketAfterImplicitBind(Socket s) throws IOException { 512933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller assertTrue(s.isBound()); 513933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller assertTrue(s.getLocalAddress().isLoopbackAddress()); 514933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller assertTrue(s.getLocalPort() > 0); 515933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller 516933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller InetSocketAddress localSocketAddress = (InetSocketAddress) s.getLocalSocketAddress(); 517933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller assertTrue(localSocketAddress.getAddress().isLoopbackAddress()); 518933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller assertEquals(s.getLocalPort(), localSocketAddress.getPort()); 519933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller } 520933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller 521933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller private void assertSocketBeforeConnect(Socket s) throws IOException { 522dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(s.isClosed()); 523dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(s.isConnected()); 524dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(s.getKeepAlive()); 525dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 526dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes s.getInputStream(); 527dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw SocketException."); 528dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (SocketException e) { 529dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // OK. 530dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 531dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(s.getOOBInline()); 532dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 533dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes s.getOutputStream(); 534dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw SocketException."); 535dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (SocketException e) { 536dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // OK. 537dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 538dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(-1, s.getSoLinger()); 539dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(s.getTcpNoDelay()); 540dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 541dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(s.isInputShutdown()); 542dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(s.isOutputShutdown()); 543dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 544dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertNull(s.getInetAddress()); 545dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(s.getReuseAddress()); 546dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 547dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // not connected 548dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(0, s.getPort()); 549dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(s.getReceiveBufferSize() >= 8192); 550dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertNull(s.getRemoteSocketAddress()); 551dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(s.getSendBufferSize() >= 8192); 552dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(0, s.getSoTimeout()); 553dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(0, s.getTrafficClass()); 554dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 555dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 556dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 557dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes private void assertSocketAfterConnect(Socket s, InetSocketAddress address) 558dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes throws IOException { 559dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(s.isBound()); 560dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(s.isClosed()); 561dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(s.isConnected()); 562dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(s.getKeepAlive()); 563dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 564dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertNotNull(s.getInputStream()); 565dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertNotNull(s.getOutputStream()); 566dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 567dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(s.getOOBInline()); 568dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(-1, s.getSoLinger()); 569dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(s.getTcpNoDelay()); 570dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 571dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(s.isInputShutdown()); 572dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(s.isOutputShutdown()); 573dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 574dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertSame(s.getInetAddress(), address.getAddress()); 575dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 576dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(s.getLocalAddress(), this.localAddr1.getAddress()); 577dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(s.getPort(), address.getPort()); 578dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertNotNull(s.getLocalSocketAddress()); 579dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(s.getReceiveBufferSize() >= 8192); 580dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(s.getRemoteSocketAddress(), (SocketAddress) address); 581dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // assertFalse(s.getReuseAddress()); 582dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(s.getSendBufferSize() >= 8192); 583dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(0, s.getSoTimeout()); 584dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(0, s.getTrafficClass()); 585dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 586dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 587dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes private void assertSocketAction_Block_BeforeConnect(Socket s) 588dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes throws IOException { 589dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.isConnected()); 590dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes s.connect(localAddr2); 591dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.channel1.isConnected()); 592dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(s.isConnected()); 593dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 594dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertSocketAfterConnect(s, localAddr2); 595dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 596dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 597dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes s.bind(localAddr2); 5982808d7d77be71a40b9724172fc6be4c3db68d507Narayan Kamath fail("Should throw SocketException"); 5992808d7d77be71a40b9724172fc6be4c3db68d507Narayan Kamath } catch (SocketException e) { 600dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // OK. 601dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 602dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 603dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes s.close(); 604dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(s.isClosed()); 605dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.isOpen()); 606dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 607dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 608dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes private void assertSocketAction_NonBlock_BeforeConnect(Socket s) 609dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes throws IOException { 610dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.isConnected()); 611dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 612dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes s.connect(localAddr2); 613dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw IllegalBlockingModeException"); 614dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IllegalBlockingModeException e1) { 615dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // OK. 616dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 617dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 618dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes if (this.channel1.isConnectionPending()) { 619dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 620dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes s.bind(localAddr2); 621dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw ConnectionPendingException"); 622dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ConnectionPendingException e1) { 623dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // OK. 624dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 625dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } else { 626dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 627dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes s.bind(localAddr2); 628dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw BindException"); 629dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (BindException e1) { 630dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // OK. 631dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 632dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 633dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 634dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.isConnected()); 635dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(s.isConnected()); 636dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 637dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes s.close(); 638dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(s.isClosed()); 639dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.isOpen()); 640dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 641dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 642dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes private void assertSocketAction_Block_AfterConnect(Socket s) 643dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes throws IOException { 644dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(s.getPort(), localAddr1.getPort()); 645dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.channel1.isConnected()); 646dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(s.isConnected()); 647dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 648dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes s.connect(localAddr2); 6492808d7d77be71a40b9724172fc6be4c3db68d507Narayan Kamath fail("Should throw SocketException"); 6502808d7d77be71a40b9724172fc6be4c3db68d507Narayan Kamath } catch (SocketException e) { 651dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // OK. 652dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 653dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 654dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 655dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes s.bind(localAddr2); 6562808d7d77be71a40b9724172fc6be4c3db68d507Narayan Kamath fail("Should throw SocketException"); 6572808d7d77be71a40b9724172fc6be4c3db68d507Narayan Kamath } catch (SocketException e) { 658dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // OK. 659dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 660dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 661dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes s.close(); 662dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(s.isClosed()); 663dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.isOpen()); 664dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 665dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 666dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes private void assertSocketAction_NonBlock_AfterConnect(Socket s) 667dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes throws IOException { 668dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(s.getPort(), localAddr1.getPort()); 669dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.channel1.isConnected()); 670dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(s.isConnected()); 671dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 672dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes if (this.channel1.isConnectionPending()) { 673dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 674dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes s.connect(localAddr2); 6752808d7d77be71a40b9724172fc6be4c3db68d507Narayan Kamath fail("Should throw SocketException"); 6762808d7d77be71a40b9724172fc6be4c3db68d507Narayan Kamath } catch (SocketException e) { 677dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // OK. 678dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 679dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } else { 680dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 681dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes s.connect(localAddr2); 682dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw IllegalBlockingModeException"); 683dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IllegalBlockingModeException e) { 684dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // OK. 685dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 686dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 687dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 688dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 689dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes s.bind(localAddr2); 6902808d7d77be71a40b9724172fc6be4c3db68d507Narayan Kamath fail("Should throw SocketException"); 6912808d7d77be71a40b9724172fc6be4c3db68d507Narayan Kamath } catch (SocketException e) { 692dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // OK. 693dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 694dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 695dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes s.close(); 696dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(s.isClosed()); 697dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.isOpen()); 698dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 699dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 700dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // ------------------------------------------------------------------- 701dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // Tests for connect(), finishConnect(),isConnected(),isConnectionPending() 702dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // These methods are very close, so we test them together, call them "CFII". 703dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // ------------------------------------------------------------------- 704dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 705dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * connect-->finish-->close 706dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 707dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void testCFII_Norml_NoServer_Block() throws Exception { 708dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // ensure 709dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ensureServerClosed(); 710dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.channel1.isBlocking()); 711dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusNotConnected_NotPending(); 712dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // connect 713dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 714dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.connect(localAddr1); 715dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw a ConnectException here."); 716dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ConnectException e) { 717dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // OK. 718dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 719dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusChannelClosed(); 720dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 721dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.finishConnect(); 722dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw a ClosedChannelException here."); 723dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ClosedChannelException e) { 724dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // OK. 725dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 726dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 727dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 728dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 729dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * connect-->finish-->close 730dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 731dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void testCFII_Norml_NoServer_NonBlock() throws Exception { 732dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes connectNoServerNonBlock(); 733dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 734dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.close(); 735dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusChannelClosed(); 736dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 737dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 738dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 739dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * connect-->finish-->close 740dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 741dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void testCFII_Norml_Server_Block() throws Exception { 742dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes connectServerBlock(); 743dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 744dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.close(); 745dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusChannelClosed(); 746dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 747dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 748dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 749dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 750dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * connect-->finish-->close 751dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 752dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void testCFII_Norml_Server_NonBlock() throws Exception { 753dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes connectServerNonBlock(); 754dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 755dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.close(); 756dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusChannelClosed(); 757dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 758dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 759dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 760dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * connect-->server closed-->finish-->close 761dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 762dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void testCFII_ServerClosed_Block() throws Exception { 763dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // ensure 764dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ensureServerOpen(); 765dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.channel1.isBlocking()); 766dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusNotConnected_NotPending(); 767dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // connect 768dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.channel1.connect(localAddr1)); 769dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusConnected_NotPending(); 770dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 771dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ensureServerClosed(); 772dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 773dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes tryFinish(); 774dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 775dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.close(); 776dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusChannelClosed(); 777dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 778dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 779dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 780dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 781dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * connect-->server closed-->finish-->close 782dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 783dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void testCFII_ServerClosed_NonBlock() throws Exception { 784dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // ensure 785dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ensureServerOpen(); 786dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.configureBlocking(false); 787dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusNotConnected_NotPending(); 788dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // connect 789dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes boolean connected = channel1.connect(localAddr1); 790dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes if (!connected) { 791dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusNotConnected_Pending(); 792dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 793dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ensureServerClosed(); 794dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 795dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes tryFinish(); 796dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 797dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.close(); 798dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusChannelClosed(); 799dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 800dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 801dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 802dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * connect-->finish-->server closed-->close 803dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 804dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void testCFII_ServerClosedAfterFinish_Block() throws Exception { 805dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes connectServerBlock(); 806dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 807dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ensureServerClosed(); 808dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.channel1.isOpen()); 809dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.close(); 810dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusChannelClosed(); 811dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 812dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 813dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 814dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 815dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * connect-->finish-->server closed-->close 816dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 817dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void testCFII_ServerClosedAfterFinish_NonBlock() throws Exception { 818dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes connectServerNonBlock(); 819dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 820dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ensureServerClosed(); 821dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.channel1.isOpen()); 822dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.close(); 823dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusChannelClosed(); 824dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 825dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 826dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 827dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * no server-->connect-->server open-->finish-->close 828dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 829dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void testCFII_ServerStartLater_Block() throws Exception { 830dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // ensure 831dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ensureServerClosed(); 832dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.channel1.isBlocking()); 833dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusNotConnected_NotPending(); 834dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // connect 835dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 836dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.connect(localAddr1); 837dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw a ConnectException here."); 838dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ConnectException e) { 839dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // OK. 840dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 841dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusChannelClosed(); 842dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ensureServerOpen(); 843dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 844dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.finishConnect(); 845dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw a ClosedChannelException here."); 846dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ClosedChannelException e) { 847dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // OK. 848dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 849dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 850dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 851dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 852dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * no server-->connect-->server open-->finish-->close 853dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 854dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void testCFII_ServerStartLater_NonBlock() throws Exception { 855dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // ensure 856dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ensureServerClosed(); 857dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.configureBlocking(false); 858dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusNotConnected_NotPending(); 859dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // connect 860dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.connect(localAddr1)); 861dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusNotConnected_Pending(); 862dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 863dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ensureServerOpen(); 864dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 865dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 866dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.finishConnect()); 867dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusNotConnected_Pending(); 868dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.close(); 869dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ConnectException e) { 870dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // FIXME: assertEquals(e.getMessage(), "Connection refused"); 871dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 872dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 873dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 874dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 875dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * connect-->finish-->finish-->close 876dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 877dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void testCFII_FinishTwice_NoServer_NonBlock() throws Exception { 878dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // ensure 879dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ensureServerClosed(); 880dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.configureBlocking(false); 881dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusNotConnected_NotPending(); 882dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // connect 883dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.connect(localAddr1)); 884dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusNotConnected_Pending(); 885dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 886dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.finishConnect()); 887dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusNotConnected_Pending(); 888dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.finishConnect()); 889dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusNotConnected_Pending(); 890dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.close(); 891dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ConnectException e) { 892dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // FIXME: assertEquals(e.getMessage(), "Connection refused"); 893dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 894dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusChannelClosed(); 895dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 896dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 897dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 898dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * connect-->finish-->finish-->close 899dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 900dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void testCFII_FinishTwice_Server_Block() throws Exception { 901dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes connectServerBlock(); 902dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes tryFinish(); 903dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.close(); 904dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusChannelClosed(); 905dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 906dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 907dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 908dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 909dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * connect-->finish-->finish-->close 910dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 911dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void testCFII_FinishTwice_Server_NonBlock() throws Exception { 912dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes connectServerNonBlock(); 913dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes tryFinish(); 914dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.close(); 915dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusChannelClosed(); 916dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 917dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 918dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 919dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * connect-->finish-->connect-->close 920dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 921dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void testCFII_ConnectAfterFinish_NoServer_Block() throws Exception { 922dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // ensure 923dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ensureServerClosed(); 924dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.channel1.isBlocking()); 925dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusNotConnected_NotPending(); 926dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // connect 927dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 928dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.connect(localAddr1); 929dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw a ConnectException here."); 930dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ConnectException e) { 931dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // OK. 932dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 933dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusChannelClosed(); 934dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 935dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.finishConnect(); 936dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw a ClosedChannelException here."); 937dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ClosedChannelException e) { 938dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // OK. 939dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 940dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusChannelClosed(); 941dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 942dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.connect(localAddr1); 943dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw a ClosedChannelException here."); 944dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ClosedChannelException e) { 945dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // OK. 946dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 947dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusChannelClosed(); 948dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 949dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 950dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 951dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * connect-->finish-->connect-->close 952dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 953dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void testCFII_ConnectAfterFinish_NoServer_NonBlock() 954dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes throws Exception { 955dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // ensure 956dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ensureServerClosed(); 957dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.configureBlocking(false); 958dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusNotConnected_NotPending(); 959dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // connect 960dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.connect(localAddr1)); 961dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusNotConnected_Pending(); 962dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 963dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.finishConnect()); 964dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusNotConnected_Pending(); 965dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ConnectException e) { 966dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // FIXME: assertEquals(e.getMessage(), "Connection refused"); 967dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 968dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 969dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes if (this.channel1.isOpen()) { 970dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 971dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 972dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.connect(localAddr1); 973dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw a ConnectionPendingException here."); 974dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ConnectionPendingException e) { 975dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // OK. 976dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 977dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusNotConnected_Pending(); 978dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 979dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // connect another addr 980dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 981dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.connect(localAddr2); 982dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw a ConnectionPendingException here."); 983dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ConnectionPendingException e) { 984dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // OK. 985dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 986dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusNotConnected_Pending(); 987dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 988dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // connect if server closed 989dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ensureServerClosed(); 990dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 991dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 992dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.connect(localAddr1); 993dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw a ConnectionPendingException here."); 994dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ConnectionPendingException e) { 995dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // OK. 996dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 997dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusNotConnected_Pending(); 998dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 999dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.close(); 1000dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1001dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusChannelClosed(); 1002dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1003dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1004dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 1005dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * connect-->finish-->connect-->close 1006dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 1007dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void testCFII_ConnectAfterFinish_Server_Block() throws Exception { 1008dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes connectServerBlock(); 1009dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1010dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes if (!this.channel1.isConnected()) { 1011dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes System.err 1012dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes .println("Connection fail, testCFII_ConnectAfterFinish_Server_Block is not finished."); 1013dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes return; 1014dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1015dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1016dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1017dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.connect(localAddr1); 1018dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw an AlreadyConnectedException here."); 1019dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (AlreadyConnectedException e) { 1020dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // OK. 1021dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1022dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusConnected_NotPending(); 1023dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1024dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // connect another addr 1025dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1026dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.connect(localAddr2); 1027dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw an AlreadyConnectedException here."); 1028dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (AlreadyConnectedException e) { 1029dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // OK. 1030dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1031dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusConnected_NotPending(); 1032dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1033dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // connect if server closed 1034dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ensureServerClosed(); 1035dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1036dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1037dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.connect(localAddr1); 1038dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw an AlreadyConnectedException here."); 1039dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (AlreadyConnectedException e) { 1040dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // OK. 1041dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1042dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusConnected_NotPending(); 1043dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1044dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.close(); 1045dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusChannelClosed(); 1046dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1047dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1048dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1049dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 1050dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * connect-->finish-->connect-->close 1051dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 1052dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void testCFII_ConnectAfterFinish_Server_NonBlock() throws Exception { 1053dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes connectServerNonBlock(); 1054dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1055dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes if (!this.channel1.isConnected()) { 1056dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes System.err 1057dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes .println("Connection fail, testCFII_ConnectAfterFinish_Server_Block is not finished."); 1058dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes return; 1059dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1060dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1061dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.connect(localAddr1); 1062dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw an AlreadyConnectedException or a ConnectionPendingException here."); 1063dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (AlreadyConnectedException e) { 1064dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // OK. 1065dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1066dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1067dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusConnected_NotPending(); 1068dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1069dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // connect another addr 1070dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1071dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.connect(localAddr2); 1072dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw an AlreadyConnectedException here."); 1073dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (AlreadyConnectedException e) { 1074dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // OK. 1075dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1076dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusConnected_NotPending(); 1077dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1078dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // connect if server closed 1079dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ensureServerClosed(); 1080dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1081dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1082dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.connect(localAddr1); 1083dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw an AlreadyConnectedException here."); 1084dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (AlreadyConnectedException e) { 1085dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // OK. 1086dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1087dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusConnected_NotPending(); 1088dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1089dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.close(); 1090dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusChannelClosed(); 1091dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1092dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1093dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 1094dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * connect-->connect-->finish-->close 1095dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 1096dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void testCFII_ConnectTwice_NoServer_NonBlock() throws Exception { 1097dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // ensure 1098dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ensureServerClosed(); 1099dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.configureBlocking(false); 1100dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusNotConnected_NotPending(); 1101dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // connect 1102dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.connect(localAddr1)); 1103dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusNotConnected_Pending(); 1104dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1105dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1106dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.connect(localAddr1); 1107dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw a ConnectionPendingException here."); 1108dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ConnectionPendingException e) { 1109dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // OK. 1110dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1111dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusNotConnected_Pending(); 1112dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1113dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // connect another addr 1114dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1115dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.connect(localAddr2); 1116dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw a ConnectionPendingException here."); 1117dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ConnectionPendingException e) { 1118dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // OK. 1119dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1120dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusNotConnected_Pending(); 1121dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1122dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // connect if server closed 1123dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ensureServerClosed(); 1124dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1125dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1126dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.connect(localAddr1); 1127dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw a ConnectionPendingException here."); 1128dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ConnectionPendingException e) { 1129dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // OK. 1130dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1131dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusNotConnected_Pending(); 1132dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1133dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1134dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.finishConnect()); 1135dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusNotConnected_Pending(); 1136dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.close(); 1137dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ConnectException e) { 1138dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // FIXME: assertEquals(e.getMessage(), "Connection refused"); 1139dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1140dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1141dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusChannelClosed(); 1142dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1143dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1144dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 1145dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * connect-->connect-->finish-->close 1146dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 1147dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void testCFII_ConnectTwice_Server_Block() throws Exception { 1148dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // ensure 1149dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ensureServerOpen(); 1150dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.channel1.isBlocking()); 1151dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusNotConnected_NotPending(); 1152dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // connect 1153dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.channel1.connect(localAddr1)); 1154dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusConnected_NotPending(); 1155dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1156dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1157dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.connect(localAddr1); 1158dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw an AlreadyConnectedException here."); 1159dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (AlreadyConnectedException e) { 1160dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // OK. 1161dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1162dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusConnected_NotPending(); 1163dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1164dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // connect another addr 1165dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1166dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.connect(localAddr2); 1167dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw an AlreadyConnectedException here."); 1168dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (AlreadyConnectedException e) { 1169dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // OK. 1170dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1171dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusConnected_NotPending(); 1172dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1173dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // connect if server closed 1174dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ensureServerClosed(); 1175dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1176dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1177dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.connect(localAddr1); 1178dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw an AlreadyConnectedException here."); 1179dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (AlreadyConnectedException e) { 1180dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // OK. 1181dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1182dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusConnected_NotPending(); 1183dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1184dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes tryFinish(); 1185dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1186dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.close(); 1187dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusChannelClosed(); 1188dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1189dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1190dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1191dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 1192dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * connect-->connect-->finish-->close 1193dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 1194dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void testCFII_ConnectTwice_Server_NonBlock() throws Exception { 1195dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // ensure 1196dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ensureServerOpen(); 1197dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.configureBlocking(false); 1198dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusNotConnected_NotPending(); 1199dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // connect 1200dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes boolean connected = channel1.connect(localAddr1); 1201dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes if (!connected) { 1202dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusNotConnected_Pending(); 1203dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1204dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1205dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.connect(localAddr1); 1206dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw a ConnectionPendingException here."); 1207dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ConnectionPendingException e) { 1208dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // OK. 1209dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1210dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusNotConnected_Pending(); 1211dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1212dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // connect another addr 1213dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1214dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.connect(localAddr2); 1215dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw a ConnectionPendingException here."); 1216dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ConnectionPendingException e) { 1217dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // OK. 1218dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1219dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusNotConnected_Pending(); 1220dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1221dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // connect if server closed 1222dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ensureServerClosed(); 1223dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1224dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1225dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.connect(localAddr1); 1226dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw a ConnectionPendingException here."); 1227dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ConnectionPendingException e) { 1228dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // OK. 1229dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1230dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusNotConnected_Pending(); 1231dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1232dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes tryFinish(); 1233dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1234dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.close(); 1235dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusChannelClosed(); 1236dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1237dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1238dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 1239dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * finish-->connect-->finish-->close 1240dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 1241dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void testCFII_FinishFirst_NoServer_Block() throws Exception { 1242dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // ensure 1243dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ensureServerClosed(); 1244dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.channel1.isBlocking()); 1245dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusNotConnected_NotPending(); 1246dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // finish 1247dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1248dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.finishConnect(); 1249dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw NoConnectionPendingException"); 1250dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NoConnectionPendingException e) { 1251dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // OK. 1252dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1253dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusNotConnected_NotPending(); 1254dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // connect 1255dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1256dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.connect(localAddr1); 1257dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw a ConnectException here."); 1258dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ConnectException e) { 1259dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // OK. 1260dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1261dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusChannelClosed(); 1262dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1263dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.finishConnect(); 1264dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw a ClosedChannelException here."); 1265dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ClosedChannelException e) { 1266dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // OK. 1267dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1268dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusChannelClosed(); 1269dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1270dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1271dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 1272dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * finish-->connect-->finish-->close 1273dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 1274dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void testCFII_FinishFirst_NoServer_NonBlock() throws Exception { 1275dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // ensure 1276dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ensureServerClosed(); 1277dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.configureBlocking(false); 1278dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusNotConnected_NotPending(); 1279dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // finish 1280dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1281dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.finishConnect(); 1282dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw NoConnectionPendingException"); 1283dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NoConnectionPendingException e) { 1284dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // OK. 1285dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1286dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusNotConnected_NotPending(); 1287dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // connect 1288dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.connect(localAddr1)); 1289dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusNotConnected_Pending(); 1290dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1291dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1292dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.finishConnect()); 1293dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusNotConnected_Pending(); 1294dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.close(); 1295dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ConnectException e) { 1296dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // FIXME: assertEquals(e.getMessage(), "Connection refused"); 1297dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1298dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1299dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusChannelClosed(); 1300dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1301dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1302dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 1303dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * finish-->connect-->finish-->close 1304dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 1305dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void testCFII_FinishFirst_Server_Block() throws Exception { 1306dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // ensure 1307dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ensureServerOpen(); 1308dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.channel1.isBlocking()); 1309dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusNotConnected_NotPending(); 1310dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // finish 1311dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1312dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.finishConnect(); 1313dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw NoConnectionPendingException"); 1314dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NoConnectionPendingException e) { 1315dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // OK. 1316dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1317dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusNotConnected_NotPending(); 1318dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // connect 1319dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.channel1.connect(localAddr1)); 1320dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusConnected_NotPending(); 1321dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1322dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes tryFinish(); 1323dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1324dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.close(); 1325dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusChannelClosed(); 1326dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1327dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1328dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1329dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 1330dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * finish-->connect-->finish-->close 1331dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 1332dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void testCFII_FinishFirst_Server_NonBlock() throws Exception { 1333dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // ensure 1334dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ensureServerOpen(); 1335dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.configureBlocking(false); 1336dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusNotConnected_NotPending(); 1337dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // finish 1338dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1339dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.finishConnect(); 1340dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw NoConnectionPendingException"); 1341dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NoConnectionPendingException e) { 1342dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // OK. 1343dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1344dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusNotConnected_NotPending(); 1345dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // connect 1346dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes boolean connected = channel1.connect(localAddr1); 1347dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes if (!connected) { 1348dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusNotConnected_Pending(); 1349dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1350dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes tryFinish(); 1351dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1352dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.close(); 1353dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusChannelClosed(); 1354dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1355dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1356dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void testCFII_Null() throws Exception { 1357dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusNotConnected_NotPending(); 1358dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1359dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.connect(null); 1360dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw an IllegalArgumentException here."); 1361dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IllegalArgumentException e) { 1362dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // OK. 1363dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1364dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1365dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1366dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void testCFII_UnsupportedType() throws Exception { 1367dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes class SubSocketAddress extends SocketAddress { 1368dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes private static final long serialVersionUID = 1L; 1369dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1370dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes //empty 1371dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public SubSocketAddress() { 1372dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes super(); 1373dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1374dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1375dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusNotConnected_NotPending(); 1376dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes SocketAddress newTypeAddress = new SubSocketAddress(); 1377dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1378dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.connect(newTypeAddress); 1379dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw an UnsupportedAddressTypeException here."); 1380dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (UnsupportedAddressTypeException e) { 1381dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // OK. 1382dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1383dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1384dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1385dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void testCFII_Unresolved() throws IOException { 1386dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusNotConnected_NotPending(); 1387dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes InetSocketAddress unresolved = new InetSocketAddress( 1388dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes "unresolved address", 1080); 1389dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1390dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.connect(unresolved); 1391dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw an UnresolvedAddressException here."); 1392dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (UnresolvedAddressException e) { 1393dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // OK. 1394dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1395dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1396dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1397dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void testCFII_EmptyHost() throws Exception { 1398dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusNotConnected_NotPending(); 1399dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ServerSocket server = new ServerSocket(0); 1400dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes int port = server.getLocalPort(); 1401dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes server.close(); 1402dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1403dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.connect(new InetSocketAddress("", port)); 1404dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw ConnectException"); 1405dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ConnectException e) { 1406dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // correct 1407dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1408dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1409dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1410dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void testCFII_CloseFirst() throws Exception { 1411dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.close(); 1412dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusChannelClosed(); 1413dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ensureServerOpen(); 1414dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1415dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.connect(localAddr1); 1416dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw ClosedChannelException."); 1417dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ClosedChannelException e) { 1418dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // OK. 1419dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1420dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusChannelClosed(); 1421dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1422dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.finishConnect(); 1423dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw ClosedChannelException."); 1424dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ClosedChannelException e) { 1425dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // OK. 1426dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1427dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusChannelClosed(); 1428dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1429dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.configureBlocking(false); 1430dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw ClosedChannelException."); 1431dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ClosedChannelException e) { 1432dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // OK. 1433dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1434dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusChannelClosed(); 1435dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1436dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1437dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void testCFII_StatusAfterFinish() throws Exception { 1438dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // 1. close server, finish must return false, check the status 1439dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ensureServerClosed(); 1440dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1441dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // 1.1 block mode 1442dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.channel1.isBlocking()); 1443dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1444dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes channel1.connect(localAddr1); 1445dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw ConnectException"); 1446dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ConnectException e) { 1447dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // OK. 1448dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1449dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.isOpen()); 1450dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1451dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.isOpen()); 1452dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.channel1.isBlocking()); 1453dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.isConnectionPending()); 1454dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1455dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // 1.2 non block mode 1456dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1 = SocketChannel.open(); 1457dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.configureBlocking(false); 1458dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.connect(localAddr1)); 1459dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1460dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.finishConnect()); 1461dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusNotConnected_Pending(); 1462dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.close(); 1463dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ConnectException e) { 1464dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes System.out.println(e.getMessage()); 1465dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1466dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1467dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // 2. start server, finish usually return true, check the status 1468dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ensureServerOpen(); 1469dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1470dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // 2.1 block mode 1471dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1 = SocketChannel.open(); 1472dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.channel1.isBlocking()); 1473dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.channel1.connect(localAddr1)); 1474dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.channel1.finishConnect()); 1475dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusConnected_NotPending(); 1476dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.close(); 1477dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1478dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // 2.2 non block mode 1479dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1 = SocketChannel.open(); 1480dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.configureBlocking(false); 1481dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.connect(localAddr1)); 1482dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes tryFinish(); 1483dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.close(); 1484dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1485dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1486dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes private void ensureServerClosed() throws IOException { 1487dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes if (null != this.server1) { 1488dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.server1.close(); 1489dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.server1.isClosed()); 1490dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1491dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes if (null != this.server2) { 1492dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.server2.close(); 1493dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.server2.isClosed()); 1494dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1495dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1496dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1497dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes private void ensureServerOpen() throws IOException { 1498dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ensureServerClosed(); 149982c642531ba3c9ad29cb3125f7547a226b661b11Narayan Kamath this.server1 = new ServerSocket(0); 150082c642531ba3c9ad29cb3125f7547a226b661b11Narayan Kamath this.localAddr1 = new InetSocketAddress("127.0.0.1", server1.getLocalPort()); 150182c642531ba3c9ad29cb3125f7547a226b661b11Narayan Kamath this.server2 = new ServerSocket(0); 150282c642531ba3c9ad29cb3125f7547a226b661b11Narayan Kamath this.localAddr2 = new InetSocketAddress("127.0.0.1", server2.getLocalPort()); 1503dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.server1.isBound()); 1504dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.server2.isBound()); 1505dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1506dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1507dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes private void connectNoServerNonBlock() throws Exception { 1508dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // ensure 1509dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ensureServerClosed(); 1510dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.configureBlocking(false); 1511dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusNotConnected_NotPending(); 1512dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // connect 1513dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.connect(localAddr1)); 1514dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusNotConnected_Pending(); 1515dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1516dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.finishConnect()); 1517dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusNotConnected_Pending(); 1518dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ConnectException e) { 1519dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // FIXME: assertEquals(e.getMessage(), "Connection refused"); 1520dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1521dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1522dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1523dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes private void connectServerNonBlock() throws Exception { 1524dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // ensure 1525dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ensureServerOpen(); 1526dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.configureBlocking(false); 1527dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusNotConnected_NotPending(); 1528dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // connect 1529dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes boolean connected = channel1.connect(localAddr1); 1530dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes if (!connected) { 1531dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusNotConnected_Pending(); 1532dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1533dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes tryFinish(); 1534dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1535dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1536dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes private void connectServerBlock() throws Exception { 1537dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // ensure 1538dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ensureServerOpen(); 1539dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.channel1.isBlocking()); 1540dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusNotConnected_NotPending(); 1541dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // connect 1542dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.channel1.connect(localAddr1)); 1543dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusConnected_NotPending(); 1544dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes tryFinish(); 1545dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1546dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1547dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes private void statusChannelClosed() { 1548dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.isConnected()); 1549dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.isConnectionPending()); 1550dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.isOpen()); 1551dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1552dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1553dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes private void statusNotConnected_NotPending() { 1554dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.isConnected()); 1555dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.isConnectionPending()); 1556dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.channel1.isOpen()); 1557dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1558dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1559dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes private void statusNotConnected_Pending() { 1560dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.isConnected()); 1561dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.channel1.isConnectionPending()); 1562dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.channel1.isOpen()); 1563dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1564dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1565dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes private void statusConnected_NotPending() { 1566dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.channel1.isConnected()); 1567dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.isConnectionPending()); 1568dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.channel1.isOpen()); 1569dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1570dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1571dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes private boolean tryFinish() throws IOException { 1572dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /* 1573dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * the result of finish will be asserted in multi-thread tests. 1574dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 1575dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes boolean connected = false; 1576dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.channel1.isOpen()); 1577dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1578dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes connected = this.channel1.finishConnect(); 1579dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (SocketException e) { 1580dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // Finish connection failed, probably due to reset by peer error. 1581dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1582dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes if (connected) { 1583dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes statusConnected_NotPending(); 1584dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1585dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes return connected; 1586dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1587dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1588dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // ------------------------------------------------------------------- 1589dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // Original tests. Test method for CFII with real data. 1590dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // ------------------------------------------------------------------- 1591dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1592dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 1593dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * 1594dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * 'SocketChannelImpl.connect(SocketAddress)' 1595dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 1596dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void testCFII_Data_ConnectWithServer() throws Exception { 1597dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ensureServerOpen(); 1598dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes java.nio.ByteBuffer writeBuf = java.nio.ByteBuffer 1599dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes .allocate(CAPACITY_NORMAL); 1600dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes java.nio.ByteBuffer[] writeBufArr = new java.nio.ByteBuffer[1]; 1601dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeBufArr[0] = java.nio.ByteBuffer.allocate(CAPACITY_NORMAL); 1602dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.isRegistered()); 1603dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.channel1.isBlocking()); 1604dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1605dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.connect(localAddr1); 1606dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1607dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.channel1.isBlocking()); 1608dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.channel1.isConnected()); 1609dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.isConnectionPending()); 1610dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.channel1.isOpen()); 1611dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(CAPACITY_NORMAL, this.channel1.write(writeBuf)); 1612dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(CAPACITY_NORMAL, this.channel1.write(writeBufArr, 0, 1)); 1613dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1614dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.configureBlocking(false); 1615dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1616dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.connect(localAddr1); 1617dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw AlreadyConnectedException"); 1618dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (AlreadyConnectedException e) { 1619dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // correct 1620dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1621dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1622dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.isRegistered()); 1623dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes tryFinish(); 1624dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1625dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1626dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /* 1627dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * Test method for 'SocketChannelImpl.connect(SocketAddress)' 1628dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 1629dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void testCFII_Data_ConnectWithServer_nonBlocking() throws Exception { 1630dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ensureServerOpen(); 1631dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes java.nio.ByteBuffer writeBuf = java.nio.ByteBuffer 1632dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes .allocate(CAPACITY_NORMAL); 1633dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes java.nio.ByteBuffer[] writeBufArr = new java.nio.ByteBuffer[1]; 1634dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeBufArr[0] = java.nio.ByteBuffer.allocate(CAPACITY_NORMAL); 1635dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.isRegistered()); 1636dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.channel1.isBlocking()); 1637dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.configureBlocking(false); 1638dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.connect(localAddr1); 1639dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1640dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.isBlocking()); 1641dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes boolean connected = channel1.isConnected(); 1642dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes if (!connected) { 1643dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.channel1.isConnectionPending()); 1644dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.channel1.isOpen()); 1645dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1646dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes if (tryFinish()) { 1647dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(CAPACITY_NORMAL, this.channel1.write(writeBuf)); 1648dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(CAPACITY_NORMAL, this.channel1.write(writeBufArr, 0, 1)); 1649dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1650dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.configureBlocking(false); 1651dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1652dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.connect(localAddr1); 1653dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw AlreadyConnectedException"); 1654dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (AlreadyConnectedException e) { 1655dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // correct 1656dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1657dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1658dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1659dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.isRegistered()); 1660dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes tryFinish(); 1661dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1662dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1663dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /* 1664dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * Test method for 'SocketChannelImpl.finishConnect()' 1665dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 1666dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void testCFII_Data_FinishConnect_nonBlocking() throws IOException { 1667dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ensureServerOpen(); 1668dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1669dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes java.nio.ByteBuffer writeBuf = java.nio.ByteBuffer 1670dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes .allocate(CAPACITY_NORMAL); 1671dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes java.nio.ByteBuffer[] writeBufArr = new java.nio.ByteBuffer[1]; 1672dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeBufArr[0] = java.nio.ByteBuffer.allocate(CAPACITY_NORMAL); 1673dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1674dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.configureBlocking(false); 1675dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1676dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.finishConnect(); 1677dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw NoConnectionPendingException"); 1678dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NoConnectionPendingException e) { 1679dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // correct 1680dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1681dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes boolean connected = channel1.connect(localAddr1); 1682dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes if (!connected) { 1683dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.isBlocking()); 1684dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.isConnected()); 1685dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.channel1.isConnectionPending()); 1686dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.channel1.isOpen()); 1687dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1688dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.server1.accept(); 1689dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes if (tryFinish()) { 1690dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(CAPACITY_NORMAL, this.channel1.write(writeBuf)); 1691dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(CAPACITY_NORMAL, this.channel1.write(writeBufArr, 0, 1)); 1692dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1693dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.connect(localAddr1); 1694dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw AlreadyConnectedException"); 1695dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (AlreadyConnectedException e) { 1696dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // correct 1697dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1698dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1699dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.isRegistered()); 1700dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes tryFinish(); 1701dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1702dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1703dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void testCFII_Data_FinishConnect_AddrSetServerStartLater() 1704dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes throws IOException, InterruptedException { 1705dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ensureServerClosed(); 1706dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.configureBlocking(false); 1707dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1708dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes SocketChannel.open(localAddr1); 1709dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw ConnectException"); 1710dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ConnectException e) { 1711dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // correct 1712dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1713dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.channel1.isOpen()); 1714dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.isBlocking()); 1715dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.isConnectionPending()); 1716dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.configureBlocking(true); 1717dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1718dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.finishConnect(); 1719dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw NoConnectionPendingException"); 1720dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NoConnectionPendingException e) { 1721dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // correct 1722dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1723dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1724dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.connect(localAddr2); 1725dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw ConnectException"); 1726dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ConnectException e) { 1727dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // correct 1728dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1729dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1730dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.channel1.isBlocking()); 1731dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1732dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.finishConnect(); 1733dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw ClosedChannelException"); 1734dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ClosedChannelException e) { 1735dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // correct 1736dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1737dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.isConnected()); 1738dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // finish after finish OK 1739dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.isConnectionPending()); 1740dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1 = SocketChannel.open(); 1741dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.configureBlocking(false); 1742dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.connect(localAddr1); 1743dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.isConnected()); 1744dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ensureServerOpen(); 1745dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // cannot connect? 1746dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1747dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.finishConnect()); 1748dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.isBlocking()); 1749dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.isConnected()); 1750dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.channel1.isConnectionPending()); 1751dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.channel1.isOpen()); 1752dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1753dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.connect(localAddr1); 1754dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw ConnectionPendingException"); 1755dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ConnectionPendingException e) { 1756dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // correct 1757dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1758dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.configureBlocking(true); 1759dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1760dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.connect(localAddr1); 1761dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw ConnectionPendingException"); 1762dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ConnectionPendingException e) { 1763dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // correct 1764dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1765dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes tryFinish(); 1766dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ConnectException e) { 1767dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // FIXME: assertEquals(e.getMessage(), "Connection refused"); 1768dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1769dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1770dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1771dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void testCFII_Data_FinishConnect_ServerStartLater() 1772dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes throws IOException { 1773dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ensureServerClosed(); 1774dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.configureBlocking(true); 1775dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1776dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.finishConnect(); 1777dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw NoConnectionPendingException"); 1778dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NoConnectionPendingException e) { 1779dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // correct 1780dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1781dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1782dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.connect(localAddr1); 1783dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw ConnectException"); 1784dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ConnectException e) { 1785dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // correct 1786dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1787dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1788dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1789dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.finishConnect(); 1790dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw ClosedChannelException"); 1791dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ClosedChannelException e) { 1792dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // correct 1793dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1794dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.isConnected()); 1795dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // finish after finish OK 1796dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.isConnectionPending()); 1797dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1 = SocketChannel.open(); 1798dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.configureBlocking(false); 1799dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.connect(localAddr1); 1800dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.isConnected()); 1801dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ensureServerOpen(); 1802dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // cannot connect? 1803dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1804dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.finishConnect()); 1805dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.isBlocking()); 1806dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.isConnected()); 1807dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.channel1.isConnectionPending()); 1808dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.channel1.isOpen()); 1809dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1810dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.connect(localAddr1); 1811dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw ConnectionPendingException"); 1812dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ConnectionPendingException e) { 1813dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // correct 1814dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1815dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.configureBlocking(true); 1816dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1817dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.connect(localAddr1); 1818dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw ConnectionPendingException"); 1819dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ConnectionPendingException e) { 1820dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // correct 1821dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1822dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes tryFinish(); 1823dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ConnectException e) { 1824dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // FIXME: assertEquals(e.getMessage(), "Connection refused"); 1825dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1826dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1827dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1828dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void testCFII_Data_FinishConnect_Blocking() throws IOException { 1829dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ensureServerOpen(); 1830dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes java.nio.ByteBuffer writeBuf = java.nio.ByteBuffer 1831dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes .allocate(CAPACITY_NORMAL); 1832dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes java.nio.ByteBuffer[] writeBufArr = new java.nio.ByteBuffer[1]; 1833dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeBufArr[0] = java.nio.ByteBuffer.allocate(CAPACITY_NORMAL); 1834dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.configureBlocking(true); 1835dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1836dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.finishConnect(); 1837dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw NoConnectionPendingException"); 1838dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NoConnectionPendingException e) { 1839dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // correct 1840dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1841dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1842dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.connect(localAddr1); 1843dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1844dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.channel1.isConnected()); 1845dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.isConnectionPending()); 1846dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.channel1.isOpen()); 1847dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes if (tryFinish()) { 1848dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(CAPACITY_NORMAL, this.channel1.write(writeBuf)); 1849dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(CAPACITY_NORMAL, this.channel1.write(writeBufArr, 0, 1)); 1850dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1851dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1852dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.connect(localAddr1); 1853dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw AlreadyConnectedException"); 1854dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (AlreadyConnectedException e) { 1855dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // correct 1856dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1857dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1858dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.isRegistered()); 1859dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes tryFinish(); 1860dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1861dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1862dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 1863dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * Regression test for Harmony-1947. 1864dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 1865dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_finishConnect() throws Exception { 1866dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes SocketAddress address = new InetSocketAddress("localhost", 0); 1867dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1868dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ServerSocketChannel theServerChannel = ServerSocketChannel.open(); 1869dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ServerSocket serversocket = theServerChannel.socket(); 1870dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes serversocket.setReuseAddress(true); 1871dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // Bind the socket 187263744c884dd4b4f4307f2b021fb894af164972afElliott Hughes theServerChannel.socket().bind(address); 1873dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1874dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes boolean doneNonBlockingConnect = false; 1875dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // Loop so that we make sure we're definitely testing finishConnect() 1876dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes while (!doneNonBlockingConnect) { 1877dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes channel1 = SocketChannel.open(); 1878dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1879dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // Set the SocketChannel to non-blocking so that connect(..) does 1880dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // not block 1881dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes channel1.configureBlocking(false); 1882dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes boolean connected = channel1.connect(new InetSocketAddress("localhost",serversocket.getLocalPort())); 1883dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes if (!connected) { 1884dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // Now set the SocketChannel back to blocking so that 1885dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // finishConnect() blocks. 1886dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes channel1.configureBlocking(true); 1887dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes doneNonBlockingConnect = channel1.finishConnect(); 1888dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1889dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes if (doneNonBlockingConnect) { 1890dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes tryFinish(); 1891dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1892dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes channel1.close(); 1893dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1894dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes if (!serversocket.isClosed()) { 1895dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes serversocket.close(); 1896dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1897dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1898dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1899dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // ------------------------------------------------------------------- 1900dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // End of original tests. Test method for CFII with real data. 1901dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // ------------------------------------------------------------------- 1902dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1903dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 1904dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.SocketChannel#read(ByteBuffer) 1905dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 1906dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_readLjava_nio_ByteBuffer_Blocking() throws IOException { 1907dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // initialize write content 1908dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes byte[] writeContent = new byte[CAPACITY_NORMAL]; 1909dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes for (int i = 0; i < writeContent.length; i++) { 1910dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeContent[i] = (byte) i; 1911dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1912dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // establish connection 1913dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes channel1.connect(localAddr1); 1914dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes Socket acceptedSocket = server1.accept(); 1915dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1916dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // use OutputStream.write to send CAPACITY_NORMAL bytes data 1917dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes OutputStream out = acceptedSocket.getOutputStream(); 1918dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes out.write(writeContent); 1919dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // use close to guarantee all data is sent 1920dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes acceptedSocket.close(); 1921dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1922dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer readContent = ByteBuffer.allocate(CAPACITY_NORMAL + 1); 1923dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes int totalCount = 0; 1924933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller int count; 1925dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes long startTime = System.currentTimeMillis(); 1926dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // use SocketChannel.read to read data 1927dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes while (totalCount <= CAPACITY_NORMAL) { 1928dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes count = channel1.read(readContent); 1929dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes if (EOF == count) { 1930dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes break; 1931dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1932dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes totalCount += count; 1933dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // if the channel could not finish reading in TIMEOUT ms, the 1934dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // test fails. It is used to guarantee the test never hangs even 1935dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // if there are bugs of SocketChannel implementation. For 1936dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // blocking read, it possibly returns 0 in some cases. 1937dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTimeout(startTime, TIMEOUT); 1938dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1939dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(CAPACITY_NORMAL, totalCount); 1940dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readContent.flip(); 1941dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes for (int i = 0; i < CAPACITY_NORMAL; i++) { 1942dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(writeContent[i], readContent.get()); 1943dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1944dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1945dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1946dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 1947dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.SocketChannel#read(ByteBuffer) 1948dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 1949dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_readLjava_nio_ByteBuffer_Nonblocking() throws IOException { 1950dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // initialize write content 1951dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes byte[] writeContent = new byte[CAPACITY_NORMAL]; 1952dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes for (int i = 0; i < writeContent.length; i++) { 1953dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeContent[i] = (byte) i; 1954dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1955dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1956dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // establish connection 1957dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes channel1.connect(localAddr1); 1958dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes Socket acceptedSocket = server1.accept(); 1959dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // use OutputStream.write to write CAPACITY_NORMAL bytes data. 1960dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes OutputStream out = acceptedSocket.getOutputStream(); 1961dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes out.write(writeContent); 1962dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // use close to guarantee all data is sent 1963dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes acceptedSocket.close(); 1964dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1965dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes channel1.configureBlocking(false); 1966dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer readContent = ByteBuffer.allocate(CAPACITY_NORMAL + 1); 1967dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes int totalCount = 0; 1968933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller int count; 1969dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes long startTime = System.currentTimeMillis(); 1970dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // use SocketChannel.read to read data 1971dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes while (totalCount <= CAPACITY_NORMAL) { 1972dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes count = channel1.read(readContent); 1973dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes if (EOF == count) { 1974dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes break; 1975dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1976dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes totalCount += count; 1977dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // if the channel could not finish reading in TIMEOUT ms, the 1978dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // test fails. It is used to guarantee the test never hangs even 1979dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // if there are bugs of SocketChannel implementation. 1980dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTimeout(startTime, TIMEOUT); 1981dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1982dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1983dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // assert read content 1984dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(CAPACITY_NORMAL, totalCount); 1985dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(CAPACITY_NORMAL, readContent.position()); 1986dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readContent.flip(); 1987dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes for (int i = 0; i < CAPACITY_NORMAL; i++) { 1988dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(writeContent[i], readContent.get()); 1989dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1990dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1991dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1992dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 1993dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.SocketChannel#write(ByteBuffer) 1994dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 1995dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_writeLjava_nio_ByteBuffer_Blocking() throws IOException { 1996dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // initialize write content 1997dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer writeContent = ByteBuffer.allocate(CAPACITY_NORMAL); 1998dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes for (int i = 0; i < CAPACITY_NORMAL; i++) { 1999dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeContent.put((byte) i); 2000dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2001dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeContent.flip(); 2002dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // establish connection 2003dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes channel1.connect(localAddr1); 2004dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes Socket acceptedSocket = server1.accept(); 2005dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2006dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // use SocketChannel.write(ByteBuffer) to write CAPACITY_NORMAL bytes 2007dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // data 2008dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes int writtenCount = channel1.write(writeContent); 2009dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // assert written count and ByteBuffer position 2010dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(CAPACITY_NORMAL, writtenCount); 2011dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(CAPACITY_NORMAL, writeContent.position()); 2012dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // use close to guarantee all data is sent 2013dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes channel1.close(); 2014dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2015dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes InputStream in = acceptedSocket.getInputStream(); 2016dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes int totalCount = 0; 2017dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes int count = 0; 2018dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes byte[] readContent = new byte[CAPACITY_NORMAL + 1]; 2019dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // if the channel could not finish reading in TIMEOUT ms, the test 2020dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // fails. It is used to guarantee the test never hangs even if there 2021dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // are bugs of SocketChannel implementation. 2022dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes acceptedSocket.setSoTimeout(TIMEOUT); 2023dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2024dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // use InputStream.read to read data. 2025dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes while (totalCount <= CAPACITY_NORMAL) { 2026dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes count = in.read(readContent, totalCount, readContent.length 2027dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes - totalCount); 2028dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes if (EOF == count) { 2029dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes break; 2030dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2031dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes totalCount += count; 2032dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2033dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2034dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // assert read content 2035dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(CAPACITY_NORMAL, totalCount); 2036dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeContent.flip(); 2037dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes for (int i = 0; i < CAPACITY_NORMAL; i++) { 2038dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(writeContent.get(), readContent[i]); 2039dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2040dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2041dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2042dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 2043dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.SocketChannel#write(ByteBuffer) 2044dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 2045dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_writeLjava_nio_ByteBuffer_NonBlocking() throws Exception { 2046dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // initialize write content 2047dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer writeContent = ByteBuffer.allocate(CAPACITY_NORMAL); 2048dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes for (int i = 0; i < CAPACITY_NORMAL; i++) { 2049dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeContent.put((byte) i); 2050dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2051dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeContent.flip(); 2052dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2053dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // establish connection 2054dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes channel1.connect(localAddr1); 2055dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes Socket acceptedSocket = server1.accept(); 2056dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2057dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes channel1.configureBlocking(false); 2058dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes int writtenTotalCount = 0; 2059dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes int writtenCount = 0; 2060dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes long startTime = System.currentTimeMillis(); 2061dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // use SocketChannel.write(ByteBuffer) to write CAPACITY_NORMAL bytes 2062dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes while (writtenTotalCount < CAPACITY_NORMAL) { 2063dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writtenCount = channel1.write(writeContent); 2064dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writtenTotalCount += writtenCount; 2065dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // if the channel could not finish writing in TIMEOUT ms, the 2066dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // test fails. It is used to guarantee the test never hangs even 2067dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // if there are bugs of SocketChannel implementation. 2068dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTimeout(startTime, TIMEOUT); 2069dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2070dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // assert written count and ByteBuffer position 2071dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(CAPACITY_NORMAL, writtenTotalCount); 2072dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(CAPACITY_NORMAL, writeContent.position()); 2073dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // use close to guarantee all data is sent 2074dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes channel1.close(); 2075dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2076dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes InputStream in = acceptedSocket.getInputStream(); 2077dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes byte[] readContent = new byte[CAPACITY_NORMAL + 1]; 2078dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes int totalCount = 0; 2079dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes int count = 0; 2080dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // if the channel could not finish reading in TIMEOUT ms, the test 2081dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // fails. It is used to guarantee the test never hangs even if there 2082dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // are bugs of SocketChannel implementation. 2083dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes acceptedSocket.setSoTimeout(TIMEOUT); 2084dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // use InputStream.read to read data. 2085dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes while (totalCount <= CAPACITY_NORMAL) { 2086dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes count = in.read(readContent, totalCount, readContent.length 2087dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes - totalCount); 2088dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes if (EOF == count) { 2089dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes break; 2090dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2091dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes totalCount += count; 2092dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2093dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // assert read content 2094dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(CAPACITY_NORMAL, totalCount); 2095dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeContent.flip(); 2096dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes for (int i = 0; i < CAPACITY_NORMAL; i++) { 2097dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(writeContent.get(), readContent[i]); 2098dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2099dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2100dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2101dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /* 2102dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * Fails if the difference between current time and start time is greater 2103dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * than timeout. 2104dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 2105dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes private void assertTimeout(long startTime, long timeout) { 2106dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes long currentTime = System.currentTimeMillis(); 2107dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes if ((currentTime - startTime) > timeout) { 2108dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Timeout"); 2109dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2110dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2111dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2112dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // ------------------------------------------------- 2113dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // Test for read/write but no real data expressed 2114dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // ------------------------------------------------- 2115dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2116dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void testReadByteBuffer() throws Exception { 2117dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.server1.isBound()); 2118dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes java.nio.ByteBuffer readBuf = java.nio.ByteBuffer 2119dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes .allocate(CAPACITY_NORMAL); 2120dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.isRegistered()); 2121dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.channel1.isBlocking()); 2122dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.isConnected()); 2123dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.isConnectionPending()); 2124dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.channel1.isOpen()); 2125dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // note: blocking-mode will make the read process endless! 2126dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.configureBlocking(false); 2127dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 2128dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes channel1.read(readBuf); 2129dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw NotYetConnectedException"); 2130dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NotYetConnectedException e) { 2131dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // correct 2132dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2133dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes boolean connected = this.channel1.connect(localAddr1); 2134dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes if (!connected) { 2135dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.isBlocking()); 2136dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.channel1.isConnectionPending()); 2137dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.isConnected()); 2138dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2139dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes if (tryFinish()) { 2140dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(0, this.channel1.read(readBuf)); 2141dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2142dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2143dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.close(); 2144dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 2145dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes channel1.read(readBuf); 2146dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw ClosedChannelException"); 2147dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ClosedChannelException e) { 2148dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // correct 2149dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2150dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2151dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2152dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void testReadByteBuffer_Direct() throws Exception { 2153dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.server1.isBound()); 2154dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes java.nio.ByteBuffer readBuf = java.nio.ByteBuffer 2155dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes .allocateDirect(CAPACITY_NORMAL); 2156dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.isRegistered()); 2157dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.channel1.isBlocking()); 2158dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.isConnected()); 2159dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.isConnectionPending()); 2160dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.channel1.isOpen()); 2161dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // note: blocking-mode will make the read process endless! 2162dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.configureBlocking(false); 2163dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 2164dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes channel1.read(readBuf); 2165dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw NotYetConnectedException"); 2166dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NotYetConnectedException e) { 2167dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // correct 2168dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2169dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes boolean connected = this.channel1.connect(localAddr1); 2170dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes if (!connected) { 2171dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.isBlocking()); 2172dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.channel1.isConnectionPending()); 2173dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.isConnected()); 2174dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2175dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes if (tryFinish()) { 2176dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(0, this.channel1.read(readBuf)); 2177dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2178dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2179dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.close(); 2180dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 2181dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes channel1.read(readBuf); 2182dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw ClosedChannelException"); 2183dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ClosedChannelException e) { 2184dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // correct 2185dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2186dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2187dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2188dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void testReadByteBuffer_Direct2() throws IOException { 2189dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes byte[] request = new byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; 2190dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer buffer = ByteBuffer.allocateDirect(128); 2191dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2192dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ServerSocketChannel server = ServerSocketChannel.open(); 219363744c884dd4b4f4307f2b021fb894af164972afElliott Hughes server.socket().bind(new InetSocketAddress(InetAddress.getLocalHost(), 0), 5); 2194dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes Socket client = new Socket(InetAddress.getLocalHost(), server.socket() 2195dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes .getLocalPort()); 2196dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes client.setTcpNoDelay(false); 2197dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes Socket worker = server.socket().accept(); 2198dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes SocketChannel workerChannel = worker.getChannel(); 2199dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2200dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes OutputStream out = client.getOutputStream(); 2201dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes out.write(request); 2202dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes out.close(); 2203dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2204dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes buffer.limit(5); 2205dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes int bytesRead = workerChannel.read(buffer); 2206dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(5, bytesRead); 2207dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(5, buffer.position()); 2208dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2209dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes buffer.limit(request.length); 2210dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes bytesRead = workerChannel.read(buffer); 2211dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(6, bytesRead); 2212dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2213dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes buffer.flip(); 2214dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(request.length, buffer.limit()); 2215dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2216dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(ByteBuffer.wrap(request), buffer); 2217dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2218dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes client.close(); 2219dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes worker.close(); 2220dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes server.close(); 2221dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2222dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2223dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void testReadByteBuffer_BufNull() throws Exception { 2224dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.server1.isBound()); 2225dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes java.nio.ByteBuffer readBuf = java.nio.ByteBuffer.allocate(0); 2226dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // note: blocking-mode will make the read process endless! 2227dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.configureBlocking(false); 2228dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 2229dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes channel1.read((java.nio.ByteBuffer) null); 2230dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw NPE"); 2231dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NullPointerException e) { 2232dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // correct 2233dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2234dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.connect(localAddr1); 2235dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes if (tryFinish()) { 2236dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 2237dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.read((java.nio.ByteBuffer) null); 2238dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw NPE"); 2239dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NullPointerException e) { 2240dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // correct 2241dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2242dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(0, this.channel1.read(readBuf)); 2243dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2244dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.server1.close(); 2245dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 2246dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes channel1.read((java.nio.ByteBuffer) null); 2247dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw NPE"); 2248dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NullPointerException e) { 2249dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // correct 2250dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2251dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2252dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2253dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /* 2254dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * SocketChannelImpl.read(ByteBuffer[], int, int)' 2255dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 2256dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void testReadByteBufferArrayIntInt() throws Exception { 2257dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.server1.isBound()); 2258dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes java.nio.ByteBuffer[] readBuf = new java.nio.ByteBuffer[2]; 2259dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readBuf[0] = java.nio.ByteBuffer.allocate(CAPACITY_NORMAL); 2260dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readBuf[1] = java.nio.ByteBuffer.allocate(CAPACITY_NORMAL); 2261dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.isRegistered()); 2262dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.channel1.isBlocking()); 2263dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.isConnected()); 2264dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.isConnectionPending()); 2265dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.channel1.isOpen()); 2266dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // note: blocking-mode will make the read process endless! 2267dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.configureBlocking(false); 2268dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 2269dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes channel1.read(readBuf, 0, 1); 2270dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw NotYetConnectedException"); 2271dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NotYetConnectedException e) { 2272dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // correct 2273dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2274dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes boolean connected = this.channel1.connect(localAddr1); 2275dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes if (!connected) { 2276dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.isBlocking()); 2277dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.channel1.isConnectionPending()); 2278dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.isConnected()); 2279dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2280dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes if (tryFinish()) { 2281dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(0, this.channel1.read(readBuf, 0, 1)); 2282dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(0, this.channel1.read(readBuf, 0, 2)); 2283dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2284dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2285dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.close(); 2286dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 2287dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes channel1.read(readBuf, 0, 1); 2288dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw ClosedChannelException"); 2289dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ClosedChannelException e) { 2290dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // correct 2291dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2292dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2293dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2294dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /* 2295dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * SocketChannelImpl.read(ByteBuffer[], int, int)' 2296dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 2297dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void testReadByteBufferArrayIntInt_Direct() throws Exception { 2298dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.server1.isBound()); 2299dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes java.nio.ByteBuffer[] readBuf = new java.nio.ByteBuffer[2]; 2300dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readBuf[0] = java.nio.ByteBuffer.allocateDirect(CAPACITY_NORMAL); 2301dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readBuf[1] = java.nio.ByteBuffer.allocateDirect(CAPACITY_NORMAL); 2302dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.isRegistered()); 2303dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.channel1.isBlocking()); 2304dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.isConnected()); 2305dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.isConnectionPending()); 2306dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.channel1.isOpen()); 2307dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // note: blocking-mode will make the read process endless! 2308dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.configureBlocking(false); 2309dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 2310dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes channel1.read(readBuf, 0, 1); 2311dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw NotYetConnectedException"); 2312dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NotYetConnectedException e) { 2313dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // correct 2314dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2315dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes boolean connected = this.channel1.connect(localAddr1); 2316dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes if (!connected) { 2317dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.isBlocking()); 2318dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.channel1.isConnectionPending()); 2319dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.isConnected()); 2320dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2321dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes if (tryFinish()) { 2322dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(0, this.channel1.read(readBuf, 0, 1)); 2323dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(0, this.channel1.read(readBuf, 0, 2)); 2324dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2325dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2326dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.close(); 2327dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 2328dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes channel1.read(readBuf, 0, 1); 2329dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw ClosedChannelException"); 2330dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ClosedChannelException e) { 2331dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // correct 2332dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2333dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2334dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2335dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void testReadByteBufferArrayIntInt_BufNull() throws Exception { 2336dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.server1.isBound()); 2337dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes java.nio.ByteBuffer[] readBuf = new java.nio.ByteBuffer[2]; 2338dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readBuf[0] = java.nio.ByteBuffer.allocate(CAPACITY_NORMAL); 2339dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.isRegistered()); 2340dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.channel1.isBlocking()); 2341dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.isConnected()); 2342dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.isConnectionPending()); 2343dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.channel1.isOpen()); 2344dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // note: blocking-mode will make the read process endless! 2345dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.configureBlocking(false); 2346dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 2347933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller channel1.read(null, 0, 1); 2348dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw NPE"); 2349dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NullPointerException e) { 2350dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // correct 2351dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2352dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.connect(localAddr1); 2353dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes if (tryFinish()) { 2354dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2355dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 2356933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller channel1.read(null, 0, 1); 2357dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw NPE"); 2358dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NullPointerException e) { 2359dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // correct 2360dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2361dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 2362dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes channel1.read(readBuf, 0, 2); 2363dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw NPE"); 2364dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NullPointerException e) { 2365dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // correct 2366dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2367dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2368dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(0, this.channel1.read(readBuf, 0, 1)); 2369dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2370dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.close(); 2371dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 2372dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes channel1.read(null, 0, 1); 2373dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw NPE"); 2374dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NullPointerException e) { 2375dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // correct 2376dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2377dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2378dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2379dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void testWriteByteBuffer() throws IOException { 2380dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.server1.isBound()); 2381dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes java.nio.ByteBuffer writeBuf = java.nio.ByteBuffer 2382dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes .allocate(CAPACITY_NORMAL); 2383dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.isRegistered()); 2384dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.channel1.isBlocking()); 2385dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.isConnected()); 2386dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.isConnectionPending()); 2387dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.channel1.isOpen()); 2388dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 2389dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes channel1.write(writeBuf); 2390dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw NotYetConnectedException"); 2391dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NotYetConnectedException e) { 2392dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // correct 2393dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2394dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.connect(localAddr1); 2395dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.channel1.isBlocking()); 2396dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.channel1.isConnected()); 2397dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.isConnectionPending()); 2398dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.channel1.isOpen()); 2399dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(CAPACITY_NORMAL, this.channel1.write(writeBuf)); 2400dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2401dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.close(); 2402dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 2403dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes channel1.write(writeBuf); 2404dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw ClosedChannelException"); 2405dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ClosedChannelException e) { 2406dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // correct 2407dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2408dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2409dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2410dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void testWriteByteBuffer_Direct() throws IOException { 2411dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.server1.isBound()); 2412dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes java.nio.ByteBuffer writeBuf = java.nio.ByteBuffer 2413dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes .allocateDirect(CAPACITY_NORMAL); 2414dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.isRegistered()); 2415dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.channel1.isBlocking()); 2416dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.isConnected()); 2417dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.isConnectionPending()); 2418dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.channel1.isOpen()); 2419dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 2420dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes channel1.write(writeBuf); 2421dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw NotYetConnectedException"); 2422dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NotYetConnectedException e) { 2423dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // correct 2424dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2425dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.connect(localAddr1); 2426dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.channel1.isBlocking()); 2427dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.channel1.isConnected()); 2428dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.isConnectionPending()); 2429dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.channel1.isOpen()); 2430dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(CAPACITY_NORMAL, this.channel1.write(writeBuf)); 2431dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2432dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.close(); 2433dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 2434dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes channel1.write(writeBuf); 2435dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw ClosedChannelException"); 2436dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ClosedChannelException e) { 2437dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // correct 2438dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2439dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2440dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2441dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void testWriteByteBuffer_BufNull() throws IOException { 2442dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.server1.isBound()); 2443dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes java.nio.ByteBuffer writeBuf = java.nio.ByteBuffer.allocate(0); 2444dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.connect(localAddr1); 2445dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(this.channel1.write(writeBuf), 0); 2446dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 2447dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.write((java.nio.ByteBuffer) null); 2448dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw NPE"); 2449dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NullPointerException e) { 2450dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // correct 2451dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2452dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2453dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2454dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /* 2455dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * SocketChannelImpl.write(ByteBuffer[], int, int)' 2456dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 2457dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void testWriteByteBufferArrayIntInt() throws IOException { 2458dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes java.nio.ByteBuffer[] writeBuf = new java.nio.ByteBuffer[2]; 2459dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeBuf[0] = java.nio.ByteBuffer.allocate(CAPACITY_NORMAL); 2460dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeBuf[1] = java.nio.ByteBuffer.allocate(CAPACITY_NORMAL); 2461dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.isRegistered()); 2462dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.channel1.isBlocking()); 2463dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.isConnected()); 2464dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.isConnectionPending()); 2465dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.channel1.isOpen()); 2466dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 2467dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes channel1.write(writeBuf, 0, 1); 2468dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw NotYetConnectedException"); 2469dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NotYetConnectedException e) { 2470dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // correct 2471dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2472dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.connect(localAddr1); 2473dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.channel1.isBlocking()); 2474dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.channel1.isConnected()); 2475dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.isConnectionPending()); 2476dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.channel1.isOpen()); 2477dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(CAPACITY_NORMAL, this.channel1.write(writeBuf, 0, 1)); 2478dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // still writes the same size as above 2479dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(CAPACITY_NORMAL, this.channel1.write(writeBuf, 0, 2)); 2480dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeBuf[0].flip(); 2481dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeBuf[1].flip(); 2482dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(CAPACITY_NORMAL * 2, this.channel1.write(writeBuf, 0, 2)); 2483dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.close(); 2484dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 2485dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes channel1.write(writeBuf); 2486dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw ClosedChannelException"); 2487dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ClosedChannelException e) { 2488dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // correct 2489dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2490dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2491dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2492dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /* 2493dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * SocketChannelImpl.write(ByteBuffer[], int, int)' 2494dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 2495dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void testWriteByteBufferArrayIntInt_Direct() throws IOException { 2496dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes java.nio.ByteBuffer[] writeBuf = new java.nio.ByteBuffer[2]; 2497dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeBuf[0] = java.nio.ByteBuffer.allocateDirect(CAPACITY_NORMAL); 2498dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeBuf[1] = java.nio.ByteBuffer.allocateDirect(CAPACITY_NORMAL); 2499dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.isRegistered()); 2500dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.channel1.isBlocking()); 2501dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.isConnected()); 2502dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.isConnectionPending()); 2503dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.channel1.isOpen()); 2504dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 2505dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes channel1.write(writeBuf, 0, 1); 2506dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw NotYetConnectedException"); 2507dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NotYetConnectedException e) { 2508dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // correct 2509dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2510dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.connect(localAddr1); 2511dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.channel1.isBlocking()); 2512dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.channel1.isConnected()); 2513dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(this.channel1.isConnectionPending()); 2514dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(this.channel1.isOpen()); 2515dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(CAPACITY_NORMAL, this.channel1.write(writeBuf, 0, 1)); 2516dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // still writes the same size as above 2517dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(CAPACITY_NORMAL, this.channel1.write(writeBuf, 0, 2)); 2518dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeBuf[0].flip(); 2519dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeBuf[1].flip(); 2520dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(CAPACITY_NORMAL * 2, this.channel1.write(writeBuf, 0, 2)); 2521dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.close(); 2522dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 2523dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes channel1.write(writeBuf); 2524dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw ClosedChannelException"); 2525dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ClosedChannelException e) { 2526dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // correct 2527dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2528dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2529dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2530dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void testWriteByteBufferArrayIntInt_BufNull() throws IOException { 2531dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes java.nio.ByteBuffer[] writeBuf = new java.nio.ByteBuffer[0]; 2532dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2533dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.connect(localAddr1); 2534dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 2535dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.write(null, 0, 1); 2536dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw NPE"); 2537dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NullPointerException e) { 2538dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // correct 2539dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2540dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(0, this.channel1.write(writeBuf, 0, 0)); 2541dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 2542dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.write(writeBuf, 0, 1); 2543dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw IndexOutOfBoundsException"); 2544dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IndexOutOfBoundsException e) { 2545dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // correct 2546dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2547dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeBuf = new java.nio.ByteBuffer[1]; 2548dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 2549dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.write(writeBuf, 0, 1); 2550dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw NPE"); 2551dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NullPointerException e) { 2552dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // correct 2553dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2554dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 2555dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.write(writeBuf, 0, 2); 2556dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw IndexOutOfBoundsException"); 2557dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IndexOutOfBoundsException e) { 2558dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // correct 2559dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2560dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.server1.close(); 2561dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 2562dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes channel1.read(null, 0, 1); 2563dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw NPE"); 2564dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NullPointerException e) { 2565dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // correct 2566dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2567dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2568dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2569dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void testWriteByteBufferArrayIntInt_SizeError() throws IOException { 2570dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes java.nio.ByteBuffer[] buf = new java.nio.ByteBuffer[1]; 2571dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.connect(localAddr1); 2572dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(0, this.channel1.write(buf, 0, 0)); 2573dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 2574dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.write(buf, -1, 1); 2575dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 2576dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IndexOutOfBoundsException expected) { 2577dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2578dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 2579dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.write(buf, 0, -1); 2580dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 2581dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IndexOutOfBoundsException expected) { 2582dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2583dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 2584dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.write(buf, 0, 2); 2585dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 2586dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IndexOutOfBoundsException expected) { 2587dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2588dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 2589dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.write(buf, 2, 0); 2590dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 2591dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IndexOutOfBoundsException expected) { 2592dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2593dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 2594dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.write(null, 0, 0); 2595dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 2596dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NullPointerException expected) { 2597dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2598dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.server1.close(); 2599dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2600dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2601dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void testReadByteBufferArrayIntInt_SizeError() throws IOException { 2602dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes java.nio.ByteBuffer[] buf = new java.nio.ByteBuffer[1]; 2603dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.connect(localAddr1); 2604dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(0, this.channel1.read(buf, 0, 0)); 2605dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 2606dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.read(buf, -1, 1); 2607dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 2608dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IndexOutOfBoundsException expected) { 2609dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2610dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 2611dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.read(buf, 0, -1); 2612dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 2613dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IndexOutOfBoundsException expected) { 2614dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2615dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 2616dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.read(buf, 0, 2); 2617dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 2618dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IndexOutOfBoundsException expected) { 2619dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2620dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 2621dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.read(buf, 2, 0); 2622dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 2623dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IndexOutOfBoundsException expected) { 2624dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2625dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 2626dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.channel1.read(null, 0, 0); 2627dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 2628dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NullPointerException expected) { 2629dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2630dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.server1.close(); 2631dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2632dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2633dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /* 2634dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * ========================================================================== 2635dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * Tests for read/write real data 2636dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * ========================================================================== 2637dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 2638dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2639dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2640dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 2641dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.SocketChannel#read(ByteBuffer[]) 2642dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 2643dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_read$LByteBuffer() throws IOException { 2644dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes MockSocketChannel sc = new MockSocketChannel(null); 2645dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer [] byteBufferArray = { ByteBuffer.allocate(1), ByteBuffer.allocate(1)}; 2646dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // Verify that calling read(ByteBuffer[]) leads to the method 2647dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // read(ByteBuffer[], int, int) being called with a 0 for the 2648dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // second parameter and targets.length as the third parameter. 2649dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes sc.read(byteBufferArray); 2650dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(sc.isReadCalled); 2651dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2652dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 2653dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.SocketChannel#read(ByteBuffer[],int,int) 2654dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 2655dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_read$LByteBufferII_blocking() throws Exception { 2656dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assert_read$LByteBuffer(true); 2657dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2658dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2659dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 2660dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.SocketChannel#read(ByteBuffer[],int,int) 2661dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 2662dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_read$LByteBufferII_nonblocking() throws Exception { 2663dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assert_read$LByteBuffer(false); 2664dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2665dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2666dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes private void assert_read$LByteBuffer(boolean isBlocking) throws IOException { 2667dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // initialize write content 2668dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes byte[] writeContent = new byte[CAPACITY_NORMAL * 2]; 2669dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes for (int i = 0; i < CAPACITY_NORMAL * 2; i++) { 2670dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeContent[i] = (byte) i; 2671dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2672dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer[] readContents = new ByteBuffer[2]; 2673dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readContents[0] = ByteBuffer.allocate(CAPACITY_NORMAL); 2674dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readContents[1] = ByteBuffer.allocate(CAPACITY_NORMAL + 1); 2675dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // establish connection 2676dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes channel1.connect(localAddr1); 2677dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes Socket acceptedSocket = server1.accept(); 2678dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // use OutputStream.write to send CAPACITY_NORMAL * 2 bytes data 2679dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes OutputStream out = acceptedSocket.getOutputStream(); 2680dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes out.write(writeContent); 2681dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // use close to guarantee all data is sent 2682dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes acceptedSocket.close(); 2683dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // configure block/nonblock mode 2684dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes channel1.configureBlocking(isBlocking); 2685dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes long startTime = System.currentTimeMillis(); 2686dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes long totalRead = 0; 2687933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller long countRead; 2688dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2689dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes while (totalRead <= CAPACITY_NORMAL * 2) { 2690dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes countRead = channel1.read(readContents, 0, 2); 2691dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes if (0 == countRead && !readContents[1].hasRemaining()) { 2692dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // read returns 0 because readContents is full 2693dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes break; 2694dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2695dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes if (EOF == countRead) { 2696dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes break; 2697dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2698dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes totalRead += countRead; 2699dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // if the channel could not finish reading in TIMEOUT ms, the 2700dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // test fails. It is used to guarantee the test never hangs even 2701dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // if there are bugs of SocketChannel implementation. For 2702dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // blocking read, it possibly returns 0 in some cases. 2703dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTimeout(startTime, TIMEOUT); 2704dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2705dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2706dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // assert total bytes read and the position of ByteBuffers 2707dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(CAPACITY_NORMAL * 2, totalRead); 2708dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(CAPACITY_NORMAL, readContents[0].position()); 2709dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(CAPACITY_NORMAL, readContents[1].position()); 2710dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // assert read content 2711dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readContents[0].flip(); 2712dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readContents[1].flip(); 2713dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes for (int i = 0; i < CAPACITY_NORMAL; i++) { 2714dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(writeContent[i], readContents[0].get()); 2715dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2716dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes for (int i = CAPACITY_NORMAL; i < CAPACITY_NORMAL * 2; i++) { 2717dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(writeContent[i], readContents[1].get()); 2718dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2719dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2720dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2721dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 2722dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.SocketChannel#write(ByteBuffer[],int,int) 2723dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 2724dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_write$LByteBufferII_blocking() throws Exception { 2725dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assert_write$LByteBuffer(true); 2726dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2727dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2728dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 2729dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.SocketChannel#write(ByteBuffer[],int,int) 2730dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 2731dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_write$LByteBufferII_nonblocking() 2732dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes throws Exception { 2733dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assert_write$LByteBuffer(false); 2734dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2735dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2736dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes private void assert_write$LByteBuffer(boolean isBlocking) 2737dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes throws IOException { 2738dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // initialize write contents 2739dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer writeContents[] = new ByteBuffer[2]; 2740dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeContents[0] = ByteBuffer.allocate(CAPACITY_NORMAL); 2741dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeContents[1] = ByteBuffer.allocate(CAPACITY_NORMAL); 2742dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes for (int i = 0; i < CAPACITY_NORMAL; i++) { 2743dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeContents[0].put((byte) i); 2744dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2745dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes for (int i = CAPACITY_NORMAL; i < CAPACITY_NORMAL * 2; i++) { 2746dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeContents[1].put((byte) i); 2747dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2748dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeContents[0].flip(); 2749dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeContents[1].flip(); 2750dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // establish connection 2751dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes channel1.connect(localAddr1); 2752dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes Socket acceptedSocket = server1.accept(); 2753dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // set blocking/nonblocking mode 2754dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes channel1.configureBlocking(isBlocking); 2755dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2756dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(CAPACITY_NORMAL, channel1.write(writeContents, 0, 1)); 2757dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(CAPACITY_NORMAL, channel1.write(writeContents, 1, 1)); 2758dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2759dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // assert written count and ByteBuffer position 2760dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(CAPACITY_NORMAL, writeContents[0].position()); 2761dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(CAPACITY_NORMAL, writeContents[1].position()); 2762dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // use close to guarantee all data is sent 2763dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes channel1.close(); 2764dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes InputStream in = acceptedSocket.getInputStream(); 2765dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes byte[] readContent = new byte[CAPACITY_NORMAL * 2 + 1]; 2766dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes int totalCount = 0; 2767933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller int count; 2768dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // if the channel could not finish reading in TIMEOUT ms, the test 2769dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // fails. It is used to guarantee the test never hangs even if there 2770dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // are bugs of SocketChannel implementation. 2771dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes acceptedSocket.setSoTimeout(TIMEOUT); 2772dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // use InputStream.read to read data. 2773dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes while (totalCount <= CAPACITY_NORMAL) { 2774dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes count = in.read(readContent, totalCount, readContent.length 2775dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes - totalCount); 2776dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes if (EOF == count) { 2777dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes break; 2778dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2779dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes totalCount += count; 2780dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2781dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // assert read content 2782dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(CAPACITY_NORMAL * 2, totalCount); 2783dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeContents[0].flip(); 2784dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeContents[1].flip(); 2785dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes for (int i = 0; i < CAPACITY_NORMAL; i++) { 2786dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(writeContents[0].get(), readContent[i]); 2787dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2788dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes for (int i = CAPACITY_NORMAL; i < CAPACITY_NORMAL * 2; i++) { 2789dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(writeContents[1].get(), readContent[i]); 2790dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2791dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2792dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2793dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 2794dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.SocketChannel#write(ByteBuffer[]) 2795dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 2796dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_write$LByteBuffer() throws IOException { 2797dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes MockSocketChannel sc = new MockSocketChannel(null); 2798dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer [] byteBufferArray = { ByteBuffer.allocate(1), ByteBuffer.allocate(1)}; 2799dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // Verify that calling write(ByteBuffer[]) leads to the method 2800dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // write(ByteBuffer[], int, int) being called with a 0 for the 2801dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // second parameter and sources.length as the third parameter. 2802dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes sc.write(byteBufferArray); 2803dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(sc.isWriteCalled); 2804dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2805dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2806dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 2807dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.SocketChannel#write(ByteBuffer[]) 2808dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 2809dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_writev() throws Exception { 2810dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ServerSocketChannel ssc = ServerSocketChannel.open(); 281163744c884dd4b4f4307f2b021fb894af164972afElliott Hughes ssc.socket().bind(null); 2812dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes SocketChannel sc = SocketChannel.open(); 281363744c884dd4b4f4307f2b021fb894af164972afElliott Hughes sc.connect(ssc.socket().getLocalSocketAddress()); 2814dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes SocketChannel sock = ssc.accept(); 2815dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer[] buf = { ByteBuffer.allocate(10), ByteBuffer.allocateDirect(20) }; 2816dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2817dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes while (buf[0].remaining() != 0 && buf[1].remaining() !=0) { 2818dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(sc.write(buf, 0, 2) >= 0); 2819dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2820dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2821dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer target = ByteBuffer.allocate(30); 2822dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2823dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes while (target.remaining() != 0) { 2824dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(sock.read(target) >=0); 2825dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2826dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2827dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ssc.close(); 2828dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes sc.close(); 2829dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes sock.close(); 2830dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2831dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2832dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 2833dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.SocketChannel#write(ByteBuffer[]) 2834dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 2835dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_writev2() throws Exception { 2836dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ServerSocketChannel ssc = ServerSocketChannel.open(); 2837dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ssc.configureBlocking(false); 283863744c884dd4b4f4307f2b021fb894af164972afElliott Hughes ssc.socket().bind(null); 2839dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes SocketChannel sc = SocketChannel.open(); 2840dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes sc.configureBlocking(false); 284163744c884dd4b4f4307f2b021fb894af164972afElliott Hughes boolean connected = sc.connect(ssc.socket().getLocalSocketAddress()); 2842dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes SocketChannel sock = ssc.accept(); 2843dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes if (!connected) { 2844dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes sc.finishConnect(); 2845dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2846dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2847dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer buf1 = ByteBuffer.allocate(10); 2848dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes sc.socket().setSendBufferSize(512); 2849dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes int bufSize = sc.socket().getSendBufferSize(); 2850dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer buf2 = ByteBuffer.allocate(bufSize * 10); 2851dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2852dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer[] sent = new ByteBuffer[2]; 2853dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes sent[0] = buf1; 2854dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes sent[1] = buf2; 2855dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2856dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes long whole = buf1.remaining() + buf2.remaining(); 2857dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2858dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes long write = sc.write(sent); 2859dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ssc.close(); 2860dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes sc.close(); 2861dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes sock.close(); 2862dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2863dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(whole == (write + buf1.remaining() + buf2.remaining())); 2864dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2865dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2866dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 2867dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.SocketChannel#write(ByteBuffer[]) 2868dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * 2869dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * In non-blocking mode, the native system call will return EAGAIN/EWOULDBLOCK error 2870dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * code on Linux/Unix and return WSATRY_AGAIN/WSAEWOULDBLOCK error code on Windows. 2871dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * These error code means try again but not fatal error, so we should not throw exception. 2872dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 2873dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_write$NonBlockingException() throws Exception { 2874dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ServerSocketChannel ssc = ServerSocketChannel.open(); 2875dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ssc.configureBlocking(false); 287663744c884dd4b4f4307f2b021fb894af164972afElliott Hughes ssc.socket().bind(null); 2877dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes SocketChannel sc = SocketChannel.open(); 2878dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes sc.configureBlocking(false); 287963744c884dd4b4f4307f2b021fb894af164972afElliott Hughes boolean connected = sc.connect(ssc.socket().getLocalSocketAddress()); 2880dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes SocketChannel sock = ssc.accept(); 2881dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes if (!connected) { 2882dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes sc.finishConnect(); 2883dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2884dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2885dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 2886dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes for (int i = 0; i < 100; i++) { 2887dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer buf1 = ByteBuffer.allocate(10); 2888dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes sc.socket().setSendBufferSize(512); 2889dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes int bufSize = sc.socket().getSendBufferSize(); 2890dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer buf2 = ByteBuffer.allocate(bufSize * 10); 2891dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2892dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer[] sent = new ByteBuffer[2]; 2893dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes sent[0] = buf1; 2894dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes sent[1] = buf2; 2895dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2896dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes sc.write(sent); 2897dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2898dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } finally { 2899dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ssc.close(); 2900dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes sc.close(); 2901dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes sock.close(); 2902dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2903dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2904dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2905dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2906dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 2907dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.SocketChannel#write(ByteBuffer[]) 2908dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 2909dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_write$LByteBuffer2() throws IOException { 2910dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // Set-up 2911dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ServerSocketChannel server = ServerSocketChannel.open(); 291263744c884dd4b4f4307f2b021fb894af164972afElliott Hughes server.socket().bind(null); 2913dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes SocketChannel client = SocketChannel.open(); 291463744c884dd4b4f4307f2b021fb894af164972afElliott Hughes client.connect(server.socket().getLocalSocketAddress()); 2915dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes SocketChannel worker = server.accept(); 2916dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2917dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // Test overlapping buffers 2918dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes byte[] data = "Hello world!".getBytes("UTF-8"); 2919dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer[] buffers = new ByteBuffer[3]; 2920dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes buffers[0] = ByteBuffer.wrap(data, 0, 6); 2921dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes buffers[1] = ByteBuffer.wrap(data, 6, data.length - 6); 2922dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes buffers[2] = ByteBuffer.wrap(data); 2923dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2924dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // Write them out, read what we wrote and check it 2925dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes client.write(buffers); 2926dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes client.close(); 2927dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer readBuffer = ByteBuffer.allocate(1024); 2928933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller while (EOF != worker.read(readBuffer)) {} 2929dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readBuffer.flip(); 2930dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes Buffer expected = ByteBuffer.allocate(1024).put(data).put(data).flip(); 2931dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(expected, readBuffer); 2932dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2933dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // Tidy-up 2934dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes worker.close(); 2935dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes server.close(); 2936dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2937dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2938dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 2939dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.SocketChannel#write(ByteBuffer[]) 2940dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 2941dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_write$LByteBuffer_buffers() throws IOException { 2942dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // Set-up 2943dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ServerSocketChannel server = ServerSocketChannel.open(); 294463744c884dd4b4f4307f2b021fb894af164972afElliott Hughes server.socket().bind(null); 2945dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes SocketChannel client = SocketChannel.open(); 294663744c884dd4b4f4307f2b021fb894af164972afElliott Hughes client.connect(server.socket().getLocalSocketAddress()); 2947dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes SocketChannel worker = server.accept(); 2948dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2949dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // A variety of buffer types to write 2950dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes byte[] data = "Hello world!".getBytes("UTF-8"); 2951dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer[] buffers = new ByteBuffer[3]; 2952dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes buffers[0] = ByteBuffer.wrap(data, 0, 2); 2953dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(buffers[0].isDirect()); 2954dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(buffers[0].hasArray()); 2955dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2956dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes buffers[1] = ByteBuffer.wrap(data, 2, 4).asReadOnlyBuffer(); 2957dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(buffers[1].isDirect()); 2958dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(buffers[1].hasArray()); 2959dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2960dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes buffers[2] = ByteBuffer.allocateDirect(42); 2961dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes buffers[2].put(data, 6, data.length - 6); 2962dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes buffers[2].flip(); 2963dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(buffers[2].isDirect()); 2964dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2965dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // Write them out, read what we wrote and check it 2966dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes client.write(buffers); 2967dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes client.close(); 2968dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer readBuffer = ByteBuffer.allocate(1024); 2969933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller while (EOF != worker.read(readBuffer)) {} 2970dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readBuffer.flip(); 2971dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(ByteBuffer.wrap(data), readBuffer); 2972dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2973dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // Tidy-up 2974dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes worker.close(); 2975dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes server.close(); 2976dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2977dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2978dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 2979dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.SocketChannel#write(ByteBuffer[]) 2980dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 2981dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_write$LByteBuffer_writes() throws IOException { 2982dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // Set-up 2983dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ServerSocketChannel server = ServerSocketChannel.open(); 298463744c884dd4b4f4307f2b021fb894af164972afElliott Hughes server.socket().bind(null); 2985dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes SocketChannel client = SocketChannel.open(); 298663744c884dd4b4f4307f2b021fb894af164972afElliott Hughes client.connect(server.socket().getLocalSocketAddress()); 2987dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes SocketChannel worker = server.accept(); 2988dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2989dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // Data to write 2990dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes byte[] data = "Hello world!".getBytes("UTF-8"); 2991dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer[] buffers = new ByteBuffer[3]; 2992dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes buffers[0] = ByteBuffer.wrap(data, 0, 6); 2993dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes buffers[1] = ByteBuffer.wrap("world!".getBytes("UTF-8")); 2994dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes buffers[2] = buffers[0]; 2995dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(buffers[0].hasArray()); 2996dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2997dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // Test a sequence of write calls 2998dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes client.write(buffers, 0, 0); // write nothing 2999dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes client.write(buffers, 1, 0); // write nothing 3000dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes client.write(buffers, 0, 1); // write "Hello " 3001dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals("Failed to drain buffer 0", 0, buffers[0].remaining()); 3002dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals("Shouldn't touch buffer 1", buffers[1].limit(), buffers[1] 3003dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes .remaining()); 3004dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes client.write(buffers, 0, 2); // writes "world!" 3005dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals("Failed to drain buffer 1", 0, buffers[1].remaining()); 3006dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes client.write(buffers, 0, 3); // write nothing 3007dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes client.close(); 3008dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 3009dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // Read what we wrote and check it 3010dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer readBuffer = ByteBuffer.allocate(1024); 301147ae0b5a1d96c8030e0963ccc5b44c3ee66aaec3Neil Fuller while (EOF != worker.read(readBuffer)) {} 3012dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readBuffer.flip(); 3013dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(ByteBuffer.wrap(data), readBuffer); 3014dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 3015dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // Tidy-up 3016dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes worker.close(); 3017dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes server.close(); 3018dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3019dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 3020dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 3021dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.SocketChannel#write(ByteBuffer[]) 3022dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 3023dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_write$LByteBuffer_invalid() throws IOException { 3024dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // Set-up 3025dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ServerSocketChannel server = ServerSocketChannel.open(); 302663744c884dd4b4f4307f2b021fb894af164972afElliott Hughes server.socket().bind(null); 3027dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 3028dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes SocketChannel client = SocketChannel.open(); 302963744c884dd4b4f4307f2b021fb894af164972afElliott Hughes client.connect(server.socket().getLocalSocketAddress()); 3030dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 3031dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes SocketChannel worker = server.accept(); 3032dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 3033dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // Do some stuff 3034dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 3035dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes client.write((ByteBuffer[]) null); 3036dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw a NPE"); 303747ae0b5a1d96c8030e0963ccc5b44c3ee66aaec3Neil Fuller } catch (NullPointerException expected) { 3038dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3039dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 3040dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes client.write((ByteBuffer[]) null, 0, 0); 3041dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw a NPE"); 304247ae0b5a1d96c8030e0963ccc5b44c3ee66aaec3Neil Fuller } catch (NullPointerException expected) { 3043dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3044dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 3045dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes client.write((ByteBuffer[]) null, 1, 0); 3046dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw a NPE"); 304747ae0b5a1d96c8030e0963ccc5b44c3ee66aaec3Neil Fuller } catch (NullPointerException expected) { 3048dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3049dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 3050dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes client.write((ByteBuffer[]) null, 0, 1); 3051dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw a NPE"); 305247ae0b5a1d96c8030e0963ccc5b44c3ee66aaec3Neil Fuller } catch (NullPointerException expected) { 3053dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3054dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 3055dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes client.write((ByteBuffer[]) null, 1, 1); 3056dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Should throw a NPE"); 305747ae0b5a1d96c8030e0963ccc5b44c3ee66aaec3Neil Fuller } catch (NullPointerException expected) { 3058dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3059dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 3060dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer[] buffers = new ByteBuffer[1]; 3061dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes buffers[0] = ByteBuffer.wrap("Hello ".getBytes("UTF-8")); 3062dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 3063dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 3064dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes client.write(buffers, -1, 1); 3065dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 3066dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IndexOutOfBoundsException expected) { 3067dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3068dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 3069dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes client.write(buffers, 0, -1); 3070dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 3071dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IndexOutOfBoundsException expected) { 3072dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3073dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 3074dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes client.write(buffers, 0, 2); 3075dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 3076dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IndexOutOfBoundsException expected) { 3077dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3078dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 3079dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes client.write(buffers, 2, 0); 3080dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 3081dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IndexOutOfBoundsException expected) { 3082dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3083dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 3084dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes client.write(null, 0, 0); 3085dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 3086dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NullPointerException expected) { 3087dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3088dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 3089dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // Tidy-up 3090dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes worker.close(); 3091dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes client.close(); 3092dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes server.close(); 3093dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3094dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 3095dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void testSocket_configureblocking() throws IOException { 3096dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes byte[] serverWBuf = new byte[CAPACITY_NORMAL]; 3097dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes for (int i = 0; i < serverWBuf.length; i++) { 3098dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes serverWBuf[i] = (byte) i; 3099dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3100dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes java.nio.ByteBuffer buf = java.nio.ByteBuffer 3101dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes .allocate(CAPACITY_NORMAL + 1); 3102dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes channel1.connect(localAddr1); 3103dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes server1.accept(); 3104dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes Socket sock = this.channel1.socket(); 3105dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes channel1.configureBlocking(false); 3106dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(channel1.isBlocking()); 3107dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes OutputStream channelSocketOut = sock.getOutputStream(); 3108dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 3109dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // write operation is not allowed in non-blocking mode 3110dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes channelSocketOut.write(buf.array()); 3111dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Non-Blocking mode should cause IllegalBlockingModeException"); 3112dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IllegalBlockingModeException e) { 3113dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // correct 3114dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3115dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes channel1.configureBlocking(true); 3116dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(channel1.isBlocking()); 3117dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // write operation is allowed in blocking mode 3118dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes channelSocketOut.write(buf.array()); 3119dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3120dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 3121dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 3122dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests SocketChannel#read(ByteBuffer[], int, int) when remote server 3123dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * closed 3124dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 3125dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_socketChannel_read_ByteBufferII_remoteClosed() 3126dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes throws Exception { 3127dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // regression 1 for HARMONY-549 3128dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ServerSocketChannel ssc = ServerSocketChannel.open(); 312963744c884dd4b4f4307f2b021fb894af164972afElliott Hughes ssc.socket().bind(null); 3130dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes SocketChannel sc = SocketChannel.open(); 313163744c884dd4b4f4307f2b021fb894af164972afElliott Hughes sc.connect(ssc.socket().getLocalSocketAddress()); 3132dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ssc.accept().close(); 3133dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer[] buf = { ByteBuffer.allocate(10) }; 3134dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(-1, sc.read(buf, 0, 1)); 3135dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ssc.close(); 3136dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes sc.close(); 3137dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3138dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 3139dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 3140dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests SocketChannel#write(ByteBuffer[], int, int) 3141dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 3142dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_socketChannel_write_ByteBufferII() throws Exception { 3143dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // regression 2 for HARMONY-549 3144dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ServerSocketChannel ssc = ServerSocketChannel.open(); 314563744c884dd4b4f4307f2b021fb894af164972afElliott Hughes ssc.socket().bind(null); 3146dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes SocketChannel sc = SocketChannel.open(); 314763744c884dd4b4f4307f2b021fb894af164972afElliott Hughes sc.connect(ssc.socket().getLocalSocketAddress()); 3148dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes SocketChannel sock = ssc.accept(); 3149dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer[] buf = { ByteBuffer.allocate(10), null }; 3150dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 3151dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes sc.write(buf, 0, 2); 3152dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw NPE"); 315347ae0b5a1d96c8030e0963ccc5b44c3ee66aaec3Neil Fuller } catch (NullPointerException expected) { 3154dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3155dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ssc.close(); 3156dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes sc.close(); 3157dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer target = ByteBuffer.allocate(10); 3158dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(-1, sock.read(target)); 3159dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3160dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 3161dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 3162dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests SocketChannel#read(ByteBuffer[], int, int) with a null ByteBuffer 3163dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 3164dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_socketChannel_read_ByteBufferII_bufNULL() throws Exception { 3165dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // regression 3 for HARMONY-549 3166dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ServerSocketChannel ssc = ServerSocketChannel.open(); 316763744c884dd4b4f4307f2b021fb894af164972afElliott Hughes ssc.socket().bind(null); 3168dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes SocketChannel sc = SocketChannel.open(); 316963744c884dd4b4f4307f2b021fb894af164972afElliott Hughes sc.connect(ssc.socket().getLocalSocketAddress()); 3170dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ssc.accept(); 3171dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer[] buf = new ByteBuffer[2]; 3172dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes buf[0] = ByteBuffer.allocate(1); 3173dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // let buf[1] be null 3174dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 3175dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes sc.read(buf, 0, 2); 3176dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw NullPointerException"); 317747ae0b5a1d96c8030e0963ccc5b44c3ee66aaec3Neil Fuller } catch (NullPointerException expected) { 3178dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3179dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ssc.close(); 3180dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes sc.close(); 3181dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3182dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 3183dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 3184dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests SocketChannel#write(ByteBuffer) after close 3185dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 3186dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_socketChannel_write_close() throws Exception { 3187dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // regression 4 for HARMONY-549 3188dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ServerSocketChannel ssc = ServerSocketChannel.open(); 318963744c884dd4b4f4307f2b021fb894af164972afElliott Hughes ssc.socket().bind(null); 3190dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes SocketChannel sc = SocketChannel.open(); 319163744c884dd4b4f4307f2b021fb894af164972afElliott Hughes sc.connect(ssc.socket().getLocalSocketAddress()); 3192dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes SocketChannel sock = ssc.accept(); 3193dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer buf = null; 3194dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ssc.close(); 3195dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes sc.close(); 3196dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 3197dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes sc.write(buf); 3198dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw NPE"); 319947ae0b5a1d96c8030e0963ccc5b44c3ee66aaec3Neil Fuller } catch (NullPointerException expected) { 3200dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3201dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes sock.close(); 3202dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3203dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 3204dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 3205dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests SocketChannel#write(ByteBuffer) if position is not zero 3206dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 3207dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_socketChannel_write_ByteBuffer_posNotZero() 3208dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes throws Exception { 3209dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // regression 5 for HARMONY-549 3210dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes final String testStr = "Hello World"; 3211dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer readBuf = ByteBuffer.allocate(11); 3212dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer buf = ByteBuffer.wrap(testStr.getBytes()); 3213dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ServerSocketChannel ssc = ServerSocketChannel.open(); 321463744c884dd4b4f4307f2b021fb894af164972afElliott Hughes ssc.socket().bind(null); 3215dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes SocketChannel sc = SocketChannel.open(); 321663744c884dd4b4f4307f2b021fb894af164972afElliott Hughes sc.connect(ssc.socket().getLocalSocketAddress()); 3217dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes buf.position(2); 3218dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ssc.accept().write(buf); 3219dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(9, sc.read(readBuf)); 3220dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes buf.flip(); 3221dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readBuf.flip(); 3222dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes byte[] read = new byte[9]; 3223dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes byte[] write = new byte[11]; 3224dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes buf.get(write); 3225dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readBuf.get(read); 3226dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes for (int i = 0; i < 9; i++) { 3227dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(read[i], write[i + 2]); 3228dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3229dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3230dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 3231dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 3232dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests SocketChannelImpl#read(ByteBuffer[]) 3233dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 3234dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_read_$ByteBuffer_Blocking() throws IOException { 3235dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // regression test for Harmony-728 3236dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes byte[] data = new byte[CAPACITY_NORMAL]; 3237dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes for (int i = 0; i < CAPACITY_NORMAL; i++) { 3238dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes data[i] = (byte) i; 3239dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3240dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer[] buf = new ByteBuffer[2]; 3241dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes buf[0] = ByteBuffer.allocate(CAPACITY_NORMAL); 3242dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes buf[1] = ByteBuffer.allocate(CAPACITY_NORMAL); 3243dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes channel1.connect(localAddr1); 3244dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes Socket socket = null; 3245dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 3246dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes socket = server1.accept(); 3247dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes OutputStream out = socket.getOutputStream(); 3248dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes out.write(data); 3249dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // should not block here 3250dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes channel1.read(buf); 3251dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } finally { 3252dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes if (null != socket) { 3253dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes socket.close(); 3254dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3255dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3256dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3257dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 3258dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_socket_getOutputStream_nonBlocking_read_Exception() throws IOException { 3259dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes byte[] buf = new byte[1]; 3260dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes channel1.connect(this.localAddr1); 3261dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes InputStream is = channel1.socket().getInputStream(); 3262dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes channel1.configureBlocking(false); 3263dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 3264dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes is.read(); 3265dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 3266dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IllegalBlockingModeException expected) { 3267dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3268933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller 3269dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 3270dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes is.read(null); 3271dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 3272dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NullPointerException expected) { 3273933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller // Any of these exceptions are possible. 3274933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller } catch (IllegalBlockingModeException expected) { 3275933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller // Any of these exceptions are possible. 3276dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3277933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller 3278dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 3279dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes is.read(buf, -1, 1); 3280dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 3281dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IndexOutOfBoundsException expected) { 3282933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller // Any of these exceptions are possible. 3283933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller } catch (IllegalBlockingModeException expected) { 3284933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller // Any of these exceptions are possible. 3285dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3286933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller 3287dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 3288dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes is.read(buf, 0, -1); 3289dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 3290dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IndexOutOfBoundsException expected) { 3291933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller // Any of these exceptions are possible. 3292933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller } catch (IllegalBlockingModeException expected) { 3293933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller // Any of these exceptions are possible. 3294dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3295933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller 3296dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 3297dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes is.read(buf, 0, 2); 3298dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 3299dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IndexOutOfBoundsException expected) { 3300933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller // Any of these exceptions are possible. 3301933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller } catch (IllegalBlockingModeException expected) { 3302933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller // Any of these exceptions are possible. 3303dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3304933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller 3305dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 3306dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes is.read(buf, 2, 0); 3307dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 3308dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IndexOutOfBoundsException expected) { 3309933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller // Any of these exceptions are possible. 3310933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller } catch (IllegalBlockingModeException expected) { 3311933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller // Any of these exceptions are possible. 3312dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3313933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller 3314dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 3315dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes is.read(null, 0, 0); 3316dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 3317dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NullPointerException expected) { 3318933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller // Any of these exceptions are possible. 3319933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller } catch (IllegalBlockingModeException expected) { 3320933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller // Any of these exceptions are possible. 3321dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3322dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 3323dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes is.close(); 3324dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 3325dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 3326dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes is.read(); 3327dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 3328dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IllegalBlockingModeException expected) { 3329933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller // Any of these exceptions are possible. 3330933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller } catch (IOException expected) { 3331933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller // Any of these exceptions are possible. 3332dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3333933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller 3334dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 3335dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes is.read(null); 3336dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 3337dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NullPointerException expected) { 3338933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller // Any of these exceptions are possible. 3339933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller } catch (IllegalBlockingModeException expected) { 3340933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller // Any of these exceptions are possible. 3341933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller } catch (IOException expected) { 3342933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller // Any of these exceptions are possible. 3343dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3344933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller 3345dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 3346dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes is.read(buf, -1, 1); 3347dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 3348dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IndexOutOfBoundsException expected) { 3349933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller // Any of these exceptions are possible. 3350933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller } catch (IllegalBlockingModeException expected) { 3351933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller // Any of these exceptions are possible. 3352933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller } catch (IOException expected) { 3353933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller // Any of these exceptions are possible. 3354dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3355933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller 3356dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 3357dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes is.read(buf, 0, -1); 3358dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 3359dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IndexOutOfBoundsException expected) { 3360933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller // Any of these exceptions are possible. 3361933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller } catch (IllegalBlockingModeException expected) { 3362933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller // Any of these exceptions are possible. 3363933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller } catch (IOException expected) { 3364933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller // Any of these exceptions are possible. 3365dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3366933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller 3367dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 3368dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes is.read(buf, 0, 2); 3369dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 3370dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IndexOutOfBoundsException expected) { 3371933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller // Any of these exceptions are possible. 3372933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller } catch (IllegalBlockingModeException expected) { 3373933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller // Any of these exceptions are possible. 3374933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller } catch (IOException expected) { 3375933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller // Any of these exceptions are possible. 3376dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3377933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller 3378dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 3379dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes is.read(buf, 2, 0); 3380dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 3381dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IndexOutOfBoundsException expected) { 3382933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller // Any of these exceptions are possible. 3383933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller } catch (IllegalBlockingModeException expected) { 3384933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller // Any of these exceptions are possible. 3385933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller } catch (IOException expected) { 3386933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller // Any of these exceptions are possible. 3387dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3388933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller 3389dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 3390dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes is.read(null, 0, 0); 3391dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 3392dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NullPointerException expected) { 3393933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller // Any of these exceptions are possible. 3394933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller } catch (IllegalBlockingModeException expected) { 3395933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller // Any of these exceptions are possible. 3396933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller } catch (IOException expected) { 3397933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller // Any of these exceptions are possible. 3398dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3399dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3400dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 3401dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_socket_getOutputStream_blocking_read_Exception() throws IOException { 3402dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes byte[] buf = new byte[1]; 3403dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes channel1.connect(this.localAddr1); 3404dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes InputStream is = channel1.socket().getInputStream(); 3405dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 3406dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes is.read(null); 3407dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 3408dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NullPointerException expected) { 3409dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3410dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 3411dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes is.read(buf, -1, 1); 3412dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 3413dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IndexOutOfBoundsException expected) { 3414dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3415dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 3416dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes is.read(buf, 0, -1); 3417dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 3418dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IndexOutOfBoundsException expected) { 3419dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3420dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 3421dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes is.read(buf, 0, 2); 3422dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 3423dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IndexOutOfBoundsException expected) { 3424dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3425dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 3426933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller is.read(buf, 2, 1); 3427dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 3428dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IndexOutOfBoundsException expected) { 3429dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3430dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 3431933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller is.read(null, 0, 1); 3432dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 3433dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NullPointerException expected) { 3434dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3435dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 3436dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes is.close(); 3437dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 3438dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 3439dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes is.read(null); 3440dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 3441dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NullPointerException expected) { 3442dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3443dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 3444dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes is.read(buf, -1, 1); 3445dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 3446dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IndexOutOfBoundsException expected) { 3447dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3448dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 3449dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes is.read(buf, 0, -1); 3450dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 3451dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IndexOutOfBoundsException expected) { 3452dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3453dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 3454dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes is.read(buf, 0, 2); 3455dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 3456dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IndexOutOfBoundsException expected) { 3457dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3458dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 3459933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller is.read(buf, 2, 1); 3460dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 3461dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IndexOutOfBoundsException expected) { 3462dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3463dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 3464933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller is.read(null, 0, 1); 3465dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 3466dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NullPointerException expected) { 3467dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3468dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3469dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 3470dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_socket_getOutputStream_nonBlocking_write_Exception() throws IOException { 3471dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes byte[] buf = new byte[1]; 3472dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes channel1.connect(this.localAddr1); 3473dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes OutputStream os = channel1.socket().getOutputStream(); 3474dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes channel1.configureBlocking(false); 3475dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 3476dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 3477dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes os.write(1); 3478dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 3479dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IllegalBlockingModeException expected) { 3480dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3481dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 3482dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes os.write(null); 3483dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 3484933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller } catch (IllegalBlockingModeException expected) { 3485933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller // Any of these exceptions are possible. 3486dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NullPointerException expected) { 3487933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller // Any of these exceptions are possible. 3488dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3489933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller 3490dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 3491dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes os.write(buf, -1, 1); 3492dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 3493933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller } catch (IllegalBlockingModeException expected) { 3494933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller // Any of these exceptions are possible. 3495dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IndexOutOfBoundsException expected) { 3496933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller // Any of these exceptions are possible. 3497dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3498933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller 3499dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 3500dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes os.write(buf, 0, -1); 3501dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 3502933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller } catch (IllegalBlockingModeException expected) { 3503933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller // Any of these exceptions are possible. 3504dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IndexOutOfBoundsException expected) { 3505933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller // Any of these exceptions are possible. 3506dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3507933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller 3508dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 3509dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes os.write(buf, 0, 2); 3510dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 3511933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller } catch (IllegalBlockingModeException expected) { 3512933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller // Any of these exceptions are possible. 3513dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IndexOutOfBoundsException expected) { 3514933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller // Any of these exceptions are possible. 3515dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3516933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller 3517dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 3518933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller os.write(buf, 2, 1); 3519dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 3520933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller } catch (IllegalBlockingModeException expected) { 3521933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller // Any of these exceptions are possible. 3522dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IndexOutOfBoundsException expected) { 3523933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller // Any of these exceptions are possible. 3524dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3525933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller 3526dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 3527933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller os.write(null, 0, 1); 3528dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 3529933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller } catch (IllegalBlockingModeException expected) { 3530933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller // Any of these exceptions are possible. 3531dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NullPointerException expected) { 3532933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller // Any of these exceptions are possible. 3533dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3534dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 3535dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes os.close(); 3536dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 3537dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 3538dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes os.write(1); 3539dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 3540dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IllegalBlockingModeException expected) { 3541dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3542933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller 3543dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 3544dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes os.write(null); 3545dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 3546933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller } catch (IllegalBlockingModeException expected) { 3547933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller // Any of these exceptions are possible. 3548dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NullPointerException expected) { 3549933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller // Any of these exceptions are possible. 3550dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3551933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller 3552dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 3553dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes os.write(buf, -1, 1); 3554dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 3555933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller } catch (IllegalBlockingModeException expected) { 3556933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller // Any of these exceptions are possible. 3557dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IndexOutOfBoundsException expected) { 3558933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller // Any of these exceptions are possible. 3559dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3560933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller 3561dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 3562dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes os.write(buf, 0, -1); 3563dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 3564933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller } catch (IllegalBlockingModeException expected) { 3565933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller // Any of these exceptions are possible. 3566dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IndexOutOfBoundsException expected) { 3567933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller // Any of these exceptions are possible. 3568dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3569933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller 3570dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 3571dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes os.write(buf, 0, 2); 3572dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 3573933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller } catch (IllegalBlockingModeException expected) { 3574933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller // Any of these exceptions are possible. 3575dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IndexOutOfBoundsException expected) { 3576933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller // Any of these exceptions are possible. 3577dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3578933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller 3579dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 3580dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes os.write(buf, 2, 0); 3581dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 3582933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller } catch (IllegalBlockingModeException expected) { 3583933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller // Any of these exceptions are possible. 3584dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IndexOutOfBoundsException expected) { 3585933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller // Any of these exceptions are possible. 3586dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3587933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller 3588dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 3589dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes os.write(null, 0, 0); 3590dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 3591933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller } catch (IllegalBlockingModeException expected) { 3592933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller // Any of these exceptions are possible. 3593dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NullPointerException expected) { 3594933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller // Any of these exceptions are possible. 3595dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3596dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3597dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 3598dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_socket_getOutputStream_blocking_write_Exception() throws IOException { 3599dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes byte[] buf = new byte[1]; 3600dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes channel1.connect(this.localAddr1); 3601dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes OutputStream os = channel1.socket().getOutputStream(); 3602dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 3603dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes os.write(null); 3604dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 3605dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NullPointerException expected) { 3606dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3607dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 3608dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes os.write(buf, -1, 1); 3609dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 3610dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IndexOutOfBoundsException expected) { 3611dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3612dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 3613dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes os.write(buf, 0, -1); 3614dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 3615dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IndexOutOfBoundsException expected) { 3616dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3617dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 3618dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes os.write(buf, 0, 2); 3619dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 3620dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IndexOutOfBoundsException expected) { 3621dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3622dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 3623dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes os.write(buf, 2, 0); 3624dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 3625dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IndexOutOfBoundsException expected) { 3626dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3627dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 3628dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes os.write(null, 0, 0); 3629dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 3630dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NullPointerException expected) { 3631dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3632dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 3633dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes os.close(); 3634dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 3635dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 3636dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes os.write(null); 3637dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 3638dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NullPointerException expected) { 3639dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3640dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 3641dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes os.write(buf, -1, 1); 3642dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 3643dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IndexOutOfBoundsException expected) { 3644dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3645dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 3646dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes os.write(buf, 0, -1); 3647dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 3648dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IndexOutOfBoundsException expected) { 3649dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3650dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 3651dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes os.write(buf, 0, 2); 3652dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 3653dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IndexOutOfBoundsException expected) { 3654dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3655dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 3656dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes os.write(buf, 2, 0); 3657dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 3658dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IndexOutOfBoundsException expected) { 3659dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3660dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 3661dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes os.write(null, 0, 0); 3662dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 3663dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NullPointerException expected) { 3664dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3665dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3666dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 3667dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 3668dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests SocketChannelImpl#socket().getOutputStream().write(int) 3669dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 3670dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_socket_getOutputStream_write_oneByte() 3671dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes throws IOException { 3672dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 3673dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // Regression test for Harmony-3475 3674dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 3675dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes int MAGIC = 123; 3676dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 3677dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes channel1.connect(this.localAddr1); 3678dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 3679dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes OutputStream os = channel1.socket().getOutputStream(); 3680dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 3681dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes Socket acceptedSocket = server1.accept(); 3682dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 3683dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes InputStream in = acceptedSocket.getInputStream(); 3684dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 3685dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes os.write(MAGIC); 3686dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes channel1.close(); 3687dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 3688dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes int lastByte = in.read(); 3689dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes if (lastByte == -1) { 3690dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Server received nothing. Expected 1 byte."); 3691dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } else if (lastByte != MAGIC) { 3692dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Server received wrong single byte: " + lastByte + 3693dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ", expected: " + MAGIC); 3694dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3695dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 3696dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes lastByte = in.read(); 3697dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes if (lastByte != -1) { 3698dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Server received too long sequence. Expected 1 byte."); 3699dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3700dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3701dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 3702dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void testSocket_setOptions() throws IOException { 3703dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes channel1.connect(localAddr1); 3704dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes Socket socket = channel1.socket(); 3705dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 3706dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer buffer = ByteBuffer.wrap(new byte[] {1, 2, 3}); 3707dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes socket.setKeepAlive(true); 3708dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes channel1.write(buffer); 3709dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 3710dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes socket.setOOBInline(true); 3711dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes channel1.write(buffer); 3712dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 3713dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes socket.setReceiveBufferSize(100); 3714dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes channel1.write(buffer); 3715dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 3716dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes socket.setReuseAddress(true); 3717dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes channel1.write(buffer); 3718dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 3719dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes socket.setSendBufferSize(100); 3720dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes channel1.write(buffer); 3721dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 3722dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes socket.setSoLinger(true, 100); 3723dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes channel1.write(buffer); 3724dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 3725dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes socket.setSoTimeout(1000); 3726dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes channel1.write(buffer); 3727dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 3728dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes socket.setTcpNoDelay(true); 3729dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes channel1.write(buffer); 3730dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 3731dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes socket.setTrafficClass(10); 3732dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes channel1.write(buffer); 3733dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3734dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 3735933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller class MockSocketChannel extends SocketChannel { 3736dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 3737dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes private boolean isWriteCalled = false; 3738dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 3739dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes private boolean isReadCalled = false; 3740dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 3741933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller public MockSocketChannel(SelectorProvider provider) { 3742dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes super(provider); 3743dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3744dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 3745933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller @Override 3746dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public Socket socket() { 3747dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes return null; 3748dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3749dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 3750933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller @Override 3751dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public boolean isConnected() { 3752dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes return false; 3753dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3754dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 3755933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller @Override 3756dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public boolean isConnectionPending() { 3757dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes return false; 3758dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3759dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 3760933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller @Override 3761dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public boolean connect(SocketAddress address) throws IOException { 3762dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes return false; 3763dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3764dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 3765933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller @Override 3766dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public boolean finishConnect() throws IOException { 3767dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes return false; 3768dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3769dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 3770933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller @Override 3771dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public int read(ByteBuffer target) throws IOException { 3772dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes return 0; 3773dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3774dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 3775933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller @Override 3776dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public long read(ByteBuffer[] targets, int offset, int length) throws IOException { 3777dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // Verify that calling read(ByteBuffer[]) leads to the method 3778dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // read(ByteBuffer[], int, int) being called with a 0 for the 3779dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // second parameter and targets.length as the third parameter. 3780dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes if(0 == offset && length == targets.length){ 3781dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes isReadCalled = true; 3782dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3783dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes return 0; 3784dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3785dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 3786933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller @Override 3787dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public int write(ByteBuffer source) throws IOException { 3788dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes return 0; 3789dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3790dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 3791933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller @Override 3792dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public long write(ByteBuffer[] sources, int offset, int length) throws IOException { 3793dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // Verify that calling write(ByteBuffer[]) leads to the method 3794dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // write(ByteBuffer[], int, int) being called with a 0 for the 3795dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // second parameter and sources.length as the third parameter. 3796dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes if(0 == offset && length == sources.length){ 3797dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes isWriteCalled = true; 3798dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3799dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes return 0; 3800dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3801dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 3802933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller @Override 3803dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes protected void implCloseSelectableChannel() throws IOException { 3804dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // empty 3805dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3806dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 3807933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller @Override 3808dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes protected void implConfigureBlocking(boolean blockingMode) throws IOException { 3809dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // empty 3810dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3811dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 38123d43823e17818b3c5f45831f830884917b181454Piotr Jastrzebski @Override 38133d43823e17818b3c5f45831f830884917b181454Piotr Jastrzebski public SocketAddress getRemoteAddress() throws IOException { 38143d43823e17818b3c5f45831f830884917b181454Piotr Jastrzebski return null; 38153d43823e17818b3c5f45831f830884917b181454Piotr Jastrzebski } 38163d43823e17818b3c5f45831f830884917b181454Piotr Jastrzebski 38173d43823e17818b3c5f45831f830884917b181454Piotr Jastrzebski @Override 38183d43823e17818b3c5f45831f830884917b181454Piotr Jastrzebski public SocketChannel shutdownOutput() throws IOException { 38193d43823e17818b3c5f45831f830884917b181454Piotr Jastrzebski return null; 38203d43823e17818b3c5f45831f830884917b181454Piotr Jastrzebski } 38213d43823e17818b3c5f45831f830884917b181454Piotr Jastrzebski 38223d43823e17818b3c5f45831f830884917b181454Piotr Jastrzebski @Override 38233d43823e17818b3c5f45831f830884917b181454Piotr Jastrzebski public SocketChannel shutdownInput() throws IOException { 38243d43823e17818b3c5f45831f830884917b181454Piotr Jastrzebski return null; 38253d43823e17818b3c5f45831f830884917b181454Piotr Jastrzebski } 38263d43823e17818b3c5f45831f830884917b181454Piotr Jastrzebski 38273d43823e17818b3c5f45831f830884917b181454Piotr Jastrzebski @Override 38283d43823e17818b3c5f45831f830884917b181454Piotr Jastrzebski public <T> SocketChannel setOption(SocketOption<T> name, T value) 38293d43823e17818b3c5f45831f830884917b181454Piotr Jastrzebski throws IOException { 38303d43823e17818b3c5f45831f830884917b181454Piotr Jastrzebski return null; 38313d43823e17818b3c5f45831f830884917b181454Piotr Jastrzebski } 38323d43823e17818b3c5f45831f830884917b181454Piotr Jastrzebski 38333d43823e17818b3c5f45831f830884917b181454Piotr Jastrzebski @Override 38343d43823e17818b3c5f45831f830884917b181454Piotr Jastrzebski public SocketChannel bind(SocketAddress local) throws IOException { 38353d43823e17818b3c5f45831f830884917b181454Piotr Jastrzebski return null; 38363d43823e17818b3c5f45831f830884917b181454Piotr Jastrzebski } 38373d43823e17818b3c5f45831f830884917b181454Piotr Jastrzebski 38383d43823e17818b3c5f45831f830884917b181454Piotr Jastrzebski @Override 38393d43823e17818b3c5f45831f830884917b181454Piotr Jastrzebski public Set<SocketOption<?>> supportedOptions() { 38403d43823e17818b3c5f45831f830884917b181454Piotr Jastrzebski return null; 38413d43823e17818b3c5f45831f830884917b181454Piotr Jastrzebski } 38423d43823e17818b3c5f45831f830884917b181454Piotr Jastrzebski 38433d43823e17818b3c5f45831f830884917b181454Piotr Jastrzebski @Override 38443d43823e17818b3c5f45831f830884917b181454Piotr Jastrzebski public <T> T getOption(SocketOption<T> name) throws IOException { 38453d43823e17818b3c5f45831f830884917b181454Piotr Jastrzebski return null; 38463d43823e17818b3c5f45831f830884917b181454Piotr Jastrzebski } 38473d43823e17818b3c5f45831f830884917b181454Piotr Jastrzebski 38483d43823e17818b3c5f45831f830884917b181454Piotr Jastrzebski @Override 38493d43823e17818b3c5f45831f830884917b181454Piotr Jastrzebski public SocketAddress getLocalAddress() throws IOException { 38503d43823e17818b3c5f45831f830884917b181454Piotr Jastrzebski return null; 38513d43823e17818b3c5f45831f830884917b181454Piotr Jastrzebski } 3852dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3853dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes} 3854