예제 #1
0
        public void If_AsDateRange_ForceBlock_ThenBlockGetsReprocessedAndDequeued()
        {
            // ARRANGE
            var fromDate = DateTime.UtcNow.AddHours(-12);
            var toDate   = DateTime.UtcNow;

            // create a block
            bool startedOk;

            using (var executionContext = CreateTaskExecutionContext())
            {
                startedOk = executionContext.TryStart();
                if (startedOk)
                {
                    var maxBlockRange = new TimeSpan(24, 0, 0);
                    var rangeBlocks   = executionContext.GetDateRangeBlocks(x => x.WithRange(fromDate, toDate, maxBlockRange));
                    foreach (var rangeBlock in rangeBlocks)
                    {
                        rangeBlock.Start();
                        rangeBlock.Complete();
                    }
                }
            }

            // add this processed block to the forced queue
            var lastBlockId = _blocksHelper.GetLastBlockId(TestConstants.ApplicationName, TestConstants.TaskName);

            _blocksHelper.EnqueueForcedBlock(lastBlockId);

            // ACT - reprocess the forced block
            using (var executionContext = CreateTaskExecutionContext())
            {
                startedOk = executionContext.TryStart();
                if (startedOk)
                {
                    var rangeBlocks = executionContext.GetDateRangeBlocks(x => x.OnlyOldDateBlocks());
                    Assert.AreEqual(1, rangeBlocks.Count);
                    Assert.AreEqual(fromDate.ToString("yyyyMMdd HH:mm:ss"), rangeBlocks[0].DateRangeBlock.StartDate.ToString("yyyyMMdd HH:mm:ss"));
                    Assert.AreEqual(toDate.ToString("yyyyMMdd HH:mm:ss"), rangeBlocks[0].DateRangeBlock.EndDate.ToString("yyyyMMdd HH:mm:ss"));
                    foreach (var rangeBlock in rangeBlocks)
                    {
                        rangeBlock.Start();
                        rangeBlock.Complete();
                    }
                }
            }

            // The forced block will have been dequeued so it should not be processed again
            using (var executionContext = CreateTaskExecutionContext())
            {
                startedOk = executionContext.TryStart();
                if (startedOk)
                {
                    var rangeBlocks = executionContext.GetDateRangeBlocks(x => x.OnlyOldDateBlocks());
                    Assert.AreEqual(0, rangeBlocks.Count);
                }
            }
        }
        public void If_ForceBlock_ThenBlockGetsReprocessedAndDequeued()
        {
            // ARRANGE
            var fromDate = DateTime.UtcNow.AddHours(-12);
            var toDate   = DateTime.UtcNow;

            // create a block
            bool startedOk;

            using (var executionContext = CreateTaskExecutionContext())
            {
                startedOk = executionContext.TryStart();
                if (startedOk)
                {
                    var blocks = executionContext.GetObjectBlocks <string>(x => x.WithObject("Testing Hello"));
                    foreach (var block in blocks)
                    {
                        block.Start();
                        block.Complete();
                    }
                }
            }

            // add this processed block to the forced queue
            var lastBlockId = _blocksHelper.GetLastBlockId(TestConstants.ApplicationName, TestConstants.TaskName);

            _blocksHelper.EnqueueForcedBlock(lastBlockId);

            // ACT - reprocess the forced block
            using (var executionContext = CreateTaskExecutionContext())
            {
                startedOk = executionContext.TryStart();
                if (startedOk)
                {
                    var blocks = executionContext.GetObjectBlocks <string>(x => x.WithObject("Testing Goodbye"));
                    Assert.AreEqual(2, blocks.Count);
                    Assert.AreEqual("Testing Hello", blocks[0].Block.Object);
                    Assert.AreEqual("Testing Goodbye", blocks[1].Block.Object);
                    foreach (var block in blocks)
                    {
                        block.Start();
                        block.Complete();
                    }
                }
            }

            // The forced block will have been dequeued so it should not be processed again
            using (var executionContext = CreateTaskExecutionContext())
            {
                startedOk = executionContext.TryStart();
                if (startedOk)
                {
                    var blocks = executionContext.GetObjectBlocks <string>(x => x.WithNoNewBlocks());
                    Assert.AreEqual(0, blocks.Count);
                }
            }
        }