package http_parser.lolevel;
import java.nio.*;
import static http_parser.lolevel.Util.*;
public class TestNoOverflowLongBody {
public static void test (http_parser.ParserType type, int len) {
HTTPParser parser = new HTTPParser(type);
ByteBuffer buf = getBytes(type, len);
int buflen = buf.limit();
parser.execute(Util.SETTINGS_NULL, buf);
check(buflen == buf.position());
buf = buffer("a");
buflen = buf.limit();
for (int i = 0; i!= len; ++i) {
parser.execute(Util.SETTINGS_NULL, buf);
check(buflen == buf.position());
buf.rewind();
}
buf = getBytes(type, len);
buflen = buf.limit();
parser.execute(Util.SETTINGS_NULL, buf);
check(buflen == buf.position());
}
static ByteBuffer getBytes (http_parser.ParserType type, int length) {
if (http_parser.ParserType.HTTP_BOTH == type) {
throw new RuntimeException("only HTTP_REQUEST and HTTP_RESPONSE");
}
String template = "%s\r\nConnection: Keep-Alive\r\nContent-Length: %d\r\n\r\n";
String str = null;
if (http_parser.ParserType.HTTP_REQUEST == type) {
str = String.format(template, "GET / HTTP/1.1", length);
} else {
str = String.format(template, "HTTP/1.0 200 OK", length);
}
return buffer(str);
}
public static void test () {
p(TestNoOverflowLongBody.class);
test(http_parser.ParserType.HTTP_REQUEST, 1000);
test(http_parser.ParserType.HTTP_REQUEST, 100000);
test(http_parser.ParserType.HTTP_RESPONSE, 1000);
test(http_parser.ParserType.HTTP_RESPONSE, 100000);
}
}