Exemplo n.º 1
0
        private Connection GetConnection(SqlServerServiceInfo info, IConfiguration configuration)
        {
            var sqlConfig  = new SqlServerProviderConnectorOptions(configuration);
            var configurer = new SqlServerProviderConfigurer();

            return(new Connection(configurer.Configure(info, sqlConfig), "SqlServer", info));
        }
        private static void DoAdd(IServiceCollection services, SqlServerServiceInfo info, IConfiguration config, ServiceLifetime contextLifetime)
        {
            var sqlServerConfig = new SqlServerProviderConnectorOptions(config);
            var factory         = new SqlServerProviderConnectorFactory(info, sqlServerConfig, SqlServerTypeLocator.SqlConnection);

            services.Add(new ServiceDescriptor(typeof(IHealthContributor), ctx => new RelationalHealthContributor((IDbConnection)factory.Create(ctx), ctx.GetService <ILogger <RelationalHealthContributor> >()), contextLifetime));
        }
 public SqlServerDbContextConnectorFactory(SqlServerServiceInfo info, SqlServerProviderConnectorOptions config, Type dbContextType)
     : base(info, config, dbContextType)
 {
     if (dbContextType == null)
     {
         throw new ArgumentNullException(nameof(dbContextType));
     }
 }
Exemplo n.º 4
0
        public void SpecialCharactersInCredentials_AreHandled()
        {
            var uri = "jdbc:sqlserver://192.168.0.90:1433/databaseName=de5aa3a747c134b3d8780f8cc80be519e";
            var r1  = new SqlServerServiceInfo("myId", uri, "!*'();:@&=+$,/?#[] \"%-.<>\\^_`{|}~", "[]!*'();:@&=+$,/?# \"%-.<>\\^_`{|}~");

            Assert.Equal("!*'();:@&=+$,/?#[] \"%-.<>\\^_`{|}~", r1.UserName);
            Assert.Equal("[]!*'();:@&=+$,/?# \"%-.<>\\^_`{|}~", r1.Password);
        }
        public static void RegisterSqlServerConnection(IContainer container, IConfigurationRoot config)
        {
            SqlServerProviderConnectorOptions SqlServerConfig = new SqlServerProviderConnectorOptions(config);
            SqlServerServiceInfo info = config.GetSingletonServiceInfo <SqlServerServiceInfo>();
            SqlServerProviderConnectorFactory factory = new SqlServerProviderConnectorFactory(info, SqlServerConfig, typeof(SqlConnection));

            container.Inject <IBloggingContext>(new BloggingContext((SqlConnection)factory.Create(null)));
        }
Exemplo n.º 6
0
        public void Create_ThrowsIfNoValidConstructorFound()
        {
            var config = new SqlServerProviderConnectorOptions();
            SqlServerServiceInfo si = null;
            var dbContextType       = typeof(BadSqlServerDbContext);

            var ex = Assert.Throws <ConnectorException>(() => new SqlServerDbContextConnectorFactory(si, config, dbContextType).Create(null));

            Assert.Contains("BadSqlServerDbContext", ex.Message);
        }
Exemplo n.º 7
0
        public void Constructor_ThrowsIfTypeNull()
        {
            var config = new SqlServerProviderConnectorOptions();
            SqlServerServiceInfo si = null;
            Type dbContextType      = null;

            var ex = Assert.Throws <ArgumentNullException>(() => new SqlServerDbContextConnectorFactory(si, config, dbContextType));

            Assert.Contains(nameof(dbContextType), ex.Message);
        }
        private static void CopyBoundSqlConnection(
            IWebConfigWriter webConfig,
            SqlServerServiceInfo sqlServiceInfo,
            SqlServerProviderConnectorOptions sqlConnectorOptions)
        {
            SqlServerProviderConnectorFactory sqlConnectorFactory = new SqlServerProviderConnectorFactory(
                sqlServiceInfo, sqlConnectorOptions, typeof(SqlConnection));

            webConfig.SetConnectionString(sqlServiceInfo.Id, sqlConnectorFactory.CreateConnectionString());
        }
