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