public void DbConfigConnectionString_WithDefaultDbTypeSetToOracle_ShouldBeCorrectConnectionString(SupportedDatabaseTypes?configDbType, string expectedConnectionString)
        {
            lock (TestCollectionFixtures.LockObj)
            {
                try
                {
                    var configuration = GetConfiguration(configDbType);

                    DefaultDbConfigValues.WithOracleDefaultDbType();
                    DefaultDbConfigValues.WithEmptyAdminUserAndPassword();

                    var dbConfig = configuration.CreateDbConfig();
                    dbConfig.ConnectionString.Should().Be(expectedConnectionString);
                    var useridStr = configDbType == SupportedDatabaseTypes.Postgres ? "username" : "user id";
                    dbConfig.AdminUser.Should().BeNull();
                    dbConfig.AdminPassword.Should().BeNull();
                    dbConfig.AdminConnectionString.ContainsIgnoreCase($"{useridStr}=;").Should().BeTrue();
                    dbConfig.AdminConnectionString.ContainsIgnoreCase("password=;").Should().BeTrue();
                }
                finally
                {
                    DefaultDbConfigValues.WithLibraryDefaultDbType();
                    DefaultDbConfigValues.WithLibraryDefaultAdminUserAndPassword();
                }
            }
        }
 public MsDbConfigDatabaseTargets(
     IConfiguration configuration,
     DefaultDbConfigValues dbConfigDatabaseTargets              = null,
     IPrioritizedConfigValues prioritizedConfigValues           = null,
     IEnumerable <IPrioritizedConfigKeys> prioritizedConfigKeys = null)
     : base(dbConfigDatabaseTargets ?? new MsDefaultDbConfigValues(configuration, prioritizedConfigValues, prioritizedConfigKeys))
 {
 }
Ejemplo n.º 3
0
 /// <summary>
 /// Create the DependencyInjection implementing class of <see cref="IDbConfig"/> (strong type Ms<see cref="DbConfig"/>)
 /// </summary>
 /// <param name="configuration"></param>
 /// <param name="defaultDbConfigValues"></param>
 /// <param name="dbConfigCredentials"></param>
 /// <param name="prioritizedConfigValues"></param>
 /// <param name="prioritizedConfigKeys"></param>
 /// <param name="configurationDelimiter"></param>
 /// <returns></returns>
 public static DbConfig CreateDbConfig(this IConfiguration configuration,
                                       DefaultDbConfigValues defaultDbConfigValues                = null,
                                       DbConfigCredentials dbConfigCredentials                    = null,
                                       IPrioritizedConfigValues prioritizedConfigValues           = null,
                                       IEnumerable <IPrioritizedConfigKeys> prioritizedConfigKeys = null,
                                       IConfigurationDelimiter configurationDelimiter             = null)
 {
     return(new MsDbConfig(configuration, null, defaultDbConfigValues, dbConfigCredentials, prioritizedConfigValues, prioritizedConfigKeys, configurationDelimiter));
 }
 /// <inheritdoc />
 public MsDbConnectionStringBuilderConfig(
     IConfiguration configuration,
     DefaultDbConfigValues defaultDbConfigValues                = null,
     DbConfigCredentials dbConfigCredentials                    = null,
     IPrioritizedConfigValues prioritizedConfigValues           = null,
     IEnumerable <IPrioritizedConfigKeys> prioritizedConfigKeys = null)
     : base(defaultDbConfigValues ?? new MsDefaultDbConfigValues(configuration, prioritizedConfigValues, prioritizedConfigKeys), dbConfigCredentials)
 {
 }
Ejemplo n.º 5
0
 /// <summary>
 /// Overrides properties in <see cref="DbConfigCredentials"/> with default functions from <see cref="MsDefaultDbConfigValues"/>
 /// </summary>
 /// <param name="configuration"></param>
 /// <param name="defaultDbConfigValues"></param>
 /// <param name="configurationChangedHandler"></param>
 /// <param name="prioritizedConfigValues"></param>
 /// <param name="prioritizedConfigKeys"></param>
 public MsDbConfigCredentials(
     IConfiguration configuration,
     DefaultDbConfigValues defaultDbConfigValues = null,
     IConfigurationChangedHandler configurationChangedHandler   = null,
     IPrioritizedConfigValues prioritizedConfigValues           = null,
     IEnumerable <IPrioritizedConfigKeys> prioritizedConfigKeys = null)
     : base(defaultDbConfigValues ?? new MsDefaultDbConfigValues(configuration, prioritizedConfigValues, prioritizedConfigKeys))
 {
     IgnoreManualCallOnConfigurationChanged = true;
     configurationChangedHandler?.RegisterConfigurationChangedCallback(OnConfigurationChanged);
 }
