public void Publish(SpfRecordsEvaluated message) { List <Message> rootMessages = message.Messages; List <Message> recordsMessages = message.Records?.Messages; IEnumerable <Message> recordsRecordsMessages = message.Records?.Records?.SelectMany(x => x.Messages); List <SpfRecord> recordsRecords = message.Records?.Records; List <Message> recursiveMessages = new List <Message>(); if (recordsRecords != null && recordsRecords.Count > 0) { foreach (SpfRecord record in recordsRecords) { IEnumerable <Message> recordMessages = GetMessages(record); recursiveMessages.AddRange(recordMessages); } } IEnumerable <Message> messages = (rootMessages ?? new List <Message>()) .Concat(recordsMessages ?? new List <Message>()) .Concat(recordsRecordsMessages ?? new List <Message>()) .Concat(recursiveMessages ?? new List <Message>()); Status status = _domainStatusEvaluator.GetStatus(messages.ToList()); DomainStatusEvaluation domainStatusEvaluation = new DomainStatusEvaluation(message.Id, "SPF", status); _log.LogInformation($"Publishing SPF domain status for {message.Id} of {status}"); _dispatcher.Dispatch(domainStatusEvaluation, _spfEntityConfig.SnsTopicArn); }
public void NullTermsDoesntErrorGetMessagesOut() { Message rootMessage = CreateInfoMessage(); Message recordsMessage = CreateInfoMessage(); Message spfRecordWithIncludeMessage = CreateInfoMessage(); SpfRecord spfRecordWithInclude = new SpfRecord(null, null, new List <Term> { null }, new List <Message> { spfRecordWithIncludeMessage }, false); SpfRecords rootSpfRecords = new SpfRecords(new List <SpfRecord> { spfRecordWithInclude }, 100, new List <Message> { recordsMessage }); SpfRecordsEvaluated message = new SpfRecordsEvaluated("test.gov.uk", rootSpfRecords, null, null, new List <Message> { rootMessage }, DateTime.UtcNow); A.CallTo(() => _domainStatusEvaluator.GetStatus(A <List <Message> > .That.Matches(x => x.Contains(rootMessage) && x.Contains(recordsMessage) && x.Contains(spfRecordWithIncludeMessage)))).Returns(Status.Error); _domainStatusPublisher.Publish(message); Expression <Func <DomainStatusEvaluation, bool> > predicate = x => x.Status == Status.Error && x.RecordType == "SPF" && x.Id == "test.gov.uk"; A.CallTo(() => _dispatcher.Dispatch(A <DomainStatusEvaluation> .That.Matches(predicate), "testSnsTopicArn")).MustHaveHappenedOnceExactly(); }
public async Task NonFailAllTermEvaluated() { await PurgeAmazonSqsQueue(OutputQueueUrl); List <Term> terms = new List <Term> { new All(Qualifier.Neutral, "?All", true, false) }; SpfRecords spfRecords = CreateSpfRecords(terms, isRoot: true); SpfRecordsPolled spfRecordsPolled = new SpfRecordsPolled(Id, spfRecords, 1, TimeSpan.FromSeconds(0), new List <Contracts.SharedDomain.Message>()); InvokeLambda(spfRecordsPolled); Message message = await ReadAmazonSqsEvent(OutputQueueUrl, ReadTimeoutSecond); Assert.That(message, Is.Not.Null); Assert.That(message, Is.TypeOf <SpfRecordsEvaluated>()); SpfRecordsEvaluated spfRecordsEvaluated = (SpfRecordsEvaluated)message; Assert.That(spfRecordsEvaluated.Records.Records.Count, Is.EqualTo(1)); Assert.That(spfRecordsEvaluated.Records.Records[0].Messages.Count, Is.EqualTo(1)); StringAssert.StartsWith("Only \"-all\" (do not allow other ip addresses) or \"~all\" (allow but mark other ip addresses) protect", spfRecordsEvaluated.Records.Records[0].Messages[0].Text); }
public void SpfRecordsWithDifferentReferencesTest() { SpfEntityState state = new SpfEntityState(Id, 1, SpfState.Evaluated, DateTime.Now) { SpfRecords = NotifierTestUtil.CreateSpfRecords("spf1", terms: new List <Term> { new Include(Qualifier.Fail, "spf2", "abc.com", NotifierTestUtil.CreateSpfRecords("spf2", terms: new List <Term> { new Include(Qualifier.Fail, "spf3", "abc.com", NotifierTestUtil.CreateSpfRecords("spf3"), false) }), false) }) }; SpfRecordsEvaluated message = new SpfRecordsEvaluated(Id, NotifierTestUtil.CreateSpfRecords("spf1", terms: new List <Term> { new Include(Qualifier.Fail, "spf2", "abc.com", NotifierTestUtil.CreateSpfRecords("spf2"), false) }), 1, TimeSpan.MinValue, new List <Message>(), DateTime.UtcNow); _changeNotifier.Handle(state, message); NotifierTestUtil.VerifyResults(_dispatcher, referencedChange: true, removed: true, record: true); FakeItEasy.A.CallTo(() => _dispatcher.Dispatch(A <SpfReferencedRecordAdded> ._, A <string> ._)).MustNotHaveHappened(); FakeItEasy.A.CallTo(() => _dispatcher.Dispatch(A <SpfReferencedRecordRemoved> .That.Matches( _ => _.Records.Count == 1 && _.Records[0].Equals("spf3")), A <string> ._)) .MustHaveHappenedOnceExactly(); }
public void SpfRecordsAreDifferentTest() { SpfEntityState state = new SpfEntityState(Id, 1, SpfState.Evaluated, DateTime.Now) { SpfRecords = NotifierTestUtil.CreateSpfRecords("spf1") }; SpfRecordsEvaluated message = new SpfRecordsEvaluated(Id, NotifierTestUtil.CreateSpfRecords("spf2"), 1, TimeSpan.MinValue, new List <Message>(), DateTime.UtcNow); _changeNotifier.Handle(state, message); NotifierTestUtil.VerifyResults(_dispatcher, record: true, added: true, removed: true); A.CallTo(() => _dispatcher.Dispatch(A <SpfRecordAdded> ._, A <string> ._)).MustHaveHappenedOnceExactly(); A.CallTo(() => _dispatcher.Dispatch(A <SpfRecordRemoved> ._, A <string> ._)).MustHaveHappenedOnceExactly(); A.CallTo(() => _dispatcher.Dispatch(A <SpfRecordAdded> .That.Matches( _ => _.Records.Count == 1 && _.Records[0].Equals("spf2")), A <string> ._)) .MustHaveHappenedOnceExactly(); A.CallTo(() => _dispatcher.Dispatch(A <SpfRecordRemoved> .That.Matches( _ => _.Records.Count == 1 && _.Records[0].Equals("spf1")), A <string> ._)) .MustHaveHappenedOnceExactly(); }
public async Task TermsExplained() { await PurgeAmazonSqsQueue(OutputQueueUrl); List <Term> terms = new List <Term> { new All(Qualifier.Fail, "-All", true, false) }; SpfRecords spfRecords = CreateSpfRecords(terms); SpfRecordsPolled spfRecordsPolled = new SpfRecordsPolled(Id, spfRecords, 1, TimeSpan.FromSeconds(0), new List <Contracts.SharedDomain.Message>()); InvokeLambda(spfRecordsPolled); Message message = await ReadAmazonSqsEvent(OutputQueueUrl, ReadTimeoutSecond); Assert.That(message, Is.Not.Null); Assert.That(message, Is.TypeOf <SpfRecordsEvaluated>()); SpfRecordsEvaluated spfRecordsEvaluated = (SpfRecordsEvaluated)message; Assert.That(spfRecordsEvaluated.Records.Records.Count, Is.EqualTo(1)); Assert.That(spfRecordsEvaluated.Records.Records[0].Terms.Count, Is.EqualTo(1)); StringAssert.StartsWith("Do not allow any (other) ip addresses.", spfRecordsEvaluated.Records.Records[0].Terms[0].Explanation); }
public void SpfRecordsReferencedWithSameMessageTest() { SpfEntityState state = new SpfEntityState(Id, 1, SpfState.Evaluated, DateTime.Now) { SpfRecords = NotifierTestUtil.CreateSpfRecords("spf1", terms: new List <Term> { new Include(Qualifier.Fail, "spf2", "abc.com", NotifierTestUtil.CreateSpfRecords("spf2", terms: new List <Term> { new Include(Qualifier.Fail, "spf3", "abc.com", NotifierTestUtil.CreateSpfRecords("spf3"), false) }), false) }) }; SpfRecordsEvaluated message = new SpfRecordsEvaluated(Id, NotifierTestUtil.CreateSpfRecords("spf1", terms: new List <Term> { new Include(Qualifier.Fail, "spf2", "abc.com", NotifierTestUtil.CreateSpfRecords("spf2", terms: new List <Term> { new Include(Qualifier.Fail, "spf3", "abc.com", NotifierTestUtil.CreateSpfRecords("spf3"), false) }), false) }), 1, TimeSpan.MinValue, new List <Message>(), DateTime.UtcNow); _changeNotifier.Handle(state, message); NotifierTestUtil.VerifyResults(_dispatcher, referencedChange: true); }
public void SpfRecordsWithSameMessageIdAndDifferentMessageTypeDoesNotRaiseANotificationTest() { Guid id = Guid.NewGuid(); SpfRecords spfRecords = NotifierTestUtil.CreateSpfRecords(messages: new List <Message> { new Message(id, "SPF", MessageType.warning, "hello", "markdown") }); SpfEntityState state = new SpfEntityState(Id, 1, SpfState.Evaluated, DateTime.Now) { SpfRecords = NotifierTestUtil.CreateSpfRecords(messages: new List <Message> { new Message(id, "SPF", MessageType.error, "world", "markdown") }) }; SpfRecordsEvaluated message = new SpfRecordsEvaluated(Id, spfRecords, 1, TimeSpan.MinValue, new List <Message>(), DateTime.UtcNow); _changeNotifier.Handle(state, message); NotifierTestUtil.VerifyResults(_dispatcher, removed: false, added: false); FakeItEasy.A.CallTo(() => _dispatcher.Dispatch(A <SpfAdvisoryAdded> ._, A <string> ._)) .MustNotHaveHappened(); FakeItEasy.A.CallTo(() => _dispatcher.Dispatch(A <SpfAdvisoryRemoved> ._, A <string> ._)) .MustNotHaveHappened(); }
public void PublisherDeterminesStatusAndDispatchesIt() { Message rootMessage = CreateInfoMessage(); Message recordsMessage = CreateInfoMessage(); Message recordsRecordsMessages = CreateInfoMessage(); SpfRecordsEvaluated message = new SpfRecordsEvaluated("testDomain", new SpfRecords(new List <SpfRecord> { new SpfRecord(null, null, null, new List <Message> { recordsRecordsMessages }, false) }, 0, new List <Message> { recordsMessage }), null, null, new List <Message> { rootMessage }, DateTime.MinValue); A.CallTo(() => _domainStatusEvaluator.GetStatus(A <List <Message> > .That.Matches(x => x.Contains(rootMessage) && x.Contains(recordsMessage) && x.Contains(recordsRecordsMessages)))).Returns(Status.Info); _domainStatusPublisher.Publish(message); Expression <Func <DomainStatusEvaluation, bool> > predicate = x => x.Status == Status.Info && x.RecordType == "SPF" && x.Id == "testDomain"; A.CallTo(() => _dispatcher.Dispatch(A <DomainStatusEvaluation> .That.Matches(predicate), "testSnsTopicArn")).MustHaveHappenedOnceExactly(); }
public async Task SpfRecordsPolledAndRecordsChangedEventsRaisedAndStateUpdated() { await PurgeAmazonSqsQueue(OutputQueueUrl); await TruncateDatabase(ConnectionString); await SetState(ConnectionString, new SpfEntityState(Id, 1, SpfState.PollPending, DateTime.Now)); SpfRecordsPolled spfRecordsPolled = new SpfRecordsPolled(Id, CreateSpfRecords(), 1, TimeSpan.FromSeconds(1), new List <Contracts.SharedDomain.Message>()); InvokeLambda(spfRecordsPolled); Message message1 = await ReadAmazonSqsEvent(OutputQueueUrl, ReadTimeoutSecond); Assert.That(message1, Is.TypeOf <SpfRecordsPolled>()); SpfRecordsEvaluated spfRecordsEvaluated = (SpfRecordsEvaluated)message1; Assert.That(spfRecordsEvaluated.Id, Is.EqualTo(Id)); Assert.That(spfRecordsEvaluated.Records, Is.EqualTo(spfRecordsPolled.Records)); Assert.That(spfRecordsEvaluated.DnsQueryCount, Is.EqualTo(spfRecordsPolled.DnsQueryCount)); Assert.That(spfRecordsEvaluated.ElapsedQueryTime, Is.EqualTo(spfRecordsPolled.ElapsedQueryTime)); CollectionAssert.AreEqual(spfRecordsEvaluated.Messages, spfRecordsPolled.Messages); List <SpfEntityState> spfEntityStates = await GetStates(ConnectionString); Assert.That(spfEntityStates.Count, Is.EqualTo(1)); Assert.That(spfEntityStates[0].Id, Is.EqualTo(Id)); Assert.That(spfEntityStates[0].Version, Is.EqualTo(2)); Assert.That(spfEntityStates[0].SpfRecords, Is.EqualTo(spfRecordsPolled.Records)); Assert.That(spfEntityStates[0].DnsQueryCount, Is.EqualTo(spfRecordsPolled.DnsQueryCount)); Assert.That(spfEntityStates[0].ElapsedQueryTime, Is.EqualTo(spfRecordsPolled.ElapsedQueryTime)); CollectionAssert.AreEqual(spfEntityStates[0].Messages, spfRecordsPolled.Messages); }
public async Task SpfRecordsEvaluatedAndRecordsChangedEventsRaisedAndStateUpdated() { await PurgeAmazonSqsQueue(OutputQueueUrl); await TruncateDatabase(ConnectionString); SpfRecords spfRecords = CreateSpfRecords(); SpfEntityState spfEntityState = new SpfEntityState(Id, 1, SpfState.PollPending, DateTime.Now) { SpfRecords = spfRecords, DnsQueryCount = 1, ElapsedQueryTime = TimeSpan.FromSeconds(1), Messages = new List <Contracts.SharedDomain.Message>(), }; await SetState(ConnectionString, spfEntityState); spfRecords.Records[0].Messages .Add(new Contracts.SharedDomain.Message(Guid.Empty, MessageSources.SpfEvaluator, MessageType.error, "EvaluationError", "markdown")); spfRecords.Records[0].Terms[0].Explanation = "Explanation"; SpfRecordsEvaluated spfRecordsEvaluated = new SpfRecordsEvaluated(Id, spfRecords, 1, TimeSpan.FromSeconds(0), new List <Contracts.SharedDomain.Message>(), DateTime.UtcNow); InvokeLambda(spfRecordsEvaluated); Message message = await ReadAmazonSqsEvent(OutputQueueUrl, ReadTimeoutSecond); Assert.That(message, Is.TypeOf <SpfRecordEvaluationsChanged>()); SpfRecordEvaluationsChanged spfRecordEvaluationsChanged = message as SpfRecordEvaluationsChanged; Assert.That(spfRecordEvaluationsChanged.Records.Records[0].Messages.Count, Is.EqualTo(1)); Assert.That(spfRecordEvaluationsChanged.Records.Records[0].Messages[0].Text, Is.EqualTo(spfRecords.Records[0].Messages[0].Text)); Assert.That(spfRecordEvaluationsChanged.Records.Records[0].Terms[0].Explanation, Is.EqualTo(spfRecords.Records[0].Terms[0].Explanation)); List <SpfEntityState> spfEntityStates = await GetStates(ConnectionString); Assert.That(spfEntityStates.Count, Is.EqualTo(1)); Assert.That(spfEntityStates[0].Id, Is.EqualTo(Id)); Assert.That(spfEntityStates[0].Version, Is.EqualTo(2)); Assert.That(spfEntityStates[0].SpfRecords.Records[0].Messages.Count, Is.EqualTo(1)); Assert.That(spfEntityStates[0].SpfRecords.Records[0].Messages[0].Text, Is.EqualTo(spfRecordsEvaluated.Records.Records[0].Messages[0].Text)); Assert.That(spfEntityStates[0].SpfRecords.Records[0].Terms[0].Explanation, Is.EqualTo(spfRecordsEvaluated.Records.Records[0].Terms[0].Explanation)); }
public void MechanismsWithEmptySpfRecordsMessagesParsesCorrectly() { string message = File.ReadAllText(Path.Combine(TestContext.CurrentContext.TestDirectory, "cumbria.json")); SpfRecordsEvaluated testSpfRecordsEvaluated = JsonConvert.DeserializeObject <SpfRecordsEvaluated>(message); _domainStatusPublisher.Publish(testSpfRecordsEvaluated); Expression <Func <DomainStatusEvaluation, bool> > predicate = x => x.Status == Status.Success && x.RecordType == "SPF" && x.Id == "cumbria.ac.uk"; A.CallTo(() => _dispatcher.Dispatch(A <DomainStatusEvaluation> .That.Matches(predicate), "testSnsTopicArn")).MustHaveHappenedOnceExactly(); }
public async Task HandleSpfRecordsEvaluatedAndNewEvaluationUpdatesStateAndPublishes() { A.CallTo(() => _spfEntityDao.Get(Id)).Returns(new SpfEntityState(Id, 2, SpfState.PollPending, DateTime.Now) { LastUpdated = DateTime.Now.AddDays(-1), SpfRecords = CreateSpfRecords() }); List <Term> terms = new List <Term> { new Redirect("spf1", "abc.com", CreateSpfRecords(new List <Message> { new Message(Guid.Empty, "SPF", MessageType.info, "hello", "markdown") }), false), }; SpfRecords spfRecords = CreateSpfRecords(terms: terms, messages: new List <Message> { new Message(Guid.Empty, "SPF", MessageType.info, "hello", "markdown") }); spfRecords.Records[0].Messages .Add(new Message(Guid.Empty, MessageSources.SpfEvaluator, MessageType.error, "EvaluationError", "markdown")); spfRecords.Records[0].Terms[0].Explanation = "Explanation"; SpfRecordsEvaluated spfRecordsEvaluated = new SpfRecordsEvaluated(Id, spfRecords, 1, TimeSpan.MinValue, new List <Message>(), DateTime.UtcNow); await _spfEntity.Handle(spfRecordsEvaluated); A.CallTo(() => _changeNotifierComposite.Handle(A <SpfEntityState> ._, spfRecordsEvaluated)) .MustHaveHappenedOnceExactly(); A.CallTo(() => _dispatcher.Dispatch(A <SpfRecordEvaluationsChanged> .That.Matches( _ => _.Records.Records[0].Messages[0].Text.Equals(spfRecords.Records[0].Messages[0].Text) && _.Records.Records[0].Terms[0].Explanation .Equals(spfRecords.Records[0].Terms[0].Explanation)), A <string> ._)) .MustHaveHappenedOnceExactly(); A.CallTo(() => _changeNotifierComposite.Handle(A <SpfEntityState> ._, spfRecordsEvaluated)) .MustHaveHappenedOnceExactly(); A.CallTo(() => _domainStatusPublisher.Publish(spfRecordsEvaluated)) .MustHaveHappenedOnceExactly(); A.CallTo(() => _spfEntityDao.Save(A <SpfEntityState> ._)).MustHaveHappenedOnceExactly(); }
public void SpfRecordsWithSameMessageTest() { SpfRecords spfRecords = NotifierTestUtil.CreateSpfRecords(); SpfEntityState state = new SpfEntityState(Id, 1, SpfState.Evaluated, DateTime.Now) { SpfRecords = NotifierTestUtil.CreateSpfRecords() }; SpfRecordsEvaluated message = new SpfRecordsEvaluated(Id, spfRecords, 1, TimeSpan.MinValue, new List <Message>(), DateTime.UtcNow); _changeNotifier.Handle(state, message); NotifierTestUtil.VerifyResults(_dispatcher); }
public void SpfRecordsReferencedWithSameMessageIdAndDifferentMessageTypeDoesNotRaiseANotificationTest() { Guid id = Guid.NewGuid(); SpfEntityState state = new SpfEntityState(Id, 1, SpfState.Evaluated, DateTime.Now) { SpfRecords = NotifierTestUtil.CreateSpfRecords("spf1", terms: new List <Term> { new Include(Qualifier.Fail, "spf2", "abc.com", NotifierTestUtil.CreateSpfRecords("spf2", terms: new List <Term> { new Include(Qualifier.Fail, "spf3", "abc.com", NotifierTestUtil.CreateSpfRecords("spf3", new List <Message> { new Message(id, "SPF", MessageType.warning, "hello world", "markdown") }), false) }), false) }) }; SpfRecordsEvaluated message = new SpfRecordsEvaluated(Id, NotifierTestUtil.CreateSpfRecords("spf1", terms: new List <Term> { new Include(Qualifier.Fail, "spf2", "abc.com", NotifierTestUtil.CreateSpfRecords("spf2", terms: new List <Term> { new Include(Qualifier.Fail, "spf3", "abc.com", NotifierTestUtil.CreateSpfRecords("spf3", new List <Message> { new Message(id, "SPF", MessageType.error, "hello world", "markdown") }), false) }), false) }), 1, TimeSpan.MinValue, new List <Message>(), DateTime.UtcNow); _changeNotifier.Handle(state, message); NotifierTestUtil.VerifyResults(_dispatcher); FakeItEasy.A.CallTo(() => _dispatcher.Dispatch(A <SpfReferencedAdvisoryAdded> ._, A <string> ._)).MustNotHaveHappened(); FakeItEasy.A.CallTo(() => _dispatcher.Dispatch(A <SpfReferencedAdvisoryRemoved> ._, A <string> ._)).MustNotHaveHappened(); }
public void SpfRecordsReferencedWithDifferentMessageTest() { SpfEntityState state = new SpfEntityState(Id, 1, SpfState.Evaluated, DateTime.Now) { SpfRecords = NotifierTestUtil.CreateSpfRecords("spf1", terms: new List <Term> { new Include(Qualifier.Fail, "spf2", "abc.com", NotifierTestUtil.CreateSpfRecords("spf2", terms: new List <Term> { new Include(Qualifier.Fail, "spf3", "abc.com", NotifierTestUtil.CreateSpfRecords("spf3"), false) }), false) }) }; SpfRecordsEvaluated message = new SpfRecordsEvaluated(Id, NotifierTestUtil.CreateSpfRecords("spf1", terms: new List <Term> { new Include(Qualifier.Fail, "spf2", "abc.com", NotifierTestUtil.CreateSpfRecords("spf2", terms: new List <Term> { new Include(Qualifier.Fail, "spf3", "abc.com", NotifierTestUtil.CreateSpfRecords("spf3", new List <Message> { new Message(Guid.NewGuid(), "SPF", MessageType.info, "hello world", "markdown") }), false) }), false) }), 1, TimeSpan.MinValue, new List <Message>(), DateTime.UtcNow); _changeNotifier.Handle(state, message); NotifierTestUtil.VerifyResults(_dispatcher, referencedChange: true, added: true); FakeItEasy.A.CallTo(() => _dispatcher.Dispatch(A <SpfReferencedAdvisoryAdded> ._, A <string> ._)).MustHaveHappenedOnceExactly(); FakeItEasy.A.CallTo(() => _dispatcher.Dispatch(A <SpfReferencedAdvisoryRemoved> ._, A <string> ._)).MustNotHaveHappened(); FakeItEasy.A.CallTo(() => _dispatcher.Dispatch(A <SpfReferencedAdvisoryAdded> .That.Matches( _ => _.Messages.Count == 1 && _.Messages[0].Text.Equals("hello world") && _.Messages[0].MessageType.ToString().Equals("info")), A <string> ._)) .MustHaveHappenedOnceExactly(); }
public async Task Handle(SpfRecordsEvaluated message) { string id = message.Id.ToLower(); SpfEntityState state = await LoadState(id, nameof(message)); _changeNotifierComposite.Handle(state, message); _domainStatusPublisher.Publish(message); Message evnt = state.UpdateSpfEvaluation(message.Records, message.DnsQueryCount, message.ElapsedQueryTime, message.Messages, message.LastUpdated); state.Version++; await _dao.Save(state); _dispatcher.Dispatch(evnt, _spfEntityConfig.SnsTopicArn); }
public async Task HandleSpfRecordsEvaluatedAndWithExistingEvaluationUpdatesStateTest() { A.CallTo(() => _spfEntityDao.Get(Id)).Returns(new SpfEntityState(Id, 2, SpfState.PollPending, DateTime.Now) { LastUpdated = DateTime.Now.AddDays(-1), SpfRecords = CreateSpfRecords() }); SpfRecords spfRecords = CreateSpfRecords(); SpfRecordsEvaluated spfRecordsEvaluated = new SpfRecordsEvaluated(Id, spfRecords, 1, TimeSpan.MinValue, new List <Message>(), DateTime.UtcNow); await _spfEntity.Handle(spfRecordsEvaluated); A.CallTo(() => _dispatcher.Dispatch(A <SpfRecordEvaluationsChanged> ._, A <string> ._)).MustHaveHappened(); A.CallTo(() => _changeNotifierComposite.Handle(A <SpfEntityState> ._, spfRecordsEvaluated)) .MustHaveHappenedOnceExactly(); A.CallTo(() => _domainStatusPublisher.Publish(spfRecordsEvaluated)) .MustHaveHappenedOnceExactly(); A.CallTo(() => _spfEntityDao.Save(A <SpfEntityState> ._)).MustHaveHappenedOnceExactly(); }
public void SpfRecordsWithDifferentMessageTest() { SpfRecords spfRecords = NotifierTestUtil.CreateSpfRecords(messages: new List <Message> { new Message(Guid.NewGuid(), "SPF", MessageType.info, "hello", "markdown") }); SpfEntityState state = new SpfEntityState(Id, 1, SpfState.Evaluated, DateTime.Now) { SpfRecords = NotifierTestUtil.CreateSpfRecords(messages: new List <Message> { new Message(Guid.NewGuid(), "SPF", MessageType.error, "world", "markdown") }) }; SpfRecordsEvaluated message = new SpfRecordsEvaluated(Id, spfRecords, 1, TimeSpan.MinValue, new List <Message>(), DateTime.UtcNow); _changeNotifier.Handle(state, message); NotifierTestUtil.VerifyResults(_dispatcher, removed: true, added: true); FakeItEasy.A.CallTo(() => _dispatcher.Dispatch(A <SpfAdvisoryAdded> ._, A <string> ._)) .MustHaveHappenedOnceExactly(); FakeItEasy.A.CallTo(() => _dispatcher.Dispatch(A <SpfAdvisoryRemoved> ._, A <string> ._)) .MustHaveHappenedOnceExactly(); FakeItEasy.A.CallTo(() => _dispatcher.Dispatch(A <SpfAdvisoryRemoved> .That.Matches( _ => _.Messages.Count == 1 && _.Messages[0].Text.Equals("world") && _.Messages.Count == 1 && _.Messages[0].MessageType.ToString().Equals("error")), A <string> ._)) .MustHaveHappenedOnceExactly(); FakeItEasy.A.CallTo(() => _dispatcher.Dispatch(A <SpfAdvisoryAdded> .That.Matches( _ => _.Messages.Count == 1 && _.Messages[0].Text.Equals("hello") && _.Messages.Count == 1 && _.Messages[0].MessageType.ToString().Equals("info")), A <string> ._)) .MustHaveHappenedOnceExactly(); }
public async Task EvaluationOccursForNestedRecords() { await PurgeAmazonSqsQueue(OutputQueueUrl); List <Term> innerTerms = new List <Term> { new All(Qualifier.Neutral, "?All", true, false) }; List <Term> terms = new List <Term> { new Include(Qualifier.Pass, string.Empty, string.Empty, CreateSpfRecords(innerTerms), true) }; SpfRecords spfRecords = CreateSpfRecords(terms); SpfRecordsPolled spfRecordsPolled = new SpfRecordsPolled(Id, spfRecords, 1, TimeSpan.FromSeconds(0), new List <Contracts.SharedDomain.Message>()); InvokeLambda(spfRecordsPolled); Message message = await ReadAmazonSqsEvent(OutputQueueUrl, ReadTimeoutSecond); Assert.That(message, Is.Not.Null); Assert.That(message, Is.TypeOf <SpfRecordsEvaluated>()); SpfRecordsEvaluated spfRecordsEvaluated = (SpfRecordsEvaluated)message; List <SpfRecord> records = spfRecordsEvaluated.Records.Records; Assert.That(records.Count, Is.EqualTo(1)); Assert.That(records[0].Terms.Count, Is.EqualTo(1)); Assert.That(records[0].Terms[0].Explanation, Is.Not.Null); Assert.That(records[0].Terms[0], Is.TypeOf <Include>()); List <SpfRecord> innerRecords = ((Include)records[0].Terms[0]).Records.Records; Assert.That(innerRecords[0].Terms.Count, Is.EqualTo(1)); Assert.That(innerRecords[0].Terms[0].Explanation, Is.Not.Null); }