Exemplo n.º 1
0
        public async Task Publishes_JobFinished_When_Job_Finished_And_Recorded_DC_Failure()
        {
            job.DcJobSucceeded = false;
            var completedMessage = new CompletedMessage
            {
                MessageId     = Guid.NewGuid(),
                JobId         = job.Id,
                Succeeded     = true,
                CompletedTime = DateTimeOffset.UtcNow
            };
            var inProgressMessage = new InProgressMessage
            {
                MessageId = completedMessage.MessageId, MessageName = "Message"
            };

            inProgressMessages.Add(inProgressMessage);
            completedMessages.Add(completedMessage);
            mocker.Mock <IJobStorageService>()
            .Setup(x => x.GetJobStatus(It.IsAny <long>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync((hasFailedMessages: false, endTime: DateTimeOffset.UtcNow.AddSeconds(-10)));

            var service = mocker.Create <EarningsJobStatusService>();
            await service.ManageStatus(job.Id, CancellationToken.None).ConfigureAwait(false);

            mocker.Mock <IJobStatusEventPublisher>()
            .Verify(publisher => publisher.SubmissionFinished(It.Is <bool>(succeeded => !succeeded),
                                                              It.Is <long>(id => id == job.DcJobId),
                                                              It.Is <long>(ukprn => ukprn == job.Ukprn),
                                                              It.Is <short>(academicYEar => academicYEar == job.AcademicYear),
                                                              It.Is <byte>(collectionPeriod => collectionPeriod == job.CollectionPeriod),
                                                              It.Is <DateTime>(ilrSubmissionTIme => ilrSubmissionTIme == job.IlrSubmissionTime)), Times.Once);
        }
Exemplo n.º 2
0
        public async Task Removes_Completed_Job_Messages_From_Cache()
        {
            var jobId = 99;
            var completedMessageId = Guid.NewGuid();
            var inProgress         = new InProgressMessage {
                MessageId = completedMessageId
            };

            inProgressMessages.Add(inProgress);
            completedMessages.Add(new CompletedMessage
            {
                MessageId = completedMessageId, JobId = jobId, Succeeded = true, CompletedTime = DateTimeOffset.UtcNow
            });
            var service = mocker.Create <EarningsJobStatusService>();
            await service.ManageStatus(jobId, CancellationToken.None).ConfigureAwait(false);

            mocker.Mock <IJobStorageService>()
            .Verify(svc => svc.RemoveInProgressMessages(It.Is <long>(id => id == jobId),
                                                        It.Is <List <Guid> >(identifiers =>
                                                                             identifiers.Count == 1 && identifiers.Contains(completedMessageId)),
                                                        It.IsAny <CancellationToken>()), Times.Once);
            mocker.Mock <IJobStorageService>()
            .Verify(svc => svc.RemoveCompletedMessages(It.Is <long>(id => id == jobId),
                                                       It.Is <List <Guid> >(identifiers =>
                                                                            identifiers.Count == 1 && identifiers.Contains(completedMessageId)),
                                                       It.IsAny <CancellationToken>()), Times.Once);
        }
Exemplo n.º 3
0
        public async Task Records_Job_Completed_With_Errors()
        {
            var jobId            = 99;
            var completedMessage = new CompletedMessage
            {
                MessageId     = Guid.NewGuid(),
                JobId         = job.Id,
                Succeeded     = true,
                CompletedTime = DateTimeOffset.UtcNow
            };
            var inProgressMessage = new InProgressMessage
            {
                MessageId = completedMessage.MessageId, MessageName = "Message"
            };

            inProgressMessages.Add(inProgressMessage);
            completedMessages.Add(completedMessage);
            mocker.Mock <IJobStorageService>()
            .Setup(x => x.GetJobStatus(It.IsAny <long>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync((hasFailedMessages: true, endTime: DateTimeOffset.UtcNow.AddSeconds(-10)));

            var service = mocker.Create <EarningsJobStatusService>();
            await service.ManageStatus(jobId, CancellationToken.None).ConfigureAwait(false);

            mocker.Mock <IJobStorageService>()
            .Verify(
                x => x.SaveJobStatus(It.Is <long>(id => id == jobId),
                                     It.Is <JobStatus>(status => status == JobStatus.CompletedWithErrors),
                                     It.Is <DateTimeOffset>(endTime => endTime == completedMessage.CompletedTime),
                                     It.IsAny <CancellationToken>()), Times.Once());
        }
Exemplo n.º 4
0
        public async Task Records_DataLocks_Completion_Time_After_Processing_DataLocks_Events(string messageName)
        {
            var jobId            = 99;
            var completedMessage = new CompletedMessage
            {
                MessageId     = Guid.NewGuid(),
                JobId         = job.Id,
                Succeeded     = true,
                CompletedTime = DateTimeOffset.UtcNow,
            };

            var inProgressMessage = new InProgressMessage
            {
                MessageName = messageName, MessageId = completedMessage.MessageId
            };

            inProgressMessages.Add(inProgressMessage);
            completedMessages.Add(completedMessage);
            mocker.Mock <IJobStorageService>()
            .Setup(x => x.GetJobStatus(It.IsAny <long>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync((hasFailedMessages: false, endTime: DateTimeOffset.UtcNow.AddSeconds(-10)));

            var service = mocker.Create <EarningsJobStatusService>();
            await service.ManageStatus(jobId, CancellationToken.None).ConfigureAwait(false);

            mocker.Mock <IJobStorageService>()
            .Verify(
                x => x.SaveDataLocksCompletionTime(It.Is <long>(id => id == jobId),
                                                   It.Is <DateTimeOffset>(endTime => endTime == completedMessage.CompletedTime),
                                                   It.IsAny <CancellationToken>()), Times.Once());
        }
Exemplo n.º 5
0
        public async Task Stores_Latest_Message_Completion_Time()
        {
            var jobId            = 99;
            var completedMessage = new CompletedMessage
            {
                MessageId     = Guid.NewGuid(),
                JobId         = job.Id,
                Succeeded     = true,
                CompletedTime = DateTimeOffset.UtcNow
            };
            var inProgressMessage = new InProgressMessage {
                MessageId = completedMessage.MessageId
            };

            inProgressMessages.Add(inProgressMessage);
            completedMessages.Add(completedMessage);
            mocker.Mock <IJobStorageService>()
            .Setup(x => x.GetJobStatus(It.IsAny <long>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync((hasFailedMessages: false, endTime: DateTimeOffset.UtcNow.AddSeconds(-10)));

            var service = mocker.Create <EarningsJobStatusService>();
            await service.ManageStatus(jobId, CancellationToken.None).ConfigureAwait(false);

            mocker.Mock <IJobStorageService>()
            .Verify(
                x => x.StoreJobStatus(It.Is <long>(id => id == jobId), It.IsAny <bool>(),
                                      It.Is <DateTimeOffset?>(endTime => endTime.Value == completedMessage.CompletedTime),
                                      It.IsAny <CancellationToken>()), Times.Once);
        }
Exemplo n.º 6
0
        public async Task Does_Not_Return_Finished_If_All_Messages_Completed_But_DC_Not_Confirmed_Completed()
        {
            var jobId = 99;

            job.DcJobEndTime   = null;
            job.DcJobSucceeded = null;
            var completedMessage = new CompletedMessage
            {
                MessageId     = Guid.NewGuid(),
                JobId         = job.Id,
                Succeeded     = true,
                CompletedTime = DateTimeOffset.UtcNow
            };
            var inProgressMessage = new InProgressMessage
            {
                MessageId = completedMessage.MessageId, MessageName = "Message"
            };

            inProgressMessages.Add(inProgressMessage);
            completedMessages.Add(completedMessage);
            mocker.Mock <IJobStorageService>()
            .Setup(x => x.GetJobStatus(It.IsAny <long>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync((hasFailedMessages: false, endTime: DateTimeOffset.UtcNow.AddSeconds(-10)));

            var service  = mocker.Create <EarningsJobStatusService>();
            var finished = await service.ManageStatus(jobId, CancellationToken.None).ConfigureAwait(false);

            finished.Should().BeFalse();
        }
Exemplo n.º 7
0
        public async Task Publishes_PeriodEndJobFinished_with_SUCCESS_When_PeriodEndJob_Finishes(JobType jobType)
        {
            job.JobType        = jobType;
            job.DcJobSucceeded = null;

            var completedMessage = new CompletedMessage
            {
                MessageId     = Guid.NewGuid(),
                JobId         = job.Id,
                Succeeded     = true,
                CompletedTime = DateTimeOffset.UtcNow
            };
            var inProgressMessage = new InProgressMessage {
                MessageId = completedMessage.MessageId, MessageName = "Message"
            };

            inProgressMessages.Add(inProgressMessage);
            completedMessages.Add(completedMessage);
            mocker.Mock <IJobStorageService>()
            .Setup(x => x.GetJobStatus(It.IsAny <long>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync((hasFailedMessages: false, endTime: DateTimeOffset.UtcNow.AddSeconds(-10)));

            var service = mocker.Create <PeriodEndJobStatusService>();
            await service.ManageStatus(job.Id, CancellationToken.None).ConfigureAwait(false);

            mocker.Mock <IJobStatusEventPublisher>()
            .Verify(publisher => publisher.PeriodEndJobFinished(It.Is <JobModel>(jobModel => jobModel == job)
                                                                , It.Is <bool>(b => b == true)), Times.Once);
            mocker.Mock <IJobStatusEventPublisher>()

            .Verify(publisher => publisher.PeriodEndJobFinished(It.Is <JobModel>(jobModel => jobModel == job)
                                                                , It.Is <bool>(b => b == false)), Times.Never);
        }
        public async Task Does_Not_record_Job_As_Completed_If_No_Learners_And_Not_Earnings_Job()
        {
            var jobId = 99;

            job.LearnerCount = 0;
            job.JobType      = JobType.PeriodEndRunJob;
            var completedMessage = new CompletedMessage
            {
                MessageId     = Guid.NewGuid(),
                JobId         = job.Id,
                Succeeded     = true,
                CompletedTime = DateTimeOffset.UtcNow
            };
            var inProgressMessage = new InProgressMessage {
                MessageId = completedMessage.MessageId, MessageName = "Message"
            };

            inProgressMessages.Add(inProgressMessage);
            inProgressMessages.Add(new InProgressMessage {
                MessageId = Guid.NewGuid(), MessageName = "Message"
            });
            completedMessages.Add(completedMessage);

            var service = mocker.Create <JobStatusService>();
            await service.ManageStatus(jobId, CancellationToken.None).ConfigureAwait(false);

            mocker.Mock <IJobStorageService>()
            .Verify(
                x => x.SaveJobStatus(It.IsAny <long>(),
                                     It.IsAny <JobStatus>(),
                                     It.IsAny <DateTimeOffset>(),
                                     It.IsAny <CancellationToken>()), Times.Never);
        }
        public async Task Records_Earnings_Job_As_Completed_If_No_Learners()
        {
            var jobId = 99;

            job.LearnerCount = 0;
            var completedMessage = new CompletedMessage
            {
                MessageId     = Guid.NewGuid(),
                JobId         = job.Id,
                Succeeded     = true,
                CompletedTime = DateTimeOffset.UtcNow
            };
            var inProgressMessage = new InProgressMessage {
                MessageId = completedMessage.MessageId, MessageName = "Message"
            };

            inProgressMessages.Add(inProgressMessage);
            inProgressMessages.Add(new InProgressMessage {
                MessageId = Guid.NewGuid(), MessageName = "Message"
            });
            completedMessages.Add(completedMessage);

            var service = mocker.Create <JobStatusService>();
            await service.ManageStatus(jobId, CancellationToken.None).ConfigureAwait(false);

            mocker.Mock <IJobStorageService>()
            .Verify(
                x => x.SaveJobStatus(It.Is <long>(id => id == jobId),
                                     It.Is <JobStatus>(status => status == JobStatus.Completed),
                                     It.Is <DateTimeOffset>(endTime => endTime == job.StartTime),
                                     It.IsAny <CancellationToken>()), Times.Once());
        }
Exemplo n.º 10
0
        public async Task Returns_False_And_Does_Not_Publishes_PeriodEndJobFinished_When_DAS_InProgress_DCStatus_Null_OutstandingJobs_found()
        {
            job.JobType        = JobType.PeriodEndStartJob;
            job.DcJobSucceeded = null;

            var completedMessage = new CompletedMessage
            {
                MessageId     = Guid.NewGuid(),
                JobId         = job.Id,
                Succeeded     = true,
                CompletedTime = DateTimeOffset.UtcNow
            };
            var inProgressMessage = new InProgressMessage {
                MessageId = completedMessage.MessageId, MessageName = "Message"
            };

            inProgressMessages.Add(inProgressMessage);
            completedMessages.Add(completedMessage);
            mocker.Mock <IJobStorageService>()
            .Setup(x => x.GetJobStatus(It.IsAny <long>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync((hasFailedMessages: false, endTime: DateTimeOffset.UtcNow.AddSeconds(-10)));

            mocker.Mock <IJobsDataContext>()
            .Setup(x => x.GetOutstandingOrTimedOutJobs(It.IsAny <JobModel>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(new List <OutstandingJobResult>
            {
                new OutstandingJobResult {
                    DcJobId = 1, DcJobSucceeded = null, JobStatus = JobStatus.InProgress
                }
            });

            var service = mocker.Create <PeriodEndStartJobStatusService>();
            var result  = await service.ManageStatus(job.Id, CancellationToken.None).ConfigureAwait(false);

            mocker.Mock <IJobStatusEventPublisher>()
            .Verify(publisher => publisher.PeriodEndJobFinished(It.Is <JobModel>(jobModel => jobModel == job),
                                                                It.IsAny <bool>()), Times.Never);

            result.Should().BeFalse();

            mocker.Mock <ITelemetry>().Verify(t => t.TrackEvent(
                                                  "PeriodEndStart Job Status Update",
                                                  It.Is <Dictionary <string, string> >(d =>
                                                                                       d.Contains(new KeyValuePair <string, string>("InProgressJobsCount", "1"))),
                                                  It.IsAny <Dictionary <string, double> >()));
        }
Exemplo n.º 11
0
        public async Task Publishes_PeriodEndJobFinished_with_SUCCESS_When_All_OutstandingJobs_are_Completed()
        {
            job.JobType        = JobType.PeriodEndStartJob;
            job.DcJobSucceeded = null;

            var completedMessage = new CompletedMessage
            {
                MessageId     = Guid.NewGuid(),
                JobId         = job.Id,
                Succeeded     = true,
                CompletedTime = DateTimeOffset.UtcNow
            };
            var inProgressMessage = new InProgressMessage {
                MessageId = completedMessage.MessageId, MessageName = "Message"
            };

            inProgressMessages.Add(inProgressMessage);
            completedMessages.Add(completedMessage);
            mocker.Mock <IJobStorageService>()
            .Setup(x => x.GetJobStatus(It.IsAny <long>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync((hasFailedMessages: false, endTime: DateTimeOffset.UtcNow.AddSeconds(-10)));

            mocker.Mock <IJobsDataContext>()
            .Setup(x => x.GetOutstandingOrTimedOutJobs(It.IsAny <JobModel>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(new List <OutstandingJobResult>
            {
                new OutstandingJobResult {
                    DcJobId = 1, DcJobSucceeded = true, JobStatus = JobStatus.Completed
                }
            });

            mocker.Mock <IJobsDataContext>()
            .Setup(x => x.DoSubmissionSummariesExistForJobs(It.IsAny <List <OutstandingJobResult> >()))
            .Returns(new List <long?>());

            var service = mocker.Create <PeriodEndStartJobStatusService>();
            await service.ManageStatus(job.Id, CancellationToken.None).ConfigureAwait(false);

            mocker.Mock <IJobStatusEventPublisher>()
            .Verify(publisher => publisher.PeriodEndJobFinished(It.Is <JobModel>(jobModel => jobModel == job)
                                                                , It.Is <bool>(b => b == true)), Times.Once);
            mocker.Mock <IJobStatusEventPublisher>()

            .Verify(publisher => publisher.PeriodEndJobFinished(It.Is <JobModel>(jobModel => jobModel == job)
                                                                , It.Is <bool>(b => b == false)), Times.Never);
        }