Ejemplo n.º 6
0
        /// <inheritdoc />
        public MsDbConfig(
            IConfiguration configuration, IConfigurationChangedHandler configurationChangedHandler = null,
            DefaultDbConfigValues defaultDbConfigValues                = null,
            DbConfigCredentials dbConfigCredentials                    = null,
            IPrioritizedConfigValues prioritizedConfigValues           = null,
            IEnumerable <IPrioritizedConfigKeys> prioritizedConfigKeys = null,
            IConfigurationDelimiter delimiter = null) :
            base(defaultDbConfigValues ?? new MsDefaultDbConfigValues(configuration, prioritizedConfigValues, prioritizedConfigKeys), dbConfigCredentials)
        {
            Configuration = configuration;
            configurationChangedHandler?.RegisterConfigurationChangedCallback(OnConfigurationChanged);

            ConfigurationDelimiter = delimiter?.Delimiter ?? ":";
        }
        public void DbConfigDbType_WithLibraryDefaultDbType_ShouldBeCorrectDbType(SupportedDatabaseTypes?configDbType, SupportedDatabaseTypes expectedDbType)
        {
            lock (TestCollectionFixtures.LockObj)
            {
                try
                {
                    var configuration = GetConfiguration(configDbType);

                    configuration.CreateDbConfig().DbType.Should().Be(expectedDbType);
                }
                finally
                {
                    DefaultDbConfigValues.WithLibraryDefaultDbType();
                }
            }
        }
        public void DbConfigConnectionString_WithLibraryDefaultDbType_ShouldBeCorrectConnectionString(SupportedDatabaseTypes?configDbType, string expectedConnectionString)
        {
            lock (TestCollectionFixtures.LockObj)
            {
                try
                {
                    var configuration = GetConfiguration(configDbType);

                    configuration.CreateDbConfig().ConnectionString.Should().Be(expectedConnectionString);

                    DefaultDbConfigValues.WithLibraryDefaultDbType();
                    DefaultDbConfigValues.WithLibraryDefaultAdminUserAndPassword();
                }
                finally
                {
                    DefaultDbConfigValues.WithLibraryDefaultDbType();
                    DefaultDbConfigValues.WithLibraryDefaultAdminUserAndPassword();
                }
            }
        }
Ejemplo n.º 9
0
        /// <summary>
        /// Constructor. <br/>
        /// If <paramref name="dbConfig"/> is not Null, GetDbConfig func will be initialized from <paramref name="dbConfig"/><br/>
        /// If <paramref name="dbConfig"/> is Null, GetDbConfig func will be initialized from <paramref name="configuration"/><br/>
        /// </summary>
        /// <param name="configuration"></param>
        /// <param name="dbConfig"></param>
        /// <param name="configurationChangedHandler"></param>
        /// <param name="prioritizedConfigValues"></param>
        /// <param name="prioritizedConfigKeys"></param>
        public MsDbMigrationConfig(
            IConfiguration configuration,
            IDbConfig dbConfig = null,
            IConfigurationChangedHandler configurationChangedHandler   = null,
            IPrioritizedConfigValues prioritizedConfigValues           = null,
            IEnumerable <IPrioritizedConfigKeys> prioritizedConfigKeys = null)
        {
            var prioritizedConfigKeysArray = ToPrioritizedConfigKeysArray();

            PrioritizedConfigValues = prioritizedConfigValues ??
                                      new PrioritizedConfigValues(configuration.GetConfigValue, prioritizedConfigKeysArray);

            Configuration = configuration;

            if (dbConfig == null)
            {
                var newConfig = new MsDbConfig(
                    Configuration,
                    configurationChangedHandler,
                    CreateDefaultDbConfigValues(prioritizedConfigKeysArray));

                Defaults = newConfig.Defaults;
                dbConfig = newConfig;
            }

            if (Defaults == null)
            {
                Defaults = (dbConfig as MsDbConfig)?.Defaults ?? CreateDefaultDbConfigValues(prioritizedConfigKeysArray);
            }

            GetDbConfig = () => dbConfig;
            configurationChangedHandler?.RegisterConfigurationChangedCallback(OnConfigurationChanged);

            IPrioritizedConfigKeys[] ToPrioritizedConfigKeysArray()
            {
                var array = prioritizedConfigKeys as IPrioritizedConfigKeys[] ?? prioritizedConfigKeys?.ToArray() ?? GetDefaultPrioritizedConfigKeys();

                return(array.Any() == false?GetDefaultPrioritizedConfigKeys() : array.Distinct().OrderBy(x => x.Order).ToArray());
            }
        }
