public void Handle(TlsRptEntityState state, Message message)
 {
     foreach (IChangeNotifier changeNotifier in _notifiers)
     {
         changeNotifier.Handle(state, message);
     }
 }
        public async Task HandleTlsRptRecordsEvaluatedAndNewEvaluationUpdatesStateAndPublishes()
        {
            A.CallTo(() => _tlsRptEntityDao.Get(Id)).Returns(
                new TlsRptEntityState(Id, 2, TlsRptState.PollPending, DateTime.Now)
            {
                LastUpdated   = DateTime.Now.AddDays(-1),
                TlsRptRecords = CreateTlsRptRecords()
            });

            TlsRptEntityState entityState = CreateTlsRptEntityState();

            entityState.Messages.Add(new Message(Guid.NewGuid(), MessageSources.TlsRptEvaluator, MessageType.error,
                                                 "EvaluationError", string.Empty));
            entityState.TlsRptRecords.Records[0].Tags[0].Explanation = "Explanation";

            TlsRptRecordsEvaluated recordsEvaluated = new TlsRptRecordsEvaluated(Id, entityState.TlsRptRecords,
                                                                                 new List <Message>
            {
                new Message(Guid.NewGuid(), MessageSources.TlsRptEvaluator, MessageType.error, "EvaluationError",
                            string.Empty)
            }, DateTime.MinValue);

            await _tlsRptEntity.Handle(recordsEvaluated);

            A.CallTo(() => _dispatcher.Dispatch(A <TlsRptRecordEvaluationsChanged> .That.Matches(
                                                    _ => _.Messages[0].Text.Equals(entityState.Messages[0].Text) && _.Records.Records[0].Tags[0].Explanation.Equals(entityState.TlsRptRecords.Records[0].Tags[0].Explanation)), A <string> ._))
            .MustHaveHappenedOnceExactly();

            A.CallTo(() => _tlsRptEntityDao.Save(A <TlsRptEntityState> ._)).MustHaveHappenedOnceExactly();
        }
        private static TlsRptEntityState CreateTlsRptEntityState(string domain = Id, string record = "v=TLSRPTv1;rua=mailto:[email protected]")
        {
            TlsRptEntityState state = new TlsRptEntityState(domain, 1, TlsRptState.Created, DateTime.UtcNow);

            state.TlsRptRecords = CreateTlsRptRecords(Id, record: record);
            return(state);
        }
Exemple #4
0
 private async Task Insert(TlsRptEntityState state)
 {
     await MySqlHelper.ExecuteNonQueryAsync(ConnectionString,
                                            @"INSERT INTO `tls_rpt_entity`(`id`,`version`,`state`)VALUES(@domain,@version,@state)",
                                            new MySqlParameter("domain", state.Id),
                                            new MySqlParameter("version", state.Version),
                                            new MySqlParameter("state", JsonConvert.SerializeObject(state)));
 }
Exemple #5
0
        public async Task SaveDuplicateEntryThrows()
        {
            TlsRptEntityState state1 = new TlsRptEntityState(Id, 1, TlsRptState.PollPending, DateTime.UtcNow);

            await _dao.Save(state1);

            Assert.ThrowsAsync <InvalidOperationException>(() => _dao.Save(state1));
        }
Exemple #6
0
        private TlsRptEntityState CreateEntityStateWithMessages(params Message[] messages)
        {
            TlsRptEntityState entityState = new TlsRptEntityState("", 0, new TlsRptState(), DateTime.MaxValue)
            {
                Messages = messages.ToList()
            };

            return(entityState);
        }
        private TlsRptEntityState CreateEntityState(params string[] recordStrings)
        {
            IEnumerable <TlsRptRecord> tlsRptRecords = recordStrings.Select(x => new TlsRptRecord(x, x.Split(";").ToList(), null));
            TlsRptEntityState          entityState   = new TlsRptEntityState("", 0, new TlsRptState(), DateTime.MaxValue)
            {
                TlsRptRecords = new TlsRptRecords("abc.com", tlsRptRecords.ToList(), 0)
            };

            return(entityState);
        }
Exemple #8
0
        public async Task GetStateExistsReturnsState()
        {
            TlsRptEntityState state = new TlsRptEntityState(Id, 1, TlsRptState.PollPending, DateTime.UtcNow);

            await Insert(state);

            TlsRptEntityState stateFromDatabase = await _dao.Get(Id);

            Assert.That(stateFromDatabase.Id, Is.EqualTo(state.Id));
            Assert.That(stateFromDatabase.Version, Is.EqualTo(state.Version));
        }
