public static IUnleashServiceCollection WithMemoryToggleCollectionCache(this IUnleashServiceCollection serviceCollection, Action <MemoryToggleCollectionCacheSettings> settingsConfigurator = null)
        {
            if (serviceCollection == null)
            {
                throw new ArgumentNullException(nameof(serviceCollection));
            }

            var settings = new MemoryToggleCollectionCacheSettings();

            if (serviceCollection.UnleashConfiguration != null)
            {
                var section = serviceCollection.UnleashConfiguration.GetSection("Caching:Memory");
                section.Bind(settings);
            }

            settingsConfigurator?.Invoke(settings);

            SettingsValidator.Validate(settings);

            serviceCollection.AddSingleton(settings);

            serviceCollection.AddMemoryCache();
            serviceCollection.WithToggleCollectionCache <MemoryToggleCollectionCache>();

            return(serviceCollection);
        }
Exemple #2
0
        public async Task UpdateAppSetting(AppSettingsKey key, string value)
        {
            var message = SettingsValidator.Validate(key, value);

            if (message != "")
            {
                throw new ArgumentException(message);
            }

            var keyStr     = key.ToString();
            var appSetting = await _context.AppSettings.FirstOrDefaultAsync(s => s.Key == keyStr).ConfigureAwait(false);

            if (appSetting == null)
            {
                await _context.AppSettings.AddAsync(new AppSetting
                {
                    Key          = keyStr,
                    Value        = value,
                    ModifiedDate = DateTime.UtcNow
                });

                await _context.SaveChangesAsync().ConfigureAwait(false);
            }
            else
            {
                if (appSetting.Value != value)
                {
                    appSetting.Value        = value;
                    appSetting.ModifiedDate = DateTime.UtcNow;
                    await _context.SaveChangesAsync().ConfigureAwait(false);
                }
            }
        }
Exemple #3
0
        public static IUnleashServiceCollection WithNewtonsoftJsonSerializer(this IUnleashServiceCollection serviceCollection,
                                                                             Action <NewtonsoftJsonSerializerSettings> settingsConfigurator = null)
        {
            if (serviceCollection == null)
            {
                throw new ArgumentNullException(nameof(serviceCollection));
            }

            var settings = new NewtonsoftJsonSerializerSettings();

            if (serviceCollection.UnleashConfiguration != null)
            {
                var section = serviceCollection.UnleashConfiguration.GetSection("Serialization:NewtonsoftJson");
                section.Bind(settings);
            }

            settingsConfigurator?.Invoke(settings);

            SettingsValidator.Validate(settings);

            serviceCollection.AddSingleton(settings);

            serviceCollection.WithJsonSerializer <NewtonsoftJsonSerializer>();

            return(serviceCollection);
        }
        private ValidationResult DeserializeAndValidate(string json)
        {
            Settings settings          = JsonConvert.DeserializeObject <Settings>(json);
            var      settingsValidator = new SettingsValidator();

            return(settingsValidator.Validate(settings));
        }
        private static void RunValidation(MockupJsonModel jsonConfig, Dictionary <string, HashSet <string> > requiredParameters = null, bool failureExpected = true)
        {
            IUserConfig userConfig = jsonConfig.GetUserConfig();

            var settingsValidator = new SettingsValidator(
                userConfig,
                new MockupAdminConfig().GetFabricSettingsMetadata(),
                requiredParameters == null ? new Dictionary <string, HashSet <string> >() : requiredParameters,
                clusterManifestGeneratorSettings);

            if (failureExpected)
            {
                Verify.Throws <ValidationException>(() => settingsValidator.Validate(true));
            }
            else
            {
                Verify.NoThrow(() => settingsValidator.Validate(true));
            }
        }
            public void validation_should_fail_for_no_options()
            {
                // Arrange
                var settings = new Settings();
                var target = new SettingsValidator(settings);

                // Act
                var result = target.Validate();

                // Assert
                Assert.NotNull(result.ErrorMessages);
                Assert.Equal(3, result.ErrorMessages.Count);
            }
