1cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath/* 2cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * Licensed to the Apache Software Foundation (ASF) under one or more 3cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * contributor license agreements. See the NOTICE file distributed with 4cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * this work for additional information regarding copyright ownership. 5cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * The ASF licenses this file to You under the Apache License, Version 2.0 6cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * (the "License"); you may not use this file except in compliance with 7cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * the License. You may obtain a copy of the License at 8cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * 9cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * http://www.apache.org/licenses/LICENSE-2.0 10cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * 11cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * Unless required by applicable law or agreed to in writing, software 12cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * distributed under the License is distributed on an "AS IS" BASIS, 13cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * See the License for the specific language governing permissions and 15cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * limitations under the License. 16cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 17ab762bb740405d0fefcccf4a0899a234f995be13Narayan Kamathpackage org.apache.harmony.tests.java.io; 18cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 19cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.IOException; 20cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.PipedInputStream; 21cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.PipedOutputStream; 2219509358bac0d311c0eeecc8c12b2cd3d0d635d4Narayan Kamathimport java.util.concurrent.CountDownLatch; 23cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 24cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathpublic class PipedInputStreamTest extends junit.framework.TestCase { 25cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 26cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath static class PWriter implements Runnable { 27cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath PipedOutputStream pos; 28cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 29cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public byte bytes[]; 30cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 31cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void run() { 32cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 33cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath pos.write(bytes); 34cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath synchronized (this) { 35cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath notify(); 36cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 37cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (IOException e) { 38cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath e.printStackTrace(System.out); 39cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath System.out.println("Could not write bytes"); 40cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 41cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 42cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 43cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public PWriter(PipedOutputStream pout, int nbytes) { 44cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath pos = pout; 45cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath bytes = new byte[nbytes]; 46cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath for (int i = 0; i < bytes.length; i++) { 47cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath bytes[i] = (byte) (System.currentTimeMillis() % 9); 48cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 49cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 50cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 51cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 52cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Thread t; 53cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 54cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath PWriter pw; 55cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 56cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath PipedInputStream pis; 57cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 58cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath PipedOutputStream pos; 59cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 60cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 61cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.io.PipedInputStream#PipedInputStream() 62cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 63cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_Constructor() { 64cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Test for method java.io.PipedInputStream() 65cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Used in tests 66cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 67cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 68cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 69cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.io.PipedInputStream#PipedInputStream(java.io.PipedOutputStream) 70cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 71cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_ConstructorLjava_io_PipedOutputStream() throws Exception { 72cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Test for method java.io.PipedInputStream(java.io.PipedOutputStream) 73cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath pis = new PipedInputStream(new PipedOutputStream()); 74cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath pis.available(); 75cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 76cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 77cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 78cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_readException() throws IOException { 79cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath pis = new PipedInputStream(); 80cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath pos = new PipedOutputStream(); 81cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 82cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 83cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath pis.connect(pos); 84cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath t = new Thread(pw = new PWriter(pos, 1000)); 85cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath t.start(); 86cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath while (true) { 87cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath pis.read(); 88cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath t.interrupt(); 89cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 90cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (IOException expected) { 91cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } finally { 92cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 93cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath pis.close(); 94cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath pos.close(); 95cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (IOException ee) { 96cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 97cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 98cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 99cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 100cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 101cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.io.PipedInputStream#available() 102cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 103cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_available() throws Exception { 104cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath pis = new PipedInputStream(); 105cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath pos = new PipedOutputStream(); 106cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 107cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath pis.connect(pos); 108cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath t = new Thread(pw = new PWriter(pos, 1000)); 109cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath t.start(); 110cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 111cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath synchronized (pw) { 112cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath pw.wait(10000); 113cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 114cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue("Available returned incorrect number of bytes: " 115cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath + pis.available(), pis.available() == 1000); 116cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 117cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath PipedInputStream pin = new PipedInputStream(); 118cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath PipedOutputStream pout = new PipedOutputStream(pin); 119cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // We know the PipedInputStream buffer size is 1024. 120cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Writing another byte would cause the write to wait 121cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // for a read before returning 122cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath for (int i = 0; i < 1024; i++) { 123cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath pout.write(i); 124cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 125cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("Incorrect available count", 1024, pin.available()); 126cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 127cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 128cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 129cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.io.PipedInputStream#close() 130cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 131cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_close() throws IOException { 132cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Test for method void java.io.PipedInputStream.close() 133cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath pis = new PipedInputStream(); 134cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath pos = new PipedOutputStream(); 135cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath pis.connect(pos); 136cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath pis.close(); 137cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 138cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath pos.write((byte) 127); 139cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath fail("Failed to throw expected exception"); 140cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (IOException e) { 141cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // The spec for PipedInput saya an exception should be thrown if 142cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // a write is attempted to a closed input. The PipedOuput spec 143cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // indicates that an exception should be thrown only when the 144cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // piped input thread is terminated without closing 145cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath return; 146cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 147cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 148cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 149cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 150cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.io.PipedInputStream#connect(java.io.PipedOutputStream) 151cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 152cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_connectLjava_io_PipedOutputStream() throws Exception { 153cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath pis = new PipedInputStream(); 154cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath pos = new PipedOutputStream(); 155cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("Non-conected pipe returned non-zero available bytes", 0, 156cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath pis.available()); 157cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 158cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath pis.connect(pos); 159cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath t = new Thread(pw = new PWriter(pos, 1000)); 160cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath t.start(); 161cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 162cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath synchronized (pw) { 163cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath pw.wait(10000); 164cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 165cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("Available returned incorrect number of bytes", 1000, pis 166cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath .available()); 167cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 168cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 169cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 170cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.io.PipedInputStream#read() 171cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 172cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_read() throws Exception { 173cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath pis = new PipedInputStream(); 174cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath pos = new PipedOutputStream(); 175cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 176cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath pis.connect(pos); 177cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath t = new Thread(pw = new PWriter(pos, 1000)); 178cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath t.start(); 179cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 180cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath synchronized (pw) { 181cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath pw.wait(10000); 182cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 183cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("Available returned incorrect number of bytes", 1000, pis 184cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath .available()); 185cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("read returned incorrect byte", pw.bytes[0], (byte) pis 186cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath .read()); 187cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 188cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 189cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 190cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.io.PipedInputStream#read(byte[], int, int) 191cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 192cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_read$BII() throws Exception { 193cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath pis = new PipedInputStream(); 194cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath pos = new PipedOutputStream(); 195cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 196cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath pis.connect(pos); 197cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath t = new Thread(pw = new PWriter(pos, 1000)); 198cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath t.start(); 199cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 200cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath byte[] buf = new byte[400]; 201cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath synchronized (pw) { 202cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath pw.wait(10000); 203cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 204cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue("Available returned incorrect number of bytes: " 205cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath + pis.available(), pis.available() == 1000); 206cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath pis.read(buf, 0, 400); 207cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath for (int i = 0; i < 400; i++) { 208cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("read returned incorrect byte[]", pw.bytes[i], buf[i]); 209cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 210cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 211cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 212cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 213cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.io.PipedInputStream#read(byte[], int, int) 214cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * Regression for HARMONY-387 215cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 216cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_read$BII_2() throws IOException { 217cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath PipedInputStream obj = new PipedInputStream(); 218cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 219cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath obj.read(new byte[0], 0, -1); 220cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath fail(); 221cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (IndexOutOfBoundsException expected) { 222cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 223cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 224cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 225cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 226cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.io.PipedInputStream#read(byte[], int, int) 227cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 228cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_read$BII_3() throws IOException { 229cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath PipedInputStream obj = new PipedInputStream(); 230cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 231cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath obj.read(new byte[0], -1, 0); 232cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath fail(); 233cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (IndexOutOfBoundsException expected) { 234cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 235cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 236cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 237cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 238cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.io.PipedInputStream#read(byte[], int, int) 239cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 240cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_read$BII_4() throws IOException { 241cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath PipedInputStream obj = new PipedInputStream(); 242cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 243cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath obj.read(new byte[0], -1, -1); 244cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath fail(); 245cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (IndexOutOfBoundsException expected) { 246cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 247cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 248cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 249cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 250cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.io.PipedInputStream#receive(int) 251cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 25219509358bac0d311c0eeecc8c12b2cd3d0d635d4Narayan Kamath public void test_write_failsAfterReaderDead() throws Exception { 253cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath pis = new PipedInputStream(); 254cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath pos = new PipedOutputStream(); 255cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 256cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // test if writer recognizes dead reader 257cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath pis.connect(pos); 258cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 25919509358bac0d311c0eeecc8c12b2cd3d0d635d4Narayan Kamath class WriteRunnable implements Runnable { 260cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 26119509358bac0d311c0eeecc8c12b2cd3d0d635d4Narayan Kamath final CountDownLatch readerAlive = new CountDownLatch(1); 262cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 263cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void run() { 264cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 265cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath pos.write(1); 26619509358bac0d311c0eeecc8c12b2cd3d0d635d4Narayan Kamath 26719509358bac0d311c0eeecc8c12b2cd3d0d635d4Narayan Kamath try { 26819509358bac0d311c0eeecc8c12b2cd3d0d635d4Narayan Kamath readerAlive.await(); 26919509358bac0d311c0eeecc8c12b2cd3d0d635d4Narayan Kamath } catch (InterruptedException ie) { 27019509358bac0d311c0eeecc8c12b2cd3d0d635d4Narayan Kamath fail(); 27119509358bac0d311c0eeecc8c12b2cd3d0d635d4Narayan Kamath return; 272cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 27319509358bac0d311c0eeecc8c12b2cd3d0d635d4Narayan Kamath 274cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 275cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // should throw exception since reader thread 276cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // is now dead 277cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath pos.write(1); 27819509358bac0d311c0eeecc8c12b2cd3d0d635d4Narayan Kamath fail(); 27919509358bac0d311c0eeecc8c12b2cd3d0d635d4Narayan Kamath } catch (IOException expected) { 280cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 281cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (IOException e) { 282cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 283cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 284cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 285cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 28619509358bac0d311c0eeecc8c12b2cd3d0d635d4Narayan Kamath class ReadRunnable implements Runnable { 287cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void run() { 288cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 289cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath pis.read(); 290cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (IOException e) { 29119509358bac0d311c0eeecc8c12b2cd3d0d635d4Narayan Kamath fail(); 292cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 293cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 294cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 29519509358bac0d311c0eeecc8c12b2cd3d0d635d4Narayan Kamath 29619509358bac0d311c0eeecc8c12b2cd3d0d635d4Narayan Kamath WriteRunnable writeRunnable = new WriteRunnable(); 29719509358bac0d311c0eeecc8c12b2cd3d0d635d4Narayan Kamath Thread writeThread = new Thread(writeRunnable); 29819509358bac0d311c0eeecc8c12b2cd3d0d635d4Narayan Kamath 299cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath ReadRunnable readRunnable = new ReadRunnable(); 300cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Thread readThread = new Thread(readRunnable); 301cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath writeThread.start(); 302cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath readThread.start(); 30319509358bac0d311c0eeecc8c12b2cd3d0d635d4Narayan Kamath readThread.join(); 304cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 30519509358bac0d311c0eeecc8c12b2cd3d0d635d4Narayan Kamath writeRunnable.readerAlive.countDown(); 30619509358bac0d311c0eeecc8c12b2cd3d0d635d4Narayan Kamath writeThread.join(); 30719509358bac0d311c0eeecc8c12b2cd3d0d635d4Narayan Kamath } 308cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 30919509358bac0d311c0eeecc8c12b2cd3d0d635d4Narayan Kamath static final class PipedInputStreamWithPublicReceive extends PipedInputStream { 31019509358bac0d311c0eeecc8c12b2cd3d0d635d4Narayan Kamath @Override 31119509358bac0d311c0eeecc8c12b2cd3d0d635d4Narayan Kamath public void receive(int oneByte) throws IOException { 31219509358bac0d311c0eeecc8c12b2cd3d0d635d4Narayan Kamath super.receive(oneByte); 31319509358bac0d311c0eeecc8c12b2cd3d0d635d4Narayan Kamath } 31419509358bac0d311c0eeecc8c12b2cd3d0d635d4Narayan Kamath } 315cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 316cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 31719509358bac0d311c0eeecc8c12b2cd3d0d635d4Narayan Kamath public void test_receive_failsIfWriterClosed() throws Exception { 31819509358bac0d311c0eeecc8c12b2cd3d0d635d4Narayan Kamath // attempt to write to stream after writer closed 31919509358bac0d311c0eeecc8c12b2cd3d0d635d4Narayan Kamath PipedInputStreamWithPublicReceive pis = new PipedInputStreamWithPublicReceive(); 32019509358bac0d311c0eeecc8c12b2cd3d0d635d4Narayan Kamath 32119509358bac0d311c0eeecc8c12b2cd3d0d635d4Narayan Kamath pos = new PipedOutputStream(); 32219509358bac0d311c0eeecc8c12b2cd3d0d635d4Narayan Kamath pos.connect(pis); 32319509358bac0d311c0eeecc8c12b2cd3d0d635d4Narayan Kamath pos.close(); 32419509358bac0d311c0eeecc8c12b2cd3d0d635d4Narayan Kamath try { 32519509358bac0d311c0eeecc8c12b2cd3d0d635d4Narayan Kamath pis.receive(1); 32619509358bac0d311c0eeecc8c12b2cd3d0d635d4Narayan Kamath fail(); 32719509358bac0d311c0eeecc8c12b2cd3d0d635d4Narayan Kamath } catch (IOException expected) { 328cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 329cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 330cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 331cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath static class Worker extends Thread { 332cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath PipedOutputStream out; 333cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 334cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Worker(PipedOutputStream pos) { 335cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath this.out = pos; 336cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 337cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 338cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void run() { 339cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 340cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath out.write(20); 341cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath out.close(); 342cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Thread.sleep(5000); 343cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (Exception e) { 344cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 345cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 346cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 347cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 348cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_read_after_write_close() throws Exception { 349cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath PipedInputStream in = new PipedInputStream(); 350cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath PipedOutputStream out = new PipedOutputStream(); 351cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath in.connect(out); 352cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Thread worker = new Worker(out); 353cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath worker.start(); 354cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Thread.sleep(2000); 355cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("Should read 20.", 20, in.read()); 356cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath worker.join(); 357cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("Write end is closed, should return -1", -1, in.read()); 358cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath byte[] buf = new byte[1]; 359cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("Write end is closed, should return -1", -1, in.read(buf, 0, 1)); 360cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("Buf len 0 should return first", 0, in.read(buf, 0, 0)); 361cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath in.close(); 362cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath out.close(); 363cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 364cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 365cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 366cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * Tears down the fixture, for example, close a network connection. This 367cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * method is called after a test is executed. 368cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 369cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath protected void tearDown() throws Exception { 370cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 371cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath if (t != null) { 372cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath t.interrupt(); 373cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 374cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (Exception ignore) { 375cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 376cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath super.tearDown(); 377cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 378cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 379cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 380cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 381cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.io.PipedInputStream#PipedInputStream(java.io.PipedOutputStream, 382cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *int) 383cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * @since 1.6 384cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 385cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_Constructor_LPipedOutputStream_I() throws Exception { 386cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Test for method java.io.PipedInputStream(java.io.PipedOutputStream, 387cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // int) 388cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath MockPipedInputStream mpis = new MockPipedInputStream( 389cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath new PipedOutputStream(), 100); 390cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath int bufferLength = mpis.bufferLength(); 391cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(100, bufferLength); 392cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 393cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 394cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath pis = new PipedInputStream(null, -1); 395cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath fail("Should throw IllegalArgumentException"); //$NON-NLS-1$ 396cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (IllegalArgumentException e) { 397cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // expected 398cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 399cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 400cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 401cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath pis = new PipedInputStream(null, 0); 402cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath fail("Should throw IllegalArgumentException"); //$NON-NLS-1$ 403cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (IllegalArgumentException e) { 404cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // expected 405cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 406cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 407cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 408cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 409cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.io.PipedInputStream#PipedInputStream(int) 410cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * @since 1.6 411cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 412cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_Constructor_I() throws Exception { 413cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Test for method java.io.PipedInputStream(int) 414cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath MockPipedInputStream mpis = new MockPipedInputStream(100); 415cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath int bufferLength = mpis.bufferLength(); 416cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(100, bufferLength); 417cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 418cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 419cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath pis = new PipedInputStream(-1); 420cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath fail("Should throw IllegalArgumentException"); //$NON-NLS-1$ 421cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (IllegalArgumentException e) { 422cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // expected 423cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 424cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 425cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 426cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath pis = new PipedInputStream(0); 427cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath fail("Should throw IllegalArgumentException"); //$NON-NLS-1$ 428cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (IllegalArgumentException e) { 429cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // expected 430cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 431cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 432cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 433cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath static class MockPipedInputStream extends PipedInputStream { 434cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 435cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public MockPipedInputStream(java.io.PipedOutputStream src, 436cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath int bufferSize) throws IOException { 437cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath super(src, bufferSize); 438cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 439cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 440cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public MockPipedInputStream(int bufferSize) { 441cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath super(bufferSize); 442cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 443cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 444cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public int bufferLength() { 445cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath return super.buffer.length; 446cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 447cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 448cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath} 449