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