コード例 #1
0
        public void ReceiveMessages_ExeQueryFirstParamIsDBNull_ObserverOnNextNotCalled()
        {
            var mocks           = CreateMocks();
            var mockConnection  = mocks.Item1;
            var mockTransaction = mocks.Item2;
            var mockCommand     = mocks.Item3;
            var mockParams      = mocks.Item4;
            var mockObserver    = CreateMockObserver();
            var client          = new BrokerClient(() => mockConnection.Object, _mockOpenAsync.Object, _mockExeNonQueryAsync.Object);

            mockConnection.Setup(c => c.Dispose()).Callback(() => _wait.Set());
            mockParams.Setup(p => p[It.IsAny <int>()])
            .Callback(() => new SqlParameter("", DBNull.Value));

            client.Subscribe(mockObserver.Object);
            var running = client.ReceiveMessages(QueueName);

            _wait.WaitOne();
            running.StopReceiving();

            mockObserver.Verify(o => o.OnNext(It.Is <BrokerMessage>(msg => msg == BrokerMessage.Empty)), Times.Never());

            ExpectReceiveMessage(mocks);
            ExpectAllDisposed(mocks);
        }
コード例 #2
0
        public void ReceiveMessages_SBEndDialogMessageReceived_EndDialogCalled()
        {
            var mockObserver   = CreateMockObserver();
            var mocks          = CreateMocks(ServiceBrokerEndDialogMessageType);
            var mockConnection = mocks.Item1;
            var mockCommand    = mocks.Item3;
            var mockParams     = mocks.Item4;

            mockConnection.Setup(c => c.Dispose()).Callback(fun(() =>
            {
                var count = 0;

                return(new Action(() =>
                {
                    if (++count == 2)
                    {
                        _wait.Set();
                    }
                }));
            })());

            var client = new BrokerClient(() => mocks.Item1.Object, _mockOpenAsync.Object, _mockExeNonQueryAsync.Object);

            client.Subscribe(mockObserver.Object);
            var running = client.ReceiveMessages(QueueName);

            _wait.WaitOne();
            running.StopReceiving();

            ExpectEndDialog(mocks);
            ExpectAllDisposed(mocks);
        }
コード例 #3
0
        public void StopReceiving_NoErrors_ResultIsNotFailure_SubscribersCleared()
        {
            var mocks      = CreateMocks();
            var mockLogger = new Mock <Log>();

            var client = new BrokerClient(
                () => mocks.Item1.Object,
                _mockOpenAsync.Object,
                _mockExeNonQueryAsync.Object,
                mockLogger.Object);

            var mockObserver1 = CreateMockObserver();

            mockObserver1.Setup(f => f.OnCompleted()).Throws <InvalidOperationException>();
            var mockObserver2 = CreateMockObserver();

            client.Subscribe(mockObserver1.Object);
            client.Subscribe(mockObserver2.Object);

            Expect(client.ReceiveMessages(QueueName).StopReceiving().Failed, True);
            Expect(client.Subscribers.Count, EqualTo(0));

            mockObserver1.Verify(o => o.OnCompleted(), Times.Once());
            mockObserver2.Verify(o => o.OnCompleted(), Times.Once());
            mockLogger.Verify(f => f(It.IsRegex("Receiver stopped"), It.IsAny <string>(), It.IsAny <TraceEventType>()), Times.Once());
        }
コード例 #4
0
        public void ReceiveMessages_SBErrorMessageReceived_ObserversOnErrorsCalled()
        {
            var mockObserver = CreateMockObserver();

            mockObserver.Setup(o => o.OnError(It.IsAny <Exception>(), It.IsAny <Maybe <BrokerMessage> >())).Callback(() => _wait.Set());

            var mocks  = CreateMocks(ServiceBrokerErrorMessageType);
            var client = new BrokerClient(() => mocks.Item1.Object, _mockOpenAsync.Object, _mockExeNonQueryAsync.Object);

            client.Subscribe(mockObserver.Object);
            var running = client.ReceiveMessages(QueueName);

            _wait.WaitOne();
            running.StopReceiving();

            mockObserver.Verify(o => o.OnError(It.Is <Exception>(e => e.Message == MessageText), It.IsAny <Maybe <BrokerMessage> >()));

            ExpectAll(mocks);
        }
コード例 #5
0
        public void ReceiveMessages_ObserverOnErrorErrors_ErrorLogged()
        {
            var mockLogger = new Mock <Log>();

            mockLogger
            .Setup(f => f(It.IsAny <string>(), GeneralLogCategory, It.Is <TraceEventType>(t => t == TraceEventType.Error)))
            .Callback(() => _wait.Set());

            var mocks          = CreateMocks();
            var mockConnection = mocks.Item1;

            var client = new BrokerClient(
                () => mockConnection.Object,
                _mockOpenAsync.Object,
                _mockExeNonQueryAsync.Object,
                mockLogger.Object);

            var mockObserver = CreateMockObserver();

            mockObserver.SetupSequence(o => o.OnNext(It.IsAny <BrokerMessage>()))
            .Throws(new Exception(FailVal))
            .Throws(new Exception($"{FailVal} 2"))
            .Pass();

            mockObserver.SetupSequence(o => o.OnError(It.IsAny <Exception>(), It.IsAny <Maybe <BrokerMessage> >()))
            .Pass()
            .Throws(new Exception("OnError Fail"));

            client.Subscribe(mockObserver.Object);
            var running = client.ReceiveMessages("TestQueue");

            _wait.WaitOne();
            running.StopReceiving();

            mockObserver.Verify(o => o.OnError(It.Is <Exception>(e => e.Message == FailVal), It.IsAny <Maybe <BrokerMessage> >()));
            mockLogger.Verify(l => l(It.IsRegex($"{FailVal} 2"), GeneralLogCategory, TraceEventType.Error));

            ExpectAll(mocks);
        }
コード例 #6
0
        public void ReceiveMessages_CommandCorrect_ObserversOnNextCalled()
        {
            var mocks          = CreateMocks(MessageType);
            var mockConnection = mocks.Item1;
            var mockObserver   = CreateMockObserver();

            mockObserver.Setup(o => o.OnNext(It.IsAny <BrokerMessage>()))
            .Callback(() => _wait.Set());

            var client = new BrokerClient(
                () => mockConnection.Object,
                _mockOpenAsync.Object,
                _mockExeNonQueryAsync.Object);

            client.Subscribe(mockObserver.Object);
            var running = client.ReceiveMessages(QueueName);

            _wait.WaitOne();
            running.StopReceiving();

            mockObserver.Verify(o => o.OnNext(It.Is <BrokerMessage>(m => m.MessageType == MessageType)));

            ExpectAll(mocks);
        }