You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2018/01/16 21:56:18 UTC
svn commit: r1821322 [2/2] - in /tomcat/tc7.0.x/trunk: ./
java/org/apache/tomcat/util/buf/ test/org/apache/tomcat/util/buf/
webapps/docs/
Modified: tomcat/tc7.0.x/trunk/test/org/apache/tomcat/util/buf/TestByteChunk.java
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/test/org/apache/tomcat/util/buf/TestByteChunk.java?rev=1821322&r1=1821321&r2=1821322&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/test/org/apache/tomcat/util/buf/TestByteChunk.java (original)
+++ tomcat/tc7.0.x/trunk/test/org/apache/tomcat/util/buf/TestByteChunk.java Tue Jan 16 21:56:18 2018
@@ -16,12 +16,16 @@
*/
package org.apache.tomcat.util.buf;
+import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.Arrays;
import org.junit.Assert;
+import org.junit.Ignore;
import org.junit.Test;
+import org.apache.tomcat.util.buf.ByteChunk.ByteOutputChannel;
+
/**
* Test cases for {@link ByteChunk}.
*/
@@ -35,7 +39,7 @@ public class TestByteChunk {
Assert.assertTrue(Arrays.equals(bytes, expected));
}
- /**
+ /*
* Test for {@code findByte} vs. {@code indexOf} methods difference.
*
* <p>
@@ -70,6 +74,7 @@ public class TestByteChunk {
Assert.assertEquals(-1, ByteChunk.indexOf(bytes, 5, 5, 'w'));
}
+
@Test
public void testIndexOf_Char() throws UnsupportedEncodingException {
byte[] bytes = "Hello\u00a0world".getBytes("ISO-8859-1");
@@ -92,6 +97,7 @@ public class TestByteChunk {
Assert.assertEquals(-1, bc.indexOf('d', 0));
}
+
@Test
public void testIndexOf_String() throws UnsupportedEncodingException {
byte[] bytes = "Hello\u00a0world".getBytes("ISO-8859-1");
@@ -117,6 +123,7 @@ public class TestByteChunk {
Assert.assertEquals(-1, bc.indexOf("d", 0, 1, 0));
}
+
@Test
public void testFindBytes() throws UnsupportedEncodingException {
byte[] bytes = "Hello\u00a0world".getBytes("ISO-8859-1");
@@ -134,6 +141,7 @@ public class TestByteChunk {
Assert.assertEquals(-1, ByteChunk.findBytes(bytes, 2, 5, new byte[] { 'w' }));
}
+
@Test
@Deprecated
public void testFindNotBytes() throws UnsupportedEncodingException {
@@ -146,4 +154,30 @@ public class TestByteChunk {
Assert.assertEquals(-1, ByteChunk.findNotBytes(bytes, 2, 3, new byte[] { 'l',
'e', 'H' }));
}
+
+
+ @Ignore // Requires a 6GB heap (on markt's desktop - YMMV)
+ @Test
+ public void testAppend() throws Exception {
+ ByteChunk bc = new ByteChunk();
+ bc.setByteOutputChannel(new Sink());
+ // Defaults to no limit
+
+ byte data[] = new byte[32 * 1024 * 1024];
+
+ for (int i = 0; i < 100; i++) {
+ bc.append(data, 0, data.length);
+ }
+
+ Assert.assertEquals(AbstractChunk.ARRAY_MAX_SIZE, bc.getBuffer().length);
+ }
+
+
+ public class Sink implements ByteOutputChannel {
+
+ @Override
+ public void realWriteBytes(byte[] cbuf, int off, int len) throws IOException {
+ // NO-OP
+ }
+ }
}
Modified: tomcat/tc7.0.x/trunk/test/org/apache/tomcat/util/buf/TestCharChunk.java
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/test/org/apache/tomcat/util/buf/TestCharChunk.java?rev=1821322&r1=1821321&r2=1821322&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/test/org/apache/tomcat/util/buf/TestCharChunk.java (original)
+++ tomcat/tc7.0.x/trunk/test/org/apache/tomcat/util/buf/TestCharChunk.java Tue Jan 16 21:56:18 2018
@@ -16,9 +16,14 @@
*/
package org.apache.tomcat.util.buf;
+import java.io.IOException;
+
import org.junit.Assert;
+import org.junit.Ignore;
import org.junit.Test;
+import org.apache.tomcat.util.buf.CharChunk.CharOutputChannel;
+
/**
* Test cases for {@link CharChunk}.
*/
@@ -37,6 +42,7 @@ public class TestCharChunk {
Assert.assertFalse(cc.endsWith("xxtest"));
}
+
@Test
public void testIndexOf_String() {
char[] chars = "Hello\u00a0world".toCharArray();
@@ -62,4 +68,29 @@ public class TestCharChunk {
Assert.assertEquals(-1, cc.indexOf("d", 0, 1, 0));
}
+
+ @Ignore // Requires an 11GB heap (on markt's desktop - YMMV)
+ @Test
+ public void testAppend() throws Exception {
+ CharChunk cc = new CharChunk();
+ cc.setCharOutputChannel(new Sink());
+ // Defaults to no limit
+
+ char data[] = new char[32 * 1024 * 1024];
+
+ for (int i = 0; i < 100; i++) {
+ cc.append(data, 0, data.length);
+ }
+
+ Assert.assertEquals(AbstractChunk.ARRAY_MAX_SIZE, cc.getBuffer().length);
+ }
+
+
+ public class Sink implements CharOutputChannel {
+
+ @Override
+ public void realWriteChars(char[] cbuf, int off, int len) throws IOException {
+ // NO-OP
+ }
+ }
}
Modified: tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml?rev=1821322&r1=1821321&r2=1821322&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml Tue Jan 16 21:56:18 2018
@@ -101,6 +101,11 @@
made available to the application via the asynchronous error handling
mechanism. (markt)
</fix>
+ <fix>
+ <bug>61993</bug>: Improve handling for <code>ByteChunk</code> and
+ <code>CharChunk</code> instances that grow close to the maximum size
+ allowed by the JRE. (markt)
+ </fix>
</changelog>
</subsection>
<subsection name="Web applications">
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org