2017-01-02 7 views
0

私のハンドラのいくつかをテストするためにNettyのEmbeddedChannelを使用しています。2つの異なる接続をシミュレートするNetty EmbeddedChannel

私のハンドラは、#remoteAddress()に基づいて、2つの接続(チャネル)を区別することをテストしたいユースケースがあります。

残念ながら、EmbeddedChannelは、作成されたすべてのチャンネルに対してハードコードされた値を提供するEmbeddedSocketAddressを使用します。したがって、2つの異なるEmbeddedChannelインスタンスは全く同じ#remoteAddress()を持ちます。

私はにスパイ EmbeddedChannelを試してみましたが、[リモートメソッドをモックが、EmbeddedChannel実装のこれはChannelPipelineとして適用されませんので、モックが行われる前に作成されています。したがって、模擬されていないオブジェクトへの参照があるため、模擬値はパイプライン上で渡されません。

上記を達成するための方法はありますか?理想的にはEmbeddedChannelの異なる2つのインスタンスに異なる#remoteAddress()があることを希望します。

ありがとうございます。

答えて

0

多分あなたはチャンネルのIDを使用しようとすることができますか?

が、これは、リモートアドレスに基づいて、あなたの現在のコードのように動作していないにつながるもちろんhttp://netty.io/4.1/api/io/netty/channel/AbstractChannel.html#id()

を参照してください。しかし、場合によってはリモートアドレスだけで十分ではない場合もあります(例えば、実際のリモートがプロキシの背後にある場合など)。だから、あなたは "普通"の状況でもIDを考慮することができますか?

0

EmbeddedChannelに拡張されたカスタムチャネルを作成してから、protected SocketAddress remoteAddress0()をオーバーライドして必要なアドレスを返すことができます。

public class CustomEmbeddedChannel extends EmbeddedChannel{ 

    private InetSocketAddress socketAddress; 

    public CustomEmbeddedChannel(String host, int port, final ChannelHandler ... handlers){ 
     super(handlers); 
     socketAddress = new InetSocketAddress(host, port); 
    } 

    @Override 
    protected SocketAddress remoteAddress0(){ 
     return this.socketAddress; 
    } 
} 
を行う必要があり、このような

何か

関連する問題