readMethodUriLine优化

This commit is contained in:
redkale
2024-10-05 17:53:49 +08:00
parent a2ac9ff896
commit d2b8ef4471
5 changed files with 184 additions and 53 deletions

View File

@@ -4,6 +4,7 @@
*/
package org.redkale.test.httpparser;
import java.lang.reflect.Method;
import java.nio.ByteBuffer;
import org.junit.jupiter.api.*;
import org.redkale.net.http.HttpContext;
@@ -23,6 +24,7 @@ public class HttpRequestTest {
test.run1();
test.run2();
test.run3();
test.run4();
}
@Test
@@ -40,7 +42,6 @@ public class HttpRequestTest {
int r1 = req.readHeader(ByteBuffer.wrap(text1.getBytes()), -1);
Assertions.assertEquals(1, r1);
Assertions.assertEquals(3, req.headerHalfLen());
System.out.println(req.headerHalfLen());
text1 = REQ_TEXT.substring(sublen, sublen + 7);
int r2 = req.readHeader(ByteBuffer.wrap(text1.getBytes()), -1);
@@ -68,7 +69,6 @@ public class HttpRequestTest {
int r1 = req.readHeader(ByteBuffer.wrap(text1.getBytes()), -1);
Assertions.assertEquals(1, r1);
Assertions.assertEquals(3, req.headerHalfLen());
System.out.println(req.headerHalfLen());
text1 = REQ_TEXT.substring(sublen, sublen + 7);
int r2 = req.readHeader(ByteBuffer.wrap(text1.getBytes()), -1);
@@ -98,7 +98,6 @@ public class HttpRequestTest {
int r1 = req.readHeader(ByteBuffer.wrap(text1.getBytes()), phLength);
Assertions.assertEquals(1, r1);
Assertions.assertEquals(3, req.headerHalfLen());
System.out.println(req.headerHalfLen());
text1 = REQ_TEXT.substring(sublen, sublen + 7);
int r2 = req.readHeader(ByteBuffer.wrap(text1.getBytes()), phLength);
@@ -110,6 +109,57 @@ public class HttpRequestTest {
Assertions.assertEquals(0, r3);
}
@Test
public void run4() throws Exception {
HttpContext.HttpContextConfig httpConfig = new HttpContext.HttpContextConfig();
httpConfig.lazyHeader = true;
httpConfig.sameHeader = true;
httpConfig.maxHeader = 16 * 1024;
httpConfig.maxBody = 64 * 1024;
HttpContext context = new HttpContext(httpConfig);
Method method = HttpContext.class.getDeclaredMethod("addUriPath", String.class);
method.setAccessible(true);
method.invoke(context, "/test/sleep200");
method.invoke(context, "/test/aaa");
HttpRequestX req = new HttpRequestX(context);
String text = "GET /test/azzzz HTTP/1.1\r\nConnection: Keep-Alive\r\nContent-Length: 0\r\n\r\n";
int r1 = req.readHeader(ByteBuffer.wrap(text.getBytes()), 0);
Assertions.assertEquals(0, r1);
Assertions.assertEquals("/test/azzzz", req.getRequestPath());
req = new HttpRequestX(context);
text = "GET /test/aaaa HTTP/1.1\r\nConnection: Keep-Alive\r\nContent-Length: 0\r\n\r\n";
r1 = req.readHeader(ByteBuffer.wrap(text.getBytes()), 0);
Assertions.assertEquals(0, r1);
Assertions.assertEquals("/test/aaaa", req.getRequestPath());
req = new HttpRequestX(context);
text = "GET /test/sleep200 HTTP/1.1\r\nConnection: Keep-Alive\r\nContent-Length: 0\r\n\r\n";
r1 = req.readHeader(ByteBuffer.wrap(text.getBytes()), 0);
Assertions.assertEquals(0, r1);
Assertions.assertEquals("/test/sleep200", req.getRequestPath());
req = new HttpRequestX(context);
text = "GET /test/sleep201 HTTP/1.1\r\nConnection: Keep-Alive\r\nContent-Length: 0\r\n\r\n";
r1 = req.readHeader(ByteBuffer.wrap(text.getBytes()), 0);
Assertions.assertEquals(0, r1);
Assertions.assertEquals("/test/sleep201", req.getRequestPath());
req = new HttpRequestX(context);
text = "GET /test/sleep20? HTTP/1.1\r\nConnection: Keep-Alive\r\nContent-Length: 0\r\n\r\n";
r1 = req.readHeader(ByteBuffer.wrap(text.getBytes()), 0);
Assertions.assertEquals(0, r1);
Assertions.assertEquals("/test/sleep20", req.getRequestPath());
req = new HttpRequestX(context);
text = "GET /test/sleep20?n=haha HTTP/1.1\r\nConnection: Keep-Alive\r\nContent-Length: 0\r\n\r\n";
r1 = req.readHeader(ByteBuffer.wrap(text.getBytes()), 0);
Assertions.assertEquals(0, r1);
Assertions.assertEquals("/test/sleep20", req.getRequestPath());
Assertions.assertEquals("haha", req.getParameter("n"));
}
public static class HttpRequestX extends HttpRequest {
public HttpRequestX(HttpContext context) {