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]);
        }
コード例 #2
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));
            }
        }
コード例 #4
0
        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);
        }