public FlowControlledData(DefaultHttp2ConnectionEncoder encoder,
                           IHttp2Stream stream, IByteBuffer buf, int padding, bool endOfStream, IPromise promise, IChannel channel)
     : base(encoder, stream, padding, endOfStream, promise)
 {
     _queue = new CoalescingBufferQueue(channel);
     _queue.Add(buf, promise);
     _dataSize = _queue.ReadableBytes();
 }
        public void Merge()
        {
            writeQueue.Add(cat, catPromise);
            CoalescingBufferQueue otherQueue = new CoalescingBufferQueue(channel);

            otherQueue.Add(mouse, NewFutureListener());
            otherQueue.CopyTo(writeQueue);
            AssertQueueSize(8, false);
            IPromise aggregatePromise = NewPromise();

            Assert.Equal("catmouse", Dequeue(8, aggregatePromise));
            AssertQueueSize(0, true);
            Assert.False(catPromise.IsSuccess);
            Assert.False(mouseDone);
            aggregatePromise.Complete();
            Assert.True(catPromise.IsSuccess);
            Assert.True(mouseSuccess);
            Assert.Equal(0, cat.ReferenceCount);
            Assert.Equal(0, mouse.ReferenceCount);
        }
        public void AddFirstPromiseRetained()
        {
            writeQueue.Add(cat, catPromise);
            AssertQueueSize(3, false);
            writeQueue.Add(mouse, NewFutureListener());
            AssertQueueSize(8, false);
            IPromise aggregatePromise = NewPromise();

            Assert.Equal("catmous", Dequeue(7, aggregatePromise));
            IByteBuffer remainder = Unpooled.WrappedBuffer(Encoding.ASCII.GetBytes("mous"));

            writeQueue.AddFirst(remainder, aggregatePromise);
            IPromise aggregatePromise2 = NewPromise();

            Assert.Equal("mouse", Dequeue(5, aggregatePromise2));
            aggregatePromise2.Complete();
            Assert.True(catPromise.IsSuccess);
            Assert.True(mouseSuccess);
            Assert.Equal(0, cat.ReferenceCount);
            Assert.Equal(0, mouse.ReferenceCount);
        }