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