114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson/* Licensed to the Apache Software Foundation (ASF) under one or more
214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson * contributor license agreements.  See the NOTICE file distributed with
314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson * this work for additional information regarding copyright ownership.
414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson * The ASF licenses this file to You under the Apache License, Version 2.0
514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson * (the "License"); you may not use this file except in compliance with
614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson * the License.  You may obtain a copy of the License at
714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson *
814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson *     http://www.apache.org/licenses/LICENSE-2.0
914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson *
1014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson * Unless required by applicable law or agreed to in writing, software
1114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson * distributed under the License is distributed on an "AS IS" BASIS,
1214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson * See the License for the specific language governing permissions and
1414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson * limitations under the License.
1514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson */
1614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
174557728efb66c455a52b7669a8eefef7a9e54854Jesse Wilsonpackage libcore.java.nio.channels;
1814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
1914816f17144d90174628ee82dc616d4b9c921149Jesse Wilsonimport java.io.File;
2014816f17144d90174628ee82dc616d4b9c921149Jesse Wilsonimport java.io.FileInputStream;
2114816f17144d90174628ee82dc616d4b9c921149Jesse Wilsonimport java.io.FileNotFoundException;
2214816f17144d90174628ee82dc616d4b9c921149Jesse Wilsonimport java.io.FileOutputStream;
2314816f17144d90174628ee82dc616d4b9c921149Jesse Wilsonimport java.io.IOException;
2414816f17144d90174628ee82dc616d4b9c921149Jesse Wilsonimport java.io.RandomAccessFile;
2514816f17144d90174628ee82dc616d4b9c921149Jesse Wilsonimport java.io.UnsupportedEncodingException;
2614816f17144d90174628ee82dc616d4b9c921149Jesse Wilsonimport java.nio.ByteBuffer;
2714816f17144d90174628ee82dc616d4b9c921149Jesse Wilsonimport java.nio.MappedByteBuffer;
284557728efb66c455a52b7669a8eefef7a9e54854Jesse Wilsonimport java.nio.channels.ClosedChannelException;
294557728efb66c455a52b7669a8eefef7a9e54854Jesse Wilsonimport java.nio.channels.DatagramChannel;
304557728efb66c455a52b7669a8eefef7a9e54854Jesse Wilsonimport java.nio.channels.FileChannel;
314557728efb66c455a52b7669a8eefef7a9e54854Jesse Wilsonimport java.nio.channels.FileLock;
324557728efb66c455a52b7669a8eefef7a9e54854Jesse Wilsonimport java.nio.channels.NonWritableChannelException;
333d09992b375338188c75268dddbe07635a505bbeJesse Wilsonimport java.nio.channels.OverlappingFileLockException;
344557728efb66c455a52b7669a8eefef7a9e54854Jesse Wilsonimport java.nio.channels.ReadableByteChannel;
354557728efb66c455a52b7669a8eefef7a9e54854Jesse Wilsonimport java.nio.channels.WritableByteChannel;
3614816f17144d90174628ee82dc616d4b9c921149Jesse Wilsonimport java.util.Arrays;
3714816f17144d90174628ee82dc616d4b9c921149Jesse Wilsonimport junit.framework.TestCase;
3814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
3914816f17144d90174628ee82dc616d4b9c921149Jesse Wilsonpublic final class OldFileChannelTest extends TestCase {
4014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
4114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson    private static final int CAPACITY = 100;
4214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
4314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson    private static final String CONTENT = "MYTESTSTRING needs to be a little long";
4414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
4514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson    private static final byte[] TEST_BYTES;
4614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
4714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson    static {
4814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
4914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            TEST_BYTES = "test".getBytes("iso8859-1");
5014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (UnsupportedEncodingException e) {
5114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            throw new Error(e);
5214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
5314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson    }
5414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
5514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson    private static final int CONTENT_LENGTH = CONTENT.length();
5614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
5714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson    private static final byte[] CONTENT_AS_BYTES = CONTENT.getBytes();
5814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
5914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson    private static final int CONTENT_AS_BYTES_LENGTH = CONTENT_AS_BYTES.length;
6014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
6114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson    private FileChannel readOnlyFileChannel;
6214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
6314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson    private FileChannel writeOnlyFileChannel;
6414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
6514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson    private FileChannel readWriteFileChannel;
6614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
6714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson    private File fileOfReadOnlyFileChannel;
6814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
6914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson    private File fileOfWriteOnlyFileChannel;
7014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
7114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson    private File fileOfReadWriteFileChannel;
7214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
7314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson    // to read content from FileChannel
7414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson    private FileInputStream fis;
7514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
7614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson    private FileLock fileLock;
7714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
7814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson    protected void setUp() throws Exception {
7914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        fileOfReadOnlyFileChannel = File.createTempFile(
8014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson                "File_of_readOnlyFileChannel", "tmp");
8114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        fileOfReadOnlyFileChannel.deleteOnExit();
8214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        fileOfWriteOnlyFileChannel = File.createTempFile(
8314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson                "File_of_writeOnlyFileChannel", "tmp");
8414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        fileOfWriteOnlyFileChannel.deleteOnExit();
8514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        fileOfReadWriteFileChannel = File.createTempFile(
8614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson                "File_of_readWriteFileChannel", "tmp");
8714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        fileOfReadWriteFileChannel.deleteOnExit();
8814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        fis = null;
8914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        fileLock = null;
9014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        readOnlyFileChannel = new FileInputStream(fileOfReadOnlyFileChannel)
9114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson                .getChannel();
9214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        writeOnlyFileChannel = new FileOutputStream(fileOfWriteOnlyFileChannel)
9314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson                .getChannel();
9414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        readWriteFileChannel = new RandomAccessFile(fileOfReadWriteFileChannel,
9514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson                "rw").getChannel();
9614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson    }
9714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
9814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson    protected void tearDown() {
9914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        if (null != readOnlyFileChannel) {
10014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            try {
10114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson                readOnlyFileChannel.close();
10214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            } catch (IOException e) {
10314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson                // do nothing
10414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            }
10514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
10614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        if (null != writeOnlyFileChannel) {
10714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            try {
10814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson                writeOnlyFileChannel.close();
10914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            } catch (IOException e) {
11014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson                // do nothing
11114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            }
11214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
11314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        if (null != readWriteFileChannel) {
11414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            try {
11514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson                readWriteFileChannel.close();
11614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            } catch (IOException e) {
11714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson                // do nothing
11814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            }
11914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
12014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        if (null != fis) {
12114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            try {
12214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson                fis.close();
12314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            } catch (IOException e) {
12414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson                // do nothing
12514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            }
12614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
12714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
12814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        if (null != fileLock) {
12914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            try {
13014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson                fileLock.release();
13114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            } catch (IOException e) {
13214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson                // do nothing
13314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            }
13414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
13514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
13614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        if (null != fileOfReadOnlyFileChannel) {
13714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fileOfReadOnlyFileChannel.delete();
13814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
13914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        if (null != fileOfWriteOnlyFileChannel) {
14014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fileOfWriteOnlyFileChannel.delete();
14114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
14214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        if (null != fileOfReadWriteFileChannel) {
14314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fileOfReadWriteFileChannel.delete();
14414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
14514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson    }
14614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
14714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson    public void test_forceZ() throws Exception {
14814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        ByteBuffer writeBuffer = ByteBuffer.wrap(CONTENT_AS_BYTES);
14914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        writeOnlyFileChannel.write(writeBuffer);
15014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        writeOnlyFileChannel.force(true);
15114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
15214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        byte[] readBuffer = new byte[CONTENT_AS_BYTES_LENGTH];
15314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        fis = new FileInputStream(fileOfWriteOnlyFileChannel);
15414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        fis.read(readBuffer);
15514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        assertTrue(Arrays.equals(CONTENT_AS_BYTES, readBuffer));
15614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
15714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        writeOnlyFileChannel.write(writeBuffer);
15814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        writeOnlyFileChannel.force(false);
159dbde5bd893290c02bb289460fc61e48eda63daa2Elliott Hughes        fis.close();
16014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
16114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        readBuffer = new byte[CONTENT_AS_BYTES_LENGTH];
16214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        fis = new FileInputStream(fileOfWriteOnlyFileChannel);
16314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        fis.read(readBuffer);
16414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        assertTrue(Arrays.equals(CONTENT_AS_BYTES, readBuffer));
165dbde5bd893290c02bb289460fc61e48eda63daa2Elliott Hughes        fis.close();
16614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson    }
16714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
16814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
16914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson    /**
17014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson     * Initializes test file.
17114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson     *
17214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson     * @param file
17314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson     * @throws FileNotFoundException
17414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson     * @throws IOException
17514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson     */
17614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson    private void writeDataToFile(File file) throws FileNotFoundException,
17714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            IOException {
17814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        FileOutputStream fos = new FileOutputStream(file);
17914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
18014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fos.write(CONTENT_AS_BYTES);
18114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } finally {
18214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fos.close();
18314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
18414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson    }
18514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
18614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson    /**
18714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson     * Initializes large test file.
18814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson     *
18914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson     * @param file the file to be written
19014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson     * @param size the content size to be written
19114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson     * @throws FileNotFoundException
19214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson     * @throws IOException
19314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson     */
19414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson    private void writeLargeDataToFile(File file, int size)
19514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            throws FileNotFoundException, IOException {
19614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        FileOutputStream fos = new FileOutputStream(file);
19714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        byte[] buf = new byte[size];
19814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
19914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
20014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            // we don't care about content - just need a particular file size
20114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fos.write(buf);
20214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } finally {
20314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fos.close();
20414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
20514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson    }
20614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
20714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson    public void test_tryLockJJZ_IllegalArgument() throws Exception {
20814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
20914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            writeOnlyFileChannel.tryLock(0, -1, false);
21014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw IllegalArgumentException");
21114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (IllegalArgumentException e) {
21214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            // expected
21314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
21414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
21514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
21614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            writeOnlyFileChannel.tryLock(-1, 0, false);
21714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw IllegalArgumentException");
21814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (IllegalArgumentException e) {
21914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            // expected
22014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
22114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
22214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
22314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            readWriteFileChannel.tryLock(-1, -1, false);
22414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw IllegalArgumentException");
22514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (IllegalArgumentException e) {
22614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            // expected
22714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
22814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
22914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
23014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            readWriteFileChannel.tryLock(Long.MAX_VALUE, 1, false);
23114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw IllegalArgumentException");
23214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (IllegalArgumentException e) {
23314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            // expected
23414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
2353d09992b375338188c75268dddbe07635a505bbeJesse Wilson    }
23614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
2373d09992b375338188c75268dddbe07635a505bbeJesse Wilson    public void testTryLockVeryLarge() throws IOException {
2383d09992b375338188c75268dddbe07635a505bbeJesse Wilson        long tooBig = Integer.MAX_VALUE + 1L;
2393d09992b375338188c75268dddbe07635a505bbeJesse Wilson        FileLock lock = readWriteFileChannel.tryLock(tooBig, 1, false);
2403d09992b375338188c75268dddbe07635a505bbeJesse Wilson        assertLockFails(tooBig, 1);
2413d09992b375338188c75268dddbe07635a505bbeJesse Wilson        lock.release();
2423d09992b375338188c75268dddbe07635a505bbeJesse Wilson
2433d09992b375338188c75268dddbe07635a505bbeJesse Wilson        lock = readWriteFileChannel.tryLock(0, tooBig, false);
2443d09992b375338188c75268dddbe07635a505bbeJesse Wilson        assertLockFails(0, 1);
2453d09992b375338188c75268dddbe07635a505bbeJesse Wilson        lock.release();
2463d09992b375338188c75268dddbe07635a505bbeJesse Wilson    }
2473d09992b375338188c75268dddbe07635a505bbeJesse Wilson
2483d09992b375338188c75268dddbe07635a505bbeJesse Wilson    public void testTryLockOverlapping() throws IOException {
2493d09992b375338188c75268dddbe07635a505bbeJesse Wilson        FileLock lockOne = readWriteFileChannel.tryLock(0, 10, false);
2503d09992b375338188c75268dddbe07635a505bbeJesse Wilson        FileLock lockTwo = readWriteFileChannel.tryLock(10, 20, false);
2513d09992b375338188c75268dddbe07635a505bbeJesse Wilson        assertLockFails(0, 10);
2523d09992b375338188c75268dddbe07635a505bbeJesse Wilson        lockOne.release();
2533d09992b375338188c75268dddbe07635a505bbeJesse Wilson        assertLockFails(5, 10);
2543d09992b375338188c75268dddbe07635a505bbeJesse Wilson        lockOne = readWriteFileChannel.tryLock(0, 10, false);
2553d09992b375338188c75268dddbe07635a505bbeJesse Wilson        lockTwo.release();
2563d09992b375338188c75268dddbe07635a505bbeJesse Wilson        lockOne.release();
25714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson    }
25814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
25914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson    public void test_readLByteBufferJ_IllegalArgument() throws Exception {
26014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        ByteBuffer readBuffer = ByteBuffer.allocate(CAPACITY);
26114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
26214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
26314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            readOnlyFileChannel.read(readBuffer, -1);
26414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw IllegalArgumentException");
26514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (IllegalArgumentException e) {
26614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            // expected
26714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
26814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
26914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
27014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            writeOnlyFileChannel.read(readBuffer, -1);
27114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw IllegalArgumentException");
27214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (IllegalArgumentException e) {
27314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            // expected
27414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
27514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
27614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
27714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            readWriteFileChannel.read(readBuffer, -1);
27814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw IllegalArgumentException");
27914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (IllegalArgumentException e) {
28014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            // expected
28114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
28214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
28314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        // throws IllegalArgumentException first.
28414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        readOnlyFileChannel.close();
28514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
28614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            readOnlyFileChannel.read(readBuffer, -1);
28714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw IllegalArgumentException");
28814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (IllegalArgumentException e) {
28914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            // expected
29014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
29114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
29214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        writeOnlyFileChannel.close();
29314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
29414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            writeOnlyFileChannel.read(readBuffer, -1);
29514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw IllegalArgumentException");
29614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (IllegalArgumentException e) {
29714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            // expected
29814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
29914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
30014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        readWriteFileChannel.close();
30114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
30214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            readWriteFileChannel.read(readBuffer, -1);
30314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw IllegalArgumentException");
30414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (IllegalArgumentException e) {
30514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            // expected
30614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
30714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson    }
30814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
30914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson    public void test_read$LByteBufferII_Null() throws Exception {
31014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
31114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
31214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            readOnlyFileChannel.read(null, 0, 1);
31314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw NullPointerException");
31414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (NullPointerException e) {
31514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            // expected
31614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
31714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
31814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            readOnlyFileChannel.read(null, 0, 3);
31914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw NullPointerException");
32014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (NullPointerException e) {
32114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            // expected
32214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
32314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
32414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            readOnlyFileChannel.read(null, 1, 2);
32514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw NullPointerException");
32614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (NullPointerException e) {
32714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            // expected
32814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
32914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
33014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            readOnlyFileChannel.read(null, 2, 1);
33114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw NullPointerException");
33214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (NullPointerException e) {
33314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            // expected
33414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
33514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
33614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            readOnlyFileChannel.read(null, 3, 0);
33714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw NullPointerException");
33814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (NullPointerException e) {
33914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            // expected
34014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
34114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
34214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
34314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            writeOnlyFileChannel.read(null, 0, 1);
34414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw NullPointerException");
34514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (NullPointerException e) {
34614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            // expected
34714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
34814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
34914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            writeOnlyFileChannel.read(null, 0, 3);
35014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw NullPointerException");
35114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (NullPointerException e) {
35214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            // expected
35314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
35414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
35514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            writeOnlyFileChannel.read(null, 1, 2);
35614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw NullPointerException");
35714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (NullPointerException e) {
35814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            // expected
35914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
36014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
36114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            writeOnlyFileChannel.read(null, 2, 1);
36214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw NullPointerException");
36314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (NullPointerException e) {
36414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            // expected
36514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
36614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
36714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            writeOnlyFileChannel.read(null, 3, 0);
36814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw NullPointerException");
36914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (NullPointerException e) {
37014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            // expected
37114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
37214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
37314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
37414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            readWriteFileChannel.read(null, 0, 1);
37514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw NullPointerException");
37614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (NullPointerException e) {
37714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            // expected
37814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
37914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
38014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            readWriteFileChannel.read(null, 0, 3);
38114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw NullPointerException");
38214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (NullPointerException e) {
38314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            // expected
38414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
38514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
38614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            readWriteFileChannel.read(null, 1, 2);
38714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw NullPointerException");
38814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (NullPointerException e) {
38914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            // expected
39014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
39114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
39214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            readWriteFileChannel.read(null, 2, 1);
39314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw NullPointerException");
39414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (NullPointerException e) {
39514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            // expected
39614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
39714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
39814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            readWriteFileChannel.read(null, 3, 0);
39914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw NullPointerException");
40014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (NullPointerException e) {
40114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            // expected
40214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
40314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
40414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        // first throws NullPointerException
40514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        readOnlyFileChannel.close();
40614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
40714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            readOnlyFileChannel.read(null, 0, 1);
40814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw NullPointerException");
40914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (NullPointerException e) {
41014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            // expected
41114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
41214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
41314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            readOnlyFileChannel.read(null, 0, 3);
41414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw NullPointerException");
41514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (NullPointerException e) {
41614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            // expected
41714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
41814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
41914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            readOnlyFileChannel.read(null, 1, 2);
42014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw NullPointerException");
42114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (NullPointerException e) {
42214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            // expected
42314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
42414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
42514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            readOnlyFileChannel.read(null, 2, 1);
42614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw NullPointerException");
42714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (NullPointerException e) {
42814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            // expected
42914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
43014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
43114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            readOnlyFileChannel.read(null, 3, 0);
43214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw NullPointerException");
43314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (NullPointerException e) {
43414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            // expected
43514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
43614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
43714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        readWriteFileChannel.close();
43814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
43914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            readWriteFileChannel.read(null, 0, 1);
44014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw NullPointerException");
44114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (NullPointerException e) {
44214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            // expected
44314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
44414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
44514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            readWriteFileChannel.read(null, 0, 3);
44614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw NullPointerException");
44714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (NullPointerException e) {
44814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            // expected
44914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
45014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
45114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            readWriteFileChannel.read(null, 1, 2);
45214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw NullPointerException");
45314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (NullPointerException e) {
45414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            // expected
45514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
45614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
45714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            readWriteFileChannel.read(null, 2, 1);
45814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw NullPointerException");
45914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (NullPointerException e) {
46014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            // expected
46114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
46214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
46314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            readWriteFileChannel.read(null, 3, 0);
46414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw NullPointerException");
46514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (NullPointerException e) {
46614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            // expected
46714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
46814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
46914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        writeOnlyFileChannel.close();
47014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
47114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            writeOnlyFileChannel.read(null, 0, 1);
47214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw NullPointerException");
47314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (NullPointerException e) {
47414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            // expected
47514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
47614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
47714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            writeOnlyFileChannel.read(null, 0, 3);
47814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw NullPointerException");
47914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (NullPointerException e) {
48014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            // expected
48114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
48214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
48314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            writeOnlyFileChannel.read(null, 1, 2);
48414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw NullPointerException");
48514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (NullPointerException e) {
48614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            // expected
48714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
48814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
48914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            writeOnlyFileChannel.read(null, 2, 1);
49014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw NullPointerException");
49114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (NullPointerException e) {
49214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            // expected
49314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
49414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
49514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            writeOnlyFileChannel.read(null, 3, 0);
49614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw NullPointerException");
49714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (NullPointerException e) {
49814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            // expected
49914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
50014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson    }
50114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
50214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
50314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson    private void doTestForIOOBException(FileChannel channel,
50414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            ByteBuffer[] buffer) throws IOException{
50514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
50614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            channel.read(buffer, -1, 0);
50714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw IndexOutOfBoundException");
50814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (IndexOutOfBoundsException e) {
50914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            // expected
51014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
51114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
51214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            channel.read(buffer, 0, -1);
51314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw IndexOutOfBoundException");
51414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (IndexOutOfBoundsException e) {
51514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            // expected
51614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
51714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
51814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            channel.read(buffer, 0, 3);
51914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw IndexOutOfBoundException");
52014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (IndexOutOfBoundsException e) {
52114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            // expected
52214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
52314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
52414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            channel.read(buffer, 1, 2);
52514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw IndexOutOfBoundException");
52614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (IndexOutOfBoundsException e) {
52714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            // expected
52814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
52914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
53014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            channel.read(buffer, 2, 1);
53114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw IndexOutOfBoundException");
53214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (IndexOutOfBoundsException e) {
53314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            // expected
53414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
53514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
53614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            channel.read(buffer, 3, 0);
53714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw IndexOutOfBoundException");
53814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (IndexOutOfBoundsException e) {
53914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            // expected
54014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
54114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson    }
54252b939cbcc060c6bf71b65f2588e9837a86f7c5fElliott Hughes
54314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson    public void test_read$LByteBufferII_IndexOutOfBound() throws Exception {
54414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        ByteBuffer[] readBuffers = new ByteBuffer[2];
54514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        readBuffers[0] = ByteBuffer.allocate(CAPACITY);
54614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        readBuffers[1] = ByteBuffer.allocate(CAPACITY);
54714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        ByteBuffer[] readBuffersNull = new ByteBuffer[2];
54814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
54914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        doTestForIOOBException(readOnlyFileChannel, readBuffers);
55014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        doTestForIOOBException(readWriteFileChannel, readBuffers);
55114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        doTestForIOOBException(writeOnlyFileChannel, readBuffers);
55214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
55314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        doTestForIOOBException(readOnlyFileChannel, readBuffersNull);
55414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        doTestForIOOBException(readWriteFileChannel, readBuffersNull);
55514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        doTestForIOOBException(writeOnlyFileChannel, readBuffersNull);
55614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
55714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            readOnlyFileChannel.read(null, -1, 0);
55814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw IndexOutOfBoundException");
559617329e227c071828c4b2616f548d0e0f29cd75aJesse Wilson        } catch (NullPointerException expected) {
560617329e227c071828c4b2616f548d0e0f29cd75aJesse Wilson        } catch (IndexOutOfBoundsException expected) {
56114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
56214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
56314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            readOnlyFileChannel.read(null, 0, -1);
56414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw IndexOutOfBoundException");
565617329e227c071828c4b2616f548d0e0f29cd75aJesse Wilson        } catch (NullPointerException expected) {
566617329e227c071828c4b2616f548d0e0f29cd75aJesse Wilson        } catch (IndexOutOfBoundsException expected) {
56714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
56814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
56914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
57014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            readWriteFileChannel.read(null, -1, 0);
57114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw IndexOutOfBoundException");
572617329e227c071828c4b2616f548d0e0f29cd75aJesse Wilson        } catch (NullPointerException expected) {
573617329e227c071828c4b2616f548d0e0f29cd75aJesse Wilson        } catch (IndexOutOfBoundsException expected) {
57414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
57514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
57614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            readWriteFileChannel.read(null, 0, -1);
57714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw IndexOutOfBoundException");
578617329e227c071828c4b2616f548d0e0f29cd75aJesse Wilson        } catch (NullPointerException expected) {
579617329e227c071828c4b2616f548d0e0f29cd75aJesse Wilson        } catch (IndexOutOfBoundsException expected) {
58014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
58114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
58214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
58314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            writeOnlyFileChannel.read(null, -1, 0);
58414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw IndexOutOfBoundException");
585617329e227c071828c4b2616f548d0e0f29cd75aJesse Wilson        } catch (NullPointerException expected) {
586617329e227c071828c4b2616f548d0e0f29cd75aJesse Wilson        } catch (IndexOutOfBoundsException expected) {
58714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
58814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
58914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            writeOnlyFileChannel.read(null, 0, -1);
59014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw IndexOutOfBoundException");
591617329e227c071828c4b2616f548d0e0f29cd75aJesse Wilson        } catch (NullPointerException expected) {
592617329e227c071828c4b2616f548d0e0f29cd75aJesse Wilson        } catch (IndexOutOfBoundsException expected) {
59314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
59414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
59514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        readOnlyFileChannel.close();
59614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        doTestForIOOBException(readOnlyFileChannel, readBuffers);
59714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        doTestForIOOBException(readOnlyFileChannel, readBuffersNull);
59814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
59914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        readWriteFileChannel.close();
60014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        doTestForIOOBException(readWriteFileChannel, readBuffers);
60114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        doTestForIOOBException(readWriteFileChannel, readBuffersNull);
60214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
60314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        writeOnlyFileChannel.close();
60414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        doTestForIOOBException(writeOnlyFileChannel, readBuffers);
60514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        doTestForIOOBException(writeOnlyFileChannel, readBuffersNull);
60614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson    }
60714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
60814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson    public void test_read$LByteBufferII_EmptyFile() throws Exception {
60914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        ByteBuffer[] readBuffers = new ByteBuffer[2];
61014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        readBuffers[0] = ByteBuffer.allocate(CAPACITY);
61114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        readBuffers[1] = ByteBuffer.allocate(CAPACITY);
61214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        long result = readOnlyFileChannel.read(readBuffers, 0, 2);
61314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        assertEquals(-1, result);
61414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        assertEquals(0, readBuffers[0].position());
61514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        assertEquals(0, readBuffers[1].position());
61614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson    }
61714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
61814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson    public void test_read$LByteBufferII_EmptyBuffers() throws Exception {
61914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        ByteBuffer[] readBuffers = new ByteBuffer[2];
62014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        readBuffers[0] = ByteBuffer.allocate(CAPACITY);
62114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
62214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
62314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            readOnlyFileChannel.read(readBuffers, 0, 2);
62414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (NullPointerException e) {
62514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            // expected
62614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
62714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
62814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        writeDataToFile(fileOfReadOnlyFileChannel);
62914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        readBuffers[0] = ByteBuffer.allocate(CAPACITY);
63014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
63114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            readOnlyFileChannel.read(readBuffers, 0, 2);
63214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (NullPointerException e) {
63314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            // expected
63414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
63514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
63614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        long result = readOnlyFileChannel.read(readBuffers, 0, 1);
63714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        assertEquals(CONTENT_AS_BYTES_LENGTH, result);
63814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson    }
63914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
64014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson    public void test_isOpen() throws Exception {
64114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        // Regression for HARMONY-40
64214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        File logFile = File.createTempFile("out", "tmp");
64314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        logFile.deleteOnExit();
64414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        FileOutputStream out = new FileOutputStream(logFile, true);
64514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        FileChannel channel = out.getChannel();
64614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        out.write(1);
64714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        assertTrue("Assert 0: Channel is not open", channel.isOpen());
64814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        out.close();
64914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        assertFalse("Assert 0: Channel is still open", channel.isOpen());
65014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson    }
65114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
65214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson    public void test_writeLByteBuffer_Closed() throws Exception {
65314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        ByteBuffer writeBuffer = ByteBuffer.allocate(CAPACITY);
65414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
65514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        readOnlyFileChannel.close();
65614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
65714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            readOnlyFileChannel.write(writeBuffer);
65814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw ClosedChannelException");
65914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (ClosedChannelException e) {
66014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            // expected
66114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
66214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
66314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        writeOnlyFileChannel.close();
66414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
66514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            writeOnlyFileChannel.write(writeBuffer);
66614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw ClosedChannelException");
66714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (ClosedChannelException e) {
66814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            // expected
66914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
67014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
67114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        readWriteFileChannel.close();
67214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
67314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            readWriteFileChannel.write(writeBuffer);
67414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw ClosedChannelException");
67514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (ClosedChannelException e) {
67614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            // expected
67714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
67814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
67914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        // should throw ClosedChannelException first
68014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
68114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            readWriteFileChannel.read((ByteBuffer) null);
68214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw ClosedChannelException");
68314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (NullPointerException e) {
68414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (ClosedChannelException e) {
68514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
68614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
68714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
68814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            readOnlyFileChannel.write((ByteBuffer) null);
68914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw ClosedChannelException");
69014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (NullPointerException e) {
69114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (ClosedChannelException e) {
69214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
69314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
69414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        writeOnlyFileChannel.close();
69514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
69614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            writeOnlyFileChannel.write((ByteBuffer) null);
69714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw ClosedChannelException");
69814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (NullPointerException e) {
69914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (ClosedChannelException e) {
70014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
70114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson    }
70214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
70314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson    public void test_writeLByteBufferJ_Postion_As_Long() throws Exception {
70414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        ByteBuffer writeBuffer = ByteBuffer.wrap(TEST_BYTES);
70514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
70614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            writeOnlyFileChannel.write(writeBuffer, Long.MAX_VALUE);
70714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (IOException e) {
70814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            // expected
70914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
71014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson    }
71114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
71214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson    public void test_writeLByteBufferJ_IllegalArgument() throws Exception {
71314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        ByteBuffer writeBuffer = ByteBuffer.allocate(CAPACITY);
71414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
71514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
71614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            readOnlyFileChannel.write(writeBuffer, -1);
71714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw IllegalArgumentException");
71814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (IllegalArgumentException e) {
71914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            // expected
72014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
72114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
72214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
72314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            writeOnlyFileChannel.write(writeBuffer, -1);
72414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw IllegalArgumentException");
72514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (IllegalArgumentException e) {
72614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            // expected
72714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
72814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
72914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
73014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            readWriteFileChannel.write(writeBuffer, -1);
73114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw IllegalArgumentException");
73214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (IllegalArgumentException e) {
73314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            // expected
73414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
73514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
73614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        // throws IllegalArgumentException first.
73714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        readOnlyFileChannel.close();
73814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
73914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            readOnlyFileChannel.write(writeBuffer, -1);
74014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw IllegalArgumentException");
74114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (IllegalArgumentException e) {
74214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            // expected
74314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
74414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
74514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        writeOnlyFileChannel.close();
74614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
74714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            writeOnlyFileChannel.write(writeBuffer, -1);
74814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw IllegalArgumentException");
74914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (IllegalArgumentException e) {
75014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            // expected
75114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
75214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
75314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        readWriteFileChannel.close();
75414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
75514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            readWriteFileChannel.write(writeBuffer, -1);
75614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw IllegalArgumentException");
75714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (IllegalArgumentException e) {
75814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            // expected
75914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
76014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson    }
76114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
76214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson    public void test_writeLByteBufferJ_NonZeroPosition() throws Exception {
76314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        final int pos = 5;
76414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        ByteBuffer writeBuffer = ByteBuffer.wrap(CONTENT_AS_BYTES);
76514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        writeBuffer.position(pos);
76614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        int result = writeOnlyFileChannel.write(writeBuffer, pos);
76714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        assertEquals(CONTENT_AS_BYTES_LENGTH - pos, result);
76814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        assertEquals(CONTENT_AS_BYTES_LENGTH, writeBuffer.position());
76914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        writeOnlyFileChannel.close();
77014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
77114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        assertEquals(CONTENT_AS_BYTES_LENGTH, fileOfWriteOnlyFileChannel
77214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson                .length());
77314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
77414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        fis = new FileInputStream(fileOfWriteOnlyFileChannel);
77514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        byte[] inputBuffer = new byte[CONTENT_AS_BYTES_LENGTH - pos];
77614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        fis.skip(pos);
77714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        fis.read(inputBuffer);
77814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        String test = CONTENT.substring(pos);
77914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        assertTrue(Arrays.equals(test.getBytes(), inputBuffer));
78014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson    }
78114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
78214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson    public void test_write$LByteBuffer_Closed() throws Exception {
78314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        ByteBuffer[] writeBuffers = new ByteBuffer[2];
78414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        writeBuffers[0] = ByteBuffer.allocate(CAPACITY);
78514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        writeBuffers[1] = ByteBuffer.allocate(CAPACITY);
78614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
78714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        readOnlyFileChannel.close();
78814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
78914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            readOnlyFileChannel.write(writeBuffers);
79014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw ClosedChannelException");
79114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (ClosedChannelException e) {
79214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            // expected
79314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
79414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
79514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        writeOnlyFileChannel.close();
79614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
79714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            writeOnlyFileChannel.write(writeBuffers);
79814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw ClosedChannelException");
79914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (ClosedChannelException e) {
80014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            // expected
80114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
80214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
80314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        readWriteFileChannel.close();
80414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
80514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            readWriteFileChannel.write(writeBuffers);
80614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw ClosedChannelException");
80714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (ClosedChannelException e) {
80814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            // expected
80914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
81014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson    }
81114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
81214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson    public void test_write$LByteBuffer_ReadOnly() throws Exception {
81314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        ByteBuffer[] writeBuffers = new ByteBuffer[2];
81414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        writeBuffers[0] = ByteBuffer.allocate(CAPACITY);
81514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        writeBuffers[1] = ByteBuffer.allocate(CAPACITY);
81614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
81714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
81814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            readOnlyFileChannel.write(writeBuffers);
81914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw NonWritableChannelException");
82014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (NonWritableChannelException e) {
82114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            // expected
82214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
82314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson    }
82414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
82514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson    public void test_write$LByteBuffer_EmptyBuffers() throws Exception {
82614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        ByteBuffer[] writeBuffers = new ByteBuffer[2];
82714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        writeBuffers[0] = ByteBuffer.allocate(this.CONTENT_LENGTH);
82814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
82914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            writeOnlyFileChannel.write(writeBuffers);
83014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw NullPointerException");
83114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (NullPointerException e) {
83214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            // expected
83314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
83414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
83514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
83614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            readWriteFileChannel.write(writeBuffers);
83714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw NullPointerException");
83814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (NullPointerException e) {
83914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            // expected
84014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
84114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson    }
84214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
84314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson    public void test_write$LByteBuffer() throws Exception {
84414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        ByteBuffer[] writeBuffers = new ByteBuffer[2];
84514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        writeBuffers[0] = ByteBuffer.wrap(CONTENT_AS_BYTES);
84614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        writeBuffers[1] = ByteBuffer.wrap(CONTENT_AS_BYTES);
84714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
84814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        long result = writeOnlyFileChannel.write(writeBuffers);
84914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        assertEquals(CONTENT_AS_BYTES_LENGTH * 2, result);
85014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        assertEquals(CONTENT_AS_BYTES_LENGTH, writeBuffers[0].position());
85114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        assertEquals(CONTENT_AS_BYTES_LENGTH, writeBuffers[1].position());
85214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        writeOnlyFileChannel.close();
85314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
85414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        assertEquals(CONTENT_AS_BYTES_LENGTH * 2, fileOfWriteOnlyFileChannel
85514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson                .length());
85614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
85714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        fis = new FileInputStream(fileOfWriteOnlyFileChannel);
85814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        byte[] inputBuffer = new byte[CONTENT_AS_BYTES_LENGTH];
85914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        fis.read(inputBuffer);
86014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        byte[] expectedResult = new byte[CONTENT_AS_BYTES_LENGTH * 2];
86114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        System.arraycopy(CONTENT_AS_BYTES, 0, expectedResult, 0,
86214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson                CONTENT_AS_BYTES_LENGTH);
86314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        System.arraycopy(CONTENT_AS_BYTES, 0, expectedResult,
86414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson                CONTENT_AS_BYTES_LENGTH, CONTENT_AS_BYTES_LENGTH);
86514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        assertTrue(Arrays.equals(CONTENT_AS_BYTES, inputBuffer));
86614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson    }
86714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
86814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson    public void test_write$LByteBufferII_Null() throws Exception {
86914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        ByteBuffer[] writeBuffers = null;
87014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
87114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
87214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            readOnlyFileChannel.write(writeBuffers, 1, 2);
87314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw NullPointerException");
87414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (NullPointerException e) {
87514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            // expected
87614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
87714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
87814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
87914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            writeOnlyFileChannel.write(writeBuffers, 1, 2);
88014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw NullPointerException");
88114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (NullPointerException e) {
88214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            // expected
88314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
88414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
88514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
88614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            readWriteFileChannel.write(writeBuffers, 1, 2);
88714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw NullPointerException");
88814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (NullPointerException e) {
88914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            // expected
89014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
89114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
89214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        // first throws NullPointerException
89314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        readOnlyFileChannel.close();
89414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
89514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            readOnlyFileChannel.write(writeBuffers, 1, 2);
89614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw NullPointerException");
89714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (NullPointerException e) {
89814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            // expected
89914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
90014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
90114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        writeOnlyFileChannel.close();
90214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
90314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            writeOnlyFileChannel.write(writeBuffers, 1, 2);
90414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw NullPointerException");
90514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (NullPointerException e) {
90614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            // expected
90714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
90814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
90914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        readWriteFileChannel.close();
91014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
91114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            readWriteFileChannel.write(writeBuffers, 1, 2);
91214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw NullPointerException");
91314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (NullPointerException e) {
91414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            // expected
91514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
91614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson    }
91752b939cbcc060c6bf71b65f2588e9837a86f7c5fElliott Hughes
91814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson    public void test_write$LByteBufferII_IndexOutOfBound() throws Exception {
91914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        ByteBuffer[] writeBuffers = new ByteBuffer[2];
92014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        writeBuffers[0] = ByteBuffer.allocate(this.CONTENT_LENGTH);
92114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        writeBuffers[1] = ByteBuffer.allocate(this.CONTENT_LENGTH);
92214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
92314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
92414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            writeOnlyFileChannel.write(writeBuffers, -1, 0);
92514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw IndexOutOfBoundsException");
92614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (IndexOutOfBoundsException e) {
92714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            // expected
92814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
92914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
93014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            writeOnlyFileChannel.write(writeBuffers, 0, -1);
93114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw IndexOutOfBoundsException");
93214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (IndexOutOfBoundsException e) {
93314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            // expected
93414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
93514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
93614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            writeOnlyFileChannel.write(writeBuffers, 0, 3);
93714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw IndexOutOfBoundsException");
93814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (IndexOutOfBoundsException e) {
93914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            // expected
94014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
94114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
94214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            writeOnlyFileChannel.write(writeBuffers, 1, 2);
94314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw IndexOutOfBoundsException");
94414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (IndexOutOfBoundsException e) {
94514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            // expected
94614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
94714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
94814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            writeOnlyFileChannel.write(writeBuffers, 2, 1);
94914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw IndexOutOfBoundsException");
95014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (IndexOutOfBoundsException e) {
95114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            // expected
95214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
95314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
95414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            writeOnlyFileChannel.write(writeBuffers, 3, 0);
95514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw IndexOutOfBoundsException");
95614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (IndexOutOfBoundsException e) {
95714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            // expected
95814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
95914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
96014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
96114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            readWriteFileChannel.write(writeBuffers, -1, 0);
96214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw IndexOutOfBoundsException");
96314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (IndexOutOfBoundsException e) {
96414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            // expected
96514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
96614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
96714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            readWriteFileChannel.write(writeBuffers, 0, -1);
96814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw IndexOutOfBoundsException");
96914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (IndexOutOfBoundsException e) {
97014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            // expected
97114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
97214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
97314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            readWriteFileChannel.write(writeBuffers, 0, 3);
97414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw IndexOutOfBoundsException");
97514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (IndexOutOfBoundsException e) {
97614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            // expected
97714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
97814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
97914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            readWriteFileChannel.write(writeBuffers, 1, 2);
98014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw IndexOutOfBoundsException");
98114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (IndexOutOfBoundsException e) {
98214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            // expected
98314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
98414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
98514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            readWriteFileChannel.write(writeBuffers, 2, 1);
98614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw IndexOutOfBoundsException");
98714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (IndexOutOfBoundsException e) {
98814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            // expected
98914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
99014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
99114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            readWriteFileChannel.write(writeBuffers, 3, 0);
99214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw IndexOutOfBoundsException");
99314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (IndexOutOfBoundsException e) {
99414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            // expected
99514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
99614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
99714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
99814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            readOnlyFileChannel.write(writeBuffers, -1, 0);
99914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw IndexOutOfBoundsException");
100014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (IndexOutOfBoundsException e) {
100114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            // expected
100214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
100314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
100414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            readOnlyFileChannel.write(writeBuffers, 0, -1);
100514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw IndexOutOfBoundsException");
100614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (IndexOutOfBoundsException e) {
100714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            // expected
100814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
100914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
101014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            readOnlyFileChannel.write(writeBuffers, 0, 3);
101114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw IndexOutOfBoundsException");
101214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (IndexOutOfBoundsException e) {
101314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            // expected
101414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
101514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
101614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            readOnlyFileChannel.write(writeBuffers, 1, 2);
101714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw IndexOutOfBoundsException");
101814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (IndexOutOfBoundsException e) {
101914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            // expected
102014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
102114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
102214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            readOnlyFileChannel.write(writeBuffers, 2, 1);
102314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw IndexOutOfBoundsException");
102414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (IndexOutOfBoundsException e) {
102514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            // expected
102614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
102714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
102814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            readOnlyFileChannel.write(writeBuffers, 3, 0);
102914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw IndexOutOfBoundsException");
103014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (IndexOutOfBoundsException e) {
103114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            // expected
103214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
103314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson    }
103414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
103514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson    public void test_write$LByteBufferII_EmptyBuffers() throws Exception {
103614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        ByteBuffer[] writeBuffers = new ByteBuffer[2];
103714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        writeBuffers[0] = ByteBuffer.allocate(this.CONTENT_LENGTH);
103814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
103914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            writeOnlyFileChannel.write(writeBuffers, 0, 2);
104014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw NullPointerException");
104114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (NullPointerException e) {
104214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            // expected
104314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
104414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
104514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
104614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            readWriteFileChannel.write(writeBuffers, 0, 2);
104714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw NullPointerException");
104814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (NullPointerException e) {
104914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            // expected
105014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
105114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson    }
105214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
105314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson    public void test_transferToJJLWritableByteChannel_IllegalArgument()
105414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            throws Exception {
105514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        WritableByteChannel writableByteChannel = DatagramChannel.open();
105614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
105714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            readOnlyFileChannel.transferTo(10, -1, writableByteChannel);
105814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw IllegalArgumentException.");
105914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (IllegalArgumentException e) {
106014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            // expected
106114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
106214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
106314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        try {
106414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            readWriteFileChannel.transferTo(-1, 10, writableByteChannel);
106514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            fail("should throw IllegalArgumentException.");
106614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        } catch (IllegalArgumentException e) {
106714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson            // expected
106814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson        }
106914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson    }
107014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson
10713d09992b375338188c75268dddbe07635a505bbeJesse Wilson    private void assertLockFails(long position, long size) throws IOException {
10723d09992b375338188c75268dddbe07635a505bbeJesse Wilson        try {
10733d09992b375338188c75268dddbe07635a505bbeJesse Wilson            readWriteFileChannel.tryLock(position, size, false);
10743d09992b375338188c75268dddbe07635a505bbeJesse Wilson            fail();
10753d09992b375338188c75268dddbe07635a505bbeJesse Wilson        } catch (OverlappingFileLockException expected) {
10763d09992b375338188c75268dddbe07635a505bbeJesse Wilson        }
10773d09992b375338188c75268dddbe07635a505bbeJesse Wilson    }
107814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson}
1079