public async Task Handle(DkimPollPending message) { try { List <DkimSelectorRecords> dkimSelectorRecords = await _dnsClient.FetchDkimRecords(message.Id, message.Selectors); if (!_config.AllowNullResults && dkimSelectorRecords.TrueForAll(x => x.Records.Count == 0 || x.Records.TrueForAll(y => string.IsNullOrWhiteSpace(y.Record)))) { throw new Exception($"Unable to retrieve DKIM records for {message.Id}, selectors: {JsonConvert.SerializeObject(message)}"); } DkimRecordsPolled dkimRecordsPolled = new DkimRecordsPolled(message.Id, dkimSelectorRecords); _log.LogInformation("Polled DKIM selectors for {Domain}", message.Id); _dispatcher.Dispatch(dkimRecordsPolled, _config.SnsTopicArn); _log.LogInformation("Published DKIM records for {Domain}", message.Id); } catch (Exception e) { string error = $"Error occurred polling domain {message.Id}"; _log.LogError(e, error); throw; } }
public void NotifiesWhenSelectorChanges() { Dictionary <string, List <string> > selectorsAndRecords1 = new Dictionary <string, List <string> > { { "selector1", new List <string> { "record1" } } }; Dictionary <string, List <string> > selectorsAndRecords2 = new Dictionary <string, List <string> > { { "selector2", new List <string> { "record1" } } }; DkimEntityState state = CreateDkimEntityState(selectorsAndRecords1); DkimRecordsPolled message = CreateDkimRecordsPolled(selectorsAndRecords2); _recordChangedNotifier.Handle(state, message); A.CallTo(() => _messageDispatcher.Dispatch(A <DkimRecordAdded> ._, A <string> ._)).MustHaveHappenedOnceExactly(); A.CallTo(() => _messageDispatcher.Dispatch(A <DkimRecordRemoved> ._, A <string> ._)).MustHaveHappenedOnceExactly(); A.CallTo(() => _messageDispatcher.Dispatch( A <DkimRecordAdded> .That.Matches(x => x.SelectorRecords[0].Selector == "selector2" && x.SelectorRecords[0].Records[0] == "record1"), A <string> ._)).MustHaveHappenedOnceExactly(); A.CallTo(() => _messageDispatcher.Dispatch( A <DkimRecordRemoved> .That.Matches(x => x.SelectorRecords[0].Selector == "selector1" && x.SelectorRecords[0].Records[0] == "record1"), A <string> ._)).MustHaveHappenedOnceExactly(); }
public void DoesNotNotifyWhenNewSelectorHasNoRecord() { Dictionary <string, List <string> > selectorsAndRecords1 = new Dictionary <string, List <string> > { { "selector1", new List <string> { "record" } } }; DkimEntityState state = CreateDkimEntityState(selectorsAndRecords1); DkimRecordsPolled message = new DkimRecordsPolled("", new List <DkimSelectorRecords> { new DkimSelectorRecords(Guid.NewGuid(), "selector1", new List <DkimTxtRecord>() { new DkimTxtRecord(new List <string> { "record" }) }, null, 0), new DkimSelectorRecords(Guid.NewGuid(), "rogueSelector", null, null, 0) }); _recordChangedNotifier.Handle(state, message); A.CallTo(() => _messageDispatcher.Dispatch(A <Common.Messaging.Abstractions.Message> .Ignored, A <string> .Ignored)).MustNotHaveHappened(); }
private DkimRecordsPolled CreateDkimRecordsPolled(Dictionary <string, List <string> > selectorsAndRecords) { List <DkimSelectorRecords> dkimSelectorRecords = new List <DkimSelectorRecords>(); foreach (KeyValuePair <string, List <string> > kvp in selectorsAndRecords) { List <DkimTxtRecord> dkimTxtRecords = kvp.Value.Select(record => new DkimTxtRecord(record.Split(" ").ToList())).ToList(); dkimSelectorRecords.Add(new DkimSelectorRecords(Guid.NewGuid(), kvp.Key, dkimTxtRecords, null, 0)); } _fixture.Register(() => dkimSelectorRecords); DkimRecordsPolled dkimRecordsPolled = _fixture.Create <DkimRecordsPolled>(); return(dkimRecordsPolled); }
public void DoesNotNotifyWhenNoChanges() { Dictionary <string, List <string> > selectorsAndRecords1 = new Dictionary <string, List <string> > { { "selector1", new List <string> { "record" } } }; Dictionary <string, List <string> > selectorsAndRecords2 = new Dictionary <string, List <string> > { { "selector1", new List <string> { "record" } } }; DkimEntityState state = CreateDkimEntityState(selectorsAndRecords1); DkimRecordsPolled message = CreateDkimRecordsPolled(selectorsAndRecords2); _recordChangedNotifier.Handle(state, message); A.CallTo(() => _messageDispatcher.Dispatch(A <Common.Messaging.Abstractions.Message> .Ignored, A <string> .Ignored)).MustNotHaveHappened(); }
public static List <DkimSelector> ToDkimRecords(this DkimRecordsPolled records) { return(records.DkimSelectorRecords.Select(_ => _.ToDkimSelector()).ToList()); }