Ejemplo n.º 10
0
        public void MigrationConfig_WithoutConfiguration_ShouldNotFail()
        {
            DefaultDbConfigValues.WithOracleDefaultDbType();
            var    migrationConfig = new MsDbMigrationConfig(null);
            Action action          = () =>
            {
                var dbConfig = migrationConfig.GetDbConfig();
                var value    = dbConfig.AdminConnectionString;
                value = dbConfig.ConnectionString;
                value = dbConfig.ConfigurationDelimiter;
                value = dbConfig.User;
                value = dbConfig.Password;
                value = dbConfig.AdminUser;
                value = dbConfig.AdminPassword;
                value = dbConfig.ConnectionTimeoutInSecs;
                value = dbConfig.Datasource;
                value = dbConfig.Hostname;
                value = dbConfig.DatabaseName;
                value = dbConfig.Port;
                value = dbConfig.Pooling.ToString();
                value = dbConfig.Schema;
                value = migrationConfig.Schema;
                value = migrationConfig.SchemaPassword;
                value = migrationConfig.DatabaseName;
                value = migrationConfig.ConnectionString;
                value = migrationConfig.DatabaseOwner;
                value = migrationConfig.TempTablespace;
                value = migrationConfig.ProcessorId;
                value = migrationConfig.GetMigrationName();
                value = migrationConfig.GetSchemaPrefixId();
                value = migrationConfig.GetSchemaPrefixUniqueId();
                migrationConfig.GetConfiguration().Should().BeNull();
            };

            action.Should().NotThrow();
        }
Ejemplo n.º 11
0
 public MsDbConfigDatabaseTargets(
     IConfiguration configuration,
     DefaultDbConfigValues dbConfigDatabaseTargets = null)
     : base(dbConfigDatabaseTargets ?? new MsDefaultDbConfigValues(configuration))
 {
 }
Ejemplo n.º 12
0
        public void ValidateDatabaseAdminValues_NoConfiguration_ShouldValidateFailOnBothAdminUserAndAdminPassword(bool throwIfFail)
        {
            lock (TestCollectionFixtures.LockObj)
            {
                try
                {
                    var provider = new ServiceCollection()
                                   .AddSingleton(GetConfiguration())
                                   .AddDefaultDbConfig()
                                   .BuildServiceProvider();

                    DefaultDbConfigValues.WithEmptyAdminUserAndPassword();
                    var dbConfig = provider.GetRequiredService <IConfiguration>().CreateDbConfig();
                    var adminConnectionString = dbConfig.AdminConnectionString;
                    if (throwIfFail)
                    {
                        Action validateWithThrow = () => dbConfig.ValidateAdminValues();
                        var    exception         = validateWithThrow.Should().Throw <AggregateException>().Subject.FirstOrDefault();
                        exception.InnerExceptions.Should().HaveCount(2);
                        exception.InnerExceptions.All(x => x is ArgumentNullException).Should().BeTrue();
                        exception.IsInvalidDatabaseAdminException().Should().BeTrue();
                        return;
                    }

                    var invalidAdminValues = dbConfig.ValidateDatabaseAdminValues(throwIfFail: false);
                    DefaultDbConfigValues.WithLibraryDefaultAdminUserAndPassword();

                    invalidAdminValues.Should().HaveCount(2);

                    var adminUser     = invalidAdminValues.FirstOrDefault(x => x.IsAdminUser());
                    var adminPassword = invalidAdminValues.FirstOrDefault(x => x.IsAdminPassword());
                    adminUser.Should().NotBeNull();
                    adminPassword.Should().NotBeNull();

                    adminUser.ConfigurationKeys.Should()
                    .Contain("'Database.Upgrade.User'")
                    .And
                    .Contain("'Database.AdminUser'");

                    adminPassword.ConfigurationKeys.Should()
                    .Contain("'Database.Upgrade.Password'")
                    .And
                    .Contain("'Database.AdminPassword'");

                    adminUser.Value.Should().BeNullOrEmpty();
                    adminPassword.Value.Should().BeNullOrEmpty();

                    adminUser.GeneratedArgumentException.GetType().Should().Be <ArgumentNullException>();
                    adminPassword.GeneratedArgumentException.GetType().Should().Be <ArgumentNullException>();

                    adminUser.GeneratedArgumentException.ParamName.Should().Be("Database.Upgrade.User");
                    adminPassword.GeneratedArgumentException.ParamName.Should().Be("Database.Upgrade.Password");

                    var useridStr = dbConfig.DbType == SupportedDatabaseTypes.Postgres ? "username" : "user id";

                    adminConnectionString.ContainsIgnoreCase($"{useridStr}=;").Should().BeTrue();
                    adminConnectionString.ContainsIgnoreCase("password=;").Should().BeTrue();

                    adminUser.GeneratedArgumentException.IsInvalidDatabaseAdminException().Should().BeTrue();
                    adminPassword.GeneratedArgumentException.IsInvalidDatabaseAdminException().Should().BeTrue();
                }
                finally
                {
                    DefaultDbConfigValues.WithLibraryDefaultAdminUserAndPassword();
                }
            }
        }