Exemple #9
0
        //private TlsRptEntityState CreateEntityStateWithRecords(params Message[] messages)
        //{
        //    List<TlsRptRecord> records = messages.Select(x => new TlsRptRecord()).ToList();
        //    TlsRptEntityState entityState = new TlsRptEntityState("", 0, new TlsRptState(), DateTime.MaxValue)
        //    {
        //        TlsRptRecords = new TlsRptRecords("", records)
        //    };

        //    return entityState;
        //}


        private static TlsRptEntityState CreateEntityStateWithRecords(params Message[] messages)
        {
            string domain = "abc.com";

            string record = "v=TLSRPTv1;rua=mailto:[email protected]";

            TlsRptEntityState state = new TlsRptEntityState(domain, 1, TlsRptState.Created, DateTime.UtcNow);

            state.TlsRptRecords = CreateTlsRptRecords(domain, record: record);
            state.Messages      = messages.ToList();
            return(state);
        }
Exemple #10
0
        public async Task SaveStateExistsStateIsUpdated()
        {
            TlsRptEntityState state = new TlsRptEntityState(Id, 1, TlsRptState.PollPending, DateTime.UtcNow);

            await _dao.Save(state);

            state = new TlsRptEntityState(Id, 2, TlsRptState.PollPending, DateTime.UtcNow);

            await _dao.Save(state);

            List <TlsRptEntityState> states = await SelectAll(Id);

            Assert.That(states.Count, Is.EqualTo(1));
            Assert.That(states[0].Id, Is.EqualTo(state.Id));
            Assert.That(states[0].Version, Is.EqualTo(state.Version));
        }
        public async Task Save(TlsRptEntityState state)
        {
            string connectionString = await _connectionInfoAsync.GetConnectionStringAsync();

            string serializedState = JsonConvert.SerializeObject(state);

            int rowsAffected = await MySqlHelper.ExecuteNonQueryAsync(connectionString, TlsRptEntityDaoResouces.InsertTlsRptEntity,
                                                                      new MySqlParameter("domain", state.Id),
                                                                      new MySqlParameter("version", state.Version),
                                                                      new MySqlParameter("state", serializedState));

            if (rowsAffected == 0)
            {
                throw new InvalidOperationException(
                          $"Didn't update TlsRptEntityState because version {state.Version} has already been persisted.");
            }
        }
Exemple #12
0
        public void Handle(TlsRptEntityState state, Message message)
        {
            if (message is TlsRptRecordsEvaluated recordsEvaluated)
            {
                List <string> currentRecords = state.TlsRptRecords?.Records.Select(x => x.Record?.Replace("; ", ";")).ToList() ?? new List <string>();
                List <string> newRecords     = recordsEvaluated.Records?.Records.Select(x => x.Record?.Replace("; ", ";")).ToList() ?? new List <string>();

                List <string> addedRecords = newRecords.Except(currentRecords).ToList();
                if (addedRecords.Any())
                {
                    TlsRptRecordAdded advisoryAdded = new TlsRptRecordAdded(state.Id, addedRecords);
                    _dispatcher.Dispatch(advisoryAdded, _tlsRptEntityConfig.SnsTopicArn);
                }

                List <string> removedRecords = currentRecords.Except(newRecords).ToList();
                if (removedRecords.Any())
                {
                    TlsRptRecordRemoved advisoryRemoved = new TlsRptRecordRemoved(state.Id, removedRecords);
                    _dispatcher.Dispatch(advisoryRemoved, _tlsRptEntityConfig.SnsTopicArn);
                }
            }
        }
Exemple #13
0
        public void Handle(TlsRptEntityState state, Common.Messaging.Abstractions.Message message)
        {
            if (message is TlsRptRecordsEvaluated evaluationResult)
            {
                List <Message> currentMessages = state.Messages.Where(_ => _.MessageDisplay != MessageDisplay.Prompt).ToList();

                List <Message> newMessages = evaluationResult.Messages.Where(_ => _.MessageDisplay != MessageDisplay.Prompt).ToList();

                List <Message> addedMessages = newMessages.Except(currentMessages, _messageEqualityComparer).ToList();
                if (addedMessages.Any())
                {
                    TlsRptAdvisoryAdded advisoryAdded = new TlsRptAdvisoryAdded(state.Id, addedMessages.Select(x => new AdvisoryMessage((MessageType)x.MessageType, x.Text, (Notifications.MessageDisplay)x.MessageDisplay)).ToList());
                    _dispatcher.Dispatch(advisoryAdded, _tlsRptEntityConfig.SnsTopicArn);
                }

                List <Message> removedMessages = currentMessages.Except(newMessages, _messageEqualityComparer).ToList();
                if (removedMessages.Any())
                {
                    TlsRptAdvisoryRemoved advisoryRemoved = new TlsRptAdvisoryRemoved(state.Id, removedMessages.Select(x => new AdvisoryMessage((MessageType)x.MessageType, x.Text, (Notifications.MessageDisplay)x.MessageDisplay)).ToList());
                    _dispatcher.Dispatch(advisoryRemoved, _tlsRptEntityConfig.SnsTopicArn);
                }
            }
        }
Exemple #14
0
        public async Task GetNoStateExistsReturnsNull()
        {
            TlsRptEntityState state = await _dao.Get(Id);

            Assert.That(state, Is.Null);
        }