Exemplo n.º 9
0
        private static string GetConnection(IConfiguration config, string serviceName = null)
        {
            SqlServerServiceInfo info = string.IsNullOrEmpty(serviceName)
                ? config.GetSingletonServiceInfo <SqlServerServiceInfo>()
                : config.GetRequiredServiceInfo <SqlServerServiceInfo>(serviceName);

            SqlServerProviderConnectorOptions sqlServerConfig = new SqlServerProviderConnectorOptions(config);

            SqlServerProviderConnectorFactory factory = new SqlServerProviderConnectorFactory(info, sqlServerConfig, null);

            return(factory.CreateConnectionString());
        }
Exemplo n.º 10
0
        public void Update_With_ServiceInfo_Updates_Config()
        {
            SqlServerProviderConfigurer configurer = new SqlServerProviderConfigurer();
            SqlServerServiceInfo        si         = new SqlServerServiceInfo("MyId", "jdbc:sqlserver://updatedserver:1433/databaseName=updateddb", "updateduser", "updatedpassword");

            configurer.UpdateConfiguration(si, config);

            Assert.Equal("updatedserver", config.Server);
            Assert.Equal("updateddb", config.Database);
            Assert.Equal("updateduser", config.Username);
            Assert.Equal("updatedpassword", config.Password);
        }
        public void Update_With_ServiceInfo_CredsInUrl_Updates_Config()
        {
            var configurer = new SqlServerProviderConfigurer();
            var si         = new SqlServerServiceInfo("MyId", "sqlserver://*****:*****@updatedserver:1433;databaseName=updateddb");

            configurer.UpdateConfiguration(si, config);

            Assert.Equal("updatedserver", config.Server);
            Assert.Equal("updateddb", config.Database);
            Assert.Equal("updateduser", config.Username);
            Assert.Equal("updatedpassword", config.Password);
        }
Exemplo n.º 12
0
        public void UpdateConfiguration(SqlServerServiceInfo si, SqlServerProviderConnectorOptions configuration)
        {
            if (si == null)
            {
                return;
            }

            if (!string.IsNullOrEmpty(si.Uri))
            {
                configuration.Port   = si.Port;
                configuration.Server = si.Host;
                if (!string.IsNullOrEmpty(si.Path))
                {
                    configuration.Database = si.Path;
                }

                if (si.Query != null)
                {
                    foreach (var piece in si.Query.Split('&'))
                    {
                        var kvp = piece.Split('=');
                        if (kvp[0].EndsWith("database", StringComparison.InvariantCultureIgnoreCase) || kvp[0].EndsWith("databaseName", StringComparison.InvariantCultureIgnoreCase))
                        {
                            configuration.Database = kvp[1];
                        }
                        else if (kvp[0].EndsWith("instancename", StringComparison.InvariantCultureIgnoreCase))
                        {
                            configuration.InstanceName = kvp[1];
                        }
                        else if (kvp[0].StartsWith("hostnameincertificate", StringComparison.InvariantCultureIgnoreCase))
                        {
                            // adding this key could result in "System.ArgumentException : Keyword not supported: 'hostnameincertificate'" later
                        }
                        else
                        {
                            configuration.Options.Add(kvp[0], kvp[1]);
                        }
                    }
                }

                if (configuration.UrlEncodedCredentials)
                {
                    configuration.Username = WebUtility.UrlDecode(si.UserName);
                    configuration.Password = WebUtility.UrlDecode(si.Password);
                }
                else
                {
                    configuration.Username = si.UserName;
                    configuration.Password = si.Password;
                }
            }
        }
