*/
public void testSimpleHttpGets() throws Exception {
final int connNo = 3;
final int reqNo = 20;
final RequestCount requestCount = new RequestCount(connNo * reqNo);
final ByteSequence requestData = new ByteSequence();
requestData.rnd(reqNo);
List<ByteSequence> responseData = new ArrayList<ByteSequence>(connNo);
for (int i = 0; i < connNo; i++) {
responseData.add(new ByteSequence());
}
HttpRequestHandler requestHandler = new HttpRequestHandler() {
public void handle(
final HttpRequest request,
final HttpResponse response,
final HttpContext context) throws HttpException, IOException {
String s = request.getRequestLine().getUri();
URI uri;
try {
uri = new URI(s);
} catch (URISyntaxException ex) {
throw new HttpException("Invalid request URI: " + s);
}
int index = Integer.parseInt(uri.getQuery());
byte[] bytes = requestData.getBytes(index);
NByteArrayEntity entity = new NByteArrayEntity(bytes);
response.setEntity(entity);
}
};
HttpRequestExecutionHandler requestExecutionHandler = new HttpRequestExecutionHandler() {
public void initalizeContext(final HttpContext context, final Object attachment) {
context.setAttribute("LIST", attachment);
context.setAttribute("REQ-COUNT", Integer.valueOf(0));
context.setAttribute("RES-COUNT", Integer.valueOf(0));
}
public void finalizeContext(final HttpContext context) {
}
public HttpRequest submitRequest(final HttpContext context) {
int i = ((Integer) context.getAttribute("REQ-COUNT")).intValue();
BasicHttpRequest get = null;
if (i < reqNo) {
get = new BasicHttpRequest("GET", "/?" + i);
context.setAttribute("REQ-COUNT", Integer.valueOf(i + 1));
}
return get;
}
public void handleResponse(final HttpResponse response, final HttpContext context) {
NHttpConnection conn = (NHttpConnection) context.getAttribute(
ExecutionContext.HTTP_CONNECTION);
ByteSequence list = (ByteSequence) context.getAttribute("LIST");
int i = ((Integer) context.getAttribute("RES-COUNT")).intValue();
i++;
context.setAttribute("RES-COUNT", Integer.valueOf(i));
try {
HttpEntity entity = response.getEntity();
byte[] data = EntityUtils.toByteArray(entity);
list.addBytes(data);
requestCount.decrement();
} catch (IOException ex) {
requestCount.abort();
return;
}
if (i < reqNo) {
conn.requestInput();
}
}
};
NHttpServiceHandler serviceHandler = createHttpServiceHandler(
requestHandler,
null);
NHttpClientHandler clientHandler = createHttpClientHandler(
requestExecutionHandler);
this.server.setRequestCount(requestCount);
this.client.setRequestCount(requestCount);
this.server.start(serviceHandler);
this.client.start(clientHandler);
ListenerEndpoint endpoint = this.server.getListenerEndpoint();
endpoint.waitFor();
InetSocketAddress serverAddress = (InetSocketAddress) endpoint.getAddress();
for (int i = 0; i < responseData.size(); i++) {
this.client.openConnection(
new InetSocketAddress("localhost", serverAddress.getPort()),
responseData.get(i));
}
requestCount.await(10000);
assertEquals(0, requestCount.getValue());
this.client.shutdown();
this.server.shutdown();
for (int c = 0; c < responseData.size(); c++) {