public void ValidateProcessedRedirectsIncludingNotMatchingNewUrl()
        {
            var configuration =
                TestData.TestData.DefaultConfiguration;
            var urlFormatter = new UrlFormatter();
            var urlParser    = new UrlParser();
            var urlHelper    = new UrlHelper(
                configuration,
                urlParser,
                urlFormatter);
            var processedRedirectValidator =
                new ProcessedRedirectValidator(
                    configuration,
                    urlHelper);

            var validProcessedRedirects = _processedRedirects
                                          .Where(x => processedRedirectValidator.IsValid(x, true))
                                          .ToList();

            Assert.AreEqual(
                2,
                validProcessedRedirects.Count);

            var urlResponseResult1 = validProcessedRedirects[0]
                                     .Results
                                     .OfType <UrlResponseResult>()
                                     .FirstOrDefault(r => r.Url != null && r.Url != null);

            Assert.AreEqual(
                "http://www.test2.local/url3",
                validProcessedRedirects[0].ParsedRedirect.OldUrl.Formatted);
            Assert.AreEqual(
                "http://www.test2.local/url9",
                urlResponseResult1.Url);

            var urlResponseResult2 = validProcessedRedirects[1]
                                     .Results
                                     .OfType <UrlResponseResult>()
                                     .FirstOrDefault(r => r.Url != null && r.Url != null);

            Assert.IsNotNull(urlResponseResult2);
            Assert.AreEqual(
                "http://www.test2.local/url4",
                validProcessedRedirects[1].ParsedRedirect.OldUrl.Formatted);
            Assert.AreEqual(
                "http://www.test2.local/url10",
                urlResponseResult2.Url);
        }
        public void ExcludeRedirectsWhereOldUrlReturnedStatusCode200()
        {
            var configuration =
                TestData.TestData.DefaultConfiguration;
            var urlFormatter = new UrlFormatter();
            var urlParser    = new UrlParser();
            var urlHelper    = new UrlHelper(
                configuration,
                urlParser,
                urlFormatter);
            var processedRedirectValidator =
                new ProcessedRedirectValidator(
                    configuration,
                    urlHelper);

            var processedRedirects = new[]
            {
                new ProcessedRedirect
                {
                    ParsedRedirect = _redirectParser.ParseRedirect(
                        new Redirect
                    {
                        OldUrl = "http://www.test.local/url1",
                        NewUrl = "http://www.test.local/url2"
                    }),
                    Results = new[]
                    {
                        new UrlResponseResult
                        {
                            Type       = ResultTypes.UrlResponse,
                            Url        = "http://www.test.local/url1",
                            StatusCode = 200
                        }
                    }
                }
            };

            var validProcessedRedirects = processedRedirects
                                          .Where(x => processedRedirectValidator.IsValid(x, false))
                                          .ToList();

            Assert.AreEqual(
                0,
                validProcessedRedirects.Count);
        }
Ejemplo n.º 3
0
        public void BuildRedirectReportNotMatchingNewUrl()
        {
            // create and build filtered redirect report
            var configuration =
                TestData.TestData.DefaultConfiguration;
            var urlFormatter = new UrlFormatter();
            var urlParser    = new UrlParser();
            var urlHelper    = new UrlHelper(
                configuration,
                urlParser,
                urlFormatter);
            var processedRedirectValidator = new ProcessedRedirectValidator(
                configuration,
                urlHelper);
            var outputRedirectBuilder = new OutputRedirectBuilder
                                            (processedRedirectValidator);
            var outputRedirectReport = new OutputRedirectReport(
                outputRedirectBuilder,
                true);

            outputRedirectReport.Build(_redirectProcessingResult);

            // verify filtered redirect records are build
            var records = outputRedirectReport
                          .GetRecords()
                          .ToList();

            Assert.AreEqual(2, records.Count);
            Assert.AreEqual(
                "http://www.test2.local/url3",
                records[0].OldUrl);
            Assert.AreEqual(
                "http://www.test2.local/url9",
                records[0].NewUrl);
            Assert.AreEqual(
                "http://www.test2.local/url4",
                records[1].OldUrl);
            Assert.AreEqual(
                "http://www.test2.local/url10",
                records[1].NewUrl);
        }
Ejemplo n.º 4
0
        public void BuildOutputRedirects()
        {
            // create and build filtered redirect report
            var configuration =
                TestData.TestData.DefaultConfiguration;
            var urlFormatter = new UrlFormatter();
            var urlParser    = new UrlParser();
            var urlHelper    = new UrlHelper(
                configuration,
                urlParser,
                urlFormatter);
            var processedRedirectValidator = new ProcessedRedirectValidator(
                configuration,
                urlHelper);
            var outputRedirectBuilder = new OutputRedirectBuilder
                                            (processedRedirectValidator);

            var validOutputRedirects = _redirectProcessingResult.ProcessedRedirects
                                       .Select(x => outputRedirectBuilder.Build(x))
                                       .Where(x => x.ValidMatchingOriginalNewUrl || x.ValidNotMatchingOriginalNewUrl)
                                       .ToList();

            // verify valid output redirects
            Assert.AreEqual(2, validOutputRedirects.Count);
            Assert.AreEqual(
                "http://www.test2.local/url3",
                validOutputRedirects[0].OldUrl);
            Assert.AreEqual(
                "http://www.test2.local/url9",
                validOutputRedirects[0].NewUrl);
            Assert.AreEqual(
                "http://www.test2.local/url4",
                validOutputRedirects[1].OldUrl);
            Assert.AreEqual(
                "http://www.test2.local/url10",
                validOutputRedirects[1].NewUrl);
        }