Exemplo n.º 13
0
        public void Constructor_CreatesExpected()
        {
            var uri = "jdbc:sqlserver://192.168.0.90:1433/databaseName=de5aa3a747c134b3d8780f8cc80be519e";
            var r1  = new SqlServerServiceInfo("myId", uri, "Dd6O1BPXUHdrmzbP", "7E1LxXnlH2hhlPVt");

            Assert.Equal("myId", r1.Id);
            Assert.Equal("sqlserver", r1.Scheme);
            Assert.Equal("192.168.0.90", r1.Host);
            Assert.Equal(1433, r1.Port);
            Assert.Equal("7E1LxXnlH2hhlPVt", r1.Password);
            Assert.Equal("Dd6O1BPXUHdrmzbP", r1.UserName);
            Assert.Equal("de5aa3a747c134b3d8780f8cc80be519e", r1.Path);
        }
        private static void DoAdd(IServiceCollection services, SqlServerServiceInfo info, IConfiguration config, ServiceLifetime contextLifetime, bool addSteeltoeHealthChecks)
        {
            Type sqlServerConnection = SqlServerTypeLocator.SqlConnection;
            var  sqlServerConfig     = new SqlServerProviderConnectorOptions(config);
            var  factory             = new SqlServerProviderConnectorFactory(info, sqlServerConfig, sqlServerConnection);

            services.Add(new ServiceDescriptor(typeof(IDbConnection), factory.Create, contextLifetime));
            services.Add(new ServiceDescriptor(sqlServerConnection, factory.Create, contextLifetime));
            if (!services.Any(s => s.ServiceType == typeof(HealthCheckService)) || addSteeltoeHealthChecks)
            {
                services.Add(new ServiceDescriptor(typeof(IHealthContributor), ctx => new RelationalHealthContributor((IDbConnection)factory.Create(ctx), ctx.GetService <ILogger <RelationalHealthContributor> >()), ServiceLifetime.Singleton));
            }
        }
Exemplo n.º 15
0
        public static void RegisterSqlServerConnection(IContainer container, IConfigurationRoot config)
        {
            SqlServerProviderConnectorOptions SqlServerConfig = new SqlServerProviderConnectorOptions(config);

            SqlServerServiceInfo info1 = config.GetRequiredServiceInfo <SqlServerServiceInfo>("mySqlServerService1"); // config.GetSingletonServiceInfo<SqlServerServiceInfo>();
            SqlServerProviderConnectorFactory factory1 = new SqlServerProviderConnectorFactory(info1, SqlServerConfig, typeof(SqlConnection));

            container.Inject <IBloggingContext>(new BloggingContext((SqlConnection)factory1.Create(null)));

            SqlServerServiceInfo info2 = config.GetRequiredServiceInfo <SqlServerServiceInfo>("mySqlServerService2"); // config.GetSingletonServiceInfo<SqlServerServiceInfo>();
            SqlServerProviderConnectorFactory factory2 = new SqlServerProviderConnectorFactory(info2, SqlServerConfig, typeof(SqlConnection));

            container.Inject <IVloggingContext>(new VloggingContext((SqlConnection)factory2.Create(null)));
        }
Exemplo n.º 16
0
        public void Constructor_CreatesExpected()
        {
            string uri = "sqlserver://*****:*****@192.168.0.90:3306/cf_b4f8d2fa_a3ea_4e3a_a0e8_2cd040790355?reconnect=true";
            SqlServerServiceInfo r1 = new SqlServerServiceInfo("myId", uri);

            Assert.Equal("myId", r1.Id);
            Assert.Equal("sqlserver", r1.Scheme);
            Assert.Equal("192.168.0.90", r1.Host);
            Assert.Equal(3306, r1.Port);
            Assert.Equal("7E1LxXnlH2hhlPVt", r1.Password);
            Assert.Equal("Dd6O1BPXUHdrmzbP", r1.UserName);
            Assert.Equal("cf_b4f8d2fa_a3ea_4e3a_a0e8_2cd040790355", r1.Path);
            Assert.Equal("reconnect=true", r1.Query);
        }
        private static void DoAdd(IServiceCollection services, SqlServerServiceInfo info, IConfiguration config, ServiceLifetime contextLifetime)
        {
            Type sqlServerConnection = ConnectorHelpers.FindType(sqlServerAssemblies, sqlServerTypeNames);

            if (sqlServerConnection == null)
            {
                throw new ConnectorException("Unable to find System.Data.SqlClient.SqlConnection, are you missing a reference to System.Data.SqlClient?");
            }

            SqlServerProviderConnectorOptions sqlServerConfig = new SqlServerProviderConnectorOptions(config);
            SqlServerProviderConnectorFactory factory         = new SqlServerProviderConnectorFactory(info, sqlServerConfig, sqlServerConnection);

            services.Add(new ServiceDescriptor(typeof(IDbConnection), factory.Create, contextLifetime));
            services.Add(new ServiceDescriptor(sqlServerConnection, factory.Create, contextLifetime));
        }
        public void Create_ReturnsSqlConnection()
        {
            SqlServerProviderConnectorOptions config = new SqlServerProviderConnectorOptions()
            {
                Server   = "servername",
                Password = "******",
                Username = "******",
                Database = "database"
            };
            SqlServerServiceInfo si = new SqlServerServiceInfo("MyId", "jdbc:sqlserver://servername:1433;databaseName=de5aa3a747c134b3d8780f8cc80be519e", "user", "pass");
            var factory             = new SqlServerProviderConnectorFactory(si, config, typeof(SqlConnection));
            var connection          = factory.Create(null);

            Assert.NotNull(connection);
        }
        public void Configure_With_ServiceInfo_NamedInstance_Overrides_Config()
        {
            var configurer = new SqlServerProviderConfigurer();

            // override provided by environment
            var si = new SqlServerServiceInfo("MyId", "jdbc:sqlserver://servername/databaseName=de5aa3a747c134b3d8780f8cc80be519e;instanceName=someInstance;integratedSecurity=true");

            // apply override
            var opts = configurer.Configure(si, config);

            // resulting options should contain values parsed from environment
            Assert.Contains("Data Source=servername\\someInstance", opts);
            Assert.Contains("Initial Catalog=de5aa3a747c134b3d8780f8cc80be519e;", opts);
            Assert.Contains("integratedSecurity=true;", opts);
        }
