/* * Copyright (c) 2001, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ /* @test * @bug 4417152 4481572 6248930 6725399 6884800 * @summary Test Channels basic functionality */ import java.io.*; import java.nio.*; import java.nio.charset.*; import java.nio.channels.*; public class Basic { static String message; static String encoding; static File blah; static int ITERATIONS = 500; public static void main(String[] args) throws Exception { message = "ascii data for a test"; encoding = "ISO-8859-1"; test(); message = "\ucafe\ubabe\ucafe\ubabe\ucafe\ubabe"; encoding = "UTF-8"; test(); } static void failNpeExpected() { throw new RuntimeException("Did not get the expected NullPointerException."); } private static void test() throws Exception { //Test if methods of Channels throw NPE with null argument(s) try { Channels.newInputStream((ReadableByteChannel)null); failNpeExpected(); } catch (NullPointerException npe) {} try { Channels.newOutputStream((WritableByteChannel)null); failNpeExpected(); } catch (NullPointerException npe) {} try { ReadableByteChannel channel = Channels.newChannel((InputStream)null); failNpeExpected(); } catch (NullPointerException ne) {} // OK. As expected. try { WritableByteChannel channel = Channels.newChannel((OutputStream)null); failNpeExpected(); } catch (NullPointerException ne) {} // OK. As expected. WritableByteChannel wbc = new WritableByteChannel() { public int write(ByteBuffer src) { return 0; } public void close() throws IOException { } public boolean isOpen() { return true; } }; ReadableByteChannel rbc = new ReadableByteChannel() { public int read(ByteBuffer dst) { return 0; } public void close() {} public boolean isOpen() { return true; } }; try { Channels.newReader((ReadableByteChannel)null, Charset.defaultCharset().newDecoder(), -1); failNpeExpected(); } catch (NullPointerException npe) {} try { Channels.newReader(rbc, (CharsetDecoder)null, -1); failNpeExpected(); } catch (NullPointerException npe) {} try { Channels.newReader((ReadableByteChannel)null, Charset.defaultCharset().name()); failNpeExpected(); } catch (NullPointerException npe) {} try { Channels.newReader(rbc, (String)null); failNpeExpected(); } catch (NullPointerException npe) {} try { Channels.newReader(null, (String)null); failNpeExpected(); } catch (NullPointerException npe) {} try { Channels.newReader(rbc, (Charset)null); failNpeExpected(); } catch (NullPointerException npe) {} try { Channels.newReader(null, (Charset)null); failNpeExpected(); } catch (NullPointerException npe) {} try { Channels.newWriter((WritableByteChannel)null, Charset.defaultCharset().newEncoder(), -1); failNpeExpected(); } catch (NullPointerException npe) {} try { Channels.newWriter(null, null, -1); failNpeExpected(); } catch (NullPointerException npe) {} try { Channels.newWriter(wbc, null, -1); failNpeExpected(); } catch (NullPointerException npe) {} try { Channels.newWriter((WritableByteChannel)null, Charset.defaultCharset().name()); failNpeExpected(); } catch (NullPointerException npe) {} try { Channels.newWriter(wbc, (String)null); failNpeExpected(); } catch (NullPointerException npe) {} try { Channels.newWriter(null, (String)null); failNpeExpected(); } catch (NullPointerException npe) {} try { Channels.newWriter(wbc, (Charset)null); failNpeExpected(); } catch (NullPointerException npe) {} try { Channels.newWriter(null, (Charset)null); failNpeExpected(); } catch (NullPointerException npe) {} try { blah = File.createTempFile("blah", null); testNewOutputStream(blah); readAndCheck(blah); blah.delete(); writeOut(blah, ITERATIONS); testNewInputStream(blah); blah.delete(); testNewChannelOut(blah); readAndCheck(blah); blah.delete(); testNewChannelWriteAfterClose(blah); testNewChannelReadAfterClose(blah); blah.delete(); writeOut(blah, ITERATIONS); testNewChannelIn(blah); test4481572(blah); blah.delete(); testNewWriter(blah); readAndCheck(blah); blah.delete(); writeOut(blah, ITERATIONS); testNewReader(blah); } finally { blah.delete(); } } private static void readAndCheck(File blah) throws Exception { FileInputStream fis = new FileInputStream(blah); int messageSize = message.length() * ITERATIONS * 3 + 1; byte bb[] = new byte[messageSize]; int bytesRead = 0; int totalRead = 0; while (bytesRead != -1) { totalRead += bytesRead; bytesRead = fis.read(bb, totalRead, messageSize - totalRead); } String result = new String(bb, 0, totalRead, encoding); int len = message.length(); for (int i=0; i 0) { totalRead += bytesRead; bytesRead = rbc.read(bb); } rbc.close(); fis.close(); } private static void testNewWriter(File blah) throws Exception { FileOutputStream fos = new FileOutputStream(blah); WritableByteChannel wbc = (WritableByteChannel)fos.getChannel(); Writer w = Channels.newWriter(wbc, encoding); char data[] = new char[40]; message.getChars(0, message.length(), data, 0); for (int i=0; i