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); }
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)); }
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>()); }
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>()); }
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>()); }