예제 #1
0
        /// <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();
        }
예제 #4
0
        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);
        }