You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hc.apache.org by ol...@apache.org on 2006/08/28 19:28:16 UTC
svn commit: r437761 - in
/jakarta/httpcomponents/httpcore/trunk/module-nio/src:
main/java/org/apache/http/nio/impl/ test/java/org/apache/http/nio/
test/java/org/apache/http/nio/mockup/
Author: olegk
Date: Mon Aug 28 10:28:14 2006
New Revision: 437761
URL: http://svn.apache.org/viewvc?rev=437761&view=rev
Log:
Fixed bug in NIOHttpDataTransmitter. More test coverage
Modified:
jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/impl/AsyncHttpDataReceiver.java
jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/impl/AsyncHttpDataTransmitter.java
jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/impl/NIOHttpDataReceiver.java
jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/impl/NIOHttpDataTransmitter.java
jakarta/httpcomponents/httpcore/trunk/module-nio/src/test/java/org/apache/http/nio/TestNIOHttpTransmitterAndReceiver.java
jakarta/httpcomponents/httpcore/trunk/module-nio/src/test/java/org/apache/http/nio/mockup/NIOHttpDataReceiverMockup.java
jakarta/httpcomponents/httpcore/trunk/module-nio/src/test/java/org/apache/http/nio/mockup/NIOHttpDataTransmitterMockup.java
Modified: jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/impl/AsyncHttpDataReceiver.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/impl/AsyncHttpDataReceiver.java?rev=437761&r1=437760&r2=437761&view=diff
==============================================================================
--- jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/impl/AsyncHttpDataReceiver.java (original)
+++ jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/impl/AsyncHttpDataReceiver.java Mon Aug 28 10:28:14 2006
@@ -24,7 +24,11 @@
}
this.session = session;
this.mutex = new Object();
- initBuffer(buffersize);
+ int linebuffersize = buffersize;
+ if (linebuffersize > 512) {
+ linebuffersize = 512;
+ }
+ initBuffer(buffersize, linebuffersize);
}
public void consumeInput() throws IOException {
Modified: jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/impl/AsyncHttpDataTransmitter.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/impl/AsyncHttpDataTransmitter.java?rev=437761&r1=437760&r2=437761&view=diff
==============================================================================
--- jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/impl/AsyncHttpDataTransmitter.java (original)
+++ jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/impl/AsyncHttpDataTransmitter.java Mon Aug 28 10:28:14 2006
@@ -24,7 +24,11 @@
}
this.session = session;
this.mutex = new Object();
- initBuffer(buffersize);
+ int linebuffersize = buffersize;
+ if (linebuffersize > 512) {
+ linebuffersize = 512;
+ }
+ initBuffer(buffersize, linebuffersize);
}
public void produceOutput() throws IOException {
Modified: jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/impl/NIOHttpDataReceiver.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/impl/NIOHttpDataReceiver.java?rev=437761&r1=437760&r2=437761&view=diff
==============================================================================
--- jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/impl/NIOHttpDataReceiver.java (original)
+++ jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/impl/NIOHttpDataReceiver.java Mon Aug 28 10:28:14 2006
@@ -65,12 +65,12 @@
private int maxLineLen = -1;
- protected void initBuffer(int buffersize) {
+ protected void initBuffer(int buffersize, int linebuffersize) {
this.buffer = ByteBuffer.allocateDirect(buffersize);
this.buffer.flip();
this.charset = Charset.forName("US-ASCII");
this.chardecoder = createCharDecoder();
- this.chbuffer = CharBuffer.allocate(1024);
+ this.chbuffer = CharBuffer.allocate(linebuffersize);
}
public void reset(final HttpParams params) {
Modified: jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/impl/NIOHttpDataTransmitter.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/impl/NIOHttpDataTransmitter.java?rev=437761&r1=437760&r2=437761&view=diff
==============================================================================
--- jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/impl/NIOHttpDataTransmitter.java (original)
+++ jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/impl/NIOHttpDataTransmitter.java Mon Aug 28 10:28:14 2006
@@ -64,11 +64,11 @@
private CharsetEncoder charencoder = null;
private CharBuffer chbuffer = null;
- protected void initBuffer(int buffersize) {
+ protected void initBuffer(int buffersize, int linebuffersize) {
this.buffer = ByteBuffer.allocateDirect(buffersize);
this.charset = Charset.forName("US-ASCII");
this.charencoder = createCharEncoder();
- this.chbuffer = CharBuffer.allocate(1024);
+ this.chbuffer = CharBuffer.allocate(linebuffersize);
}
public void reset(final HttpParams params) {
@@ -162,7 +162,7 @@
// terminate the encoding process
eol = true;
}
- this.chbuffer.put(buffer.buffer(), offset, offset + l);
+ this.chbuffer.put(buffer.buffer(), offset, l);
this.chbuffer.flip();
boolean retry = true;
@@ -173,7 +173,6 @@
}
retry = !result.isUnderflow();
}
-
this.chbuffer.compact();
offset += l;
remaining -= l;
Modified: jakarta/httpcomponents/httpcore/trunk/module-nio/src/test/java/org/apache/http/nio/TestNIOHttpTransmitterAndReceiver.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-nio/src/test/java/org/apache/http/nio/TestNIOHttpTransmitterAndReceiver.java?rev=437761&r1=437760&r2=437761&view=diff
==============================================================================
--- jakarta/httpcomponents/httpcore/trunk/module-nio/src/test/java/org/apache/http/nio/TestNIOHttpTransmitterAndReceiver.java (original)
+++ jakarta/httpcomponents/httpcore/trunk/module-nio/src/test/java/org/apache/http/nio/TestNIOHttpTransmitterAndReceiver.java Mon Aug 28 10:28:14 2006
@@ -28,11 +28,11 @@
package org.apache.http.nio;
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
import java.io.IOException;
-import java.nio.channels.Channels;
-import java.nio.channels.ReadableByteChannel;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
import org.apache.http.impl.DefaultHttpParams;
import org.apache.http.io.CharArrayBuffer;
@@ -44,8 +44,6 @@
import org.apache.http.params.HttpParams;
import org.apache.http.params.HttpProtocolParams;
-import junit.framework.*;
-
/**
* Simple tests for {@link NIOHttpDataTransmitter} and {@link NIOHttpDataReceiver}.
*
@@ -72,37 +70,6 @@
return new TestSuite(TestNIOHttpTransmitterAndReceiver.class);
}
- public void testInit() throws Exception {
- ByteArrayOutputStream out = new ByteArrayOutputStream();
- new NIOHttpDataTransmitterMockup(Channels.newChannel(out), 10);
- try {
- new NIOHttpDataTransmitterMockup(Channels.newChannel(out), -10);
- fail("IllegalArgumentException should have been thrown");
- } catch (IllegalArgumentException ex) {
- //expected
- }
- try {
- new NIOHttpDataTransmitterMockup(null, 1024);
- fail("IllegalArgumentException should have been thrown");
- } catch (IllegalArgumentException ex) {
- //expected
- }
- ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());
- new NIOHttpDataReceiverMockup(Channels.newChannel(in), 10);
- try {
- new NIOHttpDataReceiverMockup(Channels.newChannel(in), -10);
- fail("IllegalArgumentException should have been thrown");
- } catch (IllegalArgumentException ex) {
- //expected
- }
- try {
- new NIOHttpDataReceiverMockup((ReadableByteChannel)null, 1024);
- fail("IllegalArgumentException should have been thrown");
- } catch (IllegalArgumentException ex) {
- //expected
- }
- }
-
public void testBasicReadWriteLine() throws Exception {
String[] teststrs = new String[5];
@@ -209,7 +176,7 @@
teststrs[3] = "";
teststrs[4] = "And goodbye";
- NIOHttpDataTransmitterMockup transmitter = new NIOHttpDataTransmitterMockup();
+ NIOHttpDataTransmitterMockup transmitter = new NIOHttpDataTransmitterMockup(32, 8);
for (int i = 0; i < teststrs.length; i++) {
transmitter.writeLine(teststrs[i]);
}
@@ -218,7 +185,7 @@
transmitter.writeLine((CharArrayBuffer)null);
transmitter.flush();
- NIOHttpDataReceiverMockup receiver = new NIOHttpDataReceiverMockup(transmitter.getData(), 1024);
+ NIOHttpDataReceiverMockup receiver = new NIOHttpDataReceiverMockup(transmitter.getData(), 32, 8);
assertTrue(receiver.isDataAvailable(0));
@@ -318,13 +285,13 @@
HttpParams params = new DefaultHttpParams();
String s = "a very looooooooooooooooooooooooooooooooooooooong line\r\n ";
byte[] tmp = s.getBytes("US-ASCII");
- NIOHttpDataReceiverMockup receiver1 = new NIOHttpDataReceiverMockup(tmp, 5);
+ NIOHttpDataReceiverMockup receiver1 = new NIOHttpDataReceiverMockup(tmp, 5, 5);
// no limit
params.setIntParameter(HttpConnectionParams.MAX_LINE_LENGTH, 0);
receiver1.reset(params);
assertNotNull(receiver1.readLine());
- NIOHttpDataReceiverMockup receiver2 = new NIOHttpDataReceiverMockup(tmp, 5);
+ NIOHttpDataReceiverMockup receiver2 = new NIOHttpDataReceiverMockup(tmp, 5, 5);
// 15 char limit
params.setIntParameter(HttpConnectionParams.MAX_LINE_LENGTH, 15);
receiver2.reset(params);
@@ -387,4 +354,16 @@
assertNull(receiver.readLine());
}
+ public void testInvalidInput() throws Exception {
+ String s = "line1\r\nline2";
+ byte[] tmp = s.getBytes("US-ASCII");
+ NIOHttpDataReceiverMockup receiver1 = new NIOHttpDataReceiverMockup(tmp);
+ try {
+ receiver1.readLine(null);
+ fail("IllegalArgumentException should have been thrown");
+ } catch (IllegalArgumentException ex) {
+ // expected
+ }
+ }
+
}
Modified: jakarta/httpcomponents/httpcore/trunk/module-nio/src/test/java/org/apache/http/nio/mockup/NIOHttpDataReceiverMockup.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-nio/src/test/java/org/apache/http/nio/mockup/NIOHttpDataReceiverMockup.java?rev=437761&r1=437760&r2=437761&view=diff
==============================================================================
--- jakarta/httpcomponents/httpcore/trunk/module-nio/src/test/java/org/apache/http/nio/mockup/NIOHttpDataReceiverMockup.java (original)
+++ jakarta/httpcomponents/httpcore/trunk/module-nio/src/test/java/org/apache/http/nio/mockup/NIOHttpDataReceiverMockup.java Mon Aug 28 10:28:14 2006
@@ -19,28 +19,34 @@
private final ReadableByteChannel channel;
- public NIOHttpDataReceiverMockup(final ReadableByteChannel channel, int buffersize) {
+ public NIOHttpDataReceiverMockup(
+ final ReadableByteChannel channel,
+ int buffersize,
+ int linebuffersize) {
super();
if (channel == null) {
throw new IllegalArgumentException("Channel may not be null");
}
this.channel = channel;
- initBuffer(buffersize);
+ initBuffer(buffersize, linebuffersize);
}
public NIOHttpDataReceiverMockup(final byte[] bytes) {
- this(bytes, BUFFER_SIZE);
+ this(bytes, BUFFER_SIZE, BUFFER_SIZE);
}
- public NIOHttpDataReceiverMockup(final byte[] bytes, int buffersize) {
+ public NIOHttpDataReceiverMockup(
+ final byte[] bytes,
+ int buffersize,
+ int linebuffersize) {
super();
this.channel = Channels.newChannel(new ByteArrayInputStream(bytes));
- initBuffer(buffersize);
+ initBuffer(buffersize, linebuffersize);
}
public NIOHttpDataReceiverMockup(final String s, final String charset, int buffersize)
throws UnsupportedEncodingException {
- this(s.getBytes(charset), buffersize);
+ this(s.getBytes(charset), buffersize, buffersize);
}
public NIOHttpDataReceiverMockup(final String s, final String charset)
Modified: jakarta/httpcomponents/httpcore/trunk/module-nio/src/test/java/org/apache/http/nio/mockup/NIOHttpDataTransmitterMockup.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-nio/src/test/java/org/apache/http/nio/mockup/NIOHttpDataTransmitterMockup.java?rev=437761&r1=437760&r2=437761&view=diff
==============================================================================
--- jakarta/httpcomponents/httpcore/trunk/module-nio/src/test/java/org/apache/http/nio/mockup/NIOHttpDataTransmitterMockup.java (original)
+++ jakarta/httpcomponents/httpcore/trunk/module-nio/src/test/java/org/apache/http/nio/mockup/NIOHttpDataTransmitterMockup.java Mon Aug 28 10:28:14 2006
@@ -20,19 +20,30 @@
private final WritableByteChannel channel;
- public NIOHttpDataTransmitterMockup(final WritableByteChannel channel, int buffersize) {
+ public NIOHttpDataTransmitterMockup(
+ final WritableByteChannel channel,
+ int buffersize,
+ int linebuffersize) {
super();
if (channel == null) {
throw new IllegalArgumentException("Channel may not be null");
}
this.channel = channel;
- initBuffer(buffersize);
+ initBuffer(buffersize, linebuffersize);
+ }
+
+ public NIOHttpDataTransmitterMockup(
+ int buffersize,
+ int linebuffersize) {
+ super();
+ this.channel = Channels.newChannel(this.buffer);
+ initBuffer(buffersize, linebuffersize);
}
public NIOHttpDataTransmitterMockup() {
super();
this.channel = Channels.newChannel(this.buffer);
- initBuffer(BUFFER_SIZE);
+ initBuffer(BUFFER_SIZE, BUFFER_SIZE);
}
protected void flushBuffer() throws IOException {