Exemplo n.º 1
0
        public void Send_AutoFlushIsOn_LimitedBuffer_AsyncExecution_DataSentCorrectly()
        {
            _bufferFromPool = new byte[5];
            _buffersPool.Setup(b => b.TryGet(out _bufferFromPool, It.IsAny <Action <byte[]> >()))
            .Returns(true);
            var actual = "";

            _asyncSocket.Setup(s => s.Send(It.IsAny <AsyncSocketEventArgs>()))
            .Callback((AsyncSocketEventArgs a) =>
            {
                actual += ConvertToString(a.BufferList[0].Array, a.BufferList[0].Count);
                a.Completed(a);
            })
            .Returns(true);

            var args = new SenderAsyncEventArgs();

            args.DataToSend = _dataToSend;
            args.Completed  = s => { };
            var sender = CreateSender();

            sender.Send(args);

            Assert.AreEqual(_expectedSentData, actual);
        }
Exemplo n.º 2
0
 private void BufferFlushProcessDone(bool async, SenderAsyncEventArgs args)
 {
     _pipelineException = args.Error;
     if (async)
     {
         RunSendProcess();
     }
 }
Exemplo n.º 3
0
        public void Send_AutoFlushIsOff_FillsBufferWithRedisArgumentsAmmountLine()
        {
            var args = new SenderAsyncEventArgs();
            args.DataToSend = _dataToSend;
            var sender = CreateSender(autoFlush: false);
            sender.Send(args);

            _asyncSocket.Verify(s => s.Send(It.IsAny<AsyncSocketEventArgs>()), Times.Never());
        }
Exemplo n.º 4
0
        public void Send_AutoFlushIsOff_FillsBufferWithRedisArgumentsAmmountLine()
        {
            var args = new SenderAsyncEventArgs();

            args.DataToSend = _dataToSend;
            var sender = CreateSender(autoFlush: false);

            sender.Send(args);

            _asyncSocket.Verify(s => s.Send(It.IsAny <AsyncSocketEventArgs>()), Times.Never());
        }
Exemplo n.º 5
0
 public void Send_AutoFlushIsOff_IfBufferIsFullThenWritingArrayItem()
 {
     _bufferFromPool = new byte[10];
     _buffersPool.Setup(b => b.TryGet(out _bufferFromPool, It.IsAny<Action<byte[]>>()))
             .Returns(true);
     var expectedLine = "*3\r\n$9\r\nFi";
     string actual = null;
     _asyncSocket.Setup(s => s.Send(It.IsAny<AsyncSocketEventArgs>()))
                 .Callback((AsyncSocketEventArgs a) => { actual = actual ?? ConvertToString(a.BufferList[0].Array, a.BufferList[0].Count); });
     var args = new SenderAsyncEventArgs();
     args.DataToSend = _dataToSend;
     var sender = CreateSender();
     sender.Send(args);
     Assert.AreEqual(expectedLine, actual);
 }
Exemplo n.º 6
0
        public void Send_DataSentCorrectly()
        {
            var args = new SenderAsyncEventArgs();

            byte[] actualBuffer = null;
            _asyncSocket.Setup(s => s.Send(It.IsAny <AsyncSocketEventArgs>())).Callback(
                (AsyncSocketEventArgs a) => { actualBuffer = a.BufferList[0].Array; });

            args.DataToSend = _dataToSend;

            var sender = CreateSender();

            sender.Send(args);

            Assert.IsTrue(ArrayIsEqualTo(actualBuffer, _expectedSentData));
        }
Exemplo n.º 7
0
        public void Flush()
        {
            byte[] actualBuffer = null;
            _asyncSocket.Setup(s => s.Send(It.IsAny<AsyncSocketEventArgs>())).Callback(
                (AsyncSocketEventArgs a) => { actualBuffer = a.BufferList[0].Array; });

            var args = new SenderAsyncEventArgs();
            args.DataToSend = _dataToSend;

            var sender = CreateSender(autoFlush: false);

            sender.Send(args);
            sender.Flush(args);

            Assert.IsTrue(ArrayIsEqualTo(actualBuffer, _expectedSentData));
        }
