From 50ac775bf5ca0b753a1d17b0327d7a9a874ecb70 Mon Sep 17 00:00:00 2001 From: Greg Wilkins Date: Tue, 31 Jul 2012 19:07:25 +1000 Subject: [PATCH] jetty-9 added WriteFlusherTest --- .../eclipse/jetty/io/WriteFlusherTest.java | 191 ++++++++++++++++++ 1 file changed, 191 insertions(+) create mode 100644 jetty-io/src/test/java/org/eclipse/jetty/io/WriteFlusherTest.java diff --git a/jetty-io/src/test/java/org/eclipse/jetty/io/WriteFlusherTest.java b/jetty-io/src/test/java/org/eclipse/jetty/io/WriteFlusherTest.java new file mode 100644 index 00000000000..1a4702f1136 --- /dev/null +++ b/jetty-io/src/test/java/org/eclipse/jetty/io/WriteFlusherTest.java @@ -0,0 +1,191 @@ +package org.eclipse.jetty.io; + +import static junit.framework.Assert.assertEquals; +import static junit.framework.Assert.assertTrue; +import static junit.framework.Assert.assertFalse; + +import java.io.IOException; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; +import java.util.concurrent.atomic.AtomicBoolean; + +import org.eclipse.jetty.util.BufferUtil; +import org.eclipse.jetty.util.FutureCallback; +import org.hamcrest.Matchers; +import org.junit.After; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +public class WriteFlusherTest +{ + ByteArrayEndPoint _endp; + final AtomicBoolean _flushIncomplete = new AtomicBoolean(false); + WriteFlusher _flusher; + final String _context = new String("Context"); + + @Before + public void before() + { + _endp = new ByteArrayEndPoint(new byte[]{},10); + _flushIncomplete.set(false); + _flusher = new WriteFlusher(_endp) + { + @Override + protected void onIncompleteFlushed() + { + _flushIncomplete.set(true); + } + }; + } + + @After + public void after() + { + + } + + @Test + public void testCompleteNoBlocking() throws Exception + { + _endp.setGrowOutput(true); + + FutureCallback callback = new FutureCallback<>(); + _flusher.write(_context,callback,BufferUtil.toBuffer("How "),BufferUtil.toBuffer("now "),BufferUtil.toBuffer("brown "),BufferUtil.toBuffer("cow!")); + assertTrue(callback.isDone()); + assertFalse(_flushIncomplete.get()); + assertEquals(_context,callback.get()); + assertEquals("How now brown cow!",_endp.takeOutputString()); + } + + @Test + public void testClosedNoBlocking() throws Exception + { + _endp.close(); + + FutureCallback callback = new FutureCallback<>(); + _flusher.write(_context,callback,BufferUtil.toBuffer("How "),BufferUtil.toBuffer("now "),BufferUtil.toBuffer("brown "),BufferUtil.toBuffer("cow!")); + assertTrue(callback.isDone()); + assertFalse(_flushIncomplete.get()); + try + { + assertEquals(_context,callback.get()); + Assert.fail(); + } + catch(ExecutionException e) + { + Throwable cause = e.getCause(); + Assert.assertTrue(cause instanceof IOException); + Assert.assertThat(cause.getMessage(),Matchers.containsString("CLOSED")); + } + assertEquals("",_endp.takeOutputString()); + } + + + @Test + public void testCompleteBlocking() throws Exception + { + FutureCallback callback = new FutureCallback<>(); + _flusher.write(_context,callback,BufferUtil.toBuffer("How "),BufferUtil.toBuffer("now "),BufferUtil.toBuffer("brown "),BufferUtil.toBuffer("cow!")); + assertFalse(callback.isDone()); + assertFalse(callback.isCancelled()); + + assertTrue(_flushIncomplete.get()); + try + { + assertEquals(_context,callback.get(10,TimeUnit.MILLISECONDS)); + Assert.fail(); + } + catch (TimeoutException to) + { + _flushIncomplete.set(false); + } + + assertEquals("How now br",_endp.takeOutputString()); + _flusher.completeWrite(); + assertTrue(callback.isDone()); + assertEquals(_context,callback.get()); + assertEquals("own cow!",_endp.takeOutputString()); + assertFalse(_flushIncomplete.get()); + } + + @Test + public void testCloseWhileBlocking() throws Exception + { + FutureCallback callback = new FutureCallback<>(); + _flusher.write(_context,callback,BufferUtil.toBuffer("How "),BufferUtil.toBuffer("now "),BufferUtil.toBuffer("brown "),BufferUtil.toBuffer("cow!")); + + assertFalse(callback.isDone()); + assertFalse(callback.isCancelled()); + + assertTrue(_flushIncomplete.get()); + try + { + assertEquals(_context,callback.get(10,TimeUnit.MILLISECONDS)); + Assert.fail(); + } + catch (TimeoutException to) + { + _flushIncomplete.set(false); + } + + assertEquals("How now br",_endp.takeOutputString()); + _endp.close(); + _flusher.completeWrite(); + assertTrue(callback.isDone()); + assertFalse(_flushIncomplete.get()); + try + { + assertEquals(_context,callback.get()); + Assert.fail(); + } + catch(ExecutionException e) + { + Throwable cause = e.getCause(); + Assert.assertTrue(cause instanceof IOException); + Assert.assertThat(cause.getMessage(),Matchers.containsString("CLOSED")); + } + assertEquals("",_endp.takeOutputString()); + } + + @Test + public void testFailWhileBlocking() throws Exception + { + FutureCallback callback = new FutureCallback<>(); + _flusher.write(_context,callback,BufferUtil.toBuffer("How "),BufferUtil.toBuffer("now "),BufferUtil.toBuffer("brown "),BufferUtil.toBuffer("cow!")); + + assertFalse(callback.isDone()); + assertFalse(callback.isCancelled()); + + assertTrue(_flushIncomplete.get()); + try + { + assertEquals(_context,callback.get(10,TimeUnit.MILLISECONDS)); + Assert.fail(); + } + catch (TimeoutException to) + { + _flushIncomplete.set(false); + } + + assertEquals("How now br",_endp.takeOutputString()); + _flusher.failed(new IOException("Failure")); + _flusher.completeWrite(); + assertTrue(callback.isDone()); + assertFalse(_flushIncomplete.get()); + try + { + assertEquals(_context,callback.get()); + Assert.fail(); + } + catch(ExecutionException e) + { + Throwable cause = e.getCause(); + Assert.assertTrue(cause instanceof IOException); + Assert.assertThat(cause.getMessage(),Matchers.containsString("Failure")); + } + assertEquals("",_endp.takeOutputString()); + } + +}