use of org.webpieces.httpparser.api.dto.HttpPayload in project webpieces by deanhiller.
the class TestRequestBody method testPartialBodyThenHalfBodyWithNextHttpMsg.
@Test
public void testPartialBodyThenHalfBodyWithNextHttpMsg() {
HttpDummyRequest request = createPostRequestWithBody();
byte[] expected = request.getHttpData().getBody().createByteArray();
byte[] data = unwrap(request);
HttpRequest request2 = TestRequestParsing.createPostRequest();
byte[] payload = unwrap(parser.marshalToByteBuffer(state, request2));
byte[] first = new byte[data.length - 20];
byte[] second = new byte[data.length - first.length + payload.length];
System.arraycopy(data, 0, first, 0, first.length);
int lenOfLastPiece = data.length - first.length;
System.arraycopy(data, first.length, second, 0, lenOfLastPiece);
System.arraycopy(payload, 0, second, lenOfLastPiece, payload.length);
DataWrapper wrap1 = dataGen.wrapByteArray(first);
DataWrapper wrap2 = dataGen.wrapByteArray(second);
Memento memento = parser.prepareToParse();
memento = parser.parse(memento, wrap1);
Assert.assertEquals(2, memento.getParsedMessages().size());
HttpPayload msg = memento.getParsedMessages().get(0);
Assert.assertEquals(request.getRequest(), msg);
HttpData data1 = (HttpData) memento.getParsedMessages().get(1);
memento = parser.parse(memento, wrap2);
Assert.assertEquals(2, memento.getParsedMessages().size());
HttpData data2 = (HttpData) memento.getParsedMessages().get(0);
DataWrapper body = dataGen.chainDataWrappers(data1.getBody(), data2.getBody());
byte[] bodyBytesActual = body.createByteArray();
Assert.assertArrayEquals(expected, bodyBytesActual);
HttpPayload msg2 = memento.getParsedMessages().get(1);
Assert.assertEquals(request2, msg2);
}
use of org.webpieces.httpparser.api.dto.HttpPayload in project webpieces by deanhiller.
the class TestHttp11Basic method testSendTwoRequestsStreamSecond.
@Test
public void testSendTwoRequestsStreamSecond() throws InterruptedException, ExecutionException, TimeoutException {
HttpRequest req = Requests.createRequest(KnownHttpMethod.GET, "/xxxx");
HttpRequest req2 = Requests.createRequest(KnownHttpMethod.GET, "/xxxx");
mockChannel.sendToSvr(req);
PassedIn in1 = mockListener.getSingleRequest();
req2.addHeader(new Header(KnownHeaderName.CONTENT_LENGTH, "20"));
XFuture<Void> fut = mockChannel.sendToSvrAsync(req2);
Assert.assertEquals(0, mockListener.getNumRequestsThatCameIn());
Assert.assertFalse(fut.isDone());
byte[] buf = new byte[10];
DataWrapper dataWrapper = DATA_GEN.wrapByteArray(buf);
HttpData data1 = new HttpData(dataWrapper, false);
XFuture<Void> fut2 = mockChannel.sendToSvrAsync(data1);
Assert.assertFalse(fut.isDone());
Assert.assertFalse(fut2.isDone());
DataWrapper dataWrapper2 = DATA_GEN.wrapByteArray(buf);
HttpData data2 = new HttpData(dataWrapper2, true);
XFuture<Void> fut3 = mockChannel.sendToSvrAsync(data2);
Assert.assertFalse(fut.isDone());
Assert.assertFalse(fut2.isDone());
Assert.assertFalse(fut3.isDone());
Assert.assertEquals(0, mockListener.getNumRequestsThatCameIn());
HttpResponse resp1 = Requests.createResponse(1);
resp1.addHeader(new Header(KnownHeaderName.CONTENT_LENGTH, "0"));
Http2Response headers1 = Http11ToHttp2.responseToHeaders(resp1);
in1.stream.process(headers1);
HttpPayload payload = mockChannel.getFrameAndClear();
Assert.assertEquals(resp1, payload);
fut.get(2, TimeUnit.SECONDS);
fut2.get(2, TimeUnit.SECONDS);
fut3.get(2, TimeUnit.SECONDS);
PassedIn in2 = mockListener.getSingleRequest();
HttpResponse resp2 = Requests.createResponse(2);
resp2.addHeader(new Header(KnownHeaderName.CONTENT_LENGTH, "0"));
Http2Response headers2 = Http11ToHttp2.responseToHeaders(resp2);
in2.stream.process(headers2);
HttpPayload payload2 = mockChannel.getFrameAndClear();
Assert.assertEquals(resp2, payload2);
}
use of org.webpieces.httpparser.api.dto.HttpPayload in project webpieces by deanhiller.
the class TestHttp11Basic method testFileDownloadWithChunking.
@Test
public void testFileDownloadWithChunking() throws InterruptedException, ExecutionException, TimeoutException {
HttpRequest req = Requests.createRequest(KnownHttpMethod.GET, "/xxxx");
mockChannel.sendToSvr(req);
PassedIn in1 = mockListener.getSingleRequest();
HttpRequest req1 = Http2ToHttp11.translateRequest(in1.request);
Assert.assertEquals(req, req1);
HttpResponse resp = Requests.createResponse();
resp.addHeader(new Header(KnownHeaderName.TRANSFER_ENCODING, "chunked"));
Http2Response headers = Http11ToHttp2.responseToHeaders(resp);
XFuture<StreamWriter> future = in1.stream.process(headers);
HttpResponse respToClient = (HttpResponse) mockChannel.getFrameAndClear();
Assert.assertEquals(resp, respToClient);
StreamWriter writer = future.get(2, TimeUnit.SECONDS);
DataFrame dataFrame = new DataFrame();
dataFrame.setEndOfStream(true);
String bodyStr = "hi here and there";
DataWrapper data = DATA_GEN.wrapByteArray(bodyStr.getBytes(StandardCharsets.UTF_8));
dataFrame.setData(data);
writer.processPiece(dataFrame);
List<HttpPayload> frames = mockChannel.getFramesAndClear();
Assert.assertEquals(2, frames.size());
HttpData chunk = (HttpData) frames.get(0);
DataWrapper body = chunk.getBodyNonNull();
String result = body.createStringFromUtf8(0, body.getReadableSize());
Assert.assertEquals(bodyStr, result);
HttpLastData last = (HttpLastData) frames.get(1);
Assert.assertEquals(0, last.getBodyNonNull().getReadableSize());
}
use of org.webpieces.httpparser.api.dto.HttpPayload in project webpieces by deanhiller.
the class TestHttp11Basic method testSendTwoRequests.
@Test
public void testSendTwoRequests() throws InterruptedException, ExecutionException, TimeoutException {
HttpRequest req = Requests.createRequest(KnownHttpMethod.GET, "/xxxx");
HttpRequest req2 = Requests.createRequest(KnownHttpMethod.GET, "/xxxx");
mockChannel.sendToSvr(req);
PassedIn in1 = mockListener.getSingleRequest();
XFuture<Void> future = mockChannel.sendToSvrAsync(req2);
Assert.assertEquals(0, mockListener.getNumRequestsThatCameIn());
Assert.assertFalse(future.isDone());
// send back request2's response first!!!! BUT verify it does not go to client per http11 pipelining rules
HttpResponse resp1 = Requests.createResponse(1);
resp1.addHeader(new Header(KnownHeaderName.CONTENT_LENGTH, "0"));
Http2Response headers1 = Http11ToHttp2.responseToHeaders(resp1);
in1.stream.process(headers1);
HttpPayload payload = mockChannel.getFrameAndClear();
Assert.assertEquals(resp1, payload);
future.get(2, TimeUnit.SECONDS);
PassedIn in2 = mockListener.getSingleRequest();
HttpResponse resp2 = Requests.createResponse(2);
resp2.addHeader(new Header(KnownHeaderName.CONTENT_LENGTH, "0"));
Http2Response headers2 = Http11ToHttp2.responseToHeaders(resp2);
in2.stream.process(headers2);
HttpPayload payload2 = mockChannel.getFrameAndClear();
Assert.assertEquals(resp2, payload2);
}
use of org.webpieces.httpparser.api.dto.HttpPayload in project webpieces by deanhiller.
the class TestHttp11Basic method testSendTwoRequestsStreamFirstResponse.
@Test
public void testSendTwoRequestsStreamFirstResponse() throws InterruptedException, ExecutionException, TimeoutException {
HttpRequest req = Requests.createRequest(KnownHttpMethod.GET, "/xxxx");
HttpRequest req2 = Requests.createRequest(KnownHttpMethod.GET, "/xxxx");
mockChannel.sendToSvr(req);
PassedIn in1 = mockListener.getSingleRequest();
XFuture<Void> fut1 = mockChannel.sendToSvrAsync(req2);
Assert.assertFalse(fut1.isDone());
Assert.assertEquals(0, mockListener.getNumRequestsThatCameIn());
HttpResponse resp1 = Requests.createResponse(1);
resp1.addHeader(new Header(KnownHeaderName.CONTENT_LENGTH, "10"));
Http2Response headers1 = Http11ToHttp2.responseToHeaders(resp1);
XFuture<StreamWriter> future = in1.stream.process(headers1);
HttpPayload payload = mockChannel.getFrameAndClear();
Assert.assertEquals(resp1, payload);
StreamWriter writer = future.get(2, TimeUnit.SECONDS);
Assert.assertFalse(fut1.isDone());
Assert.assertEquals(0, mockListener.getNumRequestsThatCameIn());
byte[] buf = new byte[10];
DataWrapper dataWrapper = DATA_GEN.wrapByteArray(buf);
HttpData data1 = new HttpData(dataWrapper, true);
DataFrame data = (DataFrame) Http11ToHttp2.translateData(data1);
writer.processPiece(data);
fut1.get(2, TimeUnit.SECONDS);
HttpData d = (HttpData) mockChannel.getFrameAndClear();
Assert.assertEquals(10, d.getBody().getReadableSize());
PassedIn in2 = mockListener.getSingleRequest();
HttpResponse resp2 = Requests.createResponse(2);
resp2.addHeader(new Header(KnownHeaderName.CONTENT_LENGTH, "0"));
Http2Response headers2 = Http11ToHttp2.responseToHeaders(resp2);
in2.stream.process(headers2);
HttpPayload payload2 = mockChannel.getFrameAndClear();
Assert.assertEquals(resp2, payload2);
}
Aggregations