1dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes/* Licensed to the Apache Software Foundation (ASF) under one or more 2dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * contributor license agreements. See the NOTICE file distributed with 3dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * this work for additional information regarding copyright ownership. 4dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * The ASF licenses this file to You under the Apache License, Version 2.0 5dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * (the "License"); you may not use this file except in compliance with 6dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * the License. You may obtain a copy of the License at 7dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * 8dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * http://www.apache.org/licenses/LICENSE-2.0 9dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * 10dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * Unless required by applicable law or agreed to in writing, software 11dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * distributed under the License is distributed on an "AS IS" BASIS, 12dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * See the License for the specific language governing permissions and 14dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * limitations under the License. 15dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 16dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 17e5fea3d504609d22337a5311d3ce0e72314bceeeNarayan Kamathpackage org.apache.harmony.tests.java.nio.channels; 18dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 19dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.io.File; 20dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.io.FileInputStream; 21dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.io.FileNotFoundException; 22dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.io.FileOutputStream; 23dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.io.IOException; 24dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.io.RandomAccessFile; 25dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.io.UnsupportedEncodingException; 26dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.net.InetAddress; 27dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.net.InetSocketAddress; 28dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.nio.BufferOverflowException; 29dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.nio.ByteBuffer; 30dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.nio.MappedByteBuffer; 31dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.nio.ReadOnlyBufferException; 32dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.nio.channels.ClosedChannelException; 33dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.nio.channels.DatagramChannel; 34dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.nio.channels.FileChannel; 35dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.nio.channels.FileLock; 36dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.nio.channels.NonReadableChannelException; 37dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.nio.channels.NonWritableChannelException; 38dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.nio.channels.OverlappingFileLockException; 39dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.nio.channels.Pipe; 40dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.nio.channels.ReadableByteChannel; 41dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.nio.channels.ServerSocketChannel; 42dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.nio.channels.SocketChannel; 43dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.nio.channels.WritableByteChannel; 44dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.nio.channels.FileChannel.MapMode; 45dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.util.Arrays; 46dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 47dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport junit.framework.TestCase; 48dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 49dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughespublic class FileChannelTest extends TestCase { 50dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 51dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes private static final int CAPACITY = 100; 52dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 53dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes private static final int LIMITED_CAPACITY = 2; 54dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 55dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes private static final int TIME_OUT = 10000; 56dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 57dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes private static final String CONTENT = "MYTESTSTRING needs to be a little long"; 58dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 59dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes private static final byte[] TEST_BYTES; 60dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 61dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes private static final byte[] CONTENT_AS_BYTES; 62dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 63dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes private static final int CONTENT_AS_BYTES_LENGTH; 64dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 65dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes static { 66dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 67dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes TEST_BYTES = "test".getBytes("iso8859-1"); 68dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes CONTENT_AS_BYTES = CONTENT.getBytes("iso8859-1"); 69dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes CONTENT_AS_BYTES_LENGTH = CONTENT_AS_BYTES.length; 70dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (UnsupportedEncodingException e) { 71dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes throw new Error(e); 72dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 73dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 74dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 75dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes private static final int CONTENT_LENGTH = CONTENT.length(); 76dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 77dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes private FileChannel readOnlyFileChannel; 78dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 79dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes private FileChannel writeOnlyFileChannel; 80dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 81dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes private FileChannel readWriteFileChannel; 82dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 83dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes private File fileOfReadOnlyFileChannel; 84dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 85dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes private File fileOfWriteOnlyFileChannel; 86dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 87dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes private File fileOfReadWriteFileChannel; 88dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 89dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes private ReadableByteChannel readByteChannel; 90dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 91dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes private WritableByteChannel writableByteChannel; 92dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 93dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes private DatagramChannel datagramChannelSender; 94dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 95dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes private DatagramChannel datagramChannelReceiver; 96dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 97dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes private ServerSocketChannel serverSocketChannel; 98dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 99dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes private SocketChannel socketChannelSender; 100dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 101dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes private SocketChannel socketChannelReceiver; 102dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 103dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes private Pipe pipe; 104dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 105dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // to read content from FileChannel 106dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes private FileInputStream fis; 107dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 108dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes private FileLock fileLock; 109dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 110dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes protected void setUp() throws Exception { 111dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fileOfReadOnlyFileChannel = File.createTempFile( 112dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes "File_of_readOnlyFileChannel", "tmp"); 113dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fileOfReadOnlyFileChannel.deleteOnExit(); 114dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fileOfWriteOnlyFileChannel = File.createTempFile( 115dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes "File_of_writeOnlyFileChannel", "tmp"); 116dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fileOfWriteOnlyFileChannel.deleteOnExit(); 117dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fileOfReadWriteFileChannel = File.createTempFile( 118dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes "File_of_readWriteFileChannel", "tmp"); 119dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fileOfReadWriteFileChannel.deleteOnExit(); 120dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fis = null; 121dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fileLock = null; 122dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readOnlyFileChannel = new FileInputStream(fileOfReadOnlyFileChannel) 123dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes .getChannel(); 124dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeOnlyFileChannel = new FileOutputStream(fileOfWriteOnlyFileChannel) 125dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes .getChannel(); 126dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readWriteFileChannel = new RandomAccessFile(fileOfReadWriteFileChannel, 127dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes "rw").getChannel(); 128dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 129dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 130dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes protected void tearDown() { 131dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes if (null != readOnlyFileChannel) { 132dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 133dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readOnlyFileChannel.close(); 134dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IOException e) { 135dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // do nothing 136dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 137dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 138dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes if (null != writeOnlyFileChannel) { 139dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 140dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeOnlyFileChannel.close(); 141dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IOException e) { 142dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // do nothing 143dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 144dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 145dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes if (null != readWriteFileChannel) { 146dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 147dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readWriteFileChannel.close(); 148dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IOException e) { 149dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // do nothing 150dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 151dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 152dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes if (null != fis) { 153dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 154dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fis.close(); 155dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IOException e) { 156dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // do nothing 157dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 158dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 159dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 160dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes if (null != fileLock) { 161dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 162dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fileLock.release(); 163dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IOException e) { 164dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // do nothing 165dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 166dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 167dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 168dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes if (null != fileOfReadOnlyFileChannel) { 169dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fileOfReadOnlyFileChannel.delete(); 170dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 171dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes if (null != fileOfWriteOnlyFileChannel) { 172dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fileOfWriteOnlyFileChannel.delete(); 173dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 174dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes if (null != fileOfReadWriteFileChannel) { 175dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fileOfReadWriteFileChannel.delete(); 176dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 177dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes if (null != datagramChannelSender) { 178dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 179dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes datagramChannelSender.close(); 180dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IOException e) { 181dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // do nothing 182dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 183dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 184dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes if (null != datagramChannelReceiver) { 185dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 186dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes datagramChannelReceiver.close(); 187dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IOException e) { 188dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // do nothing 189dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 190dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 191dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes if (null != serverSocketChannel) { 192dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 193dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes serverSocketChannel.close(); 194dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IOException e) { 195dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // do nothing 196dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 197dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 198dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes if (null != socketChannelSender) { 199dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 200dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes socketChannelSender.close(); 201dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IOException e) { 202dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // do nothing 203dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 204dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 205dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes if (null != socketChannelReceiver) { 206dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 207dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes socketChannelReceiver.close(); 208dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IOException e) { 209dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // do nothing 210dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 211dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 212dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes if (null != pipe) { 213dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes if (null != pipe.source()) { 214dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 215dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes pipe.source().close(); 216dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IOException e) { 217dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // do nothing 218dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 219dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 220dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes if (null != pipe.sink()) { 221dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 222dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes pipe.sink().close(); 223dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IOException e) { 224dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // do nothing 225dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 226dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 227dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 228dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 229dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 230dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 231dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#force(boolean) 232dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 233dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_forceJ() throws Exception { 234dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer writeBuffer = ByteBuffer.wrap(CONTENT_AS_BYTES); 235dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeOnlyFileChannel.write(writeBuffer); 236dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeOnlyFileChannel.force(true); 237dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 238dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes byte[] readBuffer = new byte[CONTENT_AS_BYTES_LENGTH]; 239dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fis = new FileInputStream(fileOfWriteOnlyFileChannel); 240dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fis.read(readBuffer); 241dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(Arrays.equals(CONTENT_AS_BYTES, readBuffer)); 242dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 243dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 244dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 245dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#force(boolean) 246dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 247dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_forceJ_closed() throws Exception { 248dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeOnlyFileChannel.close(); 249dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 250dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeOnlyFileChannel.force(true); 251dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 252dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ClosedChannelException expected) { 253dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 254dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 255dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 256dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeOnlyFileChannel.force(false); 257dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 258dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ClosedChannelException expected) { 259dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 260dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 261dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 262dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 263dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#force(boolean) 264dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 265dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_forceJ_ReadOnlyChannel() throws Exception { 266dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // force on a read only file channel has no effect. 267dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readOnlyFileChannel.force(true); 268dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readOnlyFileChannel.force(false); 269dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 270dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 271dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 272dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#position() 273dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 274dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_position_Init() throws Exception { 275dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(0, readOnlyFileChannel.position()); 276dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(0, writeOnlyFileChannel.position()); 277dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(0, readWriteFileChannel.position()); 278dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 279dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 280dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 281dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#position() 282dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 283dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_position_ReadOnly() throws Exception { 284dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeDataToFile(fileOfReadOnlyFileChannel); 285dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 286dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(0, readOnlyFileChannel.position()); 287dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer readBuffer = ByteBuffer.allocate(CONTENT_LENGTH); 288dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readOnlyFileChannel.read(readBuffer); 289dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(CONTENT_LENGTH, readOnlyFileChannel.position()); 290dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 291dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 292dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 293dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * Initializes test file. 294dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * 295dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @param file 296dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @throws FileNotFoundException 297dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @throws IOException 298dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 299dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes private void writeDataToFile(File file) throws FileNotFoundException, 300dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes IOException { 301dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes FileOutputStream fos = new FileOutputStream(file); 302dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 303dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fos.write(CONTENT_AS_BYTES); 304dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } finally { 305dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fos.close(); 306dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 307dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 308dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 309dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 310dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * Initializes large test file. 311dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * 312dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @param file the file to be written 313dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @param size the content size to be written 314dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @throws FileNotFoundException 315dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @throws IOException 316dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 317dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes private void writeLargeDataToFile(File file, int size) throws FileNotFoundException, 318dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes IOException { 319dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes FileOutputStream fos = new FileOutputStream(file); 320dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes byte[] buf = new byte[size]; 321dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 322dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 323dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // we don't care about content - just need a particular file size 324dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fos.write(buf); 325dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } finally { 326dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fos.close(); 327dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 328dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 329dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 330dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 331dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#position() 332dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 333dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_position_WriteOnly() throws Exception { 334dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer writeBuffer = ByteBuffer.wrap(CONTENT_AS_BYTES); 335dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeOnlyFileChannel.write(writeBuffer); 336dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(CONTENT_LENGTH, writeOnlyFileChannel.position()); 337dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 338dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 339dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 340dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#position() 341dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 342dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_position_ReadWrite() throws Exception { 343dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeDataToFile(fileOfReadWriteFileChannel); 344dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 345dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(0, readWriteFileChannel.position()); 346dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer readBuffer = ByteBuffer.allocate(CONTENT_LENGTH); 347dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readWriteFileChannel.read(readBuffer); 348dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(CONTENT_LENGTH, readWriteFileChannel.position()); 349dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 350dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer writeBuffer = ByteBuffer.wrap(CONTENT_AS_BYTES); 351dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readWriteFileChannel.write(writeBuffer); 352dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(CONTENT_LENGTH * 2, readWriteFileChannel.position()); 353dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 354dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 355dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 356dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#position() 357dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 358dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_position_Closed() throws Exception { 359dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readOnlyFileChannel.close(); 360dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 361dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readOnlyFileChannel.position(); 362dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw ClosedChannelException"); 363dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ClosedChannelException expected) { 364dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 365dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 366dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeOnlyFileChannel.close(); 367dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 368dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeOnlyFileChannel.position(); 369dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw ClosedChannelException"); 370dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ClosedChannelException expected) { 371dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 372dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 373dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readWriteFileChannel.close(); 374dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 375dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readWriteFileChannel.position(); 376dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw ClosedChannelException"); 377dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ClosedChannelException expected) { 378dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 379dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 380dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 381dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 382dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#position(long) 383dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 384dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_positionJ_Closed() throws Exception { 385dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes final long POSITION = 100; 386dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 387dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readOnlyFileChannel.close(); 388dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 389dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readOnlyFileChannel.position(POSITION); 390dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 391dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ClosedChannelException expected) { 392dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 393dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 394dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeOnlyFileChannel.close(); 395dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 396dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeOnlyFileChannel.position(POSITION); 397dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 398dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ClosedChannelException expected) { 399dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 400dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 401dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readWriteFileChannel.close(); 402dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 403dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readWriteFileChannel.position(POSITION); 404dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 405dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ClosedChannelException expected) { 406dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 407dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 408dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 409dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 410dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#position(long) 411dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 412dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_positionJ_Negative() throws Exception { 413dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes final long NEGATIVE_POSITION = -1; 414dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 415dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readOnlyFileChannel.position(NEGATIVE_POSITION); 416dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw IllegalArgumentException"); 417dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IllegalArgumentException e) { 418dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 419dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 420dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 421dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 422dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeOnlyFileChannel.position(NEGATIVE_POSITION); 423dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw IllegalArgumentException"); 424dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IllegalArgumentException e) { 425dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 426dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 427dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 428dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 429dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readWriteFileChannel.position(NEGATIVE_POSITION); 430dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw IllegalArgumentException"); 431dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IllegalArgumentException e) { 432dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 433dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 434dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 435dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 436dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 437dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#position(long) 438dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 439dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_positionJ_ReadOnly() throws Exception { 440dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeDataToFile(fileOfReadOnlyFileChannel); 441dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 442dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // set the position of the read only file channel to POSITION 443dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes final int POSITION = 4; 444dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readOnlyFileChannel.position(POSITION); 445dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 446dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // reads the content left to readBuffer through read only file channel 447dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer readBuffer = ByteBuffer.allocate(CONTENT_LENGTH); 448dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes int count = readOnlyFileChannel.read(readBuffer); 449dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(CONTENT_LENGTH - POSITION, count); 450dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 451dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // asserts the content read is the part which stays beyond the POSITION 452dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readBuffer.flip(); 453dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes int i = POSITION; 454dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes while (readBuffer.hasRemaining()) { 455dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(CONTENT_AS_BYTES[i], readBuffer.get()); 456dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes i++; 457dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 458dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 459dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 460dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 461dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#position(long) 462dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 463dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_positionJ_WriteOnly() throws Exception { 464dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeDataToFile(fileOfWriteOnlyFileChannel); 465dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 466dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // init data to write 467dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer writeBuffer = ByteBuffer.wrap(CONTENT_AS_BYTES); 468dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 469dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // set the position of the write only file channel to POSITION 470dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes final int POSITION = 4; 471dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeOnlyFileChannel.position(POSITION); 472dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 473dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // writes to the write only file channel 474dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeOnlyFileChannel.write(writeBuffer); 475dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // force to write out. 476dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeOnlyFileChannel.close(); 477dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 478dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // gets the result of the write only file channel 479dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes byte[] result = new byte[POSITION + CONTENT_LENGTH]; 480dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fis = new FileInputStream(fileOfWriteOnlyFileChannel); 481dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fis.read(result); 482dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 483dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // constructs the expected result which has content[0... POSITION] plus 484dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // content[0...length()] 485dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes byte[] expectedResult = new byte[POSITION + CONTENT_LENGTH]; 486dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes System.arraycopy(CONTENT_AS_BYTES, 0, expectedResult, 0, POSITION); 487dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes System.arraycopy(CONTENT_AS_BYTES, 0, expectedResult, POSITION, 488dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes CONTENT_LENGTH); 489dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 490dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // asserts result of the write only file channel same as expected 491dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(Arrays.equals(expectedResult, result)); 492dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 493dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 494dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 495dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#size() 496dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 497dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_size_Init() throws Exception { 498dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(0, readOnlyFileChannel.size()); 499dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(0, writeOnlyFileChannel.size()); 500dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(0, readWriteFileChannel.size()); 501dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 502dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 503dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 504dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#size() 505dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 506dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_size() throws Exception { 507dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeDataToFile(fileOfReadOnlyFileChannel); 508dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(fileOfReadOnlyFileChannel.length(), readOnlyFileChannel 509dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes .size()); 510dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 511dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 512dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // REGRESSION test for read(ByteBuffer[], int, int) on special files 513dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 514dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes FileChannel specialFile = 515dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes new FileInputStream("/dev/zero").getChannel(); 516dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(0, specialFile.size()); 517dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer buf = ByteBuffer.allocate(8); 518dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(8, specialFile.read(buf)); 519dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer[] bufs = { ByteBuffer.allocate(8) }; 520dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(8, specialFile.read(bufs, 0, 1)); 521dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes specialFile.close(); 522dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (FileNotFoundException e) { 523dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // skip test if special file doesn't exist 524dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 525dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 526dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 527dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 528dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#size() 529dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 530dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_size_Closed() throws Exception { 531dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readOnlyFileChannel.close(); 532dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 533dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readOnlyFileChannel.size(); 534dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw ClosedChannelException"); 535dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ClosedChannelException e) { 536dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 537dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 538dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 539dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeOnlyFileChannel.close(); 540dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 541dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeOnlyFileChannel.size(); 542dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw ClosedChannelException"); 543dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ClosedChannelException e) { 544dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 545dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 546dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 547dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readWriteFileChannel.close(); 548dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 549dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readWriteFileChannel.size(); 550dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw ClosedChannelException"); 551dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ClosedChannelException e) { 552dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 553dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 554dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 555dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 556dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 557dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#truncate(long) 558dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 559dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_truncateJ_Closed() throws Exception { 560dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readOnlyFileChannel.close(); 561dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 562dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readOnlyFileChannel.truncate(0); 563dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw ClosedChannelException"); 564dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ClosedChannelException e) { 565dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 566dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 567dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 568dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeOnlyFileChannel.close(); 569dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 570dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeOnlyFileChannel.truncate(0); 571dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw ClosedChannelException"); 572dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ClosedChannelException e) { 573dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 574dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 575dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 576dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readWriteFileChannel.close(); 577dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 578dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readWriteFileChannel.truncate(-1); 579dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw ClosedChannelException"); 580dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ClosedChannelException e) { 581dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 582dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 583dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 584dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 585dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 586dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#truncate(long) 587dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 588dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_truncateJ_IllegalArgument() throws Exception { 589dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // regression test for Harmony-941 590dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 591dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readOnlyFileChannel.truncate(-1); 592dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw IllegalArgumentException"); 593dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IllegalArgumentException e) { 594dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 595dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 596dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 597dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 598dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeOnlyFileChannel.truncate(-1); 599dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw IllegalArgumentException"); 600dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IllegalArgumentException e) { 601dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 602dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 603dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 604dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 605dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readWriteFileChannel.truncate(-1); 606dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw IllegalArgumentException"); 607dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IllegalArgumentException e) { 608dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 609dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 610dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 611dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 612dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 613dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#truncate(long) 614dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 615dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_truncateJ_ReadOnly() throws Exception { 616dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeDataToFile(fileOfReadOnlyFileChannel); 617dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 618dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readOnlyFileChannel.truncate(readOnlyFileChannel.size()); 619dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw NonWritableChannelException."); 620dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NonWritableChannelException e) { 621dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 622dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 623dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 624dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 625dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readOnlyFileChannel.truncate(0); 626dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw NonWritableChannelException."); 627dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NonWritableChannelException e) { 628dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 629dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 630dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 631dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 632dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 633dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#truncate(long) 634dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 635dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_truncateJ() throws Exception { 636dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeDataToFile(fileOfReadWriteFileChannel); 637dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 638dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes int truncateLength = CONTENT_LENGTH + 2; 639dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(readWriteFileChannel, readWriteFileChannel 640dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes .truncate(truncateLength)); 641dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(CONTENT_LENGTH, fileOfReadWriteFileChannel.length()); 642dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 643dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes truncateLength = CONTENT_LENGTH; 644dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(readWriteFileChannel, readWriteFileChannel 645dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes .truncate(truncateLength)); 646dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(CONTENT_LENGTH, fileOfReadWriteFileChannel.length()); 647dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 648dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes truncateLength = CONTENT_LENGTH / 2; 649dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(readWriteFileChannel, readWriteFileChannel 650dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes .truncate(truncateLength)); 651dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(truncateLength, fileOfReadWriteFileChannel.length()); 652dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 653dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 654dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 655dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#lock() 656dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 657dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_lock() throws Exception { 658dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes MockFileChannel mockFileChannel = new MockFileChannel(); 659dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // Verify that calling lock() leads to the method 660dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // lock(long, long, boolean) being called with a 0 for the 661dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // first parameter, Long.MAX_VALUE as the second parameter and false 662dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // as the third parameter. 663dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes mockFileChannel.lock(); 664dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(mockFileChannel.isLockCalled); 665dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 666dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 667dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 668dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#lock(long, long, boolean) 669dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 670dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_lockJJZ_Closed() throws Exception { 671dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readOnlyFileChannel.close(); 672dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 673dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readOnlyFileChannel.lock(0, 10, false); 674dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw ClosedChannelException"); 675dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ClosedChannelException e) { 676dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 677dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 678dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 679dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeOnlyFileChannel.close(); 680dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 681dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeOnlyFileChannel.lock(0, 10, false); 682dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw ClosedChannelException"); 683dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ClosedChannelException e) { 684dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 685dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 686dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 687dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readWriteFileChannel.close(); 688dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 689dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readWriteFileChannel.lock(0, 10, false); 690dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw ClosedChannelException"); 691dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ClosedChannelException e) { 692dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 693dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 694dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 695dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // throws ClosedChannelException before IllegalArgumentException 696dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 697dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readWriteFileChannel.lock(-1, 0, false); 698dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw ClosedChannelException"); 699dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ClosedChannelException e) { 700dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 701dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 702dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 703dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 704dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 705dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#lock(long, long, boolean) 706dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 707dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_lockJJZ_IllegalArgument() throws Exception { 708dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 709dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeOnlyFileChannel.lock(0, -1, false); 710dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw IllegalArgumentException"); 711dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IllegalArgumentException e) { 712dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 713dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 714dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 715dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 716dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeOnlyFileChannel.lock(-1, 0, false); 717dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw IllegalArgumentException"); 718dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IllegalArgumentException e) { 719dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 720dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 721dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 722dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 723dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readWriteFileChannel.lock(-1, -1, false); 724dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw IllegalArgumentException"); 725dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IllegalArgumentException e) { 726dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 727dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 728dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 729dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 730dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readWriteFileChannel.lock(Long.MAX_VALUE, 1, false); 731dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw IllegalArgumentException"); 732dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IllegalArgumentException e) { 733dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 734dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 735dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 736dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 737dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 738dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#lock(long, long, boolean) 739dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 740dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_lockJJZ_NonWritable() throws Exception { 741dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 742dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readOnlyFileChannel.lock(0, 10, false); 743dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw NonWritableChannelException"); 744dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NonWritableChannelException e) { 745dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 746dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 747dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 748dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // throws NonWritableChannelException before IllegalArgumentException 749dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 750dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readOnlyFileChannel.lock(-1, 0, false); 751dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw NonWritableChannelException"); 752dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NonWritableChannelException e) { 753dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 754dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 755dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 756dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 757dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 758dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#lock(long, long, boolean) 759dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 760dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_lockJJZ_NonReadable() throws Exception { 761dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 762dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeOnlyFileChannel.lock(0, 10, true); 763dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw NonReadableChannelException"); 764dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NonReadableChannelException e) { 765dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 766dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 767dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 768dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // throws NonReadableChannelException before IllegalArgumentException 769dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 770dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeOnlyFileChannel.lock(-1, 0, true); 771dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw NonReadableChannelException"); 772dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NonReadableChannelException e) { 773dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 774dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 775dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 776dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 777dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 778dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#lock(long, long, boolean) 779dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 780dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_lockJJZ_Shared() throws Exception { 781dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes final long POSITION = 100; 782dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes final long SIZE = 200; 783dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fileLock = readOnlyFileChannel.lock(POSITION, SIZE, true); 784dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(fileLock.isValid()); 785dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // fileLock.isShared depends on whether the underlying platform support 786dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // shared lock, but it works on Windows & Linux. 787dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(fileLock.isShared()); 788dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertSame(readOnlyFileChannel, fileLock.channel()); 789dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(POSITION, fileLock.position()); 790dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(SIZE, fileLock.size()); 791dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 792dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 793dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 794dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#lock(long, long, boolean) 795dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 796dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_lockJJZ_NotShared() throws Exception { 797dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes final long POSITION = 100; 798dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes final long SIZE = 200; 799dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fileLock = writeOnlyFileChannel.lock(POSITION, SIZE, false); 800dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(fileLock.isValid()); 801dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(fileLock.isShared()); 802dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertSame(writeOnlyFileChannel, fileLock.channel()); 803dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(POSITION, fileLock.position()); 804dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(SIZE, fileLock.size()); 805dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 806dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 807dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 808dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#lock(long, long, boolean) 809dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 810dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_lockJJZ_Long_MAX_VALUE() throws Exception { 811dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes final long POSITION = 0; 812dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes final long SIZE = Long.MAX_VALUE; 813dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fileLock = readOnlyFileChannel.lock(POSITION, SIZE, true); 814dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(fileLock.isValid()); 815dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(fileLock.isShared()); 816dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(POSITION, fileLock.position()); 817dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(SIZE, fileLock.size()); 818dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertSame(readOnlyFileChannel, fileLock.channel()); 819dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 820dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 821dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 822dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#lock(long, long, boolean) 823dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 824dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_lockJJZ_Overlapping() throws Exception { 825dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes final long POSITION = 100; 826dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes final long SIZE = 200; 827dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fileLock = writeOnlyFileChannel.lock(POSITION, SIZE, false); 828dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(fileLock.isValid()); 829dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 830dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 831dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeOnlyFileChannel.lock(POSITION + 1, SIZE, false); 832dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw OverlappingFileLockException"); 833dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (OverlappingFileLockException e) { 834dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 835dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 836dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 837dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 838dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 839dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#lock(long, long, boolean) 840dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 841dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_lockJJZ_NotOverlapping() throws Exception { 842dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes final long POSITION = 100; 843dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes final long SIZE = 200; 844dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes FileLock fileLock1 = writeOnlyFileChannel.lock(POSITION, SIZE, false); 845dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(fileLock1.isValid()); 846dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes FileLock fileLock2 = writeOnlyFileChannel.lock(POSITION + SIZE, SIZE, 847dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes false); 848dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(fileLock2.isValid()); 849dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 850dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 851dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 852dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#lock(long,long,boolean) 853dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 854dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_lockJJZ_After_Release() throws Exception { 855dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fileLock = writeOnlyFileChannel.lock(0, 10, false); 856dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fileLock.release(); 857dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // after release file lock can be obtained again. 858dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fileLock = writeOnlyFileChannel.lock(0, 10, false); 859dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(fileLock.isValid()); 860dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 861dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 862dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 863dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#tryLock() 864dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 865dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_tryLock() throws Exception { 866dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes MockFileChannel mockFileChannel = new MockFileChannel(); 867dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // Verify that calling tryLock() leads to the method 868dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // tryLock(long, long, boolean) being called with a 0 for the 869dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // first parameter, Long.MAX_VALUE as the second parameter and false 870dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // as the third parameter. 871dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes mockFileChannel.tryLock(); 872dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(mockFileChannel.isTryLockCalled); 873dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 874dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 875dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 876dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#tryLock(long, long, boolean) 877dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 878dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_tryLockJJZ_Closed() throws Exception { 879dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readOnlyFileChannel.close(); 880dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 881dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readOnlyFileChannel.tryLock(0, 10, false); 882dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw ClosedChannelException"); 883dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ClosedChannelException e) { 884dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 885dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 886dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 887dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeOnlyFileChannel.close(); 888dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 889dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeOnlyFileChannel.tryLock(0, 10, false); 890dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw ClosedChannelException"); 891dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ClosedChannelException e) { 892dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 893dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 894dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 895dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readWriteFileChannel.close(); 896dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 897dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readWriteFileChannel.tryLock(0, 10, false); 898dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw ClosedChannelException"); 899dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ClosedChannelException e) { 900dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 901dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 902dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 903dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // throws ClosedChannelException before IllegalArgumentException 904dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 905dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readWriteFileChannel.tryLock(-1, 0, false); 906dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw ClosedChannelException"); 907dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ClosedChannelException e) { 908dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 909dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 910dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 911dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 912dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 913dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#tryLock(long, long, boolean) 914dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 915dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_tryLockJJZ_IllegalArgument() throws Exception { 916dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 917dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeOnlyFileChannel.tryLock(0, -1, false); 918dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw IllegalArgumentException"); 919dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IllegalArgumentException e) { 920dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 921dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 922dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 923dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 924dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeOnlyFileChannel.tryLock(-1, 0, false); 925dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw IllegalArgumentException"); 926dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IllegalArgumentException e) { 927dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 928dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 929dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 930dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 931dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readWriteFileChannel.tryLock(-1, -1, false); 932dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw IllegalArgumentException"); 933dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IllegalArgumentException e) { 934dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 935dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 936dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 937dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 938dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readWriteFileChannel.tryLock(Long.MAX_VALUE, 1, false); 939dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw IllegalArgumentException"); 940dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IllegalArgumentException e) { 941dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 942dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 943dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 944dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 945dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 946dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#tryLock(long, long, boolean) 947dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 948dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_tryLockJJZ_NonWritable() throws Exception { 949dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 950dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readOnlyFileChannel.tryLock(0, 10, false); 951dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw NonWritableChannelException"); 952dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NonWritableChannelException e) { 953dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 954dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 955dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 956dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // throws NonWritableChannelException before IllegalArgumentException 957dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 958dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readOnlyFileChannel.tryLock(-1, 0, false); 959dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw NonWritableChannelException"); 960dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NonWritableChannelException e) { 961dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 962dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 963dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 964dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 965dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 966dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#tryLock(long, long, boolean) 967dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 968dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_tryLockJJZ_NonReadable() throws Exception { 969dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 970dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeOnlyFileChannel.tryLock(0, 10, true); 971dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw NonReadableChannelException"); 972dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NonReadableChannelException e) { 973dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 974dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 975dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 976dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // throws NonReadableChannelException before IllegalArgumentException 977dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 978dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeOnlyFileChannel.tryLock(-1, 0, true); 979dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw NonReadableChannelException"); 980dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NonReadableChannelException e) { 981dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 982dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 983dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 984dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 985dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 986dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#tryLock(long, long, boolean) 987dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 988dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_tryLockJJZ_Shared() throws Exception { 989dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes final long POSITION = 100; 990dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes final long SIZE = 200; 991dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fileLock = readOnlyFileChannel.tryLock(POSITION, SIZE, true); 992dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(fileLock.isValid()); 993dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // fileLock.isShared depends on whether the underlying platform support 994dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // shared lock, but it works on Windows & Linux. 995dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(fileLock.isShared()); 996dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertSame(readOnlyFileChannel, fileLock.channel()); 997dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(POSITION, fileLock.position()); 998dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(SIZE, fileLock.size()); 999dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1000dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1001dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 1002dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#tryLock(long, long, boolean) 1003dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 1004dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_tryLockJJZ_NotShared() throws Exception { 1005dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes final long POSITION = 100; 1006dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes final long SIZE = 200; 1007dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fileLock = writeOnlyFileChannel.tryLock(POSITION, SIZE, false); 1008dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(fileLock.isValid()); 1009dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(fileLock.isShared()); 1010dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertSame(writeOnlyFileChannel, fileLock.channel()); 1011dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(POSITION, fileLock.position()); 1012dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(SIZE, fileLock.size()); 1013dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1014dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1015dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 1016dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#tryLock(long, long, boolean) 1017dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 1018dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_tryLockJJZ_Long_MAX_VALUE() throws Exception { 1019dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes final long POSITION = 0; 1020dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes final long SIZE = Long.MAX_VALUE; 1021dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fileLock = readOnlyFileChannel.tryLock(POSITION, SIZE, true); 1022dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(fileLock.isValid()); 1023dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(fileLock.isShared()); 1024dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(POSITION, fileLock.position()); 1025dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(SIZE, fileLock.size()); 1026dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertSame(readOnlyFileChannel, fileLock.channel()); 1027dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1028dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1029dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 1030dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#tryLock(long, long, boolean) 1031dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 1032dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_tryLockJJZ_Overlapping() throws Exception { 1033dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes final long POSITION = 100; 1034dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes final long SIZE = 200; 1035dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fileLock = writeOnlyFileChannel.lock(POSITION, SIZE, false); 1036dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(fileLock.isValid()); 1037dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1038dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1039dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeOnlyFileChannel.lock(POSITION + 1, SIZE, false); 1040dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw OverlappingFileLockException"); 1041dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (OverlappingFileLockException e) { 1042dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 1043dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1044dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1045dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1046dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 1047dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#tryLock(long, long, boolean) 1048dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 1049dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_tryLockJJZ_NotOverlapping() throws Exception { 1050dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes final long POSITION = 100; 1051dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes final long SIZE = 200; 1052dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes FileLock fileLock1 = writeOnlyFileChannel 1053dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes .tryLock(POSITION, SIZE, false); 1054dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(fileLock1.isValid()); 1055dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1056dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes FileLock fileLock2 = writeOnlyFileChannel.tryLock(POSITION + SIZE, 1057dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes SIZE, false); 1058dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(fileLock2.isValid()); 1059dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1060dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1061dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 1062dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#tryLock(long,long,boolean) 1063dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 1064dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_tryLockJJZ_After_Release() throws Exception { 1065dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fileLock = writeOnlyFileChannel.tryLock(0, 10, false); 1066dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fileLock.release(); 1067dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1068dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // after release file lock can be obtained again. 1069dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fileLock = writeOnlyFileChannel.tryLock(0, 10, false); 1070dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(fileLock.isValid()); 1071dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1072dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1073dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 1074dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#read(ByteBuffer) 1075dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 1076dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_readLByteBuffer_Null() throws Exception { 1077dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer readBuffer = null; 1078dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1079dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1080dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readOnlyFileChannel.read(readBuffer); 1081dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw NullPointerException"); 1082dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NullPointerException e) { 1083dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 1084dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1085dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1086dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1087dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readWriteFileChannel.read(readBuffer); 1088dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw NullPointerException"); 1089dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NullPointerException e) { 1090dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 1091dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1092dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1093dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1094dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 1095dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#read(ByteBuffer) 1096dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 1097dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_readLByteBuffer_Closed() throws Exception { 1098dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer readBuffer = ByteBuffer.allocate(CAPACITY); 1099dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1100dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readOnlyFileChannel.close(); 1101dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1102dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readOnlyFileChannel.read(readBuffer); 1103dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw ClosedChannelException"); 1104dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ClosedChannelException e) { 1105dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 1106dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1107dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1108dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeOnlyFileChannel.close(); 1109dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1110dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeOnlyFileChannel.read(readBuffer); 1111dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw ClosedChannelException"); 1112dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ClosedChannelException e) { 1113dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 1114dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1115dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1116dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readWriteFileChannel.close(); 1117dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1118dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readWriteFileChannel.read(readBuffer); 1119dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw ClosedChannelException"); 1120dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ClosedChannelException e) { 1121dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 1122dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1123dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1124dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // should throw ClosedChannelException first 1125dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readBuffer = null; 1126dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1127dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readWriteFileChannel.read(readBuffer); 1128dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 1129dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ClosedChannelException expected) { 1130dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NullPointerException expected) { 1131dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1132dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1133dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1134dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_readLByteBuffer_WriteOnly() throws Exception { 1135dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer readBuffer = ByteBuffer.allocate(CAPACITY); 1136dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1137dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1138dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeOnlyFileChannel.read(readBuffer); 1139dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 1140dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NonReadableChannelException expected) { 1141dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1142dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1143dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readBuffer = null; 1144dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1145dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeOnlyFileChannel.read(readBuffer); 1146dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 1147dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NonReadableChannelException expected) { 1148dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NullPointerException expected) { 1149dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1150dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1151dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1152dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_readLByteBuffer_EmptyFile() throws Exception { 1153dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer readBuffer = ByteBuffer.allocate(CAPACITY); 1154dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes int result = readOnlyFileChannel.read(readBuffer); 1155dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(-1, result); 1156dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(0, readBuffer.position()); 1157dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1158dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1159dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 1160dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#read(ByteBuffer) 1161dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 1162dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_readLByteBuffer_LimitedCapacity() throws Exception { 1163dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeDataToFile(fileOfReadOnlyFileChannel); 1164dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1165dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer readBuffer = ByteBuffer.allocate(LIMITED_CAPACITY); 1166dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes int result = readOnlyFileChannel.read(readBuffer); 1167dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(LIMITED_CAPACITY, result); 1168dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(LIMITED_CAPACITY, readBuffer.position()); 1169dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readBuffer.flip(); 1170dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes for (int i = 0; i < LIMITED_CAPACITY; i++) { 1171dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(CONTENT_AS_BYTES[i], readBuffer.get()); 1172dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1173dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1174dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1175dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_readLByteBuffer() throws Exception { 1176dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeDataToFile(fileOfReadOnlyFileChannel); 1177dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1178dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer readBuffer = ByteBuffer.allocate(CONTENT_AS_BYTES_LENGTH); 1179dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes int result = readOnlyFileChannel.read(readBuffer); 1180dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(CONTENT_AS_BYTES_LENGTH, result); 1181dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(CONTENT_AS_BYTES_LENGTH, readBuffer.position()); 1182dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readBuffer.flip(); 1183dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes for (int i = 0; i < CONTENT_AS_BYTES_LENGTH; i++) { 1184dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(CONTENT_AS_BYTES[i], readBuffer.get()); 1185dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1186dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1187dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1188dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_readLByteBufferJ_Null() throws Exception { 1189dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1190dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readOnlyFileChannel.read(null, 0); 1191dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 1192dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NullPointerException expected) { 1193dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1194dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1195dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1196dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readWriteFileChannel.read(null, 0); 1197dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 1198dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NullPointerException expected) { 1199dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1200dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1201dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1202dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_readLByteBufferJ_Closed() throws Exception { 1203dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer readBuffer = ByteBuffer.allocate(CAPACITY); 1204dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1205dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readOnlyFileChannel.close(); 1206dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1207dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readOnlyFileChannel.read(readBuffer, 0); 1208dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 1209dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ClosedChannelException expected) { 1210dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1211dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1212dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readWriteFileChannel.close(); 1213dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1214dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readWriteFileChannel.read(readBuffer, 0); 1215dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 1216dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ClosedChannelException expected) { 1217dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1218dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1219dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1220dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_readLByteBufferJ_IllegalArgument() throws Exception { 1221dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer readBuffer = ByteBuffer.allocate(CAPACITY); 1222dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1223dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1224dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readOnlyFileChannel.read(readBuffer, -1); 1225dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 1226dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IllegalArgumentException expected) { 1227dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1228dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1229dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1230dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeOnlyFileChannel.read(readBuffer, -1); 1231dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 1232dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IllegalArgumentException expected) { 1233dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1234dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1235dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1236dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readWriteFileChannel.read(readBuffer, -1); 1237dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 1238dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IllegalArgumentException expected) { 1239dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1240dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1241dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1242dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_readLByteBufferJ_WriteOnly() throws Exception { 1243dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer readBuffer = ByteBuffer.allocate(CAPACITY); 1244dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1245dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1246dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeOnlyFileChannel.read(readBuffer, 0); 1247dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 1248dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NonReadableChannelException expected) { 1249dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1250dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1251dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1252dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_readLByteBufferJ_Emptyfile() throws Exception { 1253dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer readBuffer = ByteBuffer.allocate(CAPACITY); 1254dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes int result = readOnlyFileChannel.read(readBuffer, 0); 1255dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(-1, result); 1256dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(0, readBuffer.position()); 1257dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1258dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1259dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_readLByteBufferJ_Position_BeyondFileLimit() throws Exception { 1260dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeDataToFile(fileOfReadOnlyFileChannel); 1261dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1262dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer readBuffer = ByteBuffer.allocate(CAPACITY); 1263dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes int result = readOnlyFileChannel.read(readBuffer, 1264dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes CONTENT_AS_BYTES.length); 1265dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(-1, result); 1266dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(0, readBuffer.position()); 1267dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1268dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1269dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_readLByteBufferJ_Position_As_Long() throws Exception { 1270dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer readBuffer = ByteBuffer.allocate(CAPACITY); 1271dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1272dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readOnlyFileChannel.read(readBuffer, Long.MAX_VALUE); 1273dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IOException expected) { 1274dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1275dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1276dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1277dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_readLByteBufferJ() throws Exception { 1278dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeDataToFile(fileOfReadOnlyFileChannel); 1279dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer readBuffer = ByteBuffer.allocate(CAPACITY); 1280dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1281dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes final int BUFFER_POSITION = 1; 1282dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readBuffer.position(BUFFER_POSITION); 1283dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1284dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes final int POSITION = 2; 1285dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes int result = readOnlyFileChannel.read(readBuffer, POSITION); 1286dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(CONTENT_AS_BYTES_LENGTH - POSITION, result); 1287dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(BUFFER_POSITION + result, readBuffer.position()); 1288dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1289dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readBuffer.flip(); 1290dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readBuffer.position(BUFFER_POSITION); 1291dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes for (int i = POSITION; i < CONTENT_AS_BYTES_LENGTH; i++) { 1292dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(CONTENT_AS_BYTES[i], readBuffer.get()); 1293dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1294dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1295dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1296dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 1297dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#read(ByteBuffer[]) 1298dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 1299dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_read$LByteBuffer() throws Exception { 1300dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // regression test for Harmony-849 1301dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeDataToFile(fileOfReadOnlyFileChannel); 1302dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer[] readBuffers = new ByteBuffer[2]; 1303dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readBuffers[0] = ByteBuffer.allocate(CAPACITY); 1304dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readBuffers[1] = ByteBuffer.allocate(CAPACITY); 1305dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1306dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes long readCount = readOnlyFileChannel.read(readBuffers); 1307dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(CONTENT_AS_BYTES_LENGTH, readCount); 1308dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(CONTENT_AS_BYTES_LENGTH, readBuffers[0].position()); 1309dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(0, readBuffers[1].position()); 1310dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readBuffers[0].flip(); 1311dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes for (int i = 0; i < CONTENT_AS_BYTES_LENGTH; i++) { 1312dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(CONTENT_AS_BYTES[i], readBuffers[0].get()); 1313dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1314dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1315dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1316dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 1317dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#read(ByteBuffer[]) 1318dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 1319dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_read$LByteBuffer_mock() throws Exception { 1320dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes FileChannel mockChannel = new MockFileChannel(); 1321dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer[] buffers = new ByteBuffer[2]; 1322dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes mockChannel.read(buffers); 1323dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // Verify that calling read(ByteBuffer[] dsts) leads to the method 1324dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // read(dsts, 0, dsts.length) 1325dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(((MockFileChannel)mockChannel).isReadCalled); 1326dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1327dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1328dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 1329dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#read(ByteBuffer[], int, int) 1330dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 1331dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_read$LByteBufferII_Null() throws Exception { 1332dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer[] readBuffers = null; 1333dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1334dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1335dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readOnlyFileChannel.read(readBuffers, 0, 1); 1336dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw NullPointerException"); 1337dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NullPointerException e) { 1338dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 1339dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1340dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1341dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1342dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readOnlyFileChannel.read(readBuffers, 1, 11); 1343dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw NullPointerException"); 1344dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NullPointerException e) { 1345dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 1346dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1347dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1348dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1349dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeOnlyFileChannel.read(readBuffers, 0, 1); 1350dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw NullPointerException"); 1351dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NullPointerException e) { 1352dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 1353dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1354dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1355dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1356dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readWriteFileChannel.read(readBuffers, 0, 1); 1357dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw NullPointerException"); 1358dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NullPointerException e) { 1359dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 1360dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1361dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1362dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // first throws NullPointerException 1363dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeOnlyFileChannel.close(); 1364dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1365dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeOnlyFileChannel.read(readBuffers, 0, 1); 1366dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw NullPointerException"); 1367dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NullPointerException e) { 1368dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 1369dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1370dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1371dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1372dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 1373dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#read(ByteBuffer[], int, int) 1374dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 1375dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_read$LByteBufferII_Closed() throws Exception { 1376dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer[] readBuffers = new ByteBuffer[2]; 1377dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readBuffers[0] = ByteBuffer.allocate(CAPACITY); 1378dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1379dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readOnlyFileChannel.close(); 1380dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1381dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readOnlyFileChannel.read(readBuffers, 0, 1); 1382dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw ClosedChannelException"); 1383dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ClosedChannelException e) { 1384dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 1385dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1386dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1387dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeOnlyFileChannel.close(); 1388dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1389dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeOnlyFileChannel.read(readBuffers, 0, 1); 1390dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw ClosedChannelException"); 1391dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ClosedChannelException e) { 1392dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 1393dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1394dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1395dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readWriteFileChannel.close(); 1396dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1397dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readWriteFileChannel.read(readBuffers, 0, 1); 1398dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw ClosedChannelException"); 1399dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ClosedChannelException e) { 1400dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 1401dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1402dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1403dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // regression test for Harmony-902 1404dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readBuffers[0] = null; 1405dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1406dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readOnlyFileChannel.read(readBuffers, 0, 1); 1407dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw ClosedChannelException"); 1408dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ClosedChannelException e) { 1409dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 1410dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1411dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1412dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeOnlyFileChannel.read(readBuffers, 0, 1); 1413dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw ClosedChannelException"); 1414dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ClosedChannelException e) { 1415dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 1416dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1417dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1418dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readWriteFileChannel.read(readBuffers, 0, 1); 1419dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw ClosedChannelException"); 1420dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ClosedChannelException e) { 1421dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 1422dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1423dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1424dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1425dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 1426dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#read(ByteBuffer[], int, int) 1427dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 1428dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_read$LByteBufferII_WriteOnly() throws Exception { 1429dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer[] readBuffers = new ByteBuffer[2]; 1430dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readBuffers[0] = ByteBuffer.allocate(CAPACITY); 1431dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1432dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1433dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeOnlyFileChannel.read(readBuffers, 0, 1); 1434dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw NonReadableChannelException"); 1435dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NonReadableChannelException e) { 1436dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 1437dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1438dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1439dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // first throws NonReadableChannelException. 1440dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readBuffers[0] = null; 1441dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1442dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeOnlyFileChannel.read(readBuffers, 0, 1); 1443dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw NonReadableChannelException"); 1444dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NonReadableChannelException e) { 1445dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 1446dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1447dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1448dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1449dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 1450dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#read(ByteBuffer[], int, int) 1451dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 1452dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_read$LByteBufferII_IndexOutOfBound() throws Exception { 1453dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer[] readBuffers = new ByteBuffer[2]; 1454dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readBuffers[0] = ByteBuffer.allocate(CAPACITY); 1455dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readBuffers[1] = ByteBuffer.allocate(CAPACITY); 1456dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1457dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1458dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readOnlyFileChannel.read(readBuffers, 2, 1); 1459dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 1460dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IndexOutOfBoundsException expected) { 1461dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1462dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1463dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1464dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readWriteFileChannel.read(null, -1, 0); 1465dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 1466dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IndexOutOfBoundsException expected) { 1467dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NullPointerException expected) { 1468dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1469dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1470dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1471dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeOnlyFileChannel.read(readBuffers, 0, 3); 1472dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 1473dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IndexOutOfBoundsException expected) { 1474dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1475dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1476dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1477dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readWriteFileChannel.read(readBuffers, -1, 0); 1478dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 1479dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IndexOutOfBoundsException expected) { 1480dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1481dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1482dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readWriteFileChannel.close(); 1483dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1484dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readWriteFileChannel.read(readBuffers, 0, 3); 1485dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 1486dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IndexOutOfBoundsException expected) { 1487dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1488dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1489dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1490dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 1491dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#read(ByteBuffer[], int, int) 1492dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 1493dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_read$LByteBufferII_EmptyFile() throws Exception { 1494dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer[] readBuffers = new ByteBuffer[2]; 1495dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readBuffers[0] = ByteBuffer.allocate(CAPACITY); 1496dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readBuffers[1] = ByteBuffer.allocate(CAPACITY); 1497dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes long result = readOnlyFileChannel.read(readBuffers, 0, 2); 1498dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(-1, result); 1499dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(0, readBuffers[0].position()); 1500dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(0, readBuffers[1].position()); 1501dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1502dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1503dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 1504dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#read(ByteBuffer[], int, int) 1505dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 1506dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_read$LByteBufferII_EmptyBuffers() throws Exception { 1507dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer[] readBuffers = new ByteBuffer[2]; 1508dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1509dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readOnlyFileChannel.read(readBuffers, 0, 2); 1510dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NullPointerException e) { 1511dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 1512dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1513dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1514dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeDataToFile(fileOfReadOnlyFileChannel); 1515dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readBuffers[0] = ByteBuffer.allocate(CAPACITY); 1516dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1517dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readOnlyFileChannel.read(readBuffers, 0, 2); 1518dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NullPointerException e) { 1519dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 1520dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1521dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1522dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes long result = readOnlyFileChannel.read(readBuffers, 0, 1); 1523dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(CONTENT_AS_BYTES_LENGTH, result); 1524dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1525dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1526dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 1527dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#read(ByteBuffer[], int, int) 1528dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 1529dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_read$LByteBufferII_EmptyFile_EmptyBuffers() 1530dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes throws Exception { 1531dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer[] readBuffers = new ByteBuffer[2]; 1532dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // will not throw NullPointerException 1533dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes long result = readOnlyFileChannel.read(readBuffers, 0, 0); 1534dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(0, result); 1535dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1536dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1537dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 1538dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#read(ByteBuffer[], int, int) 1539dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 1540dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_read$LByteBufferII_Length_Zero() throws Exception { 1541dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeDataToFile(fileOfReadOnlyFileChannel); 1542dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer[] readBuffers = new ByteBuffer[2]; 1543dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readBuffers[0] = ByteBuffer.allocate(LIMITED_CAPACITY); 1544dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readBuffers[1] = ByteBuffer.allocate(LIMITED_CAPACITY); 1545dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes long result = readOnlyFileChannel.read(readBuffers, 1, 0); 1546dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(0, result); 1547dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1548dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1549dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 1550dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#read(ByteBuffer[], int, int) 1551dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 1552dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_read$LByteBufferII_LimitedCapacity() throws Exception { 1553dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeDataToFile(fileOfReadOnlyFileChannel); 1554dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer[] readBuffers = new ByteBuffer[2]; 1555dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readBuffers[0] = ByteBuffer.allocate(LIMITED_CAPACITY); 1556dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readBuffers[1] = ByteBuffer.allocate(LIMITED_CAPACITY); 1557dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1558dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // reads to the second buffer 1559dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes long result = readOnlyFileChannel.read(readBuffers, 1, 1); 1560dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(LIMITED_CAPACITY, result); 1561dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(0, readBuffers[0].position()); 1562dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(LIMITED_CAPACITY, readBuffers[1].position()); 1563dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1564dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readBuffers[1].flip(); 1565dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes for (int i = 0; i < LIMITED_CAPACITY; i++) { 1566dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(CONTENT_AS_BYTES[i], readBuffers[1].get()); 1567dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1568dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1569dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1570dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 1571dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#read(ByteBuffer[], int, int) 1572dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 1573dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_read$LByteBufferII() throws Exception { 1574dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeDataToFile(fileOfReadOnlyFileChannel); 1575dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer[] readBuffers = new ByteBuffer[2]; 1576dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readBuffers[0] = ByteBuffer.allocate(CAPACITY); 1577dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readBuffers[1] = ByteBuffer.allocate(CAPACITY); 1578dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1579dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // writes to the second buffer 1580dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(CONTENT_AS_BYTES_LENGTH, readOnlyFileChannel.read( 1581dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readBuffers, 1, 1)); 1582dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(0, readBuffers[0].position()); 1583dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(CONTENT_AS_BYTES_LENGTH, readBuffers[1].position()); 1584dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1585dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readBuffers[1].flip(); 1586dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes for (int i = 0; i < CONTENT_AS_BYTES_LENGTH; i++) { 1587dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(CONTENT_AS_BYTES[i], readBuffers[1].get()); 1588dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1589dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1590dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1591dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 1592dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#isOpen() 1593dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 1594dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_isOpen() throws Exception { 1595dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // Regression for HARMONY-40 1596dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes File logFile = File.createTempFile("out", "tmp"); 1597dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes logFile.deleteOnExit(); 1598dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes FileOutputStream out = new FileOutputStream(logFile, true); 1599dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes FileChannel channel = out.getChannel(); 1600dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes out.write(1); 1601dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes out.close(); 1602dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse("Assert 0: Channel is still open", channel.isOpen()); 1603dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1604dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1605dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 1606dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#position() 1607dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 1608dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_position_append() throws Exception { 1609dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // Regression test for Harmony-508 1610dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes File tmpfile = File.createTempFile("FileOutputStream", "tmp"); 1611dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes tmpfile.deleteOnExit(); 1612dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes FileOutputStream fos = new FileOutputStream(tmpfile); 1613dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes byte[] b = new byte[10]; 1614dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes for (int i = 0; i < b.length; i++) { 1615dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes b[i] = (byte) i; 1616dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1617dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fos.write(b); 1618dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fos.flush(); 1619dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fos.close(); 1620dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes FileOutputStream f = new FileOutputStream(tmpfile, true); 1621dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // Harmony expected 10, but the RI and Android report 0. 1622dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(0, f.getChannel().position()); 1623dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1624dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1625dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1626dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 1627dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#map(MapMode,long,long) 1628dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 1629dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_map_AbnormalMode() throws IOException { 1630dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1631dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeOnlyFileChannel.map(MapMode.READ_ONLY, 0, CONTENT_LENGTH); 1632dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw NonReadableChannelException."); 1633dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NonReadableChannelException ex) { 1634dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected; 1635dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1636dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1637dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeOnlyFileChannel.map(MapMode.READ_WRITE, 0, CONTENT_LENGTH); 1638dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw NonReadableChannelException."); 1639dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NonReadableChannelException ex) { 1640dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected; 1641dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1642dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1643dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeOnlyFileChannel.map(MapMode.PRIVATE, 0, CONTENT_LENGTH); 1644dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw NonReadableChannelException."); 1645dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NonReadableChannelException ex) { 1646dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected; 1647dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1648dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeOnlyFileChannel.close(); 1649dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1650dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeOnlyFileChannel.map(MapMode.READ_WRITE, 0, -1); 1651dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw ClosedChannelException."); 1652dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ClosedChannelException ex) { 1653dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected; 1654dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1655dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1656dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1657dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readOnlyFileChannel.map(MapMode.READ_WRITE, 0, CONTENT_LENGTH); 1658dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw NonWritableChannelException ."); 1659dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NonWritableChannelException ex) { 1660dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected; 1661dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1662dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1663dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readOnlyFileChannel.map(MapMode.PRIVATE, 0, CONTENT_LENGTH); 1664dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw NonWritableChannelException ."); 1665dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NonWritableChannelException ex) { 1666dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected; 1667dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1668dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1669dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readOnlyFileChannel.map(MapMode.READ_WRITE, -1, CONTENT_LENGTH); 1670dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw IAE."); 1671dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IllegalArgumentException ex) { 1672dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected; 1673dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1674dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1675dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readOnlyFileChannel.map(MapMode.READ_WRITE, 0, -1); 1676dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw IAE."); 1677dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IllegalArgumentException ex) { 1678dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected; 1679dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1680dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1681dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1682dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readOnlyFileChannel.map(MapMode.READ_ONLY, 0, CONTENT_LENGTH + 1); 1683dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 1684dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NonWritableChannelException expected) { 1685dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IOException expected) { 1686dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1687dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1688dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readOnlyFileChannel.map(MapMode.READ_ONLY, 2, CONTENT_LENGTH - 1); 1689dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 1690dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NonWritableChannelException expected) { 1691dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IOException expected) { 1692dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1693dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1694dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readOnlyFileChannel.close(); 1695dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1696dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readOnlyFileChannel.map(MapMode.READ_WRITE, 0, -1); 1697dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw ClosedChannelException."); 1698dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ClosedChannelException ex) { 1699dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected; 1700dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1701dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1702dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readOnlyFileChannel.map(MapMode.READ_ONLY, 2, CONTENT_LENGTH - 1); 1703dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw IOException."); 1704dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IOException ex) { 1705dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected; 1706dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1707dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1708dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readWriteFileChannel.close(); 1709dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1710dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readWriteFileChannel.map(MapMode.READ_WRITE, 0, -1); 1711dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw ClosedChannelException."); 1712dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ClosedChannelException ex) { 1713dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected; 1714dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1715dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1716dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1717dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 1718dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#map(MapMode,long,long) 1719dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 1720dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_map_ReadOnly_CloseChannel() throws IOException { 1721dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // close channel has no effect on map if mapped 1722dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(0, readWriteFileChannel.size()); 1723dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes MappedByteBuffer mapped = readWriteFileChannel.map(MapMode.READ_ONLY, 1724dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 0, CONTENT_LENGTH); 1725dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(CONTENT_LENGTH, readWriteFileChannel.size()); 1726dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readOnlyFileChannel.close(); 1727dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(CONTENT_LENGTH, mapped.limit()); 1728dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1729dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1730dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 1731dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#map(MapMode,long,long) 1732dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 1733dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_map_Private_CloseChannel() throws IOException { 1734dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes MappedByteBuffer mapped = readWriteFileChannel.map(MapMode.PRIVATE, 0, 1735dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes CONTENT_LENGTH); 1736dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readWriteFileChannel.close(); 1737dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes mapped.put(TEST_BYTES); 1738dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(CONTENT_LENGTH, mapped.limit()); 1739dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals("test".length(), mapped.position()); 1740dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1741dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1742dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 1743dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#map(MapMode,long,long) 1744dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 1745dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_map_ReadOnly() throws IOException { 1746dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes MappedByteBuffer mapped = null; 1747dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // try put something to readonly map 1748dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeDataToFile(fileOfReadOnlyFileChannel); 1749dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes mapped = readOnlyFileChannel.map(MapMode.READ_ONLY, 0, CONTENT_LENGTH); 1750dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1751dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes mapped.put(TEST_BYTES); 1752dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw ReadOnlyBufferException."); 1753dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ReadOnlyBufferException ex) { 1754dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected; 1755dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1756dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(CONTENT_LENGTH, mapped.limit()); 1757dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(CONTENT_LENGTH, mapped.capacity()); 1758dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(0, mapped.position()); 1759dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1760dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // try to get a readonly map from read/write channel 1761dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeDataToFile(fileOfReadWriteFileChannel); 1762dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes mapped = readWriteFileChannel.map(MapMode.READ_ONLY, 0, CONTENT 1763dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes .length()); 1764dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(CONTENT_LENGTH, mapped.limit()); 1765dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(CONTENT_LENGTH, mapped.capacity()); 1766dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(0, mapped.position()); 1767dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1768dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // map not change channel's position 1769dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(0, readOnlyFileChannel.position()); 1770dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(0, readWriteFileChannel.position()); 1771dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1772dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1773dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 1774dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#map(MapMode,long,long) 1775dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 1776dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_map_ReadOnly_NonZeroPosition() throws IOException { 1777dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.writeDataToFile(fileOfReadOnlyFileChannel); 1778dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes MappedByteBuffer mapped = readOnlyFileChannel.map(MapMode.READ_ONLY, 1779dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 10, CONTENT_LENGTH - 10); 1780dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(CONTENT_LENGTH - 10, mapped.limit()); 1781dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(CONTENT_LENGTH - 10, mapped.capacity()); 1782dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(0, mapped.position()); 1783dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1784dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1785dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 1786dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#map(MapMode,long,long) 1787dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 1788dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_map_Private() throws IOException { 1789dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes this.writeDataToFile(fileOfReadWriteFileChannel); 1790dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes MappedByteBuffer mapped = readWriteFileChannel.map(MapMode.PRIVATE, 0, 1791dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes CONTENT_LENGTH); 1792dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(CONTENT_LENGTH, mapped.limit()); 1793dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // test copy on write if private 1794dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer returnByPut = mapped.put(TEST_BYTES); 1795dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertSame(returnByPut, mapped); 1796dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer checkBuffer = ByteBuffer.allocate(CONTENT_LENGTH); 1797dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes mapped.force(); 1798dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readWriteFileChannel.read(checkBuffer); 1799dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(CONTENT, new String(checkBuffer.array(), "iso8859-1")); 1800dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1801dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // test overflow 1802dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1803dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes mapped.put(("test" + CONTENT).getBytes("iso8859-1")); 1804dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw BufferOverflowException."); 1805dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (BufferOverflowException ex) { 1806dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected; 1807dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1808dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1809dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1810dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 1811dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#map(MapMode,long,long) 1812dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 1813dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_map_Private_NonZeroPosition() throws IOException { 1814dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes MappedByteBuffer mapped = readWriteFileChannel.map(MapMode.PRIVATE, 10, 1815dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes CONTENT_LENGTH - 10); 1816dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(CONTENT_LENGTH - 10, mapped.limit()); 1817dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(CONTENT_LENGTH - 10, mapped.capacity()); 1818dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(0, mapped.position()); 1819dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1820dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1821dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 1822dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#map(MapMode,long,long) 1823dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 1824dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_map_ReadWrite() throws IOException { 1825dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes MappedByteBuffer mapped = null; 1826dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeDataToFile(fileOfReadWriteFileChannel); 1827dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes mapped = readWriteFileChannel.map(MapMode.READ_WRITE, 0, CONTENT 1828dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes .length()); 1829dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1830dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // put something will change its channel 1831dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer returnByPut = mapped.put(TEST_BYTES); 1832dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertSame(returnByPut, mapped); 1833dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes String checkString = "test" + CONTENT.substring(4); 1834dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer checkBuffer = ByteBuffer.allocate(CONTENT_LENGTH); 1835dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes mapped.force(); 1836dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readWriteFileChannel.position(0); 1837dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readWriteFileChannel.read(checkBuffer); 1838dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(checkString, new String(checkBuffer.array(), "iso8859-1")); 1839dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1840dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1841dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes mapped.put(("test" + CONTENT).getBytes("iso8859-1")); 1842dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw BufferOverflowException."); 1843dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (BufferOverflowException ex) { 1844dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected; 1845dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1846dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1847dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1848dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 1849dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#map(MapMode,long,long) 1850dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 1851dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_map_ReadWrite_NonZeroPosition() throws IOException { 1852dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // test position non-zero 1853dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeDataToFile(fileOfReadWriteFileChannel); 1854dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes MappedByteBuffer mapped = readWriteFileChannel.map(MapMode.READ_WRITE, 1855dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 10, CONTENT_LENGTH - 10); 1856dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(CONTENT_LENGTH - 10, mapped.limit()); 1857dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(CONTENT.length() - 10, mapped.capacity()); 1858dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(0, mapped.position()); 1859dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes mapped.put(TEST_BYTES); 1860dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer checkBuffer = ByteBuffer.allocate(CONTENT_LENGTH); 1861dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readWriteFileChannel.read(checkBuffer); 1862dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes String expected = CONTENT.substring(0, 10) + "test" 1863dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes + CONTENT.substring(10 + "test".length()); 1864dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(expected, new String(checkBuffer.array(), "iso8859-1")); 1865dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1866dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1867dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 1868dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * Tests map() method for the value of positions exceeding memory 1869dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * page size and allocation granularity size. 1870dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * 1871dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#map(MapMode,long,long) 1872dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 1873dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_map_LargePosition() throws IOException { 1874dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // Regression test for HARMONY-3085 1875dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes int[] sizes = { 1876dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 4096, // 4K size (normal page size for Linux & Windows) 1877dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 65536, // 64K size (alocation granularity size for Windows) 1878dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes }; 1879dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes final int CONTENT_LEN = 10; 1880dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1881dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes for (int i = 0; i < sizes.length; ++i) { 1882dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // reset the file and the channel for the iterations 1883dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // (for the first iteration it was done by setUp() 1884dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes if (i > 0 ) { 1885dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fileOfReadOnlyFileChannel = File.createTempFile( 1886dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes "File_of_readOnlyFileChannel", "tmp"); 1887dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fileOfReadOnlyFileChannel.deleteOnExit(); 1888dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readOnlyFileChannel = new FileInputStream(fileOfReadOnlyFileChannel) 1889dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes .getChannel(); 1890dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1891dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1892dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeLargeDataToFile(fileOfReadOnlyFileChannel, sizes[i] + 2 * CONTENT_LEN); 1893dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes MappedByteBuffer mapped = readOnlyFileChannel.map(MapMode.READ_ONLY, 1894dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes sizes[i], CONTENT_LEN); 1895dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals("Incorrectly mapped file channel for " + sizes[i] 1896dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes + " position (capacity)", CONTENT_LEN, mapped.capacity()); 1897dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals("Incorrectly mapped file channel for " + sizes[i] 1898dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes + " position (limit)", CONTENT_LEN, mapped.limit()); 1899dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals("Incorrectly mapped file channel for " + sizes[i] 1900dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes + " position (position)", 0, mapped.position()); 1901dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1902dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // map not change channel's position 1903dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(0, readOnlyFileChannel.position()); 1904dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1905dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // Close the file and the channel before the next iteration 1906dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readOnlyFileChannel.close(); 1907dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fileOfReadOnlyFileChannel.delete(); 1908dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1909dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1910dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1911dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 1912dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#write(ByteBuffer) 1913dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 1914dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_writeLByteBuffer_Null() throws Exception { 1915dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer writeBuffer = null; 1916dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1917dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1918dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeOnlyFileChannel.write(writeBuffer); 1919dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw NullPointerException"); 1920dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NullPointerException e) { 1921dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 1922dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1923dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1924dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1925dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readWriteFileChannel.write(writeBuffer); 1926dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw NullPointerException"); 1927dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NullPointerException e) { 1928dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 1929dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1930dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1931dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1932dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 1933dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#write(ByteBuffer) 1934dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 1935dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_writeLByteBuffer_Closed() throws Exception { 1936dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer writeBuffer = ByteBuffer.allocate(CAPACITY); 1937dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1938dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readOnlyFileChannel.close(); 1939dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1940dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readOnlyFileChannel.write(writeBuffer); 1941dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw ClosedChannelException"); 1942dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ClosedChannelException e) { 1943dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 1944dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1945dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1946dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeOnlyFileChannel.close(); 1947dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1948dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeOnlyFileChannel.write(writeBuffer); 1949dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw ClosedChannelException"); 1950dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ClosedChannelException e) { 1951dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 1952dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1953dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1954dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readWriteFileChannel.close(); 1955dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1956dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readWriteFileChannel.write(writeBuffer); 1957dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 1958dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ClosedChannelException expected) { 1959dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1960dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1961dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeBuffer = null; 1962dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1963dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readWriteFileChannel.read(writeBuffer); 1964dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 1965dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NullPointerException expected) { 1966dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ClosedChannelException expected) { 1967dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1968dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1969dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1970dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 1971dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#write(ByteBuffer) 1972dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 1973dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_writeLByteBuffer_ReadOnly() throws Exception { 1974dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer writeBuffer = ByteBuffer.allocate(CAPACITY); 1975dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1976dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1977dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readOnlyFileChannel.write(writeBuffer); 1978dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw NonWritableChannelException"); 1979dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NonWritableChannelException e) { 1980dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 1981dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1982dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1983dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // first throws NonWriteableChannelException 1984dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeBuffer = null; 1985dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 1986dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readOnlyFileChannel.write(writeBuffer); 1987dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw NonWritableChannelException"); 1988dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NonWritableChannelException e) { 1989dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 1990dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1991dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 1992dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1993dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 1994dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#write(ByteBuffer) 1995dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 1996dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_writeLByteBuffer() throws Exception { 1997dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer writeBuffer = ByteBuffer.wrap(CONTENT_AS_BYTES); 1998dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 1999dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes int result = writeOnlyFileChannel.write(writeBuffer); 2000dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(CONTENT_AS_BYTES_LENGTH, result); 2001dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(CONTENT_AS_BYTES_LENGTH, writeBuffer.position()); 2002dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeOnlyFileChannel.close(); 2003dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2004dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(CONTENT_AS_BYTES_LENGTH, fileOfWriteOnlyFileChannel 2005dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes .length()); 2006dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2007dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fis = new FileInputStream(fileOfWriteOnlyFileChannel); 2008dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes byte[] inputBuffer = new byte[CONTENT_AS_BYTES_LENGTH]; 2009dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fis.read(inputBuffer); 2010dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(Arrays.equals(CONTENT_AS_BYTES, inputBuffer)); 2011dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2012dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2013dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 2014dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#write(ByteBuffer) 2015dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 2016dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_writeLByteBuffer_positioned() throws Exception { 2017dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes final int pos = 5; 2018dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer writeBuffer = ByteBuffer.wrap(CONTENT_AS_BYTES); 2019dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeBuffer.position(pos); 2020dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes int result = writeOnlyFileChannel.write(writeBuffer); 2021dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(CONTENT_AS_BYTES_LENGTH - pos, result); 2022dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(CONTENT_AS_BYTES_LENGTH, writeBuffer.position()); 2023dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeOnlyFileChannel.close(); 2024dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2025dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(CONTENT_AS_BYTES_LENGTH - pos, fileOfWriteOnlyFileChannel 2026dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes .length()); 2027dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2028dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fis = new FileInputStream(fileOfWriteOnlyFileChannel); 2029dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes byte[] inputBuffer = new byte[CONTENT_AS_BYTES_LENGTH - pos]; 2030dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fis.read(inputBuffer); 2031dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes String test = CONTENT.substring(pos); 2032dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(Arrays.equals(test.getBytes("iso8859-1"), inputBuffer)); 2033dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2034dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2035dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_writeLByteBufferJ_Null() throws Exception { 2036dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 2037dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readWriteFileChannel.write(null, 0); 2038dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 2039dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NullPointerException expected) { 2040dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NonWritableChannelException expected) { 2041dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2042dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2043dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 2044dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeOnlyFileChannel.write(null, 0); 2045dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 2046dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NullPointerException expected) { 2047dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2048dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2049dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 2050dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readWriteFileChannel.write(null, 0); 2051dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 2052dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NullPointerException expected) { 2053dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2054dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2055dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2056dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_writeLByteBufferJ_Closed() throws Exception { 2057dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer writeBuffer = ByteBuffer.allocate(CAPACITY); 2058dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2059dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeOnlyFileChannel.close(); 2060dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 2061dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeOnlyFileChannel.write(writeBuffer, 0); 2062dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 2063dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ClosedChannelException expected) { 2064dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2065dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2066dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readWriteFileChannel.close(); 2067dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 2068dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readWriteFileChannel.write(writeBuffer, 0); 2069dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 2070dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ClosedChannelException expected) { 2071dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2072dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2073dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2074dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_writeLByteBufferJ_ReadOnly() throws Exception { 2075dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer writeBuffer = ByteBuffer.allocate(CAPACITY); 2076dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 2077dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readOnlyFileChannel.write(writeBuffer, 10); 2078dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 2079dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NonWritableChannelException expected) { 2080dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2081dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2082dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2083dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_writeLByteBufferJ_IllegalArgument() throws Exception { 2084dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer writeBuffer = ByteBuffer.allocate(CAPACITY); 2085dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2086dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 2087dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readOnlyFileChannel.write(writeBuffer, -1); 2088dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 2089dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IllegalArgumentException expected) { 2090dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2091dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2092dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 2093dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeOnlyFileChannel.write(writeBuffer, -1); 2094dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 2095dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IllegalArgumentException expected) { 2096dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2097dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2098dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 2099dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readWriteFileChannel.write(writeBuffer, -1); 2100dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 2101dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IllegalArgumentException expected) { 2102dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2103dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2104dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2105dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 2106dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#write(ByteBuffer,long) 2107dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 2108dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_writeLByteBufferJ() throws Exception { 2109dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeDataToFile(fileOfWriteOnlyFileChannel); 2110dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2111dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes final int POSITION = 4; 2112dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer writeBuffer = ByteBuffer.wrap(CONTENT_AS_BYTES); 2113dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes int result = writeOnlyFileChannel.write(writeBuffer, POSITION); 2114dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(CONTENT_AS_BYTES_LENGTH, result); 2115dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(CONTENT_AS_BYTES_LENGTH, writeBuffer.position()); 2116dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeOnlyFileChannel.close(); 2117dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2118dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(POSITION + CONTENT_AS_BYTES_LENGTH, 2119dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fileOfWriteOnlyFileChannel.length()); 2120dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2121dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fis = new FileInputStream(fileOfWriteOnlyFileChannel); 2122dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes byte[] inputBuffer = new byte[POSITION + CONTENT_AS_BYTES_LENGTH]; 2123dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fis.read(inputBuffer); 2124dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes byte[] expectedResult = new byte[POSITION + CONTENT_AS_BYTES_LENGTH]; 2125dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes System.arraycopy(CONTENT_AS_BYTES, 0, expectedResult, 0, POSITION); 2126dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes System.arraycopy(CONTENT_AS_BYTES, 0, expectedResult, POSITION, 2127dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes CONTENT_AS_BYTES_LENGTH); 2128dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(Arrays.equals(expectedResult, inputBuffer)); 2129dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2130dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2131dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 2132dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#write(ByteBuffer[]) 2133dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 2134dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_write$LByteBuffer() throws Exception { 2135dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer[] writeBuffers = new ByteBuffer[2]; 2136dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes MockFileChannel mockFileChannel = new MockFileChannel(); 2137dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes mockFileChannel.write(writeBuffers); 2138dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // verify that calling write(ByteBuffer[] srcs) leads to the method 2139dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // write(srcs, 0, srcs.length) 2140dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(mockFileChannel.isWriteCalled); 2141dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2142dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2143dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 2144dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#write(ByteBuffer[],int,int) 2145dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 2146dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_write$LByteBufferII_Null() throws Exception { 2147dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer[] writeBuffers = null; 2148dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2149dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 2150dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readOnlyFileChannel.write(writeBuffers, 1, 2); 2151dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw NullPointerException"); 2152dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NullPointerException e) { 2153dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 2154dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2155dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2156dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 2157dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeOnlyFileChannel.write(writeBuffers, 1, 2); 2158dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw NullPointerException"); 2159dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NullPointerException e) { 2160dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 2161dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2162dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2163dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 2164dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readWriteFileChannel.write(writeBuffers, 1, 2); 2165dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw NullPointerException"); 2166dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NullPointerException e) { 2167dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 2168dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2169dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2170dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // first throws NullPointerException 2171dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readWriteFileChannel.close(); 2172dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 2173dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readWriteFileChannel.write(writeBuffers, 0, 0); 2174dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw NullPointerException"); 2175dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NullPointerException e) { 2176dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 2177dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2178dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2179dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2180dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 2181dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#write(ByteBuffer[],int,int) 2182dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 2183dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_write$LByteBufferII_Closed() throws Exception { 2184dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer[] writeBuffers = new ByteBuffer[2]; 2185dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeBuffers[0] = ByteBuffer.allocate(CAPACITY); 2186dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeBuffers[1] = ByteBuffer.allocate(CAPACITY); 2187dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2188dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readOnlyFileChannel.close(); 2189dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 2190dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readOnlyFileChannel.write(writeBuffers, 0, 2); 2191dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw ClosedChannelException"); 2192dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ClosedChannelException e) { 2193dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 2194dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2195dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2196dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeOnlyFileChannel.close(); 2197dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 2198dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeOnlyFileChannel.write(writeBuffers, 0, 2); 2199dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw ClosedChannelException"); 2200dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ClosedChannelException e) { 2201dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 2202dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2203dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2204dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readWriteFileChannel.close(); 2205dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 2206dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readWriteFileChannel.write(writeBuffers, 0, 2); 2207dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw ClosedChannelException"); 2208dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ClosedChannelException e) { 2209dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 2210dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2211dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2212dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // throws ClosedChannelException first 2213dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeBuffers[0] = null; 2214dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 2215dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readWriteFileChannel.write(writeBuffers, 0, 2); 2216dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw ClosedChannelException"); 2217dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ClosedChannelException e) { 2218dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 2219dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2220dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2221dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2222dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 2223dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#write(ByteBuffer[],int,int) 2224dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 2225dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_write$LByteBufferII_ReadOnly() throws Exception { 2226dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer[] writeBuffers = new ByteBuffer[2]; 2227dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeBuffers[0] = ByteBuffer.allocate(CAPACITY); 2228dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeBuffers[1] = ByteBuffer.allocate(CAPACITY); 2229dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2230dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 2231dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readOnlyFileChannel.write(writeBuffers, 0, 2); 2232dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 2233dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NonWritableChannelException e) { 2234dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2235dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2236dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 2237dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readOnlyFileChannel.write(writeBuffers, 0, -1); 2238dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 2239dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IndexOutOfBoundsException expected) { 2240dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2241dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2242dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeBuffers = null; 2243dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 2244dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readOnlyFileChannel.write(writeBuffers, 0, 1); 2245dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 2246dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NullPointerException expected) { 2247dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2248dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2249dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readOnlyFileChannel.close(); 2250dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2251dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2252dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 2253dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#write(ByteBuffer[],int,int) 2254dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 2255dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_write$LByteBufferII_EmptyBuffers() throws Exception { 2256dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer[] writeBuffers = new ByteBuffer[2]; 2257dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 2258dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeOnlyFileChannel.write(writeBuffers, 0, 2); 2259dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw NullPointerException"); 2260dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NullPointerException e) { 2261dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 2262dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2263dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2264dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 2265dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readWriteFileChannel.write(writeBuffers, 0, 2); 2266dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw NullPointerException"); 2267dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NullPointerException e) { 2268dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 2269dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2270dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2271dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2272dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 2273dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#write(ByteBuffer[],int,int) 2274dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 2275dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_write$LByteBufferII() throws Exception { 2276dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer[] writeBuffers = new ByteBuffer[2]; 2277dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeBuffers[0] = ByteBuffer.wrap(CONTENT_AS_BYTES); 2278dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeBuffers[1] = ByteBuffer.wrap(CONTENT_AS_BYTES); 2279dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2280dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes long result = writeOnlyFileChannel.write(writeBuffers, 0, 2); 2281dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(CONTENT_AS_BYTES_LENGTH * 2, result); 2282dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(CONTENT_AS_BYTES_LENGTH, writeBuffers[0].position()); 2283dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(CONTENT_AS_BYTES_LENGTH, writeBuffers[1].position()); 2284dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeOnlyFileChannel.close(); 2285dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2286dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(CONTENT_AS_BYTES_LENGTH * 2, fileOfWriteOnlyFileChannel 2287dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes .length()); 2288dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2289dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fis = new FileInputStream(fileOfWriteOnlyFileChannel); 2290dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes byte[] inputBuffer = new byte[CONTENT_AS_BYTES_LENGTH]; 2291dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fis.read(inputBuffer); 2292dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes byte[] expectedResult = new byte[CONTENT_AS_BYTES_LENGTH * 2]; 2293dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes System.arraycopy(CONTENT_AS_BYTES, 0, expectedResult, 0, 2294dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes CONTENT_AS_BYTES_LENGTH); 2295dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes System.arraycopy(CONTENT_AS_BYTES, 0, expectedResult, 2296dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes CONTENT_AS_BYTES_LENGTH, CONTENT_AS_BYTES_LENGTH); 2297dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(Arrays.equals(CONTENT_AS_BYTES, inputBuffer)); 2298dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2299dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2300dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 2301dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#transferFrom(ReadableByteChannel,long,long) 2302dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 2303dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_transferFromLReadableByteChannelJJ_Closed() 2304dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes throws Exception { 2305dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readByteChannel = DatagramChannel.open(); 2306dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readOnlyFileChannel.close(); 2307dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 2308dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readOnlyFileChannel.transferFrom(readByteChannel, 0, 0); 2309dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw ClosedChannelException."); 2310dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ClosedChannelException e) { 2311dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 2312dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2313dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2314dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeOnlyFileChannel.close(); 2315dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 2316dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeOnlyFileChannel.transferFrom(readByteChannel, 0, 10); 2317dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw ClosedChannelException."); 2318dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ClosedChannelException e) { 2319dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 2320dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2321dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2322dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readWriteFileChannel.close(); 2323dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 2324dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readWriteFileChannel.transferFrom(readByteChannel, 0, 0); 2325dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw ClosedChannelException."); 2326dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ClosedChannelException e) { 2327dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 2328dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2329dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2330dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // should throw ClosedChannelException first. 2331dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 2332dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readWriteFileChannel.transferFrom(readByteChannel, 0, -1); 2333dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw ClosedChannelException."); 2334dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ClosedChannelException e) { 2335dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 2336dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2337dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2338dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2339dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 2340dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#transferFrom(ReadableByteChannel,long,long) 2341dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 2342dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_transferFromLReadableByteChannelJJ_SourceClosed() 2343dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes throws Exception { 2344dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readByteChannel = DatagramChannel.open(); 2345dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readByteChannel.close(); 2346dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2347dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 2348dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readOnlyFileChannel.transferFrom(readByteChannel, 0, 10); 2349dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw ClosedChannelException."); 2350dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ClosedChannelException e) { 2351dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 2352dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2353dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2354dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 2355dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeOnlyFileChannel.transferFrom(readByteChannel, 0, 10); 2356dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw ClosedChannelException."); 2357dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ClosedChannelException e) { 2358dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 2359dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2360dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2361dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 2362dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readWriteFileChannel.transferFrom(readByteChannel, 0, 10); 2363dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw ClosedChannelException."); 2364dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ClosedChannelException e) { 2365dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 2366dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2367dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2368dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // should throw ClosedChannelException first. 2369dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 2370dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readWriteFileChannel.transferFrom(readByteChannel, 0, -1); 2371dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw ClosedChannelException."); 2372dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ClosedChannelException e) { 2373dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 2374dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2375dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2376dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2377dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 2378dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#transferFrom(ReadableByteChannel,long,long) 2379dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 2380dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_transferFromLReadableByteChannelJJ_IllegalArgument() 2381dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes throws Exception { 2382dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readByteChannel = DatagramChannel.open(); 2383dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 2384dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeOnlyFileChannel.transferFrom(readByteChannel, 10, -1); 2385dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw IllegalArgumentException."); 2386dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IllegalArgumentException e) { 2387dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 2388dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2389dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2390dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 2391dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readWriteFileChannel.transferFrom(readByteChannel, -1, -10); 2392dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw IllegalArgumentException."); 2393dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IllegalArgumentException e) { 2394dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 2395dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2396dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2397dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2398dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 2399dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#transferFrom(ReadableByteChannel,long,long) 2400dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 2401dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_transferFromLReadableByteChannelJJ_NonWritable() 2402dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes throws Exception { 2403dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readByteChannel = DatagramChannel.open(); 2404dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 2405dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readOnlyFileChannel.transferFrom(readByteChannel, 0, 0); 2406dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw NonWritableChannelException."); 2407dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NonWritableChannelException e) { 2408dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 2409dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2410dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2411dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2412dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 2413dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#transferFrom(ReadableByteChannel,long,long) 2414dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 2415dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_transferFromLReadableByteChannelJJ_SourceNonReadable() 2416dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes throws Exception { 2417dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 2418dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readWriteFileChannel.transferFrom(writeOnlyFileChannel, 0, 0); 2419dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw NonReadableChannelException."); 2420dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NonReadableChannelException e) { 2421dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 2422dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2423dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2424dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // not throws NonReadableChannelException first if position beyond file 2425dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // size. 2426dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readWriteFileChannel.transferFrom(writeOnlyFileChannel, 10, 10); 2427dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2428dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2429dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 2430dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#transferFrom(ReadableByteChannel,long,long) 2431dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 2432dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_transferFromLReadableByteChannelJJ_PositionBeyondSize() 2433dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes throws Exception { 2434dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // init data to file. 2435dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeDataToFile(fileOfReadOnlyFileChannel); 2436dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeDataToFile(fileOfWriteOnlyFileChannel); 2437dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2438dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes final int READONLYFILECHANNELPOSITION = 2; 2439dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readOnlyFileChannel.position(READONLYFILECHANNELPOSITION); 2440dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2441dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes final int POSITION = CONTENT_AS_BYTES_LENGTH * 2; 2442dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes final int LENGTH = 5; 2443dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes long result = writeOnlyFileChannel.transferFrom(readOnlyFileChannel, 2444dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes POSITION, LENGTH); 2445dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(0, result); 2446dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(0, writeOnlyFileChannel.position()); 2447dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(READONLYFILECHANNELPOSITION, readOnlyFileChannel 2448dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes .position()); 2449dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2450dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2451dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 2452dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#transferFrom(ReadableByteChannel,long,long) 2453dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 2454dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_transferFromLReadableByteChannelJJ_FileChannel() 2455dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes throws Exception { 2456dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // init data to file. 2457dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeDataToFile(fileOfReadOnlyFileChannel); 2458dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeDataToFile(fileOfWriteOnlyFileChannel); 2459dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2460dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes final int READONLYFILECHANNELPOSITION = 2; 2461dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes final int WRITEONLYFILECHANNELPOSITION = 4; 2462dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readOnlyFileChannel.position(READONLYFILECHANNELPOSITION); 2463dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeOnlyFileChannel.position(WRITEONLYFILECHANNELPOSITION); 2464dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2465dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes final int POSITION = 3; 2466dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes final int LENGTH = 5; 2467dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes long result = writeOnlyFileChannel.transferFrom(readOnlyFileChannel, 2468dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes POSITION, LENGTH); 2469dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(LENGTH, result); 2470dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(WRITEONLYFILECHANNELPOSITION, writeOnlyFileChannel 2471dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes .position()); 2472dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(READONLYFILECHANNELPOSITION + LENGTH, readOnlyFileChannel 2473dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes .position()); 2474dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeOnlyFileChannel.close(); 2475dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2476dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes final int EXPECTED_LENGTH = POSITION + LENGTH; 2477dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fis = new FileInputStream(fileOfWriteOnlyFileChannel); 2478dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes byte[] resultContent = new byte[EXPECTED_LENGTH]; 2479dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fis.read(resultContent); 2480dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2481dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes byte[] expectedContent = new byte[EXPECTED_LENGTH]; 2482dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes System.arraycopy(CONTENT_AS_BYTES, 0, expectedContent, 0, POSITION); 2483dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes System.arraycopy(CONTENT_AS_BYTES, READONLYFILECHANNELPOSITION, 2484dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes expectedContent, POSITION, LENGTH); 2485dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(Arrays.equals(expectedContent, resultContent)); 2486dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2487dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2488dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 2489dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#transferFrom(ReadableByteChannel,long,long) 2490dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 2491dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_transferFromLReadableByteChannelJJ_DatagramChannel() 2492dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes throws Exception { 2493dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // connects two datagramChannels. 2494dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes datagramChannelReceiver = DatagramChannel.open(); 2495dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes datagramChannelReceiver.socket().bind( 2496dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes new InetSocketAddress(InetAddress.getLocalHost(), 0)); 2497dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes datagramChannelSender = DatagramChannel.open(); 2498dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes datagramChannelSender.socket().bind( 2499dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes new InetSocketAddress(InetAddress.getLocalHost(), 0)); 2500dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes datagramChannelReceiver.socket().setSoTimeout(TIME_OUT); 2501dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes datagramChannelReceiver.connect(datagramChannelSender.socket() 2502dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes .getLocalSocketAddress()); 2503dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes datagramChannelSender.socket().setSoTimeout(TIME_OUT); 2504dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer writeBuffer = ByteBuffer.wrap(CONTENT_AS_BYTES); 2505dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes datagramChannelSender.socket().setSoTimeout(TIME_OUT); 2506dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // sends data from datagramChannelSender to datagramChannelReceiver. 2507dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes datagramChannelSender.send(writeBuffer, datagramChannelReceiver 2508dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes .socket().getLocalSocketAddress()); 2509dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes datagramChannelReceiver.socket().setSoTimeout(TIME_OUT); 2510dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2511dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // transfers data from datagramChannelReceiver to fileChannel. 2512dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes long result = writeOnlyFileChannel.transferFrom( 2513dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes datagramChannelReceiver, 0, CONTENT_AS_BYTES_LENGTH); 2514dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(CONTENT_AS_BYTES_LENGTH, result); 2515dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(0, writeOnlyFileChannel.position()); 2516dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeOnlyFileChannel.close(); 2517dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2518dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // gets content from file. 2519dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fis = new FileInputStream(fileOfWriteOnlyFileChannel); 2520dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(CONTENT_AS_BYTES_LENGTH, fileOfWriteOnlyFileChannel 2521dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes .length()); 2522dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes byte[] resultContent = new byte[CONTENT_AS_BYTES_LENGTH]; 2523dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fis.read(resultContent); 2524dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2525dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // compares contents. 2526dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(Arrays.equals(CONTENT_AS_BYTES, resultContent)); 2527dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2528dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2529dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 2530dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#transferFrom(ReadableByteChannel,long,long) 2531dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 2532dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_transferFromLReadableByteChannelJJ_SocketChannel() 2533dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes throws Exception { 2534dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // connects two socketChannels. 2535dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes socketChannelReceiver = SocketChannel.open(); 2536dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes serverSocketChannel = ServerSocketChannel.open(); 2537dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes serverSocketChannel.socket().bind( 2538dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes new InetSocketAddress(InetAddress.getLocalHost(), 0)); 2539dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes socketChannelReceiver.socket().setSoTimeout(TIME_OUT); 2540dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes socketChannelReceiver.connect(serverSocketChannel.socket() 2541dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes .getLocalSocketAddress()); 2542dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes serverSocketChannel.socket().setSoTimeout(TIME_OUT); 2543dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes socketChannelSender = serverSocketChannel.accept(); 2544dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes socketChannelSender.socket().setSoTimeout(TIME_OUT); 2545dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2546dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // sends data from socketChannelSender to socketChannelReceiver. 2547dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer writeBuffer = ByteBuffer.wrap(CONTENT_AS_BYTES); 2548dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes socketChannelSender.write(writeBuffer); 2549dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2550dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // transfers data from socketChannelReceiver to fileChannel. 2551dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes long result = readWriteFileChannel.transferFrom(socketChannelReceiver, 2552dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 0, CONTENT_AS_BYTES_LENGTH); 2553dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(CONTENT_AS_BYTES_LENGTH, result); 2554dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(0, readWriteFileChannel.position()); 2555dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readWriteFileChannel.close(); 2556dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2557dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // gets content from file. 2558dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fis = new FileInputStream(fileOfReadWriteFileChannel); 2559dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(CONTENT_AS_BYTES_LENGTH, fileOfReadWriteFileChannel 2560dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes .length()); 2561dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes byte[] resultContent = new byte[CONTENT_AS_BYTES_LENGTH]; 2562dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fis.read(resultContent); 2563dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2564dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // compares content. 2565dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(Arrays.equals(CONTENT_AS_BYTES, resultContent)); 2566dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2567dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2568dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 2569dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#transferFrom(ReadableByteChannel,long,long) 2570dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 2571dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_transferFromLReadableByteChannelJJ_Pipe() throws Exception { 2572dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // inits data in file. 2573dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeDataToFile(fileOfWriteOnlyFileChannel); 2574dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2575dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // inits pipe. 2576dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes pipe = Pipe.open(); 2577dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2578dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // writes content to pipe. 2579dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer writeBuffer = ByteBuffer.wrap(CONTENT_AS_BYTES); 2580dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes pipe.sink().write(writeBuffer); 2581dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2582dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // transfers data from pipe to fileChannel. 2583dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes final int OFFSET = 2; 2584dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes final int LENGTH = 4; 2585dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes long result = writeOnlyFileChannel.transferFrom(pipe.source(), OFFSET, 2586dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes LENGTH); 2587dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(LENGTH, result); 2588dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeOnlyFileChannel.close(); 2589dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2590dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // gets content from file. 2591dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fis = new FileInputStream(fileOfWriteOnlyFileChannel); 2592dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes byte[] resultBytes = new byte[OFFSET + LENGTH]; 2593dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fis.read(resultBytes); 2594dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2595dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // compares content. 2596dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes byte[] expectedBytes = new byte[OFFSET + LENGTH]; 2597dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes System.arraycopy(CONTENT_AS_BYTES, 0, expectedBytes, 0, OFFSET); 2598dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes System.arraycopy(CONTENT_AS_BYTES, 0, expectedBytes, OFFSET, LENGTH); 2599dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2600dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(Arrays.equals(expectedBytes, resultBytes)); 2601dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2602dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2603dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 2604dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#transferTo(long,long,WritableByteChannel) 2605dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 2606dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_transferToJJLWritableByteChannel_Null() throws Exception { 2607dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writableByteChannel = null; 2608dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 2609dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readOnlyFileChannel.transferTo(0, 10, writableByteChannel); 2610dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 2611dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NullPointerException expected) { 2612dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2613dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2614dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 2615dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeOnlyFileChannel.transferTo(0, 10, writableByteChannel); 2616dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 2617dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NullPointerException expected) { 2618dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NonReadableChannelException expected) { 2619dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2620dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2621dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 2622dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readWriteFileChannel.transferTo(0, 10, writableByteChannel); 2623dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 2624dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NullPointerException expected) { 2625dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2626dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2627dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readOnlyFileChannel.close(); 2628dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 2629dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeOnlyFileChannel.transferTo(-1, 0, writableByteChannel); 2630dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 2631dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NullPointerException expected) { 2632dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NonReadableChannelException expected) { 2633dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2634dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2635dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2636dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 2637dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#transferTo(long,long,WritableByteChannel) 2638dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 2639dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_transferToJJLWritableByteChannel_Closed() throws Exception { 2640dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writableByteChannel = DatagramChannel.open(); 2641dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readOnlyFileChannel.close(); 2642dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 2643dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readOnlyFileChannel.transferTo(0, 10, writableByteChannel); 2644dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw ClosedChannelException."); 2645dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ClosedChannelException e) { 2646dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 2647dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2648dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2649dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeOnlyFileChannel.close(); 2650dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 2651dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeOnlyFileChannel.transferTo(0, 10, writableByteChannel); 2652dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw ClosedChannelException."); 2653dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ClosedChannelException e) { 2654dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 2655dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2656dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2657dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readWriteFileChannel.close(); 2658dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 2659dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readWriteFileChannel.transferTo(0, 10, writableByteChannel); 2660dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw ClosedChannelException."); 2661dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ClosedChannelException e) { 2662dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 2663dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2664dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2665dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // should throw ClosedChannelException first. 2666dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 2667dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readWriteFileChannel.transferTo(0, -1, writableByteChannel); 2668dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw ClosedChannelException."); 2669dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ClosedChannelException e) { 2670dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 2671dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2672dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2673dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2674dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_transferToJJLWritableByteChannel_SourceClosed() throws Exception { 2675dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writableByteChannel = DatagramChannel.open(); 2676dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writableByteChannel.close(); 2677dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2678dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 2679dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readOnlyFileChannel.transferTo(0, 10, writableByteChannel); 2680dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 2681dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ClosedChannelException expected) { 2682dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2683dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2684dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 2685dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeOnlyFileChannel.transferTo(0, 10, writableByteChannel); 2686dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 2687dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ClosedChannelException expected) { 2688dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NonReadableChannelException expected) { 2689dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2690dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2691dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 2692dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readWriteFileChannel.transferTo(0, 10, writableByteChannel); 2693dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 2694dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ClosedChannelException expected) { 2695dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2696dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2697dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 2698dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readWriteFileChannel.transferTo(0, -1, writableByteChannel); 2699dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 2700dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (ClosedChannelException expected) { 2701dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2702dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2703dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2704dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 2705dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#transferTo(long,long,WritableByteChannel) 2706dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 2707dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_transferToJJLWritableByteChannel_IllegalArgument() 2708dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes throws Exception { 2709dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writableByteChannel = DatagramChannel.open(); 2710dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 2711dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readOnlyFileChannel.transferTo(10, -1, writableByteChannel); 2712dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw IllegalArgumentException."); 2713dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IllegalArgumentException e) { 2714dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 2715dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2716dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2717dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 2718dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readWriteFileChannel.transferTo(-1, -10, writableByteChannel); 2719dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw IllegalArgumentException."); 2720dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (IllegalArgumentException e) { 2721dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 2722dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2723dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2724dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2725dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_transferToJJLWritableByteChannel_NonReadable() throws Exception { 2726dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writableByteChannel = DatagramChannel.open(); 2727dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 2728dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeOnlyFileChannel.transferTo(0, 10, writableByteChannel); 2729dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail(); 2730dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NonReadableChannelException expected) { 2731dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2732dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2733dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2734dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 2735dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#transferTo(long,long,WritableByteChannel) 2736dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 2737dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_transferToJJLWritableByteChannel_TargetNonWritable() 2738dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes throws Exception { 2739dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 2740dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readWriteFileChannel.transferTo(0, 0, readOnlyFileChannel); 2741dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw NonWritableChannelException."); 2742dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NonWritableChannelException e) { 2743dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 2744dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2745dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2746dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // first throws NonWritableChannelException even position out of file 2747dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // size. 2748dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 2749dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readWriteFileChannel.transferTo(10, 10, readOnlyFileChannel); 2750dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw NonWritableChannelException."); 2751dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NonWritableChannelException e) { 2752dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 2753dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2754dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2755dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // regression test for Harmony-941 2756dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // first throws NonWritableChannelException even arguments are illegal. 2757dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 2758dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readWriteFileChannel.transferTo(-1, 10, readOnlyFileChannel); 2759dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw NonWritableChannelException."); 2760dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NonWritableChannelException e) { 2761dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 2762dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2763dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2764dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try { 2765dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readWriteFileChannel.transferTo(0, -1, readOnlyFileChannel); 2766dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("should throw NonWritableChannelException."); 2767dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } catch (NonWritableChannelException e) { 2768dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected 2769dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2770dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2771dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2772dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 2773dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#transferTo(long,long,WritableByteChannel) 2774dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 2775dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_transferToJJLWritableByteChannel_PositionBeyondSize() 2776dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes throws Exception { 2777dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // init data to file. 2778dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeDataToFile(fileOfReadOnlyFileChannel); 2779dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeDataToFile(fileOfWriteOnlyFileChannel); 2780dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2781dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes final int WRITEONLYFILECHANNELPOSITION = 2; 2782dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeOnlyFileChannel.position(WRITEONLYFILECHANNELPOSITION); 2783dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2784dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes final int POSITION = CONTENT_AS_BYTES_LENGTH * 2; 2785dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes final int LENGTH = 5; 2786dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes long result = readOnlyFileChannel.transferTo(POSITION, LENGTH, 2787dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeOnlyFileChannel); 2788dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(0, result); 2789dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(0, readOnlyFileChannel.position()); 2790dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(WRITEONLYFILECHANNELPOSITION, writeOnlyFileChannel 2791dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes .position()); 2792dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2793dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2794dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 2795dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#transferTo(long,long,WritableByteChannel) 2796dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 2797dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_transferToJJLWritableByteChannel_FileChannel() 2798dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes throws Exception { 2799dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // init data to file. 2800dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeDataToFile(fileOfReadOnlyFileChannel); 2801dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeDataToFile(fileOfWriteOnlyFileChannel); 2802dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2803dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes final int READONLYFILECHANNELPOSITION = 2; 2804dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes final int WRITEONLYFILECHANNELPOSITION = 4; 2805dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readOnlyFileChannel.position(READONLYFILECHANNELPOSITION); 2806dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeOnlyFileChannel.position(WRITEONLYFILECHANNELPOSITION); 2807dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2808dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes final int POSITION = 3; 2809dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes final int LENGTH = 5; 2810dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes long result = readOnlyFileChannel.transferTo(POSITION, LENGTH, 2811dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeOnlyFileChannel); 2812dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(LENGTH, result); 2813dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(READONLYFILECHANNELPOSITION, readOnlyFileChannel 2814dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes .position()); 2815dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(WRITEONLYFILECHANNELPOSITION + LENGTH, 2816dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeOnlyFileChannel.position()); 2817dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeOnlyFileChannel.close(); 2818dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2819dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes final int EXPECTED_LENGTH = WRITEONLYFILECHANNELPOSITION + LENGTH; 2820dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fis = new FileInputStream(fileOfWriteOnlyFileChannel); 2821dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes byte[] resultContent = new byte[EXPECTED_LENGTH]; 2822dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fis.read(resultContent); 2823dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2824dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes byte[] expectedContent = new byte[EXPECTED_LENGTH]; 2825dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes System.arraycopy(CONTENT_AS_BYTES, 0, expectedContent, 0, 2826dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes WRITEONLYFILECHANNELPOSITION); 2827dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes System.arraycopy(CONTENT_AS_BYTES, POSITION, expectedContent, 2828dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes WRITEONLYFILECHANNELPOSITION, LENGTH); 2829dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue(Arrays.equals(expectedContent, resultContent)); 2830dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2831dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2832dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 2833dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#transferTo(long,long,WritableByteChannel) 2834dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 2835dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_transferToJJLWritableByteChannel_SocketChannel() 2836dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes throws Exception { 2837dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // inits data into file. 2838dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeDataToFile(fileOfReadOnlyFileChannel); 2839dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2840dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // connects two socketChannels. 2841dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes socketChannelReceiver = SocketChannel.open(); 2842dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes socketChannelReceiver.socket().bind( 2843dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes new InetSocketAddress(InetAddress.getLocalHost(), 0)); 2844dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes serverSocketChannel = ServerSocketChannel.open(); 2845dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes serverSocketChannel.socket().bind( 2846dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes new InetSocketAddress(InetAddress.getLocalHost(), 0)); 2847dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes socketChannelReceiver.socket().setSoTimeout(TIME_OUT); 2848dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes socketChannelReceiver.connect(serverSocketChannel.socket() 2849dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes .getLocalSocketAddress()); 2850dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes serverSocketChannel.socket().setSoTimeout(TIME_OUT); 2851dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes socketChannelSender = serverSocketChannel.accept(); 2852dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes socketChannelSender.socket().setSoTimeout(TIME_OUT); 2853dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2854dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // position here should have no effect on transferTo since it uses 2855dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // offset from file_begin 2856dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes final int POSITION = 10; 2857dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readOnlyFileChannel.position(POSITION); 2858dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2859dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // transfers data from file to socketChannelSender. 2860dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes final int OFFSET = 2; 2861dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes long result = readOnlyFileChannel.transferTo(OFFSET, 2862dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes CONTENT_AS_BYTES_LENGTH * 2, socketChannelSender); 2863dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes final int LENGTH = CONTENT_AS_BYTES_LENGTH - OFFSET; 2864dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(LENGTH, result); 2865dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(POSITION, readOnlyFileChannel.position()); 2866dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readOnlyFileChannel.close(); 2867dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes socketChannelSender.close(); 2868dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2869dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // gets contents from socketChannelReceiver. 2870dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer readBuffer = ByteBuffer.allocate(LENGTH + 1); 2871dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes int totalRead = 0; 2872dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes int countRead = 0; 2873dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes long beginTime = System.currentTimeMillis(); 2874dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes while ((countRead = socketChannelReceiver.read(readBuffer)) != -1) { 2875dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes totalRead += countRead; 2876dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // TIMEOUT 2877dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes if (System.currentTimeMillis() - beginTime > TIME_OUT) { 2878dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes break; 2879dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2880dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2881dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(LENGTH, totalRead); 2882dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2883dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // compares contents. 2884dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readBuffer.flip(); 2885dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes for (int i = OFFSET; i < CONTENT_AS_BYTES_LENGTH; i++) { 2886dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(CONTENT_AS_BYTES[i], readBuffer.get()); 2887dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2888dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2889dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2890dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 2891dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#transferTo(long,long,WritableByteChannel) 2892dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 2893dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_transferToJJLWritableByteChannel_DatagramChannel() 2894dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes throws Exception { 2895dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // inits data to file. 2896dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeDataToFile(fileOfReadOnlyFileChannel); 2897dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2898dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // connects two datagramChannel 2899dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes datagramChannelReceiver = DatagramChannel.open(); 2900dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes datagramChannelReceiver.socket().bind( 2901dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes new InetSocketAddress(InetAddress.getLocalHost(), 0)); 2902dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes datagramChannelSender = DatagramChannel.open(); 2903dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes datagramChannelSender.socket().bind( 2904dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes new InetSocketAddress(InetAddress.getLocalHost(), 0)); 2905dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes datagramChannelSender.socket().setSoTimeout(TIME_OUT); 2906dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes datagramChannelSender.connect(datagramChannelReceiver.socket() 2907dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes .getLocalSocketAddress()); 2908dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes datagramChannelReceiver.socket().setSoTimeout(TIME_OUT); 2909dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes datagramChannelReceiver.connect(datagramChannelSender.socket() 2910dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes .getLocalSocketAddress()); 2911dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2912dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // transfers data from fileChannel to datagramChannelSender 2913dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes long result = readOnlyFileChannel.transferTo(0, 2914dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes CONTENT_AS_BYTES_LENGTH, datagramChannelSender); 2915dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(CONTENT_AS_BYTES_LENGTH, result); 2916dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(0, readOnlyFileChannel.position()); 2917dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readOnlyFileChannel.close(); 2918dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes datagramChannelSender.close(); 2919dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2920dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // gets contents from datagramChannelReceiver 2921dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer readBuffer = ByteBuffer.allocate(CONTENT_AS_BYTES_LENGTH); 2922dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes long beginTime = System.currentTimeMillis(); 2923dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes int totalRead = 0; 2924dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes while (totalRead < CONTENT_AS_BYTES_LENGTH) { 2925dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes totalRead += datagramChannelReceiver.read(readBuffer); 2926dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes if (System.currentTimeMillis() - beginTime > TIME_OUT) { 2927dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes break; 2928dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2929dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2930dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(CONTENT_AS_BYTES_LENGTH, totalRead); 2931dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2932dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // compares contents. 2933dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readBuffer.flip(); 2934dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes for (int i = 0; i < CONTENT_AS_BYTES_LENGTH; i++) { 2935dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(CONTENT_AS_BYTES[i], readBuffer.get()); 2936dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2937dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2938dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2939dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 2940dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests java.nio.channels.FileChannel#transferTo(long,long,WritableByteChannel) 2941dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 2942dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_transferToJJLWritableByteChannel_Pipe() throws Exception { 2943dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // inits data in file. 2944dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeDataToFile(fileOfReadOnlyFileChannel); 2945dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2946dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // inits pipe. 2947dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes pipe = Pipe.open(); 2948dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2949dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // transfers data from fileChannel to pipe. 2950dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes final int OFFSET = 2; 2951dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes final int LENGTH = 4; 2952dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes long result = readOnlyFileChannel.transferTo(OFFSET, LENGTH, pipe 2953dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes .sink()); 2954dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(LENGTH, result); 2955dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(0, readOnlyFileChannel.position()); 2956dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readOnlyFileChannel.close(); 2957dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2958dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // gets content from pipe. 2959dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer readBuffer = ByteBuffer.allocate(LENGTH); 2960dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes result = pipe.source().read(readBuffer); 2961dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(LENGTH, result); 2962dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2963dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // compares content. 2964dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readBuffer.flip(); 2965dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes for (int i = OFFSET; i < OFFSET + LENGTH; i++) { 2966dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(CONTENT_AS_BYTES[i], readBuffer.get()); 2967dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2968dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2969dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2970dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 2971dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * Regression test for Harmony-3324 2972dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * Make sure we could delete the file after we called transferTo() method. 2973dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 2974dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_transferTo_couldDelete() throws Exception { 2975dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // init data in files 2976dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeDataToFile(fileOfReadOnlyFileChannel); 2977dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeDataToFile(fileOfWriteOnlyFileChannel); 2978dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2979dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // call transferTo() method 2980dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readOnlyFileChannel.transferTo(0 , 2, writeOnlyFileChannel); 2981dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2982dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // delete both files 2983dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readOnlyFileChannel.close(); 2984dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeOnlyFileChannel.close(); 2985dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes boolean rDel = fileOfReadOnlyFileChannel.delete(); 2986dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes boolean wDel = fileOfWriteOnlyFileChannel.delete(); 2987dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2988dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // make sure both files were deleted 2989dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue("File " + readOnlyFileChannel + " exists", rDel); 2990dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue("File " + writeOnlyFileChannel + " exists", wDel); 2991dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 2992dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 2993dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 2994dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * Regression test for Harmony-3324 2995dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * Make sure we could delete the file after we called transferFrom() method. 2996dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 2997dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_transferFrom_couldDelete() throws Exception { 2998dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // init data in files 2999dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeDataToFile(fileOfReadOnlyFileChannel); 3000dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeDataToFile(fileOfWriteOnlyFileChannel); 3001dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 3002dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // call transferTo() method 3003dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeOnlyFileChannel.transferFrom(readOnlyFileChannel, 0 , 2); 3004dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 3005dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // delete both files 3006dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes readOnlyFileChannel.close(); 3007dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes writeOnlyFileChannel.close(); 3008dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes boolean rDel = fileOfReadOnlyFileChannel.delete(); 3009dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes boolean wDel = fileOfWriteOnlyFileChannel.delete(); 3010dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 3011dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // make sure both files were deleted 3012dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue("File " + readOnlyFileChannel + " exists", rDel); 3013dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertTrue("File " + writeOnlyFileChannel + " exists", wDel); 3014dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3015dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 3016dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes private class MockFileChannel extends FileChannel { 3017dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 3018dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes private boolean isLockCalled = false; 3019dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 3020dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes private boolean isTryLockCalled = false; 3021dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 3022dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes private boolean isReadCalled = false; 3023dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 3024dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes private boolean isWriteCalled = false; 3025dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 3026dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void force(boolean arg0) throws IOException { 3027dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // do nothing 3028dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3029dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 3030dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public FileLock lock(long position, long size, boolean shared) 3031dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes throws IOException { 3032dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // verify that calling lock() leads to the method 3033dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // lock(0, Long.MAX_VALUE, false). 3034dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes if (0 == position && Long.MAX_VALUE == size && false == shared) { 3035dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes isLockCalled = true; 3036dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3037dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes return null; 3038dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3039dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 3040dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public MappedByteBuffer map(MapMode arg0, long arg1, long arg2) 3041dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes throws IOException { 3042dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes return null; 3043dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3044dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 3045dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public long position() throws IOException { 3046dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes return 0; 3047dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3048dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 3049dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public FileChannel position(long arg0) throws IOException { 3050dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes return null; 3051dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3052dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 3053dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public int read(ByteBuffer arg0) throws IOException { 3054dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes return 0; 3055dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3056dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 3057dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public int read(ByteBuffer arg0, long arg1) throws IOException { 3058dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes return 0; 3059dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3060dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 3061dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public long read(ByteBuffer[] srcs, int offset, int length) 3062dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes throws IOException { 3063dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // verify that calling read(ByteBuffer[] srcs) leads to the method 3064dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // read(srcs, 0, srcs.length) 3065dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes if (0 == offset && length == srcs.length) { 3066dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes isReadCalled = true; 3067dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3068dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes return 0; 3069dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3070dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 3071dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public long size() throws IOException { 3072dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes return 0; 3073dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3074dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 3075dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public long transferFrom(ReadableByteChannel arg0, long arg1, long arg2) 3076dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes throws IOException { 3077dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes return 0; 3078dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3079dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 3080dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public long transferTo(long arg0, long arg1, WritableByteChannel arg2) 3081dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes throws IOException { 3082dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes return 0; 3083dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3084dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 3085dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public FileChannel truncate(long arg0) throws IOException { 3086dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes return null; 3087dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3088dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 3089dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public FileLock tryLock(long position, long size, boolean shared) 3090dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes throws IOException { 3091dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // verify that calling tryLock() leads to the method 3092dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // tryLock(0, Long.MAX_VALUE, false). 3093dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes if (0 == position && Long.MAX_VALUE == size && false == shared) { 3094dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes isTryLockCalled = true; 3095dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3096dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes return null; 3097dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3098dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 3099dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public int write(ByteBuffer arg0) throws IOException { 3100dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes return 0; 3101dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3102dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 3103dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public int write(ByteBuffer arg0, long arg1) throws IOException { 3104dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes return 0; 3105dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3106dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 3107dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public long write(ByteBuffer[] srcs, int offset, int length) 3108dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes throws IOException { 3109dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // verify that calling write(ByteBuffer[] srcs) leads to the method 3110dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // write(srcs, 0, srcs.length) 3111dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes if(0 == offset && length == srcs.length){ 3112dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes isWriteCalled = true; 3113dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3114dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes return 0; 3115dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3116dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 3117dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes protected void implCloseChannel() throws IOException { 3118dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 3119dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3120dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 3121dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes} 3122