Ejemplo n.º 5
0
        public void BuildProcessedRedirectReport()
        {
            var oldUrlRaw = "http://www.test.local/old";
            var newUrlRaw = "http://www.test.local/new";

            var configuration  = TestData.TestData.DefaultConfiguration;
            var parsedRedirect = TestData.TestData.GetParsedRedirects(
                configuration,
                new[]
            {
                new Redirect
                {
                    OldUrl = oldUrlRaw,
                    NewUrl = newUrlRaw
                }
            })
                                 .FirstOrDefault();

            var redirectProcessingResult = new RedirectProcessingResult
            {
                ProcessedRedirects = new[]
                {
                    new ProcessedRedirect
                    {
                        ParsedRedirect = parsedRedirect,
                        Results        = new []
                        {
                            new Result
                            {
                                Type    = ResultTypes.ExcludedRedirect,
                                Message = ResultTypes.ExcludedRedirect,
                                Url     = newUrlRaw
                            },
                            new Result
                            {
                                Type    = ResultTypes.DuplicateOfFirst,
                                Message = ResultTypes.DuplicateOfFirst,
                                Url     = newUrlRaw
                            },
                            new Result
                            {
                                Type    = ResultTypes.DuplicateOfLast,
                                Message = ResultTypes.DuplicateOfLast,
                                Url     = newUrlRaw
                            }
                        }
                    }
                }
            };

            // create and build processed redirect report
            var urlHelper = new UrlHelper(
                configuration,
                new UrlParser(),
                new UrlFormatter());
            var processedRedirectValidator =
                new ProcessedRedirectValidator(
                    configuration,
                    urlHelper);
            var outputRedirectBuilder = new OutputRedirectBuilder
                                            (processedRedirectValidator);
            var processedRedirectReport = new ProcessedRedirectReport(
                outputRedirectBuilder);

            processedRedirectReport.Build(redirectProcessingResult);

            // verify processed redirect records are build
            var records = processedRedirectReport
                          .GetRecords()
                          .ToList();

            Assert.AreEqual(1, records.Count);
            Assert.AreEqual(
                oldUrlRaw,
                records[0].OriginalOldUrl);
            Assert.AreEqual(
                newUrlRaw,
                records[0].OriginalNewUrl);
            Assert.AreEqual(
                oldUrlRaw,
                records[0].ParsedOldUrl);
            Assert.AreEqual(
                newUrlRaw,
                records[0].ParsedNewUrl);

            Assert.AreEqual(
                3,
                records[0].ResultCount);
            Assert.AreEqual(
                string.Join(",", new []
            {
                ResultTypes.DuplicateOfFirst,
                ResultTypes.DuplicateOfLast,
                ResultTypes.ExcludedRedirect
            }),
                records[0].ResultTypes);

            Assert.AreEqual(
                true,
                records[0].ExcludedRedirect);
            Assert.AreEqual(
                ResultTypes.ExcludedRedirect,
                records[0].ExcludedRedirectMessage);
            Assert.AreEqual(
                newUrlRaw,
                records[0].ExcludedRedirectUrl);

            Assert.AreEqual(
                true,
                records[0].DuplicateOfFirst);
            Assert.AreEqual(
                ResultTypes.DuplicateOfFirst,
                records[0].DuplicateOfFirstMessage);
            Assert.AreEqual(
                newUrlRaw,
                records[0].DuplicateOfFirstUrl);

            Assert.AreEqual(
                true,
                records[0].DuplicateOfLast);
            Assert.AreEqual(
                ResultTypes.DuplicateOfLast,
                records[0].DuplicateOfLastMessage);
            Assert.AreEqual(
                newUrlRaw,
                records[0].DuplicateOfLastUrl);
        }
        static int Main(string[] args)
        {
            // write webredirects title
            System.Console.ForegroundColor = ConsoleColor.Cyan;
            System.Console.WriteLine(
                string.Format(
                    "FirstRealize App WebRedirects v{0}",
                    Assembly.GetExecutingAssembly().GetName().Version));
            System.Console.WriteLine(string.Empty);

            if (args.Length == 0)
            {
                Usage();
                return(1);
            }

            // expand environment variables in arguments
            args = args.Select(x =>
                               Environment.ExpandEnvironmentVariables(x))
                   .ToArray();

            var argumentParser =
                new ArgumentParser(args);

            // parse arguments
            string configurationFile = argumentParser
                                       .ParseArgumentValue("^(-c|--config)");

            // write error, if configuration file argument is not defined
            if (string.IsNullOrWhiteSpace(configurationFile))
            {
                System.Console.WriteLine(
                    "ERROR: Configuration file argument is not defined");
                Usage();
                return(1);
            }

            // write progessing redirects
            System.Console.ForegroundColor = ConsoleColor.Yellow;
            System.Console.WriteLine(
                string.Format(
                    "Reading configuration file '{0}'",
                    configurationFile));

            // write error, if configuration file doesn't exist
            if (!File.Exists(configurationFile))
            {
                System.Console.WriteLine(
                    "ERROR: Configuration file '{0}' doesn't exist",
                    configurationFile);
                Usage();
                return(1);
            }

            // load configuration file
            Configuration configuration;

            using (var configurationJsonReader = new ConfigurationJsonReader())
            {
                configuration = configurationJsonReader
                                .ReadConfiguationFile(configurationFile) as Configuration;
            }

            // write read configuration file done
            System.Console.ForegroundColor = ConsoleColor.Green;
            System.Console.WriteLine("Done");
            System.Console.WriteLine(string.Empty);

            if (string.IsNullOrWhiteSpace(configuration.OutputDir))
            {
                configuration.OutputDir = Path.GetDirectoryName(
                    configurationFile);
            }

            // TODO: Apply if needed
            //ServicePointManager.SecurityProtocol =
            //	SecurityProtocolType.Tls12;

            // create http client depending use test http client
            var         urlParser = new UrlParser();
            IHttpClient httpClient;

            if (configuration.UseTestHttpClient)
            {
                httpClient = new TestHttpClient();
            }
            else
            {
                httpClient = new HttpClient(
                    configuration,
                    urlParser);
            }

            // create redirect engine
            var urlFormatter = new UrlFormatter();
            var urlHelper    = new UrlHelper(
                configuration,
                urlParser,
                urlFormatter);
            var redirectParser = new RedirectParser(
                configuration,
                urlParser,
                urlFormatter);
            var redirectEngine = new RedirectEngine(
                configuration,
                urlHelper,
                urlParser,
                urlFormatter,
                redirectParser,
                httpClient);

            // create processed redirect validator
            var processedRedirectValidator =
                new ProcessedRedirectValidator(
                    configuration,
                    urlHelper);

            // handle processed redirect event to show progress
            redirectEngine.RedirectProcessed += (o, e) =>
            {
                System.Console.ForegroundColor = ConsoleColor.Green;
                var result = ".";
                if (e.ProcessedRedirect.Results.Any(
                        r => r.Type.Equals(ResultTypes.UnknownErrorResult)))
                {
                    System.Console.ForegroundColor = ConsoleColor.Red;
                    result = "X";
                }
                else if (e.ProcessedRedirect.Results.Any(
                             r => r.Type.Equals(ResultTypes.ExcludedRedirect)))
                {
                    System.Console.ForegroundColor = ConsoleColor.Red;
                    result = "%";
                }
                else if (e.ProcessedRedirect.Results.Any(
                             r => r.Type.Equals(ResultTypes.InvalidResult)))
                {
                    System.Console.ForegroundColor = ConsoleColor.Red;
                    result = "?";
                }
                else if (e.ProcessedRedirect.Results.Any(
                             r => r.Type.Equals(ResultTypes.IdenticalResult)))
                {
                    System.Console.ForegroundColor = ConsoleColor.Red;
                    result = "=";
                }
                else if (e.ProcessedRedirect.Results.Any(
                             r => r.Type.Equals(ResultTypes.CyclicRedirect)))
                {
                    System.Console.ForegroundColor = ConsoleColor.Red;
                    result = "O";
                }
                else if (e.ProcessedRedirect.Results.Any(
                             r => r.Type.Equals(ResultTypes.TooManyRedirects)))
                {
                    System.Console.ForegroundColor = ConsoleColor.Red;
                    result = "*";
                }
                else
                {
                    var urlResponseResult = e
                                            .ProcessedRedirect
                                            .Results
                                            .OfType <UrlResponseResult>()
                                            .FirstOrDefault(r => r.Type.Equals(ResultTypes.UrlResponse));
                    if (urlResponseResult != null && !urlHelper.AreIdentical(
                            e.ProcessedRedirect.ParsedRedirect.NewUrl.Formatted,
                            urlResponseResult.Url))
                    {
                        System.Console.ForegroundColor = ConsoleColor.Yellow;
                        result = "!";
                    }
                }

                System.Console.Write(result);
            };

            // run redirect engine
            System.Console.ForegroundColor = ConsoleColor.Yellow;
            System.Console.WriteLine("Processing redirects");

            var redirectProcessingResult =
                redirectEngine.Run();

            System.Console.ForegroundColor = ConsoleColor.Green;
            System.Console.WriteLine(string.Empty);
            System.Console.WriteLine("Done");
            System.Console.WriteLine(string.Empty);

            if (configuration.Mode == Mode.Process)
            {
                Reports(
                    configuration.OutputDir,
                    redirectProcessingResult,
                    processedRedirectValidator);
            }

            return(0);
        }