public void CanSendGoAwayUsingVoidPromise() { _handler = NewHandler(); IByteBuffer data = DummyData(); var errorCode = Http2Error.InternalError; _handler = NewHandler(); var cause = new Http2RuntimeException("fake exception"); _frameWriter .Setup(x => x.WriteGoAwayAsync( It.IsAny <IChannelHandlerContext>(), It.IsAny <int>(), It.IsAny <Http2Error>(), It.IsAny <IByteBuffer>(), It.IsAny <IPromise>() )) .Returns <IChannelHandlerContext, int, Http2Error, IByteBuffer, IPromise>((c, id, err, buf, p) => { Assert.False(p.IsVoid); // This is what DefaultHttp2FrameWriter does... I hate mocking :-(. var aggregatedPromise = new SimplePromiseAggregator(p); aggregatedPromise.NewPromise(); aggregatedPromise.DoneAllocatingPromises(); aggregatedPromise.SetException(cause); return(aggregatedPromise.Task); }); _handler.GoAwayAsync(_ctx.Object, STREAM_ID, errorCode, data, Http2TestUtil.NewVoidPromise(_channel.Object)); _pipeline.Verify(x => x.FireExceptionCaught(It.Is <Exception>(v => ReferenceEquals(v, cause)))); }
private void WriteRstStreamUsingVoidPromise(int streamId) { _handler = NewHandler(); var cause = new Http2RuntimeException("fake exception"); _stream.Setup(x => x.Id).Returns(STREAM_ID); _frameWriter .Setup(x => x.WriteRstStreamAsync( It.Is <IChannelHandlerContext>(v => v == _ctx.Object), It.Is <int>(v => v == streamId), It.IsAny <Http2Error>(), It.IsAny <IPromise>())) .Returns <IChannelHandlerContext, int, Http2Error, IPromise>((ctx, id, err, p) => { Assert.False(p.IsVoid); p.SetException(cause); return(p.Task); }); _handler.ResetStreamAsync(_ctx.Object, streamId, Http2Error.StreamClosed, Http2TestUtil.NewVoidPromise(_channel.Object)); _frameWriter.Verify( x => x.WriteRstStreamAsync( It.Is <IChannelHandlerContext>(v => v == _ctx.Object), It.Is <int>(v => v == streamId), It.IsAny <Http2Error>(), It.IsAny <IPromise>())); _pipeline.Verify(x => x.FireExceptionCaught(It.Is <Exception>(v => ReferenceEquals(v, cause)))); }