Exemple #7
0
        private void OnExecute()
        {
            if (!File.Exists(SettingsFile))
            {
                Console.WriteLine($"Can't find file {SettingsFile}");
                return;
            }

            if (!File.Exists(MovesFile))
            {
                Console.WriteLine($"Can't find file {MovesFile}");
                return;
            }

            var settingsText = File.ReadAllText(SettingsFile);
            var movesText    = File.ReadAllLines(MovesFile);

            Settings settings = null;

            FluentValidation.Results.ValidationResult settingsValidationResult = null;

            try
            {
                var settingsValidator = new SettingsValidator();

                settings = JsonConvert.DeserializeObject <Settings>(settingsText);
                settingsValidationResult = settingsValidator.Validate(settings);

                if (!settingsValidationResult.IsValid)
                {
                    foreach (var error in settingsValidationResult.Errors)
                    {
                        Console.WriteLine(error.ErrorMessage);
                    }
                }
            }
            catch (JsonException ex)
            {
                Console.WriteLine("The settings file contains an invalid configuration.");
                Console.WriteLine(ex.Message);
            }

            if (settingsValidationResult?.IsValid != true)
            {
                return;
            }

            var turtleFactory = new TurtleFactory(settings);

            ProcessMoves(turtleFactory, settings, movesText);
        }
        internal static IUnleashServiceCollection AddUnleash(this IServiceCollection serviceCollection, Action <UnleashSettings> settingsInitializer, IConfiguration configuration, Action <UnleashSettings> settingsOverrider)
        {
            if (serviceCollection == null)
            {
                throw new ArgumentNullException(nameof(serviceCollection));
            }

            var result = new UnleashServiceCollection(serviceCollection, configuration);

            var settings = new UnleashSettings();

            settingsInitializer?.Invoke(settings);
            configuration?.Bind(settings);
            settingsOverrider?.Invoke(settings);
            SettingsValidator.Validate(settings);

            var unleashApiClientRequestHeaders = new UnleashApiClientRequestHeaders
            {
                AppName           = settings.AppName,
                CustomHttpHeaders = settings.CustomHttpHeaders,
                InstanceTag       = settings.InstanceTag
            };

            serviceCollection.AddSingleton(settings);
            serviceCollection.AddSingleton <IRandom>(new UnleashRandom());
            serviceCollection.AddSingleton(serviceProvider => serviceProvider.GetService <IEnumerable <IStrategy> >()?.ToArray() ?? Array.Empty <IStrategy>());

            // Internal services
            serviceCollection.AddSingleton <NewtonsoftJsonSerializerSettings>();
            serviceCollection.AddSingleton <IJsonSerializer, NewtonsoftJsonSerializer>();
            serviceCollection.AddSingleton(unleashApiClientRequestHeaders);

            serviceCollection.AddSingleton <IHttpClientFactory, DefaultHttpClientFactory>();
            serviceCollection.AddSingleton <IUnleashApiClientFactory, DefaultUnleashApiClientFactory>();

            serviceCollection.AddSingleton <IUnleashApiClient, UnleashApiClient>();

            serviceCollection.AddSingleton <IUnleashServices, UnleashServices>();

            // Default: SystemTimer scheduled task manager
            serviceCollection.AddSingleton <IUnleashScheduledTaskManager, SystemTimerScheduledTaskManager>();

            // Default: Disk-based JSON toggle collection cache
            serviceCollection.AddSingleton <IFileSystem, FileSystem>();
            serviceCollection.AddSingleton <IToggleCollectionCache, FileSystemToggleCollectionCache>();

            serviceCollection.AddScoped <IUnleashContextProvider, DefaultUnleashContextProvider>();
            serviceCollection.AddScoped <IUnleash, Unleash>();

            return(result);
        }
        public void InvalidSettingsNoMinesTest()
        {
            string   json              = @"{
                              'board': {
                                'width': 7,
                                'height': 6
                              },
                                'startTile':{'x':0,'y':0},
                                'exitTile':{'x':6, 'y':5},
                                'direction':'North'
                            }";
            Settings settings          = JsonConvert.DeserializeObject <Settings>(json);
            var      settingsValidator = new SettingsValidator();

            Assert.False(settingsValidator.Validate(settings).IsValid);
        }
            public void validation_should_pass_for_minimal_arguments()
            {
                // Arrange
                var settings = new Settings
                    {
                        InputDir = "C:\\",
                        OutputDir = "C:\\",
                        Width = 120
                    };
                var target = new SettingsValidator(settings);

                // Act
                var result = target.Validate();

                // Assert
                Assert.NotNull(result);
                Assert.Equal(0, result.ErrorMessages.Count);
            }
            public void validation_should_pass_for_encrypt_option_input_filename_and_password()
            {
                // Arrange
                var settings = new Settings
                    {
                        EncryptAction = EncryptAction.Encrypt,
                        InputFileName = "test",
                        Password = "******"
                    };
                var target = new SettingsValidator();

                // Act
                var result = target.Validate(settings);

                // Assert
                Assert.NotNull(result);
                Assert.Equal(0, result.Count);
            }
            public void validation_should_fail_for_filename_which_does_not_follow_convention()
            {
                // Arrange
                var settings = new Settings
                    {
                        EncryptAction = EncryptAction.Decrypt,
                        InputFileName = "wrongname",
                        Password = "******"
                    };
                var target = new SettingsValidator();

                // Act
                var result = target.Validate(settings);

                // Assert
                Assert.NotNull(result);
                Assert.Equal(1, result.Count);
            }
        /// <summary>
        /// Send an Email to the customer when he/she is new
        /// </summary>
        private async void SendEmail(object arg)
        {
            bool again = false;

            do
            {
                try
                {
                    SettingsValidator sv = new SettingsValidator();
                    var result           = sv.Validate(settings);
                    if (!result.IsValid)
                    {
                        throw new InvalidOperationException(result.Errors[0].ErrorMessage);
                    }

                    if (IsValid())
                    {
                        view.Loading(true);
                        view.Message("Enviando correo...");
                        IMailBuilder mailBuilder = new WelcomeMailBuilder(settings.Email, ViewModel.Customer.Email, ViewModel.Customer.Password);
                        await Task.Run(() => ServiceLocator.Default.GetService <MailingService>().Send(mailBuilder.BuildMessage(), settings.EmailPwd));

                        view.Message("Correo enviado");
                    }
                    else
                    {
                        view.Message("Ingrese los datos faltantes del cliente");
                    }
                }
                catch (Exception ex)
                {
                    again = DialogResult.Yes == view.Message("Error de servicio", $"{ex.Message}{Environment.NewLine}¿Reintentar?", MessageBoxButtons.YesNo, MessageBoxIcon.Error);
                }
                finally
                {
                    view.Message(string.Empty);
                    view.Loading(false);
                }
            } while (again);
        }
        public void Execute()
        {
            SettingsValidator.Validate();

            var directory = SettingsEvaluator.GetApTwoDirectory();

            var files = DirectoryDescendentFilesEvaluator.Evaluate(directory).OrderBy(x => x).ToList();

            var loop = true;

            while (loop)
            {
                Ux.WriteLine(string.Format("Analysing: {0}", directory));

                Ux.AddOption("Exit", () => loop = false);

                Ux.AddOptionWithHeadingSpace("View all file extensions", () => FileExtensionPresenter.Present(files));
                Ux.AddOption("View all files", () => ListPresenter.Present(files));
                Ux.AddOption("View filtered extensions", () => FilteredFilesPresenter.PresentFilteredExtensions());
                Ux.AddOption("View filtered files", () => FilteredFilesPresenter.PresentFilteredFiles(files));
                Ux.AddOption("View filtered file statistics", () => FilteredFilesStatsPresenter.Present(files));

                Ux.AddOptionWithHeadingSpace("Count inline CSS on filtered files", () =>
                {
                    var results = CssStatsPresenter.Present(FilteredFilesEvaluator.Evaluate(files));
                    Ux.DisplayBoolOption("Store detailed CSS results to disk?", () => CssStatsStorageService.Store(results, string.Empty), null);
                });

                Ux.AddOptionWithHeadingSpace("Count inline Javascript on filtered files", () =>
                {
                    var results = JavaScriptStatsPresenter.Present(FilteredFilesEvaluator.Evaluate(files));
                    Ux.DisplayBoolOption("Store detailed JavaScript results to disk?", () => JavaScriptStatsStorageService.Store(results, string.Empty), null);
                });

                Ux.AddOptionWithHeadingSpace("Count inline Javascript and CSS on specific file...", () => JavaScriptFileStatsPresenter.Present());

                Ux.DisplayOptions("Please choose an option");
            }
        }