From 011ae1f447073aa8dae51028b1368decfa0446fa Mon Sep 17 00:00:00 2001 From: Thomas Becker Date: Fri, 27 Apr 2012 11:06:34 +0200 Subject: [PATCH] 377587: UnitTest for ConnectHandler.write() with partial writes and non full buffer. Change-Id: I8a8a3d57cba7a9c3502d1b6af6ff6eb5ac4e4ef5 377587: UnitTest for ConnectHandler.write() with partial writes and non full buffer. Change-Id: I8d104d54de55e22325d14e69b474b245fe9d126c --- .../java/org/eclipse/jetty/io/Buffer.java | 6 +- .../handler/ConnectHandlerUnitTest.java | 68 +++++++++++++++++++ 2 files changed, 71 insertions(+), 3 deletions(-) create mode 100644 jetty-server/src/test/java/org/eclipse/jetty/server/handler/ConnectHandlerUnitTest.java diff --git a/jetty-io/src/main/java/org/eclipse/jetty/io/Buffer.java b/jetty-io/src/main/java/org/eclipse/jetty/io/Buffer.java index cfa3011d580..e7611b3da03 100644 --- a/jetty-io/src/main/java/org/eclipse/jetty/io/Buffer.java +++ b/jetty-io/src/main/java/org/eclipse/jetty/io/Buffer.java @@ -24,7 +24,7 @@ import java.io.OutputStream; * This is a byte buffer that is designed to work like a FIFO for bytes. Puts and Gets operate on different * pointers into the buffer and the valid _content of the buffer is always between the getIndex and the putIndex. * - * This buffer interface is designed to be similar, but not dependant on the java.nio buffers, which may + * This buffer interface is designed to be similar, but not dependent on the java.nio buffers, which may * be used to back an implementation of this Buffer. The main difference is that NIO buffer after a put have * their valid _content before the position and a flip is required to access that data. * @@ -56,14 +56,14 @@ public interface Buffer extends Cloneable byte[] asArray(); /** - * Get the unerlying buffer. If this buffer wraps a backing buffer. + * Get the underlying buffer. If this buffer wraps a backing buffer. * @return The root backing buffer or this if there is no backing buffer; */ Buffer buffer(); /** * - * @return a non volitile version of this Buffer value + * @return a non volatile version of this Buffer value */ Buffer asNonVolatileBuffer(); diff --git a/jetty-server/src/test/java/org/eclipse/jetty/server/handler/ConnectHandlerUnitTest.java b/jetty-server/src/test/java/org/eclipse/jetty/server/handler/ConnectHandlerUnitTest.java new file mode 100644 index 00000000000..37c2e85d39d --- /dev/null +++ b/jetty-server/src/test/java/org/eclipse/jetty/server/handler/ConnectHandlerUnitTest.java @@ -0,0 +1,68 @@ +// ======================================================================== +// Copyright (c) 2012 Mort Bay Consulting Pty. Ltd. +// ------------------------------------------------------------------------ +// All rights reserved. This program and the accompanying materials +// are made available under the terms of the Eclipse Public License v1.0 +// and Apache License v2.0 which accompanies this distribution. +// The Eclipse Public License is available at +// http://www.eclipse.org/legal/epl-v10.html +// The Apache License v2.0 is available at +// http://www.opensource.org/licenses/apache2.0.php +// You may elect to redistribute this code under either of these licenses. +// ======================================================================== + +package org.eclipse.jetty.server.handler; + +import static org.mockito.Mockito.when; +import static org.mockito.Matchers.*; +import static org.junit.Assert.*; +import static org.hamcrest.Matchers.*; + +import java.io.IOException; + +import org.eclipse.jetty.io.Buffer; +import org.eclipse.jetty.io.ByteArrayBuffer; +import org.eclipse.jetty.io.EndPoint; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.invocation.InvocationOnMock; +import org.mockito.runners.MockitoJUnitRunner; +import org.mockito.stubbing.Answer; + +/* ------------------------------------------------------------ */ +/** + */ +@RunWith(MockitoJUnitRunner.class) +public class ConnectHandlerUnitTest +{ + @Mock + private EndPoint endPoint; + + @Test + public void testPartialWritesWithNonFullBuffer() throws IOException + { + ConnectHandler connectHandler = new ConnectHandler(); + final byte[] bytes = "foo bar".getBytes(); + Buffer buffer = new ByteArrayBuffer(bytes.length * 2); + buffer.put(bytes); + when(endPoint.flush(buffer)).thenAnswer(new Answer() + { + public Object answer(InvocationOnMock invocation) + { + Object[] args = invocation.getArguments(); + Buffer buffer = (Buffer)args[0]; + int skip = bytes.length/2; + buffer.skip(skip); + return skip; + } + }); + when(endPoint.blockWritable(anyInt())).thenReturn(true); + + // method to test + connectHandler.write(endPoint,buffer,null); + + assertThat(buffer.length(),is(0)); + } + +}