Exemplo n.º 20
0
        public void Sql_Is_Connected_Returns_Up_Status()
        {
            // arrange
            Type implementationType = SqlServerTypeLocator.SqlConnection;
            var  sqlConfig          = new SqlServerProviderConnectorOptions();
            var  sInfo       = new SqlServerServiceInfo("MyId", "jdbc:sqlserver://localhost:1433;databaseName=master", "steeltoe", "steeltoe");
            var  logrFactory = new LoggerFactory();
            var  connFactory = new SqlServerProviderConnectorFactory(sInfo, sqlConfig, implementationType);
            var  h           = new RelationalHealthContributor((IDbConnection)connFactory.Create(null), logrFactory.CreateLogger <RelationalHealthContributor>());

            // act
            var status = h.Health();

            // assert
            Assert.Equal(HealthStatus.UP, status.Status);
        }
        public void Sql_Is_Connected_Returns_Up_Status()
        {
            var implementationType = SqlServerTypeLocator.SqlConnection;
            var sqlConfig          = new SqlServerProviderConnectorOptions()
            {
                Timeout = 1, ConnectionString = "Server=(localdb)\\MSSQLLocalDB;Integrated Security=true"
            };
            var sInfo       = new SqlServerServiceInfo("MyId", string.Empty);
            var logrFactory = new LoggerFactory();
            var connFactory = new SqlServerProviderConnectorFactory(sInfo, sqlConfig, implementationType);
            var h           = new RelationalDbHealthContributor((IDbConnection)connFactory.Create(null), logrFactory.CreateLogger <RelationalDbHealthContributor>());

            var status = h.Health();

            Assert.Equal(HealthStatus.UP, status.Status);
        }
        public void Configure_With_ServiceInfo_CredsInUrl_Overrides_Config()
        {
            var configurer = new SqlServerProviderConfigurer();

            // override provided by environment
            var si = new SqlServerServiceInfo("MyId", "jdbc:sqlserver://*****:*****@servername:1433/databaseName=de5aa3a747c134b3d8780f8cc80be519e");

            // apply override
            var opts = configurer.Configure(si, config);

            // resulting options should contain values parsed from environment
            Assert.Contains("Data Source=servername,1433", opts);
            Assert.Contains("Initial Catalog=de5aa3a747c134b3d8780f8cc80be519e;", opts);
            Assert.Contains("User Id=Dd6O1BPXUHdrmzbP;", opts);
            Assert.Contains("Password=7E1LxXnlH2hhlPVt;", opts);
        }
