public void CurrentDirUsedForRedirectCsvFiles() { // write empty redirects csv files var redirectsCsvFile = Path.Combine( TestData.TestData.CurrentDirectory, "redirects.csv"); File.WriteAllText( redirectsCsvFile, string.Empty); // configuration json var configurationJson = @"{ redirectCsvFiles: [ ""redirects.csv"" ], }"; // write configuration file var configurationFile = Path.Combine( TestData.TestData.CurrentDirectory, "test_configuration.json"); File.WriteAllText( configurationFile, configurationJson); IConfiguration configuration; using (var configurationJsonReader = new ConfigurationJsonReader()) { configuration = configurationJsonReader .ReadConfiguationFile(configurationFile); } Assert.IsNotNull(configuration); var redirectCsvFiles = configuration.RedirectCsvFiles.ToList(); Assert.AreEqual(1, redirectCsvFiles.Count); Assert.AreEqual( redirectsCsvFile, redirectCsvFiles[0]); }
private Configuration CreateConfiguration( string configurationFile = null) { if (string.IsNullOrEmpty(configurationFile)) { configurationFile = @"TestData\configuration.json"; } // read configuration file IConfiguration configuration; using (var configurationJsonReader = new ConfigurationJsonReader()) { configuration = configurationJsonReader .ReadConfiguationFile( Path.Combine(TestData.TestData.CurrentDirectory, configurationFile)); } return(configuration as Configuration); }
public void NonExistingRedirectCsvFilesThrowsException() { var configurationJson = @"{ redirectCsvFiles: [ ""non-existing-redirects.csv"" ], }"; // write configuration file var configurationFile = Path.Combine( TestData.TestData.CurrentDirectory, "test_configuration.json"); File.WriteAllText( configurationFile, configurationJson); using (var configurationJsonReader = new ConfigurationJsonReader()) { Assert.Throws <FileNotFoundException>(() => configurationJsonReader .ReadConfiguationFile(configurationFile)); } }
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); }
public void ReadConfigurationFile() { // write empty redirects csv files var redirects1CsvFile = Path.Combine( TestData.TestData.CurrentDirectory, "redirects1.csv"); File.WriteAllText( redirects1CsvFile, string.Empty); var redirects2CsvFile = Path.Combine( TestData.TestData.CurrentDirectory, "redirects2.csv"); File.WriteAllText( redirects2CsvFile, string.Empty); // configuration json var configurationJson = @"{{ mode: ""Export"", redirectCsvFiles: [ ""{0}"", ""{1}"" ], defaultUrl: ""http://www.oldurl.local"", oldUrlExcludePatterns: [ ""/oldurl-exclude"" ], newUrlExcludePatterns: [ ""/newurl-exclude"" ], duplicateOldUrlStrategy: ""KeepLast"", excludeOldUrlRootRedirects: ""True"", useTestHttpClient: ""True"", testHttpClientNewUrlStatusCode: ""200"", forceHttpHostPatterns: [ ""www\\.oldurl\\.local"" ], maxRedirectCount: ""50"", sampleCount: ""100"", exporter: ""WebConfig"", httpClientTimeout: 600, defaultRedirectType: ""Replace"" }}"; // write configuration file var configurationFile = Path.Combine( TestData.TestData.CurrentDirectory, "test_configuration.json"); File.WriteAllText( configurationFile, string.Format( configurationJson, redirects1CsvFile.Replace("\\", "\\\\"), redirects2CsvFile.Replace("\\", "\\\\"))); IConfiguration configuration; using (var configurationJsonReader = new ConfigurationJsonReader()) { configuration = configurationJsonReader .ReadConfiguationFile(configurationFile); } var urlFormatter = new UrlFormatter(); Assert.IsNotNull(configuration); Assert.AreEqual( Mode.Export, configuration.Mode); var redirectCsvFiles = configuration.RedirectCsvFiles.ToList(); Assert.AreEqual(2, redirectCsvFiles.Count); Assert.AreEqual( redirects1CsvFile, redirectCsvFiles[0]); Assert.AreEqual( redirects2CsvFile, redirectCsvFiles[1]); Assert.AreEqual( "http://www.oldurl.local/", urlFormatter.Format(configuration.DefaultUrl)); Assert.AreEqual( "/oldurl-exclude", configuration.OldUrlExcludePatterns.FirstOrDefault()); Assert.AreEqual( "/newurl-exclude", configuration.NewUrlExcludePatterns.FirstOrDefault()); Assert.AreEqual( DuplicateUrlStrategy.KeepLast, configuration.DuplicateOldUrlStrategy); Assert.AreEqual( true, configuration.ExcludeOldUrlRootRedirects); Assert.AreEqual( true, configuration.UseTestHttpClient); Assert.AreEqual( 200, configuration.TestHttpClientNewUrlStatusCode); Assert.AreEqual( "www\\.oldurl\\.local", configuration.ForceHttpHostPatterns.FirstOrDefault()); Assert.AreEqual( 50, configuration.MaxRedirectCount); Assert.AreEqual( 100, configuration.SampleCount); Assert.AreEqual( "WebConfig", configuration.Exporter); Assert.AreEqual( 600, configuration.HttpClientTimeout); Assert.AreEqual( RedirectType.Replace, configuration.DefaultRedirectType); }