use of org.jocean.http.client.impl.DefaultHttpClient in project jocean-http by isdom.
the class DefaultHttpServerBuilderTestCase method testTradeReadControl.
/* // TODO using initiator
@Test
public void testHttpHappyPathOnce() throws Exception {
final String testAddr = UUID.randomUUID().toString();
final HttpServerBuilder server = new DefaultHttpServerBuilder(
new AbstractBootstrapCreator(
new DefaultEventLoopGroup(1), new DefaultEventLoopGroup()) {
@Override
protected void initializeBootstrap(final ServerBootstrap bootstrap) {
bootstrap.option(ChannelOption.SO_BACKLOG, 1024);
bootstrap.channel(LocalServerChannel.class);
}});
final Subscription testServer =
server.defineServer(new LocalAddress(testAddr),
Feature.ENABLE_LOGGING,
Feature.ENABLE_COMPRESSOR)
.subscribe(echoReactor(null));
final DefaultHttpClient client = new DefaultHttpClient(new TestChannelCreator());
try {
final Iterator<HttpObject> itr =
client.defineInteraction(
new LocalAddress(testAddr),
Observable.just(buildFullRequest(CONTENT)),
Feature.ENABLE_LOGGING)
.map(RxNettys.<HttpObject>retainer())
.toBlocking().toIterable().iterator();
final byte[] bytes = RxNettys.httpObjectsAsBytes(itr);
assertTrue(Arrays.equals(bytes, CONTENT));
} finally {
client.close();
testServer.unsubscribe();
server.close();
}
}
@Test
public void testHttpHappyPathTwice() throws Exception {
final String testAddr = UUID.randomUUID().toString();
final HttpServerBuilder server = new DefaultHttpServerBuilder(
new AbstractBootstrapCreator(
new DefaultEventLoopGroup(1), new DefaultEventLoopGroup()) {
@Override
protected void initializeBootstrap(final ServerBootstrap bootstrap) {
bootstrap.option(ChannelOption.SO_BACKLOG, 1024);
bootstrap.channel(LocalServerChannel.class);
}});
final AtomicReference<Object> transportRef = new AtomicReference<Object>();
final Subscription testServer =
server.defineServer(new LocalAddress(testAddr),
Feature.ENABLE_LOGGING,
Feature.ENABLE_COMPRESSOR)
.subscribe(echoReactor(transportRef));
final TestChannelPool pool = new TestChannelPool(1);
final DefaultHttpClient client = new DefaultHttpClient(new TestChannelCreator(), pool);
try {
final CountDownLatch unsubscribed = new CountDownLatch(1);
final Iterator<HttpObject> itr =
client.defineInteraction(
new LocalAddress(testAddr),
Observable.just(buildFullRequest(CONTENT)),
Feature.ENABLE_LOGGING)
.compose(RxFunctions.<HttpObject>countDownOnUnsubscribe(unsubscribed))
.map(RxNettys.<HttpObject>retainer())
.toBlocking().toIterable().iterator();
final byte[] bytes = RxNettys.httpObjectsAsBytes(itr);
assertTrue(Arrays.equals(bytes, CONTENT));
final Object channel1 = transportRef.get();
unsubscribed.await();
// await for 1 second
pool.awaitRecycleChannels(1);
// TODO
// TOBE fix, client maybe not reused, so server channel not reused,
// so ensure client channel will be reused
final Iterator<HttpObject> itr2 =
client.defineInteraction(
new LocalAddress(testAddr),
Observable.just(buildFullRequest(CONTENT)),
Feature.ENABLE_LOGGING)
.map(RxNettys.<HttpObject>retainer())
.toBlocking().toIterable().iterator();
final byte[] bytes2 = RxNettys.httpObjectsAsBytes(itr2);
assertTrue(Arrays.equals(bytes2, CONTENT));
final Object channel2 = transportRef.get();
assertTrue(channel1 == channel2);
} finally {
client.close();
testServer.unsubscribe();
server.close();
}
}
*/
@Test
public void testTradeReadControl() throws Exception {
final String testAddr = UUID.randomUUID().toString();
final HttpServerBuilder server = new DefaultHttpServerBuilder(new AbstractBootstrapCreator(new DefaultEventLoopGroup(1), new DefaultEventLoopGroup()) {
@Override
protected void initializeBootstrap(final ServerBootstrap bootstrap) {
bootstrap.option(ChannelOption.SO_BACKLOG, 1024);
bootstrap.channel(LocalServerChannel.class);
}
});
final BlockingQueue<HttpTrade> trades = new ArrayBlockingQueue<>(2);
final Subscription testServer = server.defineServer(new LocalAddress(testAddr), Feature.ENABLE_LOGGING, Feature.ENABLE_COMPRESSOR).subscribe(new Action1<HttpTrade>() {
@Override
public void call(final HttpTrade trade) {
LOG.debug("on trade {}", trade);
try {
trades.put(trade);
LOG.debug("after offer trade {}", trade);
} catch (InterruptedException e) {
LOG.warn("exception when put trade, detail: {}", ExceptionUtils.exception2detail(e));
}
}
});
final TestChannelPool pool = new TestChannelPool(1);
final DefaultHttpClient client = new DefaultHttpClient(new TestChannelCreator(), pool);
try (final HttpInitiator initiator = client.initiator().remoteAddress(new LocalAddress(testAddr)).build().toBlocking().single()) {
final FullHttpRequest reqToSend1 = new DefaultFullHttpRequest(HttpVersion.HTTP_1_1, HttpMethod.GET, "/");
initiator.defineInteraction(Observable.just(reqToSend1)).subscribe();
final HttpTrade trade1 = trades.take();
// trade receive all inbound msg
// trade1.obsrequest().toCompletable().await();
final FullHttpRequest reqReceived1 = trade1.inbound().compose(RxNettys.message2fullreq(trade1)).toBlocking().single().unwrap();
assertEquals(reqToSend1, reqReceived1);
final Channel channel = (Channel) initiator.transport();
final FullHttpRequest reqToSend2 = new DefaultFullHttpRequest(HttpVersion.HTTP_1_1, HttpMethod.GET, "/2nd");
channel.writeAndFlush(reqToSend2).sync();
assertTrue(null == trades.poll(1L, TimeUnit.SECONDS));
// after send other interaction req, then first trade send response
final FullHttpResponse responseToSend1 = new DefaultFullHttpResponse(HTTP_1_1, OK, Unpooled.wrappedBuffer(CONTENT));
trade1.outbound(Observable.<HttpObject>just(responseToSend1));
// initiator.inbound().message().toCompletable().await();
// final FullHttpResponse resp = initiator.inbound().messageHolder().
// httpMessageBuilder(RxNettys.BUILD_FULL_RESPONSE).call();
// assertEquals(responseToSend1, resp);
final HttpTrade trade2 = trades.take();
// receive all inbound msg
// trade2.obsrequest().toCompletable().await();
final FullHttpRequest reqReceived2 = trade2.inbound().compose(RxNettys.message2fullreq(trade2)).toBlocking().single().unwrap();
assertEquals(reqToSend2, reqReceived2);
} finally {
client.close();
testServer.unsubscribe();
server.close();
}
}
use of org.jocean.http.client.impl.DefaultHttpClient in project jocean-http by isdom.
the class JolokiaApiDemo method main.
public static void main(String[] args) throws Exception {
final SignalClient signal = new DefaultSignalClient(new DefaultHttpClient());
final URI uri = new URI("http://192.168.8.8/jolokia/");
queryAttrValue(signal, uri, "java.lang:type=Threading");
Thread.sleep(100);
queryAttrValue(signal, uri, "java.lang:type=Threading");
Thread.sleep(100);
System.exit(0);
}
Aggregations