Exemplo n.º 23
0
        public void UpdateConfiguration(SqlServerServiceInfo si, SqlServerProviderConnectorOptions configuration)
        {
            if (si == null)
            {
                return;
            }

            if (!string.IsNullOrEmpty(si.Uri))
            {
                configuration.Port     = si.Port;
                configuration.Server   = si.Host;
                configuration.Database = si.Path.Replace("databaseName=", string.Empty);
                configuration.Username = si.UserName;
                configuration.Password = si.Password;
            }
        }
Exemplo n.º 24
0
        private static void DoAdd(IServiceCollection services, SqlServerServiceInfo info, IConfiguration config, ServiceLifetime contextLifetime, IHealthChecksBuilder healthChecksBuilder)
        {
            Type sqlServerConnection = SqlServerTypeLocator.SqlConnection;
            var  sqlServerConfig     = new SqlServerProviderConnectorOptions(config);
            var  factory             = new SqlServerProviderConnectorFactory(info, sqlServerConfig, sqlServerConnection);

            services.Add(new ServiceDescriptor(typeof(IDbConnection), factory.Create, contextLifetime));
            services.Add(new ServiceDescriptor(sqlServerConnection, factory.Create, contextLifetime));
            if (healthChecksBuilder == null)
            {
                services.Add(new ServiceDescriptor(typeof(IHealthContributor), ctx => new RelationalHealthContributor((IDbConnection)factory.Create(ctx), ctx.GetService <ILogger <RelationalHealthContributor> >()), ServiceLifetime.Singleton));
            }
            else
            {
                healthChecksBuilder.AddSqlServer(factory.CreateConnectionString());
            }
        }
        public void Sql_Not_Connected_Returns_Down_Status()
        {
            var implementationType = SqlServerTypeLocator.SqlConnection;
            var sqlConfig          = new SqlServerProviderConnectorOptions()
            {
                Timeout = 1
            };
            var sInfo       = new SqlServerServiceInfo("MyId", "jdbc:sqlserver://localhost:1433/databaseName=invalidDatabaseName", "Dd6O1BPXUHdrmzbP", "7E1LxXnlH2hhlPVt");
            var logrFactory = new LoggerFactory();
            var connFactory = new SqlServerProviderConnectorFactory(sInfo, sqlConfig, implementationType);
            var h           = new RelationalDbHealthContributor((IDbConnection)connFactory.Create(null), logrFactory.CreateLogger <RelationalDbHealthContributor>());

            var status = h.Health();

            Assert.Equal(HealthStatus.DOWN, status.Status);
            Assert.Contains(status.Details.Keys, k => k == "error");
        }
