public async Task DoesntReturnErrorForServerFailureResponse()
        {
            const string error = "Server Failure";

            IDnsQueryResponse response = CreateError(error);

            A.CallTo(() => _lookupClient.QueryAsync(A <string> ._, QueryType.TXT, QueryClass.IN, CancellationToken.None)).Returns(response);

            TlsRptRecordInfos tlsRptRecordInfos = await _dnsClient.GetTlsRptRecords(string.Empty);

            Assert.That(tlsRptRecordInfos.RecordsInfos.Count, Is.EqualTo(0));
            Assert.That(tlsRptRecordInfos.Error, Is.Null);
        }
        public async Task ReturnsErrorIfDnsQueryErrored()
        {
            const string error = "Dns call borked";

            IDnsQueryResponse response = CreateError(error);

            A.CallTo(() => _lookupClient.QueryAsync(A <string> ._, QueryType.TXT, QueryClass.IN, CancellationToken.None)).Returns(response);

            TlsRptRecordInfos tlsRptRecordInfos = await _dnsClient.GetTlsRptRecords(string.Empty);

            Assert.That(tlsRptRecordInfos.RecordsInfos.Count, Is.EqualTo(0));
            Assert.That(tlsRptRecordInfos.Error.Message, Is.EqualTo(error));
        }
        public async Task CorrecltlyObtainsTlsRptRecord()
        {
            IDnsQueryResponse response = CreateResponse(new List <string> {
                TlsRptRecord
            });

            A.CallTo(() => _lookupClient.QueryAsync(A <string> ._, QueryType.TXT, QueryClass.IN, CancellationToken.None)).Returns(response);

            TlsRptRecordInfos tlsRptRecordInfos = await _dnsClient.GetTlsRptRecords(string.Empty);

            Assert.That(tlsRptRecordInfos.RecordsInfos.Count, Is.EqualTo(1));
            Assert.That(tlsRptRecordInfos.RecordsInfos[0].Record, Is.EqualTo(TlsRptRecord));
        }
Esempio n. 4
0
        public EvaluationResult <TlsRptRecords> Parse(TlsRptRecordInfos tlsRptRecordInfos)
        {
            List <TlsRptRecord> records = new List <TlsRptRecord>();
            List <Error>        errors  = new List <Error>();

            foreach (TlsRptRecordInfo tlsRptRecordInfo in tlsRptRecordInfos.RecordsInfos)
            {
                EvaluationResult <TlsRptRecord> tlsRptRecord = _parser.Parse(tlsRptRecordInfo);
                records.Add(tlsRptRecord.Item);
                errors.AddRange(tlsRptRecord.Errors);
            }

            TlsRptRecords tlsRptRecords = new TlsRptRecords(tlsRptRecordInfos.Domain, records, tlsRptRecordInfos.MessageSize);

            return(new EvaluationResult <TlsRptRecords>(tlsRptRecords, errors));
        }
        public async Task <TlsRptPollResult> Process(string domain)
        {
            TlsRptRecordInfos tlsRptRecordInfos = await _dnsClient.GetTlsRptRecords(domain);

            if (!_config.AllowNullResults && (tlsRptRecordInfos.HasError ||
                                              tlsRptRecordInfos.RecordsInfos.TrueForAll(x => string.IsNullOrWhiteSpace(x.Record))))
            {
                throw new TlsRptPollerException($"Unable to retrieve TLS-RPT records for {domain}.");
            }

            if (tlsRptRecordInfos.HasError)
            {
                return(new TlsRptPollResult(domain, tlsRptRecordInfos.Error));
            }

            EvaluationResult <TlsRptRecords> parsingResult = _parser.Parse(tlsRptRecordInfos);

            EvaluationResult <TlsRptRecords> evaluationResult = await _evaluator.Evaluate(parsingResult.Item);

            return(new TlsRptPollResult(evaluationResult.Item, parsingResult.Errors.Concat(evaluationResult.Errors).ToList()));
        }