Exemplo n.º 8
0
        public void Send_AutoFlushIsOff_IfBufferIsFullThenWritingArrayItem()
        {
            _bufferFromPool = new byte[10];
            _buffersPool.Setup(b => b.TryGet(out _bufferFromPool, It.IsAny <Action <byte[]> >()))
            .Returns(true);
            var    expectedLine = "*3\r\n$9\r\nFi";
            string actual       = null;

            _asyncSocket.Setup(s => s.Send(It.IsAny <AsyncSocketEventArgs>()))
            .Callback((AsyncSocketEventArgs a) => { actual = actual ?? ConvertToString(a.BufferList[0].Array, a.BufferList[0].Count); });
            var args = new SenderAsyncEventArgs();

            args.DataToSend = _dataToSend;
            var sender = CreateSender();

            sender.Send(args);
            Assert.AreEqual(expectedLine, actual);
        }
Exemplo n.º 9
0
        public void Send_SocketAsyncExecution_CallbackIsNotCalled()
        {
            var called = false;

            _asyncSocket.Setup(s => s.Send(It.IsAny <AsyncSocketEventArgs>()))
            .Callback((AsyncSocketEventArgs a) => a.Completed(a))
            .Returns(true);

            var args = new SenderAsyncEventArgs();

            args.DataToSend = _dataToSend;
            args.Completed  = a => { called = true; };

            var sender = CreateSender();

            sender.Send(args);

            Assert.IsFalse(called);
        }
Exemplo n.º 10
0
        private void ItemSendProcessDone(bool async, SenderAsyncEventArgs args)
        {
            _pipelineException = args.Error;

            if (_pipelineException != null)
            {
                _currentSendItem.CallBack(_pipelineException, null);
            }
            else if (!_currentSendItem.IsOneWay)
            {
                _responsesQueue.Enqueue(_currentSendItem);
                TryRunReceiveProcess();
            }
            else
            {
                _currentSendItem.CallBack(null, null);
            }

            if (async)
            {
                RunSendProcess();
            }
        }
Exemplo n.º 11
0
 private void BufferFlushProcessDone(SenderAsyncEventArgs args)
 {
     BufferFlushProcessDone(true,args);
 }
Exemplo n.º 12
0
        public bool Flush(SenderAsyncEventArgs args)
        {
            if (_socketException != null)
            {
                args.Error = _socketException;
                return false;
            }
            if (_writingBufferIsFlushed == 0)
            {
                _sendingQueue.Enqueue(new ArraySegment<byte>(_writingBuffer, 0, _writingOffset));
                Interlocked.Exchange(ref _writingBufferIsFlushed, 1);
            }

            EnterFlushing();
            return false;
        }
Exemplo n.º 13
0
 private void BufferFlushProcessDone(SenderAsyncEventArgs args)
 {
     BufferFlushProcessDone(true, args);
 }
Exemplo n.º 14
0
 private void SendDataTask(SenderAsyncEventArgs args)
 {
     SendDataTask(true, args);
 }
