コード例 #1
0
        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();
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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();
        }
コード例 #6
0
        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);
        }
コード例 #8
0
        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();
        }
コード例 #10
0
        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);
        }
コード例 #11
0
        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();
        }
コード例 #13
0
        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();
        }
コード例 #14
0
        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();
        }
コード例 #17
0
        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);
        }
コード例 #18
0
        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();
        }
コード例 #19
0
        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();
        }
コード例 #20
0
        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);
        }