| /* |
| * Copyright (c) 2010-2013 Eike Stepper (Berlin, Germany) and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * Eike Stepper - initial API and implementation |
| */ |
| package org.eclipse.net4j.util.tests; |
| |
| import org.eclipse.net4j.util.concurrent.ConcurrencyUtil; |
| import org.eclipse.net4j.util.io.ExpectedFileInputStream; |
| import org.eclipse.net4j.util.io.ExpectedFileReader; |
| import org.eclipse.net4j.util.io.IOUtil; |
| |
| import java.io.DataInputStream; |
| import java.io.DataOutputStream; |
| import java.io.EOFException; |
| import java.io.File; |
| import java.io.FileOutputStream; |
| import java.io.FileWriter; |
| import java.io.Reader; |
| import java.io.Writer; |
| |
| /** |
| * @author Eike Stepper |
| */ |
| public class ExpectedIOTest extends AbstractOMTest |
| { |
| private Exception exception; |
| |
| @Override |
| protected void doSetUp() throws Exception |
| { |
| super.doSetUp(); |
| exception = null; |
| } |
| |
| public void testInputStream() throws Exception |
| { |
| final File file = createTempFile("ExpectedIOTest", ".tmp"); |
| final int LOOPS = 30; |
| |
| Thread producer = new Thread("PRODUCER") |
| { |
| @Override |
| public void run() |
| { |
| DataOutputStream out = null; |
| |
| try |
| { |
| out = new DataOutputStream(new FileOutputStream(file)); |
| for (int i = 0; i < LOOPS; i++) |
| { |
| out.writeInt(i); |
| IOUtil.ERR().println(i); |
| ConcurrencyUtil.sleep(10); |
| } |
| } |
| catch (Exception ex) |
| { |
| if (exception == null) |
| { |
| exception = ex; |
| } |
| } |
| finally |
| { |
| IOUtil.close(out); |
| } |
| } |
| }; |
| |
| Thread consumer = new Thread("CONSUMER") |
| { |
| @Override |
| public void run() |
| { |
| DataInputStream in = null; |
| |
| try |
| { |
| in = new DataInputStream(new ExpectedFileInputStream(file, LOOPS * 4)); |
| |
| for (int i = 0; i < LOOPS; i++) |
| { |
| System.out.println(in.readInt()); |
| } |
| } |
| catch (Exception ex) |
| { |
| if (exception == null) |
| { |
| exception = ex; |
| } |
| } |
| finally |
| { |
| IOUtil.close(in); |
| } |
| } |
| }; |
| |
| producer.start(); |
| ConcurrencyUtil.sleep(500); |
| consumer.start(); |
| |
| producer.join(); |
| consumer.join(); |
| |
| if (exception != null) |
| { |
| throw exception; |
| } |
| } |
| |
| public void testInputStreamEOF() throws Exception |
| { |
| final File file = createTempFile("ExpectedIOTest", ".tmp"); |
| final int LOOPS = 30; |
| |
| Thread producer = new Thread("PRODUCER") |
| { |
| @Override |
| public void run() |
| { |
| DataOutputStream out = null; |
| |
| try |
| { |
| out = new DataOutputStream(new FileOutputStream(file)); |
| for (int i = 0; i < LOOPS; i++) |
| { |
| out.writeInt(i); |
| IOUtil.ERR().println(i); |
| ConcurrencyUtil.sleep(10); |
| } |
| } |
| catch (Exception ex) |
| { |
| if (exception == null) |
| { |
| exception = ex; |
| } |
| } |
| finally |
| { |
| IOUtil.close(out); |
| } |
| } |
| }; |
| |
| Thread consumer = new Thread("CONSUMER") |
| { |
| @Override |
| public void run() |
| { |
| DataInputStream in = null; |
| |
| try |
| { |
| in = new DataInputStream(new ExpectedFileInputStream(file, LOOPS * 4)); |
| |
| for (int i = 0; i < LOOPS + 10; i++) |
| { |
| System.out.println(in.readInt()); |
| } |
| } |
| catch (Exception ex) |
| { |
| if (exception == null) |
| { |
| exception = ex; |
| } |
| } |
| finally |
| { |
| IOUtil.close(in); |
| } |
| } |
| }; |
| |
| producer.start(); |
| ConcurrencyUtil.sleep(500); |
| consumer.start(); |
| |
| producer.join(); |
| consumer.join(); |
| |
| if (!(exception instanceof EOFException)) |
| { |
| throw exception; |
| } |
| } |
| |
| public void testReader() throws Exception |
| { |
| final File file = createTempFile("ExpectedIOTest", ".tmp"); |
| final int LOOPS = 30; |
| |
| Thread producer = new Thread("PRODUCER") |
| { |
| @Override |
| public void run() |
| { |
| Writer out = null; |
| |
| try |
| { |
| out = new FileWriter(file); |
| for (int i = 0; i < LOOPS; i++) |
| { |
| int c = 'a' + i; |
| out.write(c); |
| IOUtil.ERR().println(c); |
| |
| out.write(c + 1); |
| IOUtil.ERR().println(c + 1); |
| ConcurrencyUtil.sleep(10); |
| } |
| } |
| catch (Exception ex) |
| { |
| if (exception == null) |
| { |
| exception = ex; |
| } |
| } |
| finally |
| { |
| IOUtil.close(out); |
| } |
| } |
| }; |
| |
| Thread consumer = new Thread("CONSUMER") |
| { |
| @SuppressWarnings("resource") |
| @Override |
| public void run() |
| { |
| Reader in = null; |
| |
| try |
| { |
| in = new ExpectedFileReader(file, LOOPS * 2); |
| |
| for (int i = 0; i < LOOPS; i++) |
| { |
| int c = in.read(); |
| if (c == -1) |
| { |
| throw new EOFException(); |
| } |
| |
| System.out.println(c); |
| c = in.read(); |
| if (c == -1) |
| { |
| throw new EOFException(); |
| } |
| |
| System.out.println(c); |
| } |
| } |
| catch (Exception ex) |
| { |
| if (exception == null) |
| { |
| exception = ex; |
| } |
| } |
| finally |
| { |
| IOUtil.close(in); |
| } |
| } |
| }; |
| |
| producer.start(); |
| ConcurrencyUtil.sleep(500); |
| consumer.start(); |
| |
| producer.join(); |
| consumer.join(); |
| |
| if (exception != null) |
| { |
| throw exception; |
| } |
| } |
| |
| public void testReaderEOF() throws Exception |
| { |
| final File file = createTempFile("ExpectedIOTest", ".tmp"); |
| final int LOOPS = 30; |
| |
| Thread producer = new Thread("PRODUCER") |
| { |
| @Override |
| public void run() |
| { |
| Writer out = null; |
| |
| try |
| { |
| out = new FileWriter(file); |
| for (int i = 0; i < LOOPS; i++) |
| { |
| int c = 'a' + i; |
| out.write(c); |
| IOUtil.ERR().println(c); |
| |
| out.write(c + 1); |
| IOUtil.ERR().println(c + 1); |
| ConcurrencyUtil.sleep(10); |
| } |
| } |
| catch (Exception ex) |
| { |
| if (exception == null) |
| { |
| exception = ex; |
| } |
| } |
| finally |
| { |
| IOUtil.close(out); |
| } |
| } |
| }; |
| |
| Thread consumer = new Thread("CONSUMER") |
| { |
| @SuppressWarnings("resource") |
| @Override |
| public void run() |
| { |
| Reader in = null; |
| |
| try |
| { |
| in = new ExpectedFileReader(file, LOOPS * 2); |
| |
| for (int i = 0; i < LOOPS + 10; i++) |
| { |
| int c = in.read(); |
| if (c == -1) |
| { |
| throw new EOFException(); |
| } |
| |
| System.out.println(c); |
| c = in.read(); |
| if (c == -1) |
| { |
| throw new EOFException(); |
| } |
| |
| System.out.println(c); |
| } |
| } |
| catch (Exception ex) |
| { |
| if (exception == null) |
| { |
| exception = ex; |
| } |
| } |
| finally |
| { |
| IOUtil.close(in); |
| } |
| } |
| }; |
| |
| producer.start(); |
| ConcurrencyUtil.sleep(500); |
| consumer.start(); |
| |
| producer.join(); |
| consumer.join(); |
| |
| if (!(exception instanceof EOFException)) |
| { |
| throw exception; |
| } |
| } |
| } |