private async void StartProcessing(Object stateInfo)
        {
            _logger.Info("Service starting.");
            _isCompleted = await _listener.ExecuteAsync(this._activeTaskDatabaseIDs, this._globalUpdateTimeStamps);

            _logger.Info("Service MSMQ complete.");
        }
Exemplo n.º 2
0
        private async void StartProcessing(object state)
        {
            _logger.Info("SQL Queue Service is stared.");
            _isCompleted = await _listener.ExecuteAsync();

            _logger.Info("SQL Queue Service finish.");
        }
Exemplo n.º 3
0
        public void ProcessGlobalUpdateMessageProcessing()
        {
            Queue     normalQueue    = new Queue();
            Queue     poisonQueue    = new Queue();
            IListener listener       = null;
            var       messageManager = GetMockMessageManager(normalQueue, poisonQueue, listener);

            var config = new Mock <IAppConfiguration>();

            config.Setup(x => x.GlobalUpdateWaitTime).Returns(10);

            List <string> calledStoredProcedures = new List <string>();
            var           dbManager = GetMockDatabaseManager(calledStoredProcedures);

            var ml  = new Mock <Listener>(new object[] { config.Object, dbManager.Object, messageManager.Object });
            var ipe = new Mock <IPriceEngine>();

            ipe.Setup(x => x.IsEngineEnabled()).Returns(Task.FromResult(false));

            ml.Setup(x => x.GetPriceEngine(It.IsAny <string>())).Returns(ipe.Object);

            ml.SetupSequence(x => x.CanProcess).Returns(true).Returns(false);
            listener = ml.Object;

            Hashtable activeDatabases = new Hashtable();
            Hashtable timestamps      = new Hashtable();
            int       databaseId      = 1;

            //send 1 message to fake queue
            var singleMessage = new UpdateMessage()
            {
                DatabaseID = databaseId, ExternalId = "1", DSN = "testdb", EntityTypeId = 20, Action = (int)MessageActionType.GlobalUpdate, GroupID = 1, ProductID = 1, ArrivedTime = DateTime.UtcNow
            };

            messageManager.Object.mqSend(singleMessage, MessagePriority.High);

            //check do we have message in queue
            normalQueue.Should().NotBeEmpty();
            normalQueue.Should().HaveCount(1, "single item send");

            listener.ExecuteAsync(activeDatabases, timestamps);

            normalQueue.Should().BeEmpty();

            calledStoredProcedures.Should().NotBeEmpty();
            calledStoredProcedures.Should().HaveCount(1);
            calledStoredProcedures.First().Should().Be("sc_calculate_dish_pricing");
        }
Exemplo n.º 4
0
        public void ProcessGlobalUpdateMessageProcessingNewEngine()
        {
            Queue     normalQueue    = new Queue();
            Queue     poisonQueue    = new Queue();
            IListener listener       = null;
            var       messageManager = GetMockMessageManager(normalQueue, poisonQueue, listener);

            var config = new Mock <IAppConfiguration>();

            config.Setup(x => x.GlobalUpdateWaitTime).Returns(10);

            List <string> calledStoredProcedures = new List <string>();
            var           dbManager = GetMockDatabaseManager(calledStoredProcedures);

            bool globalPriceRecalcExec    = false;
            bool productPriceRecalcExec   = false;
            int  productPriceRecalcExecId = 0;

            var ml  = new Mock <Listener>(new object[] { config.Object, dbManager.Object, messageManager.Object });
            var ipe = new Mock <IPriceEngine>();

            ipe.Setup(x => x.IsEngineEnabled()).Returns(Task.FromResult(true));
            ipe.Setup(x => x.GlobalRecalculation(It.IsAny <bool>(), It.IsAny <int>(), It.IsAny <int>(), It.IsAny <int>(), It.IsAny <int>(), It.IsAny <DateTime?>())).Returns(Task.FromResult(new List <Common.Model.DbPrice>().AsEnumerable())).Callback((bool store, int groupid, int pbandid, int psetid, int unitid, DateTime? arriveTime) => { globalPriceRecalcExec = true; });
            ipe.Setup(x => x.Recalculation(It.IsAny <int>(), It.IsAny <int>(), It.IsAny <int>(), It.IsAny <int>(), It.IsAny <int>(), It.IsAny <bool>(), It.IsAny <DateTime?>())).Returns(Task.FromResult(new List <Common.Model.DbPrice>().AsEnumerable())).Callback((int productId, int groupid, int pbandid, int psetid, int unitid, bool store, DateTime? arriveTime) => { productPriceRecalcExec = true; productPriceRecalcExecId = productId; });
            ipe.Setup(x => x.GlobalRecalculation(It.IsAny <bool>(), It.IsAny <DateTime?>())).Returns(Task.FromResult(new List <Common.Model.DbPrice>().AsEnumerable())).Callback((bool store, DateTime? arriveTime) => { globalPriceRecalcExec = true; });
            ipe.Setup(x => x.Recalculation(It.IsAny <int>(), It.IsAny <bool>(), It.IsAny <DateTime?>())).Returns(Task.FromResult(new List <Common.Model.DbPrice>().AsEnumerable())).Callback((int productId, bool store, DateTime? arriveTime) => { productPriceRecalcExec = true; productPriceRecalcExecId = productId; });

            ml.Setup(x => x.GetPriceEngine(It.IsAny <string>())).Returns(ipe.Object);

            ml.SetupSequence(x => x.CanProcess).Returns(true).Returns(false).Returns(true).Returns(false);
            listener = ml.Object;

            Hashtable activeDatabases = new Hashtable();
            Hashtable timestamps      = new Hashtable();
            int       databaseId      = 1;

            //send 1 message to fake queue
            var singleMessage = new UpdateMessage()
            {
                DatabaseID = databaseId, ExternalId = "1", DSN = "testdb", EntityTypeId = 20, Action = (int)MessageActionType.GlobalUpdate, GroupID = 1, ProductID = 1, ArrivedTime = DateTime.UtcNow
            };

            messageManager.Object.mqSend(singleMessage, MessagePriority.High);

            //check do we have message in queue
            normalQueue.Should().NotBeEmpty();
            normalQueue.Should().HaveCount(1, "single item send");

            listener.ExecuteAsync(activeDatabases, timestamps);

            normalQueue.Should().BeEmpty();

            globalPriceRecalcExec.Should().BeTrue();

            calledStoredProcedures.Should().BeEmpty();

            //send 1 message to fake queue
            singleMessage = new UpdateMessage()
            {
                DatabaseID = databaseId, ExternalId = "1", DSN = "testdb", EntityTypeId = 20, Action = (int)MessageActionType.UpdatedProductCost, GroupID = 1, ProductID = 1, ArrivedTime = DateTime.UtcNow
            };
            messageManager.Object.mqSend(singleMessage, MessagePriority.High);

            //check do we have message in queue
            normalQueue.Should().NotBeEmpty();
            normalQueue.Should().HaveCount(1, "single item send");
            listener = ml.Object;
            listener.ExecuteAsync(activeDatabases, timestamps);

            normalQueue.Should().BeEmpty();

            productPriceRecalcExec.Should().BeTrue();
            productPriceRecalcExecId.Should().Be(1);

            calledStoredProcedures.Should().BeEmpty();
        }