Exemplo n.º 15
0
        private bool SendDataTask(bool async, SenderAsyncEventArgs args)
        {
            var context = (SenderContext)args.UserToken;

            TryAgain:

            if (context.EventArgs.HasError)
                return CallOnSendCompleted(async, context);

            if (context.SendState == 0)
            {
                var writeResult = WriteArgumentsCountLine(context.EventArgs.DataToSend.Length);
                if (!writeResult.HasValue) return true;
                if (!writeResult.Value)
                {
                    if (Flush(context.EventArgs)) return true;
                    goto TryAgain;
                }
                context.SendState = 1;
            }

            if (context.SendState > 0 && context.SendState < 4)
            {
                for (; context.PartIndex < context.EventArgs.DataToSend.Length; context.PartIndex++)
                {
                    if (context.SendState == 1)
                    {
                        var writeResult = WriteDataSizeLine(context.EventArgs.DataToSend[context.PartIndex].Length);
                        if (!writeResult.HasValue) return true;
                        if (!writeResult.Value)
                        {
                            if (Flush(context.EventArgs)) return true;
                            goto TryAgain;
                        }
                        context.SendState = 2;
                        context.ArraySegment = new ArraySegment<byte>(context.EventArgs.DataToSend[context.PartIndex], 0,
                                                                      context.EventArgs.DataToSend[context.PartIndex].Length);
                    }

                    if (context.SendState == 2)
                    {
                        var writeResult = WriteData(context.ArraySegment);
                        if (!writeResult.HasValue) return true;
                        context.ArraySegment = writeResult.Value;
                        if (context.ArraySegment.Count > 0)
                        {
                            if (Flush(context.EventArgs)) return true;
                            goto TryAgain;
                        }

                        context.SendState = 3;
                    }

                    if (context.SendState == 3)
                    {
                        var writeResult = WriteNewLineToBuffer();
                        if (!writeResult.HasValue) return true;
                        if (!writeResult.Value)
                        {
                            if (Flush(context.EventArgs)) return true;
                            goto TryAgain;
                        }
                        context.SendState = 1;
                    }
                }
            }

            if (context.SendState != 4 && _autoFlush)
            {
                context.SendState = 4;
                if (Flush(context.EventArgs)) return true;
                goto TryAgain;
            }

            return CallOnSendCompleted(async, context);
        }
Exemplo n.º 16
0
        public bool Send(SenderAsyncEventArgs args)
        {
            args.Error = _socketException;

            _senderContext.SendState = 0;
            _senderContext.PartIndex = 0;
            _senderContext.EventArgs = args;
            _senderContext.CallBack = args.Completed;

            args.Completed = SendDataTask;
            args.UserToken = _senderContext;

            return SendDataTask(false, args);
        }
Exemplo n.º 17
0
        private void ItemSendProcessDone(bool async, SenderAsyncEventArgs args)
        {
            _pipelineException = args.Error;

            if (_pipelineException != null)
                _currentSendItem.CallBack(_pipelineException, null);
            else if (!_currentSendItem.IsOneWay)
            {
                _responsesQueue.Enqueue(_currentSendItem);
                TryRunReceiveProcess();
            }
            else _currentSendItem.CallBack(null, null);

            if (async) RunSendProcess();
        }
Exemplo n.º 18
0
 private void ItemSendProcessDone(SenderAsyncEventArgs args)
 {
     ItemSendProcessDone(true, args);
 }
Exemplo n.º 19
0
        public void Send_SocketAsyncExecution_CallbackIsNotCalled()
        {
            var called = false;
            _asyncSocket.Setup(s => s.Send(It.IsAny<AsyncSocketEventArgs>()))
                .Callback((AsyncSocketEventArgs a) =>a.Completed(a))
                .Returns(true);

            var args = new SenderAsyncEventArgs();
            args.DataToSend = _dataToSend;
            args.Completed = a => { called = true; };

            var sender = CreateSender();

            sender.Send(args);

            Assert.IsFalse(called);
        }
Exemplo n.º 20
0
 private void ItemSendProcessDone(SenderAsyncEventArgs args)
 {
     ItemSendProcessDone(true, args);
 }
Exemplo n.º 21
0
 private void BufferFlushProcessDone(bool async, SenderAsyncEventArgs args)
 {
     _pipelineException = args.Error;
     if (async) RunSendProcess();
 }
Exemplo n.º 22
0
        public void Send_AutoFlushIsOn_LimitedBuffer_SyncExecution_DataSentCorrectly()
        {
            _bufferFromPool = new byte[5];
            _buffersPool.Setup(b => b.TryGet(out _bufferFromPool, It.IsAny<Action<byte[]>>()))
                    .Returns(true);
            var actual = "";
            _asyncSocket.Setup(s => s.Send(It.IsAny<AsyncSocketEventArgs>()))
                .Callback((AsyncSocketEventArgs a) =>
                {
                    actual += ConvertToString(a.BufferList[0].Array, a.BufferList[0].Count);
                })
                .Returns(false);

            var args = new SenderAsyncEventArgs();
            args.DataToSend = _dataToSend;
            args.Completed = s => { };
            var sender = CreateSender();
            sender.Send(args);

            Assert.AreEqual(_expectedSentData, actual);
        }