Java 类org.jboss.netty.channel.ChannelState 实例源码
项目:netty-isdn-transport
文件:IsdnServerPipelineSink.java
private void handleServerChannel(ChannelEvent e) {
IsdnServerChannel channel = (IsdnServerChannel) e.getChannel();
ChannelFuture future = e.getFuture();
if (e instanceof ChannelStateEvent) {
ChannelStateEvent stateEvent = (ChannelStateEvent) e;
ChannelState state = stateEvent.getState();
Object value = stateEvent.getValue();
switch (state) {
case OPEN:
if (Boolean.FALSE.equals(value)) {
close(channel, future);
}
break;
case BOUND:
if (value != null) {
bind(channel, future, (IsdnSocketAddress) value);
} else {
logger.warn("eventSunk() :: UNHANDLED (BOUND value=null) --> {}", e);
close(channel, future);
}
break;
default:
logger.warn("eventSunk() :: UNHANDLED --> {}", e);
}
}
}
项目:whois
文件:ConnectionPerIpLimitHandlerTest.java
@Test
public void multiple_connected_same_ip() throws Exception {
final InetSocketAddress remoteAddress = new InetSocketAddress("10.0.0.0", 43);
when(channel.getRemoteAddress()).thenReturn(remoteAddress);
final ChannelEvent openEvent = new UpstreamChannelStateEvent(channel, ChannelState.OPEN, Boolean.TRUE);
subject.handleUpstream(ctx, openEvent);
subject.handleUpstream(ctx, openEvent);
subject.handleUpstream(ctx, openEvent);
verify(ctx, times(2)).sendUpstream(openEvent);
verify(channel, times(1)).write(argThat(new ArgumentMatcher<Object>() {
@Override
public boolean matches(Object argument) {
return QueryMessages.connectionsExceeded(MAX_CONNECTIONS_PER_IP).equals(argument);
}
}));
verify(channelFuture, times(1)).addListener(ChannelFutureListener.CLOSE);
verify(whoisLog).logQueryResult(anyString(), eq(0), eq(0), eq(QueryCompletionInfo.REJECTED), eq(0L), (InetAddress) Mockito.anyObject(), Mockito.anyInt(), eq(""));
verify(ctx, times(2)).sendUpstream(openEvent);
}
项目:whois
文件:ConnectionPerIpLimitHandlerTest.java
@Test
public void multiple_connected_limit_disabled() throws Exception {
subject.setMaxConnectionsPerIp(0);
final InetSocketAddress remoteAddress = new InetSocketAddress("10.0.0.0", 43);
when(channel.getRemoteAddress()).thenReturn(remoteAddress);
final ChannelEvent openEvent = new UpstreamChannelStateEvent(channel, ChannelState.OPEN, Boolean.TRUE);
subject.handleUpstream(ctx, openEvent);
subject.handleUpstream(ctx, openEvent);
subject.handleUpstream(ctx, openEvent);
final ChannelEvent closeEvent = new UpstreamChannelStateEvent(channel, ChannelState.OPEN, Boolean.FALSE);
subject.handleUpstream(ctx, closeEvent);
subject.handleUpstream(ctx, closeEvent);
subject.handleUpstream(ctx, closeEvent);
verify(ctx, times(3)).sendUpstream(openEvent);
verify(ctx, times(3)).sendUpstream(closeEvent);
verify(channel, never()).close();
verify(channel, never()).write(anyObject());
verify(channelFuture, never()).addListener(ChannelFutureListener.CLOSE);
}
项目:whois
文件:ConnectionPerIpLimitHandlerTest.java
@Test
public void multiple_connected_unlimited_allowed() throws Exception {
final InetSocketAddress remoteAddress = new InetSocketAddress("10.0.0.0", 43);
when(ipResourceConfiguration.isUnlimitedConnections(any(IpInterval.class))).thenReturn(true);
when(channel.getRemoteAddress()).thenReturn(remoteAddress);
final ChannelEvent event = new UpstreamChannelStateEvent(channel, ChannelState.OPEN, Boolean.TRUE);
subject.handleUpstream(ctx, event);
subject.handleUpstream(ctx, event);
subject.handleUpstream(ctx, event);
verify(ctx, times(3)).sendUpstream(event);
verify(channel, never()).close();
verify(channel, never()).write(anyObject());
verify(channelFuture, never()).addListener(ChannelFutureListener.CLOSE);
}
项目:whois
文件:ConnectionPerIpLimitHandlerTest.java
@Test
public void multiple_connected_proxy_allowed() throws Exception {
final InetSocketAddress remoteAddress = new InetSocketAddress("10.0.0.0", 43);
when(ipResourceConfiguration.isProxy(any(IpInterval.class))).thenReturn(true);
when(channel.getRemoteAddress()).thenReturn(remoteAddress);
final ChannelEvent event = new UpstreamChannelStateEvent(channel, ChannelState.OPEN, Boolean.TRUE);
subject.handleUpstream(ctx, event);
subject.handleUpstream(ctx, event);
subject.handleUpstream(ctx, event);
verify(ctx, times(3)).sendUpstream(event);
verify(channel, never()).close();
verify(channel, never()).write(anyObject());
verify(channelFuture, never()).addListener(ChannelFutureListener.CLOSE);
}
项目:whois
文件:ConnectionPerIpLimitHandlerTest.java
@Test
public void multiple_connected_different_ip() throws Exception {
final InetSocketAddress remoteAddress = new InetSocketAddress("10.0.0.0", 43);
final InetSocketAddress remoteAddress2 = new InetSocketAddress("10.0.0.1", 43);
when(channel.getRemoteAddress()).thenReturn(remoteAddress).thenReturn(remoteAddress).thenReturn(remoteAddress2);
final ChannelEvent event = new UpstreamChannelStateEvent(channel, ChannelState.OPEN, Boolean.TRUE);
subject.handleUpstream(ctx, event);
subject.handleUpstream(ctx, event);
final ChannelEvent event2 = new UpstreamChannelStateEvent(channel, ChannelState.OPEN, Boolean.TRUE);
subject.handleUpstream(ctx, event2);
verify(ctx, times(2)).sendUpstream(event);
verify(ctx, times(1)).sendUpstream(event2);
verify(channel, never()).close();
verify(channel, never()).write(anyObject());
verify(channelFuture, never()).addListener(ChannelFutureListener.CLOSE);
}
项目:whois
文件:ConnectionPerIpLimitHandlerTest.java
@Test
public void multiple_connected_same_ip_and_closed() throws Exception {
final InetSocketAddress remoteAddress = new InetSocketAddress("10.0.0.0", 43);
when(channel.getRemoteAddress()).thenReturn(remoteAddress);
final ChannelEvent openEvent = new UpstreamChannelStateEvent(channel, ChannelState.OPEN, Boolean.TRUE);
subject.handleUpstream(ctx, openEvent);
subject.handleUpstream(ctx, openEvent);
final ChannelEvent closeEvent = new UpstreamChannelStateEvent(channel, ChannelState.OPEN, Boolean.FALSE);
subject.handleUpstream(ctx, closeEvent);
subject.handleUpstream(ctx, closeEvent);
subject.handleUpstream(ctx, openEvent);
subject.handleUpstream(ctx, openEvent);
verify(ctx, times(4)).sendUpstream(openEvent);
verify(ctx, times(2)).sendUpstream(closeEvent);
verify(channel, never()).close();
verify(channel, never()).write(anyObject());
verify(channelFuture, never()).addListener(ChannelFutureListener.CLOSE);
}
项目:proactive-component-monitoring
文件:PNPClientFrameDecoder.java
public void handleUpstream(ChannelHandlerContext ctx, ChannelEvent event) throws Exception {
if (event instanceof MessageEvent) {
MessageEvent msgEvent = (MessageEvent) event;
Object msg = msgEvent.getMessage();
if (msg instanceof ChannelBuffer) {
callDecode(ctx, (ChannelBuffer) msg, msgEvent.getRemoteAddress());
return;
}
} else if (event instanceof ChannelStateEvent) {
ChannelStateEvent stateEvent = (ChannelStateEvent) event;
if (stateEvent.getState() == ChannelState.CONNECTED) {
if (stateEvent.getValue() != null) {
lengthBytesToRead = lengthFieldLength;
lengthBuffer = getBuffer(ctx.getChannel().getConfig().getBufferFactory(),
lengthBytesToRead);
}
}
}
ctx.sendUpstream(event);
}
项目:proactive-component-monitoring
文件:PNPServerFrameDecoder.java
public void handleUpstream(ChannelHandlerContext ctx, ChannelEvent event) throws Exception {
if (event instanceof MessageEvent) {
MessageEvent msgEvent = (MessageEvent) event;
Object msg = msgEvent.getMessage();
if (msg instanceof ChannelBuffer) {
callDecode(ctx, (ChannelBuffer) msg, msgEvent.getRemoteAddress());
return;
}
} else if (event instanceof ChannelStateEvent) {
ChannelStateEvent stateEvent = (ChannelStateEvent) event;
if (stateEvent.getState() == ChannelState.CONNECTED) {
if (stateEvent.getValue() != null) {
lengthBytesToRead = lengthFieldLength;
lengthBuffer = getBuffer(ctx.getChannel().getConfig().getBufferFactory(),
lengthBytesToRead);
}
}
}
ctx.sendUpstream(event);
}
项目:libraft
文件:IncomingHandshakeHandlerTest.java
@Test
public void shouldThrowExceptionIfBadHandshakeIsReceived() throws Exception {
final InetSocketAddress remoteAddress = new InetSocketAddress(0);
// start off by simulating a 'channelConnected' event
// this should set the internal state properly
handler.channelConnected(ctx, new UpstreamChannelStateEvent(channel, ChannelState.CONNECTED, remoteAddress));
// we shouldn't forward the event on
Mockito.verifyNoMoreInteractions(ctx);
// now simulate an incoming message
// the handler is expecting a handshake message
// but we're going to feed it something else, and we expect an exception as a result
ChannelBuffer badHandshakeBuffer = ChannelBuffers.wrappedBuffer(new byte[]{0, 1, 3, 4});
expectedException.expect(IOException.class);
handler.messageReceived(ctx, new UpstreamMessageEvent(channel, badHandshakeBuffer, remoteAddress));
}
项目:libraft
文件:AddressResolverHandlerTest.java
@Test
public void shouldResolveAddressAndForwardEventWhenConnectIsCalledWithAnUnresolvedInetSocketAddress() throws Exception {
DefaultChannelFuture originalEventFuture = new DefaultChannelFuture(channel, false);
ChannelStateEvent event = new DownstreamChannelStateEvent(
channel,
originalEventFuture,
ChannelState.CONNECTED,
createUnresolvedRemoteAddress()
);
handler.connectRequested(ctx, event);
ArgumentCaptor<DownstreamChannelStateEvent> eventCaptor = ArgumentCaptor.forClass(DownstreamChannelStateEvent.class);
verify(ctx).sendDownstream(eventCaptor.capture());
DownstreamChannelStateEvent forwardedEvent = eventCaptor.getValue();
assertThat(forwardedEvent.getChannel(), equalTo(channel));
assertThat(forwardedEvent.getState(), equalTo(ChannelState.CONNECTED));
assertThat(forwardedEvent.getFuture(), Matchers.<ChannelFuture>equalTo(originalEventFuture));
InetSocketAddress forwardedAddress = (InetSocketAddress) forwardedEvent.getValue();
assertThat(forwardedAddress.isUnresolved(), equalTo(false));
}
项目:libraft
文件:AddressResolverHandlerTest.java
@Test
public void shouldFireExceptionIfConnectEventCannotBeForwarded() throws Exception {
setupPipelineToRunFireEventLaterInline();
// setup the ctx to throw an exception when we attempt to send the connected event downstream
IllegalStateException resolveFailureCause = new IllegalStateException("downstream event failed");
doThrow(resolveFailureCause).when(ctx).sendDownstream(any(DownstreamChannelStateEvent.class));
// initiate the connect request
DefaultChannelFuture originalEventFuture = new DefaultChannelFuture(channel, false);
ChannelStateEvent event = new DownstreamChannelStateEvent(
channel,
originalEventFuture,
ChannelState.CONNECTED,
createUnresolvedRemoteAddress()
);
handler.connectRequested(ctx, event);
// firing the connect downstream should cause a "fireExceptionCaughtLater" call
ArgumentCaptor<DefaultExceptionEvent> exceptionEventCaptor = ArgumentCaptor.forClass(DefaultExceptionEvent.class);
verify(ctx).sendUpstream(exceptionEventCaptor.capture());
DefaultExceptionEvent exceptionEvent = exceptionEventCaptor.getValue();
assertThat(exceptionEvent.getCause(), Matchers.<Throwable>is(resolveFailureCause));
}
项目:libraft
文件:OutgoingHandshakeHandlerTest.java
@Test
public void shouldPassOnProxyConnectRequestedEvent() throws Exception {
ChannelFuture originalConnectFuture = Channels.future(channel);
InetSocketAddress originalValue = new InetSocketAddress(0);
// initiate the connect request
handler.connectRequested(ctx, new DownstreamChannelStateEvent(channel, originalConnectFuture, ChannelState.CONNECTED, originalValue));
// verify that a proxy event is sent instead of the original event
ArgumentCaptor<DownstreamChannelStateEvent> downstreamEvent = ArgumentCaptor.forClass(DownstreamChannelStateEvent.class);
verify(ctx, atLeastOnce()).getChannel();
verify(ctx).sendDownstream(downstreamEvent.capture());
verifyNoMoreInteractions(ctx);
DownstreamChannelStateEvent forwardedEvent = downstreamEvent.getValue();
assertThat(forwardedEvent.getChannel(), is(channel));
assertThat(forwardedEvent.getFuture(), notNullValue());
assertThat(forwardedEvent.getFuture(), not(originalConnectFuture));
assertThat(forwardedEvent.getState(), is(ChannelState.CONNECTED));
assertThat((InetSocketAddress) forwardedEvent.getValue(), is(originalValue));
}
项目:libraft
文件:OutgoingHandshakeHandlerTest.java
@Test
public void shouldFailOriginalConnectFutureWhenProxyConnectFutureIsMarkedAsFailed() throws Exception {
ChannelFuture originalConnectFuture = Channels.future(channel);
InetSocketAddress originalValue = new InetSocketAddress(0);
// initiate the connect request
handler.connectRequested(ctx, new DownstreamChannelStateEvent(channel, originalConnectFuture, ChannelState.CONNECTED, originalValue));
// get the proxy event
ArgumentCaptor<DownstreamChannelStateEvent> downstreamEvent = ArgumentCaptor.forClass(DownstreamChannelStateEvent.class);
verify(ctx, atLeastOnce()).getChannel();
verify(ctx).sendDownstream(downstreamEvent.capture());
verifyNoMoreInteractions(ctx);
// mark the proxy event future as having failed
DownstreamChannelStateEvent forwardedEvent = downstreamEvent.getValue();
Exception failureCause = new Exception();
forwardedEvent.getFuture().setFailure(failureCause);
// and check that we've triggered the original future as well
assertThat(originalConnectFuture.isDone(), equalTo(true));
assertThat(originalConnectFuture.isSuccess(), equalTo(false));
}
项目:libraft
文件:OutgoingHandshakeHandlerTest.java
@Test
public void shouldNotTriggerOriginalConnectFutureIfProxyConnectFutureSucceeds() throws Exception {
ChannelFuture originalConnectFuture = Channels.future(channel);
InetSocketAddress originalValue = new InetSocketAddress(0);
// initiate the connect request
handler.connectRequested(ctx, new DownstreamChannelStateEvent(channel, originalConnectFuture, ChannelState.CONNECTED, originalValue));
// get the proxy event
ArgumentCaptor<DownstreamChannelStateEvent> downstreamEvent = ArgumentCaptor.forClass(DownstreamChannelStateEvent.class);
verify(ctx, atLeastOnce()).getChannel();
verify(ctx).sendDownstream(downstreamEvent.capture());
// mark the proxy event future as having succeeded
DownstreamChannelStateEvent forwardedEvent = downstreamEvent.getValue();
forwardedEvent.getFuture().setSuccess();
// and check that original future _is not triggered_ and no events are forwarded!
assertThat(originalConnectFuture.isDone(), equalTo(false));
verifyNoMoreInteractions(ctx);
}
项目:perfload-core
文件:ServerHandler.java
/**
* <p>
* {@inheritDoc}
* </p>
* <p>
* Overriden to log ChannelStateEvents if they have a state other than
* {@link ChannelState#INTEREST_OPS}, i. e. OPEN, BOUND, CONNECTED.
* </p>
*
* @param ctx
* the context object for this handler
* @param e
* the upstream event to process or intercept
*/
@Override
public void handleUpstream(final ChannelHandlerContext ctx, final ChannelEvent e) throws Exception {
if (e instanceof ChannelStateEvent) {
ChannelStateEvent stateEvent = (ChannelStateEvent) e;
if (stateEvent.getState() != ChannelState.INTEREST_OPS) {
log.info(e.toString());
if (stateEvent.getState() == ChannelState.CONNECTED && stateEvent.getValue() == null) {
// Remove channel from container when client disconnects
channelContainer.removeChannel(e.getChannel());
}
}
}
super.handleUpstream(ctx, e);
}
项目:httptunnel
文件:HttpTunnelClientSendHandlerTest.java
@Test
public void testDisconnect() {
emulateConnectAndOpen();
channel.write(NettyTestUtils.createData(1234L));
assertEquals(1, sink.events.size());
checkIsSendDataRequestWithData(sink.events.poll(),
NettyTestUtils.createData(1234L));
channel.disconnect();
Channels.fireMessageReceived(channel,
HttpTunnelMessageUtils.createSendDataResponse());
assertEquals(1, sink.events.size());
HttpRequest request = NettyTestUtils.checkIsDownstreamMessageEvent(
sink.events.poll(), HttpRequest.class);
assertTrue(HttpTunnelMessageUtils.isCloseTunnelRequest(request, USER_AGENT));
assertEquals("newTunnel",
HttpTunnelMessageUtils.extractTunnelId(request));
Channels.fireMessageReceived(channel,
HttpTunnelMessageUtils.createTunnelCloseResponse());
assertEquals(1, sink.events.size());
NettyTestUtils.checkIsStateEvent(sink.events.poll(),
ChannelState.CONNECTED, null);
}
项目:httptunnel
文件:HttpTunnelClientSendHandlerTest.java
@Test
public void testClose() {
emulateConnectAndOpen();
channel.close();
assertEquals(1, sink.events.size());
HttpRequest request = NettyTestUtils.checkIsDownstreamMessageEvent(
sink.events.poll(), HttpRequest.class);
assertTrue(HttpTunnelMessageUtils.isCloseTunnelRequest(request, USER_AGENT));
assertEquals("newTunnel",
HttpTunnelMessageUtils.extractTunnelId(request));
Channels.fireMessageReceived(channel,
HttpTunnelMessageUtils.createTunnelCloseResponse());
assertEquals(1, sink.events.size());
NettyTestUtils.checkIsStateEvent(sink.events.poll(), ChannelState.OPEN,
false);
}
项目:httptunnel
文件:HttpTunnelClientChannelTest.java
@Test
public void testBind_preResolvedAddress_ipv6() {
ChannelFuture bindFuture = Channels.bind(channel,
RESOLVED_LOCAL_ADDRESS_IPV6);
assertFalse(bindFuture.isDone());
assertEquals(1, sendSink.events.size());
assertEquals(1, pollSink.events.size());
ChannelEvent sendChannelEvent = sendSink.events.poll();
NettyTestUtils.checkIsStateEvent(sendChannelEvent, ChannelState.BOUND,
RESOLVED_LOCAL_ADDRESS_IPV6);
ChannelEvent pollChannelEvent = pollSink.events.poll();
NettyTestUtils.checkIsStateEvent(pollChannelEvent, ChannelState.BOUND,
RESOLVED_LOCAL_ADDRESS_IPV6_EPHEMERAL_PORT);
sendChannel.emulateBound(RESOLVED_LOCAL_ADDRESS_IPV6,
sendChannelEvent.getFuture());
assertFalse(bindFuture.isDone());
pollChannel.emulateBound(RESOLVED_LOCAL_ADDRESS_IPV4_SELECTED_PORT,
pollChannelEvent.getFuture());
assertTrue(bindFuture.isDone());
assertTrue(bindFuture.isSuccess());
assertEquals(channel.getLocalAddress(), RESOLVED_LOCAL_ADDRESS_IPV6);
}
项目:guagua
文件:NettyMasterCoordinator.java
@Override
public void handleUpstream(ChannelHandlerContext ctx, ChannelEvent e) throws Exception {
if(e instanceof ChannelStateEvent && ((ChannelStateEvent) e).getState() != ChannelState.INTEREST_OPS) {
LOG.debug(e.toString());
}
super.handleUpstream(ctx, e);
}
项目:guagua
文件:GuaguaAppMaster.java
@Override
public void handleUpstream(ChannelHandlerContext ctx, ChannelEvent e) throws Exception {
if(e instanceof ChannelStateEvent && ((ChannelStateEvent) e).getState() != ChannelState.INTEREST_OPS) {
LOG.debug(e.toString());
}
super.handleUpstream(ctx, e);
}
项目:netty-isdn-transport
文件:IsdnClientPipelineSink.java
public void eventSunk(ChannelPipeline pipeline, ChannelEvent e) throws Exception {
IsdnClientChannel channel = (IsdnClientChannel) e.getChannel();
ChannelFuture future = e.getFuture();
if (e instanceof ChannelStateEvent) {
ChannelStateEvent stateEvent = (ChannelStateEvent) e;
ChannelState state = stateEvent.getState();
Object value = stateEvent.getValue();
switch (state) {
case OPEN:
if (FALSE.equals(value)) {
IsdnWorker.close(channel, future);
}
break;
case BOUND:
if (value != null) {
bind(channel, future, (IsdnSocketAddress) value);
} else {
IsdnWorker.close(channel, future);
}
break;
case CONNECTED:
if (value != null) {
connect(channel, future, (IsdnSocketAddress) value);
} else {
IsdnWorker.close(channel, future);
}
break;
case INTEREST_OPS:
IsdnWorker.setInterestOps(channel, future, ((Integer) value).intValue());
break;
}
} else if (e instanceof MessageEvent) {
IsdnWorker.write(channel, future, ((MessageEvent) e).getMessage());
}
}
项目:whois
文件:ConnectionPerIpLimitHandlerTest.java
@Test
public void one_connected() throws Exception {
final InetSocketAddress remoteAddress = new InetSocketAddress("10.0.0.0", 43);
when(channel.getRemoteAddress()).thenReturn(remoteAddress);
final ChannelEvent event = new UpstreamChannelStateEvent(channel, ChannelState.OPEN, Boolean.TRUE);
subject.handleUpstream(ctx, event);
subject.handleUpstream(ctx, event);
verify(ctx, times(2)).sendUpstream(event);
verify(channel, never()).close();
verify(channel, never()).write(anyObject());
verify(channelFuture, never()).addListener(ChannelFutureListener.CLOSE);
}
项目:libraft
文件:IncomingHandshakeHandlerTest.java
@Test
public void shouldThrowExceptionIfMultipleChannelConnectedEventsAreReceived() throws Exception {
// first channel connected event
handler.channelConnected(ctx, new UpstreamChannelStateEvent(channel, ChannelState.CONNECTED, new InetSocketAddress(0)));
// second channel connected event
expectedException.expect(IllegalStateException.class);
handler.channelConnected(ctx, new UpstreamChannelStateEvent(channel, ChannelState.CONNECTED, new InetSocketAddress(0)));
}
项目:libraft
文件:IncomingHandshakeHandlerTest.java
@Test
public void shouldNotForwardChannelConnectedEventUntilHandshakeMessageReceived() throws Exception {
// simulate a channelConnected event
handler.channelConnected(ctx, new UpstreamChannelStateEvent(channel, ChannelState.CONNECTED, new InetSocketAddress(0)));
// verify that no event is forwarded on (if an event is forwarded, it _must_ use the ctx object)
Mockito.verifyNoMoreInteractions(ctx);
}
项目:libraft
文件:AddressResolverHandlerTest.java
@Test
public void shouldSimplyForwardEventWhenConnectIsCalledWithAResolvedInetSocketAddress() throws Exception {
ChannelStateEvent event = new DownstreamChannelStateEvent(
channel,
new DefaultChannelFuture(channel, false),
ChannelState.CONNECTED,
new InetSocketAddress("localhost", 9999)
);
handler.connectRequested(ctx, event);
verify(ctx).sendDownstream(refEq(event));
}
项目:libraft
文件:AddressResolverHandlerTest.java
@Test
public void shouldSimplyForwardEventWhenConnectIsCalledWithNonInetSocketAddress() throws Exception {
ChannelStateEvent event = new DownstreamChannelStateEvent(
channel,
new DefaultChannelFuture(channel, false),
ChannelState.CONNECTED,
new LocalAddress(LocalAddress.EPHEMERAL)
);
handler.connectRequested(ctx, event);
verify(ctx).sendDownstream(refEq(event));
}
项目:libraft
文件:AddressResolverHandlerTest.java
@Test
public void shouldFireExceptionIfAddressResolutionTaskFails() throws Exception {
setupPipelineToRunFireEventLaterInline();
// setup the address resolver to throw an exception
final IllegalStateException resolveFailureCause = new IllegalStateException("simulate resolve failure");
AddressResolverHandler.ResolvedAddressProvider failingResolver = new AddressResolverHandler.ResolvedAddressProvider() {
@Override
public InetSocketAddress createResolved(InetSocketAddress unresolvedAddress) throws Exception {
throw resolveFailureCause;
}
};
// fire a connect request with an unresolved address
AddressResolverHandler failingHandler = new AddressResolverHandler(MoreExecutors.listeningDecorator(MoreExecutors.sameThreadExecutor()), failingResolver);
DefaultChannelFuture originalEventFuture = new DefaultChannelFuture(channel, false);
ChannelStateEvent event = new DownstreamChannelStateEvent(
channel,
originalEventFuture,
ChannelState.CONNECTED,
createUnresolvedRemoteAddress()
);
failingHandler.connectRequested(ctx, event);
// this should cause a "fireExceptionCaughtLater" call
ArgumentCaptor<DefaultExceptionEvent> exceptionEventCaptor = ArgumentCaptor.forClass(DefaultExceptionEvent.class);
verify(ctx).sendUpstream(exceptionEventCaptor.capture());
DefaultExceptionEvent exceptionEvent = exceptionEventCaptor.getValue();
assertThat(exceptionEvent.getCause(), Matchers.<Throwable>is(resolveFailureCause));
}
项目:libraft
文件:FinalUpstreamHandlerTest.java
@Test
public void shouldDropConnectedEvent() {
UpstreamChannelStateEvent event = spy(new UpstreamChannelStateEvent(channel, ChannelState.CONNECTED, InetSocketAddress.createUnresolved("remote-host", 8888)));
handler.channelConnected(ctx, event);
verifyNoMoreInteractions(ctx, event);
}
项目:libraft
文件:FinalUpstreamHandlerTest.java
@Test
public void shouldDropChannelClosedEvent() {
UpstreamChannelStateEvent event = spy(new UpstreamChannelStateEvent(channel, ChannelState.CONNECTED, null));
handler.channelConnected(ctx, event);
verifyNoMoreInteractions(ctx, event);
}
项目:libraft
文件:OutgoingHandshakeHandlerTest.java
@Test
public void shouldThrowExceptionIfMultipleConnectRequestedEventsAreReceived() throws Exception {
// first connect request
// no issues expected
handler.connectRequested(ctx, new DownstreamChannelStateEvent(channel, Channels.future(channel), ChannelState.CONNECTED, new InetSocketAddress(0)));
// second connect request
// in real life this shouldn't happen
// but, if we blindly expect this our internal state is corrupted
expectedException.expect(IllegalStateException.class);
handler.connectRequested(ctx, new DownstreamChannelStateEvent(channel, Channels.future(channel), ChannelState.CONNECTED, new InetSocketAddress(0)));
}
项目:libraft
文件:OutgoingHandshakeHandlerTest.java
@Test
public void shouldFailOriginalConnectFutureWhenChannelIsClosed() throws Exception {
ChannelFuture originalConnectFuture = Channels.future(channel);
InetSocketAddress originalValue = new InetSocketAddress(0);
// initiate the connect request
handler.connectRequested(ctx, new DownstreamChannelStateEvent(channel, originalConnectFuture, ChannelState.CONNECTED, originalValue));
// trigger the close future (i.e the channel closed)
closeFuture.setSuccess();
// and check that we've triggered the original future as well
assertThat(originalConnectFuture.isDone(), equalTo(true));
assertThat(originalConnectFuture.isSuccess(), equalTo(false));
}
项目:libraft
文件:OutgoingHandshakeHandlerTest.java
@SuppressWarnings("ThrowableResultOfMethodCallIgnored")
@Test
public void shouldFailOriginalConnectFutureAndCloseChannelIfHandshakeWriteFutureFails() throws Exception {
ChannelFuture originalConnectFuture = Channels.future(channel);
// pretend that a connectRequested event was sent over this channel
handler.setConnectFutureForUnitTestOnly(originalConnectFuture);
// signal that the connect succeeded
handler.channelConnected(ctx, new UpstreamChannelStateEvent(channel, ChannelState.CONNECTED, new InetSocketAddress(0)));
// instead of passing events upstream, the handler should
// attempt to write an handshake out and send nothing upstream
ArgumentCaptor<DownstreamMessageEvent> downstreamEvent = ArgumentCaptor.forClass(DownstreamMessageEvent.class);
verify(ctx, atLeastOnce()).getChannel();
verify(ctx).sendDownstream(downstreamEvent.capture());
verifyNoMoreInteractions(ctx);
// fail the write
DownstreamMessageEvent handshakeEvent = downstreamEvent.getValue();
IOException cause = new IOException();
handshakeEvent.getFuture().setFailure(cause);
// verify that the original future failed as well
assertThat(originalConnectFuture.isDone(), equalTo(true));
assertThat(originalConnectFuture.isSuccess(), equalTo(false));
assertThat((IOException) originalConnectFuture.getCause(), is(cause));
// and that the channel was closed
verify(channel).close();
}
项目:httptunnel
文件:HttpTunnelClientChannelTest.java
@Test
public void testConnect() throws InterruptedException, URISyntaxException {
Channels.bind(channel, LOCAL_ADDRESS);
Channels.connect(channel, REMOTE_ADDRESS);
// this should result in BIND state events on both channels, and a
// CONNECTED state event on the send channel, but not on the poll channel
assertEquals(2, sendSink.events.size());
assertEquals(1, pollSink.events.size());
NettyTestUtils.checkIsStateEvent(sendSink.events.poll(), ChannelState.BOUND, LOCAL_ADDRESS);
final ChannelEvent sendConnectedEvent = sendSink.events.poll();
final Proxy proxy = ProxySelector.getDefault().select(new URI(String.format("http://%s:%d", REMOTE_ADDRESS.getHostString(), REMOTE_ADDRESS.getPort()))).get(0);
final SocketAddress proxyAddress = proxy.address();
NettyTestUtils.checkIsStateEvent(sendConnectedEvent, ChannelState.CONNECTED, proxyAddress == null ? REMOTE_ADDRESS : proxyAddress);
// once the send channel indicates that it is connected, we should see
// the tunnel open request being sent
sendChannel.emulateConnected(LOCAL_ADDRESS, REMOTE_ADDRESS, ((ChannelStateEvent) sendConnectedEvent).getFuture());
assertEquals(1, sendSink.events.size());
ChannelEvent openTunnelRequest = sendSink.events.poll();
NettyTestUtils.checkIsDownstreamMessageEvent(openTunnelRequest, ChannelBuffer.class);
}
项目:httptunnel
文件:HttpTunnelClientChannelTest.java
private void checkBinding(InetSocketAddress requestedBindAddress,
InetSocketAddress expectedPollBindRequest,
InetSocketAddress expectedSendBindRequest,
InetSocketAddress emulatedPollBindAddress,
InetSocketAddress emulatedSendBindAddress) {
ChannelFuture bindFuture = Channels.bind(channel, requestedBindAddress);
assertFalse(bindFuture.isDone());
assertEquals(1, sendSink.events.size());
assertEquals(1, pollSink.events.size());
ChannelEvent sendChannelEvent = sendSink.events.poll();
NettyTestUtils.checkIsStateEvent(sendChannelEvent, ChannelState.BOUND,
expectedPollBindRequest);
ChannelEvent pollChannelEvent = pollSink.events.poll();
NettyTestUtils.checkIsStateEvent(pollChannelEvent, ChannelState.BOUND,
expectedSendBindRequest);
sendChannel.emulateBound(emulatedPollBindAddress,
sendChannelEvent.getFuture());
assertFalse(bindFuture.isDone());
pollChannel.emulateBound(emulatedSendBindAddress,
pollChannelEvent.getFuture());
assertTrue(bindFuture.isDone());
assertTrue(bindFuture.isSuccess());
assertEquals(channel.getLocalAddress(), emulatedPollBindAddress);
}
项目:httptunnel
文件:HttpTunnelServerChannelTest.java
@Test
public void testChannelBoundEventFromReal_replicatedOnVirtual() {
upstreamEvents.events.clear();
InetSocketAddress boundAddr = InetSocketAddress.createUnresolved(
"mycomputer", 12345);
Channels.fireChannelBound(realChannelFactory.createdChannel, boundAddr);
assertEquals(1, upstreamEvents.events.size());
checkIsUpstreamChannelStateEvent(upstreamEvents.events.poll(),
virtualChannel, ChannelState.BOUND, boundAddr);
}
项目:httptunnel
文件:HttpTunnelServerChannelTest.java
@Test
public void testChannelUnboundEventFromReal_replicatedOnVirtual() {
upstreamEvents.events.clear();
Channels.fireChannelUnbound(realChannelFactory.createdChannel);
assertEquals(1, upstreamEvents.events.size());
checkIsUpstreamChannelStateEvent(upstreamEvents.events.poll(),
virtualChannel, ChannelState.BOUND, null);
}
项目:httptunnel
文件:HttpTunnelServerChannelTest.java
@Test
public void testChannelClosedEventFromReal_replicatedOnVirtual() {
upstreamEvents.events.clear();
Channels.fireChannelClosed(realChannelFactory.createdChannel);
assertEquals(1, upstreamEvents.events.size());
checkIsUpstreamChannelStateEvent(upstreamEvents.events.poll(),
virtualChannel, ChannelState.OPEN, Boolean.FALSE);
}
项目:httptunnel
文件:HttpTunnelServerChannelTest.java
private void checkIsUpstreamChannelStateEvent(ChannelEvent ev,
Channel expectedChannel, ChannelState expectedState,
Object expectedValue) {
assertTrue(ev instanceof UpstreamChannelStateEvent);
UpstreamChannelStateEvent checkedEv = (UpstreamChannelStateEvent) ev;
assertSame(expectedChannel, checkedEv.getChannel());
assertEquals(expectedState, checkedEv.getState());
assertEquals(expectedValue, checkedEv.getValue());
}
项目:httptunnel
文件:NettyTestUtils.java
public static ChannelStateEvent checkIsStateEvent(ChannelEvent event, ChannelState expectedState, Object expectedValue) {
assertTrue(event instanceof ChannelStateEvent);
ChannelStateEvent stateEvent = (ChannelStateEvent) event;
Assert.assertEquals(expectedState, stateEvent.getState());
Assert.assertEquals(expectedValue, stateEvent.getValue());
return stateEvent;
}