Пример #1
0
        public void Test(string record)
        {
            TlsRptRecordInfo tlsRptRecordInfo = new TlsRptRecordInfo(string.Empty, new List <string> {
                record
            });

            EvaluationResult <TlsRptRecord> result = _tlsRptRecordParser.Parse(tlsRptRecordInfo);

            Assert.That(result.Item.Tags.Count, Is.EqualTo(1));
            Assert.That(result.Item.Tags.First(), Is.TypeOf <VersionTag>());
            Assert.That(result.Errors, Is.Empty);
        }
Пример #2
0
        public EvaluationResult <TlsRptRecord> Parse(TlsRptRecordInfo tlsRptRecordInfo)
        {
            List <Tag>   tags   = new List <Tag>();
            List <Error> errors = new List <Error>();

            string[] tokens = tlsRptRecordInfo.Record
                              .Split(TagDelimiter)
                              .Select(_ => _.Trim())
                              .Where(_ => !string.IsNullOrWhiteSpace(_))
                              .ToArray();

            foreach (string token in tokens)
            {
                string[] tagParts = token.Split(TagPartDelimiter);

                if (tagParts.Length == 2)
                {
                    string tagKey   = tagParts[0].ToLower();
                    string tagValue = tagParts[1];

                    if (_parsers.TryGetValue(tagKey, out ITagParser tagParser))
                    {
                        EvaluationResult <Tag> tag = tagParser.Parse(tags, tlsRptRecordInfo.Record, token, tagKey, tagValue);

                        int tagInstanceCount = tags.Count(_ => _.GetType() == tag.Item.GetType());

                        if (tagInstanceCount == tagParser.MaxOccurrences)
                        {
                            tag.Errors.Add(new MaxOccurrencesExceededError(tagKey, tagParser.MaxOccurrences, tagInstanceCount));
                        }

                        tags.Add(tag.Item);
                        errors.AddRange(tag.Errors);
                    }
                    else
                    {
                        tags.Add(new UnknownTag(token));
                        errors.Add(new UnknownTagError(tagKey, tagValue));
                    }
                }
                else
                {
                    tags.Add(new MalformedTag(token));
                    errors.Add(new MalformedTagError(token));
                }
            }

            TlsRptRecord tlsRptRecord = new TlsRptRecord(tlsRptRecordInfo.Domain, tlsRptRecordInfo.RecordParts, tags);

            return(new EvaluationResult <TlsRptRecord>(tlsRptRecord, errors));
        }
Пример #3
0
        public void UnknownTagGeneratesUnknownTagError()
        {
            string record = "rua=mailto:[email protected]";

            TlsRptRecordInfo tlsRptRecordInfo = new TlsRptRecordInfo(string.Empty, new List <string> {
                record
            });

            EvaluationResult <TlsRptRecord> result = _tlsRptRecordParser.Parse(tlsRptRecordInfo);

            Assert.That(result.Item.Tags.Count, Is.EqualTo(1));
            Assert.That(result.Item.Tags.First(), Is.TypeOf <UnknownTag>());
            Assert.That(result.Errors.Count, Is.EqualTo(1));
            Assert.That(result.Errors.First(), Is.TypeOf <UnknownTagError>());
        }
Пример #4
0
        public void MalformedTagGeneratesMalformedTagError()
        {
            string record = "v=TLSRPTv1=TLSRPTv1";

            TlsRptRecordInfo tlsRptRecordInfo = new TlsRptRecordInfo(string.Empty, new List <string> {
                record
            });

            EvaluationResult <TlsRptRecord> result = _tlsRptRecordParser.Parse(tlsRptRecordInfo);

            Assert.That(result.Item.Tags.Count, Is.EqualTo(1));
            Assert.That(result.Item.Tags.First(), Is.TypeOf <MalformedTag>());
            Assert.That(result.Errors.Count, Is.EqualTo(1));
            Assert.That(result.Errors.First(), Is.TypeOf <MalformedTagError>());
        }
Пример #5
0
        public void MaxOccurrencesExceededGeneratesMaxOccurrencesExceededError()
        {
            string record = "v=TLSRPTv1;v=TLSRPTv1";

            TlsRptRecordInfo tlsRptRecordInfo = new TlsRptRecordInfo(string.Empty, new List <string> {
                record
            });

            EvaluationResult <TlsRptRecord> result = _tlsRptRecordParser.Parse(tlsRptRecordInfo);

            Assert.That(result.Item.Tags.Count, Is.EqualTo(2));
            Assert.That(result.Item.Tags[0], Is.TypeOf <VersionTag>());
            Assert.That(result.Item.Tags[1], Is.TypeOf <VersionTag>());
            Assert.That(result.Errors.Count, Is.EqualTo(1));
            Assert.That(result.Errors[0], Is.TypeOf <MaxOccurrencesExceededError>());
        }