Exemplo n.º 1
0
        public async Task Engines_BasicEngine_ShouldSaveState()
        {
            const int jobsterCount = 100;
            MemoryJobsterStateHandler <CoreTestContext> stateHandler = new MemoryJobsterStateHandler <CoreTestContext>(
                new IJobsterAsync <CoreTestContext> [0]);

            _ = await ExecuteOrchestrator(
                jobsterCount,
                jobsterCount,
                false,
                ExceptionPolicy.NoThrow,
                null,
                null,
                stateHandler);

            IJobsterAsync <CoreTestContext>[] stateArray = stateHandler.GetState()?.ToArray();
            Assert.IsNotNull(stateArray);
            Assert.AreEqual(jobsterCount, stateArray.Length);
            Assert.IsEmpty(stateArray
                           .Where(p => p.Status != JobsterStatusEnum.Completed));
        }
Exemplo n.º 2
0
        private async Task <CoreTestContext> ExecuteOrchestrator(
            int jobsterCount,
            int batchSize,
            bool jobsterThrowsExceptionInTheMiddle = false,
            ExceptionPolicy exceptionPolicy        = ExceptionPolicy.NoThrow,
            CoreTestContext context = null,
            IEnumerable <IJobsterAsync <CoreTestContext> > state     = null,
            MemoryJobsterStateHandler <CoreTestContext> stateHandler = null,
            IProgressNotifier <CoreTestContext> progressNotifier     = null)
        {
            context ??= new CoreTestContext();
            int middleJobster = jobsterCount / 2;

            IList <IJobsterAsync <CoreTestContext> > jobsters = new List <IJobsterAsync <CoreTestContext> >(jobsterCount);

            for (int i = 0; i < jobsterCount; i++)
            {
                jobsters.Add(new TestJobster(
                                 context,
                                 jobsterThrowsExceptionInTheMiddle && i == middleJobster));
            }

            JobsterBuilder <CoreTestContext> builder = new JobsterBuilder <CoreTestContext>(_mockLogger)
                                                       .AddBatchSize(batchSize)
                                                       .AddExceptionPolicy(exceptionPolicy)
                                                       .AddJobsters(jobsters.ToArray())
                                                       .AddStateHandler(stateHandler ?? new MemoryJobsterStateHandler <CoreTestContext>(
                                                                            state ?? new IJobsterAsync <CoreTestContext> [0]));

            if (progressNotifier != null)
            {
                builder.AddProgressNotifier(progressNotifier);
            }

            _ = await builder
                .BuildEngine()
                .ScheduleJobstersAsync(_cancellationTokenSource.Token);

            return(context);
        }