Exemplo n.º 26
0
        /// <summary>
        /// Add an IHealthContributor to a ServiceCollection for SqlServer
        /// </summary>
        /// <param name="services">Service collection to add to</param>
        /// <param name="config">App configuration</param>
        /// <param name="contextLifetime">Lifetime of the service to inject</param>
        /// <param name="logFactory">logger factory</param>
        /// <returns>IServiceCollection for chaining</returns>
        public static IServiceCollection AddSqlServerHealthContributor(this IServiceCollection services, IConfiguration config, ServiceLifetime contextLifetime = ServiceLifetime.Singleton, ILoggerFactory logFactory = null)
        {
            if (services == null)
            {
                throw new ArgumentNullException(nameof(services));
            }

            if (config == null)
            {
                throw new ArgumentNullException(nameof(config));
            }

            SqlServerServiceInfo info = config.GetSingletonServiceInfo <SqlServerServiceInfo>();

            DoAdd(services, info, config, contextLifetime);
            return(services);
        }
        /// <summary>
        /// Add SQL Server to a ServiceCollection
        /// </summary>
        /// <param name="services">Service collection to add to</param>
        /// <param name="config">App configuration</param>
        /// <param name="contextLifetime">Lifetime of the service to inject</param>
        /// <param name="logFactory">logger factory</param>
        /// <param name="addSteeltoeHealthChecks">Add Steeltoe health check when community healthchecks exist</param>
        /// <returns>IServiceCollection for chaining</returns>
        public static IServiceCollection AddSqlServerConnection(this IServiceCollection services, IConfiguration config, ServiceLifetime contextLifetime = ServiceLifetime.Scoped, ILoggerFactory logFactory = null, bool addSteeltoeHealthChecks = false)
        {
            if (services == null)
            {
                throw new ArgumentNullException(nameof(services));
            }

            if (config == null)
            {
                throw new ArgumentNullException(nameof(config));
            }

            SqlServerServiceInfo info = config.GetSingletonServiceInfo <SqlServerServiceInfo>();

            DoAdd(services, info, config, contextLifetime, addSteeltoeHealthChecks);

            return(services);
        }
        public void UpdateConfiguration(SqlServerServiceInfo si, SqlServerProviderConnectorOptions configuration)
        {
            if (si == null)
            {
                return;
            }

            if (!string.IsNullOrEmpty(si.Uri))
            {
                configuration.Port   = si.Port;
                configuration.Server = si.Host;
                if (!string.IsNullOrEmpty(si.Path))
                {
                    configuration.Database = si.Path;
                }

                if (si.Query != null)
                {
                    foreach (var kvp in UriExtensions.ParseQuerystring(si.Query))
                    {
                        if (kvp.Key.EndsWith("database", StringComparison.InvariantCultureIgnoreCase) || kvp.Key.EndsWith("databaseName", StringComparison.InvariantCultureIgnoreCase))
                        {
                            configuration.Database = kvp.Value;
                        }
                        else if (kvp.Key.EndsWith("instancename", StringComparison.InvariantCultureIgnoreCase))
                        {
                            configuration.InstanceName = kvp.Value;
                        }
                        else if (kvp.Key.StartsWith("hostnameincertificate", StringComparison.InvariantCultureIgnoreCase))
                        {
                            // adding this key could result in "System.ArgumentException : Keyword not supported: 'hostnameincertificate'" later
                        }
                        else
                        {
                            configuration.Options.Add(kvp.Key, kvp.Value);
                        }
                    }
                }

                configuration.Username = si.UserName;
                configuration.Password = si.Password;
            }
        }
Exemplo n.º 29
0
        public void Create_ReturnsDbContext()
        {
            var config = new SqlServerProviderConnectorOptions()
            {
                Server   = "localhost",
                Port     = 1433,
                Password = "******",
                Username = "******",
                Database = "database"
            };
            var si      = new SqlServerServiceInfo("MyId", "SqlServer://192.168.0.90:1433/cf_b4f8d2fa_a3ea_4e3a_a0e8_2cd040790355", "Dd6O1BPXUHdrmzbP", "7E1LxXnlH2hhlPVt");
            var factory = new SqlServerDbContextConnectorFactory(si, config, typeof(GoodSqlServerDbContext));
            var context = factory.Create(null);

            Assert.NotNull(context);
            var gcontext = context as GoodSqlServerDbContext;

            Assert.NotNull(gcontext);
        }
        /// <summary>
        /// Add your SqlServer-based DbContext to the ContainerBuilder
        /// </summary>
        /// <typeparam name="TContext">Your DbContext</typeparam>
        /// <param name="container">Autofac <see cref="ContainerBuilder" /></param>
        /// <param name="config">Your app config</param>
        /// <param name="serviceName">Name of service instance</param>
        /// <returns><see cref="IRegistrationBuilder{TLimit, TActivatorData, TRegistrationStyle}"/></returns>
        public static IRegistrationBuilder <object, SimpleActivatorData, SingleRegistrationStyle> RegisterDbContext <TContext>(this ContainerBuilder container, IConfiguration config, string serviceName = null)
        {
            if (container == null)
            {
                throw new ArgumentNullException(nameof(container));
            }

            if (config == null)
            {
                throw new ArgumentNullException(nameof(config));
            }

            SqlServerServiceInfo info = serviceName == null
                ? config.GetSingletonServiceInfo <SqlServerServiceInfo>()
                : config.GetRequiredServiceInfo <SqlServerServiceInfo>(serviceName);

            var sqlServerConfig = new SqlServerProviderConnectorOptions(config);
            var factory         = new SqlServerProviderConnectorFactory(info, sqlServerConfig, typeof(TContext));

            return(container.Register(c => factory.Create(null)).As <TContext>());
        }