Exemple #1
0
        public async Task ItShouldPublishAndUpdateThenContinueWhenThereAreExpiredRecords()
        {
            A.CallTo(() => _dao.GetExpiredSpfRecords())
            .Returns(CreateSchedulerStates("ncsc.gov.uk", "fco.gov.uk"));

            ProcessResult result = await _sut.Process();

            A.CallTo(() => _publisher.Publish(A <SpfRecordExpired> ._, A <string> ._))
            .MustHaveHappenedTwiceExactly();

            A.CallTo(() => _dao.UpdateLastChecked(A <List <SpfSchedulerState> > ._))
            .MustHaveHappenedOnceExactly();

            Assert.AreEqual(ProcessResult.Continue, result);
        }
Exemple #2
0
        public async Task <ProcessResult> Process()
        {
            Stopwatch stopwatch = Stopwatch.StartNew();

            List <SpfSchedulerState> expiredRecords = await _dao.GetExpiredSpfRecords();

            _log.LogInformation($"Found {expiredRecords.Count} expired records.");

            if (expiredRecords.Any())
            {
                expiredRecords
                .Select(_ => _publisher.Publish(_.ToSpfRecordExpiredMessage(), _config.PublisherConnectionString))
                .Batch(10)
                .ToList()
                .ForEach(async _ => await Task.WhenAll(_));

                await _dao.UpdateLastChecked(expiredRecords);

                _log.LogInformation($"Processing for domains {string.Join(',', expiredRecords.Select(_ => _.Id))} took {stopwatch.Elapsed}.");
            }

            stopwatch.Stop();

            return(expiredRecords.Any()
                ? ProcessResult.Continue
                : ProcessResult.Stop);
        }