2017-09-12 5 views
0

나는 임베디드 채널이 어떻게 작동하는지 알아 내기 위해 Netty에서 아주 간단한 것을 테스트하려고합니다. 같은테스트 채널 NetHyards의 핸드 헬드

@Component 
@Sharable 
public class VersionServerHandler extends ChannelInboundHandlerAdapter { 

    private VersionService versionService; 

    @Autowired 
    public VersionServerHandler(VersionService versionService) { 
     this.versionService = versionService; 
    } 

    @Override 
    public void channelRead(ChannelHandlerContext ctx, Object msg) { 
     boolean isSupported = versionService.isVersionSupported((VersionRequest) msg.getVersion()); 

     // more logic 
     ctx.writeAndFlush(msg); 
    } 

내 테스트 같습니다 : 내 핸들러는 다음과 같습니다 난 그냥 그물코 예처럼에서 VersionServerHandler와 EmbeddedChannel 바이트를 쓰기 위해 노력하고있어

@Mock 
    private VersionService versionService; 

    @Test 
    public void testChannelRead() { 
     EmbeddedChannel embeddedChannel = new EmbeddedChannel(new VersionServerHandler(versionService); 
     ByteBuf buf = Unpooled.buffer(); 
     for (int i = 0; i < 9; i++) { 
      buf.writeByte(i); 
     } 
     ByteBuf dup = buf.duplicate(); 

     boolean test = embeddedChannel.writeInbound(dup.retain()); 
     // test is false 

하지만 test은 false입니다 사실이 아니다. 제가 누락 된 것이 있습니까? 감사.

답변

1

왜냐하면 writeInbound(...)은 메시지가 파이프 라인 끝에 도달하면 true 만 반환하기 때문입니다. 확인하고 싶은 것을 확인하려면 writeInbound(...)으로 전화 한 다음 readOutbound()을 사용하고 null을 반환하지 않는지 확인하십시오. 또한 channel.finish()true을 반환해야합니다.

+0

embeddedChannel에서 읽을 내용이 있으면 writeInbound()가 true를 반환한다고 생각했습니다. 그래서이 시나리오에서 writeInbound가 true를 반환 할 것이라고 생각했습니다. – Crystal

+0

내가 말했듯이 뭔가가 파이프 라인 끝에 도달하여'readInbound()'를 통해 읽을 수있는 경우에만 true를 반환한다고 말했듯이 –