Ejemplo n.º 13
0
        public void ValidateDatabaseAdminValues_NullOrInvalidAdminPasswordButAdminUserSpecified_ShouldValidateFailOnAdminPasswordOnly(string adminPasswordValue, string adminPasswordKey = null, bool throwIfFail = false)
        {
            lock (TestCollectionFixtures.LockObj)
            {
                try
                {
                    DefaultDbConfigValues.WithEmptyAdminUserAndPassword();
                    adminPasswordKey ??= "database:adminPassword";

                    var provider = new ServiceCollection()
                                   .AddSingleton(GetConfiguration(new Dictionary <string, string>
                    {
                        { "database:adminUser", "xxx" },
                        { adminPasswordKey, adminPasswordValue }
                    }))
                                   .AddDefaultDbConfig()
                                   .BuildServiceProvider();

                    Func <InvalidAdminValue[]> validate = () => provider.GetRequiredService <IConfiguration>().CreateDbConfig().ValidateDatabaseAdminValues(throwIfFail: throwIfFail);

                    if (throwIfFail)
                    {
                        ArgumentException exception;

                        if (string.IsNullOrEmpty(adminPasswordValue))
                        {
                            exception = validate.Should().Throw <ArgumentNullException>().Subject.FirstOrDefault();
                            exception.ParamName.Should().Be("Database.Upgrade.Password");
                            exception.Message.Should().Be($"All required configuration parameters ['{exception.ParamName}', 'Database.AdminPassword'] is not set. (Parameter '{exception.ParamName}')");
                        }
                        else
                        {
                            exception = validate.Should().Throw <ArgumentException>().Subject.FirstOrDefault();
                            exception.Message.Should().Be($"Required configuration parameter {adminPasswordKey.ConvertConfigKeyToParamNameStyle()} has an invalid value '{adminPasswordValue}'.");
                        }

                        exception.IsInvalidDatabaseAdminException().Should().BeTrue();
                        return;
                    }

                    var invalidAdminValues = provider.ValidateDatabaseAdminValues(throwIfFail: false);
                    invalidAdminValues.Should().HaveCount(1);

                    var adminUser     = invalidAdminValues.FirstOrDefault(x => x.IsAdminUser());
                    var adminPassword = invalidAdminValues.FirstOrDefault(x => x.IsAdminPassword());
                    adminUser.Should().BeNull();
                    adminPassword.Should().NotBeNull();

                    var argException    = adminPassword?.GeneratedArgumentException;
                    var confKeys        = adminPassword.ConfigurationKeys;
                    var value           = adminPassword.Value;
                    var configuredValue = adminPasswordValue;
                    var adminKey        = adminPasswordKey.ConvertConfigKeyToParamNameStyle();

                    if (string.IsNullOrEmpty(adminPasswordValue))
                    {
                        adminPassword.ConfigurationKeys.Should()
                        .Contain("'Database.Upgrade.Password'")
                        .And
                        .Contain("'Database.AdminPassword'");

                        value.Should().BeNullOrEmpty();
                        argException.GetType().Should().Be <ArgumentNullException>();
                        argException.ParamName.Should().Be(confKeys.FirstOrDefault().Replace("'", ""));

                        argException.Message.Should().Be($"All required configuration parameters ['{argException.ParamName}', {confKeys.LastOrDefault()}] is not set. (Parameter '{argException.ParamName}')");
                    }
                    else
                    {
                        confKeys.Should().HaveCount(1);
                        confKeys.Should().Contain(adminKey);

                        value.Should().Be(configuredValue);
                        argException.GetType().Should().Be <ArgumentException>();
                        argException.Message.Should().Be($"Required configuration parameter {adminKey} has an invalid value '{configuredValue}'.");
                    }
                    argException.IsInvalidDatabaseAdminException().Should().BeTrue();
                }
                finally
                {
                    DefaultDbConfigValues.WithLibraryDefaultAdminUserAndPassword();
                }
            }
        }
Ejemplo n.º 14
0
 public MsDbConnectionStringBuilderConfig(
     IConfiguration configuration,
     DefaultDbConfigValues defaultDbConfigValues = null)
     : base(defaultDbConfigValues ?? new MsDefaultDbConfigValues(configuration))
 {
 }
Ejemplo n.º 15
0
 public DbConfig(DefaultDbConfigValues defaultDbConfigValues = null)
     : base(defaultDbConfigValues)
 {
 }