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