/// <summary> /// Method ParseFile convert initial file's lines to XML /// </summary> /// <param name="filePath"> line of initial file</param> /// <returns>List of UrlAddresses that was taking from initial file</returns> public List <UrlAddress> ParseFile(string filePath) { var file = new StreamReader(filePath); var urlAddresses = new List <UrlAddress>(); try { string line; while ((line = file.ReadLine()) != null) { var url = new Uri(line); var urlAddress = new UrlAddress { HostName = url.Host }; if (url.Segments.Length != 0) { var uri = new UriTag(); List <Segment> listSeg = new List <Segment>(); var seg = new Segment(); for (var i = 1; i < url.Segments.Length - 1; i++) { seg.Segments = url.Segments[i].Remove(url.Segments[i].Length - 1); listSeg.Add(seg); } seg.Segments = url.Segments[url.Segments.Length - 1]; listSeg.Add(seg); uri.Segments = listSeg; urlAddress.UriTags = uri; } if (!string.IsNullOrEmpty(url.Query)) { var param = url.Query.Remove(0, 1).Split('&'); foreach (var s in param) { var par = s.Split('='); var urlPar = new Parameter() { Key = par[0], Value = par[1] }; urlAddress.Parametrs.Add(urlPar); } } urlAddresses.Add(urlAddress); } } catch (Exception) { Logger?.Info("Data is not valid."); } return(urlAddresses); }
public void EmptyStringProvidedUriReturnedWithError() { DmarcUri dmarcUri = new DmarcUri(null); dmarcUri.AddError(new Error(ErrorType.Error, string.Empty)); A.CallTo(() => _dmarcUriParser.Parse(null)).Returns(dmarcUri); UriTag uriTag = _parser.Parse(string.Empty); Assert.That(uriTag.Uri, Is.SameAs(dmarcUri)); Assert.That(uriTag.MaxReportSize, Is.Null); Assert.That(uriTag.AllErrorCount, Is.EqualTo(1)); A.CallTo(() => _dmarcUriParser.Parse(null)).MustHaveHappened(Repeated.Exactly.Once); A.CallTo(() => _maxReportSizeParser.Parse(SizeString)).MustNotHaveHappened(); }
public void OnlyUriTokenPresentUriWithNullMaxReportSizeReturned() { string value = $"{UriString}"; DmarcUri dmarcUri = new DmarcUri(new Uri(UriString)); A.CallTo(() => _dmarcUriParser.Parse(UriString)).Returns(dmarcUri); UriTag uriTag = _parser.Parse(value); Assert.That(uriTag.Uri, Is.SameAs(dmarcUri)); Assert.That(uriTag.MaxReportSize, Is.Null); Assert.That(uriTag.ErrorCount, Is.Zero); A.CallTo(() => _dmarcUriParser.Parse(UriString)).MustHaveHappened(Repeated.Exactly.Once); A.CallTo(() => _maxReportSizeParser.Parse(SizeString)).MustNotHaveHappened(); }
public UriTag Parse(string uriString) { string[] tokens = uriString?.Split(new[] { Separator }, StringSplitOptions.RemoveEmptyEntries).Select(_ => _.Trim()).ToArray() ?? new string[0]; DmarcUri dmarcUri = _dmarcUriParser.Parse(tokens.ElementAtOrDefault(0)); MaxReportSize maxReportSize = tokens.Length > 1 ? _maxReportSizeParser.Parse(tokens[1]) : null; UriTag uriTag = new UriTag(uriString, dmarcUri, maxReportSize); if (tokens.Length > 2) { string unexpectedValues = string.Join(",", tokens.Skip(2)); string unexpectedValuesErrorMessage = string.Format(DmarcParserResource.UnexpectedValueErrorMessage, unexpectedValues, "uri", unexpectedValues); uriTag.AddError(new Error(ErrorType.Error, unexpectedValuesErrorMessage)); } return(uriTag); }
public void ExtraTokensFoundUriReturnedWithError() { string value = $"{UriString}!{SizeString}!{SizeString}"; DmarcUri dmarcUri = new DmarcUri(new Uri(UriString)); A.CallTo(() => _dmarcUriParser.Parse(UriString)).Returns(dmarcUri); MaxReportSize maxReportSize = new MaxReportSize(50, Unit.M); A.CallTo(() => _maxReportSizeParser.Parse(SizeString)).Returns(maxReportSize); UriTag uriTag = _parser.Parse(value); Assert.That(uriTag.Uri, Is.SameAs(dmarcUri)); Assert.That(uriTag.MaxReportSize, Is.SameAs(maxReportSize)); Assert.That(uriTag.ErrorCount, Is.EqualTo(1)); A.CallTo(() => _dmarcUriParser.Parse(UriString)).MustHaveHappened(Repeated.Exactly.Once); A.CallTo(() => _maxReportSizeParser.Parse(SizeString)).MustHaveHappened(Repeated.Exactly.Once); }
public void UriAndMaxReportSizeTokensPresentFullyFormedUriTagReturned() { string value = $"{UriString}!{SizeString}"; DmarcUri dmarcUri = new DmarcUri(new Uri(UriString)); A.CallTo(() => _dmarcUriParser.Parse(UriString)).Returns(dmarcUri); MaxReportSize maxReportSize = new MaxReportSize(50, Unit.M); A.CallTo(() => _maxReportSizeParser.Parse(SizeString)).Returns(maxReportSize); UriTag uriTag = _parser.Parse(value); Assert.That(uriTag.Uri, Is.SameAs(dmarcUri)); Assert.That(uriTag.MaxReportSize, Is.SameAs(maxReportSize)); Assert.That(uriTag.ErrorCount, Is.Zero); A.CallTo(() => _dmarcUriParser.Parse(UriString)).MustHaveHappened(Repeated.Exactly.Once); A.CallTo(() => _maxReportSizeParser.Parse(SizeString)).MustHaveHappened(Repeated.Exactly.Once); }