87 lines
3.6 KiB
C#
87 lines
3.6 KiB
C#
using MBN_STOCK_WEBVIEW.Infrastructure;
|
|
using MMoneyCoderSharp.Data;
|
|
using MySqlConnector;
|
|
using Oracle.ManagedDataAccess.Client;
|
|
|
|
namespace MBN_STOCK_WEBVIEW.Infrastructure.Tests;
|
|
|
|
public sealed class ProviderDatabaseConnectionFactoryTests
|
|
{
|
|
[Fact]
|
|
public void CreateOracleConnection_UsesSidDescriptor()
|
|
{
|
|
var options = TestOptions.CreateConfigured();
|
|
options.Oracle.Sid = "TESTSID";
|
|
options.Oracle.ServiceName = null;
|
|
var factory = new ProviderDatabaseConnectionFactory(options);
|
|
|
|
using var connection = factory.Create(DataSourceKind.Oracle);
|
|
var parsed = new OracleConnectionStringBuilder(connection.ConnectionString);
|
|
|
|
Assert.True(parsed.DataSource.Contains("(SID=TESTSID)", StringComparison.Ordinal));
|
|
Assert.False(parsed.DataSource.Contains("SERVICE_NAME", StringComparison.Ordinal));
|
|
Assert.False(parsed.PersistSecurityInfo);
|
|
}
|
|
|
|
[Fact]
|
|
public void CreateOracleConnection_UsesServiceNameDescriptor()
|
|
{
|
|
var options = TestOptions.CreateConfigured();
|
|
options.Oracle.Sid = null;
|
|
options.Oracle.ServiceName = "TESTSERVICE";
|
|
var factory = new ProviderDatabaseConnectionFactory(options);
|
|
|
|
using var connection = factory.Create(DataSourceKind.Oracle);
|
|
var parsed = new OracleConnectionStringBuilder(connection.ConnectionString);
|
|
|
|
Assert.True(parsed.DataSource.Contains("(SERVICE_NAME=TESTSERVICE)", StringComparison.Ordinal));
|
|
Assert.False(parsed.DataSource.Contains("(SID=", StringComparison.Ordinal));
|
|
Assert.False(parsed.PersistSecurityInfo);
|
|
}
|
|
|
|
[Theory]
|
|
[InlineData(MariaDbTlsMode.Disabled, MySqlSslMode.None)]
|
|
[InlineData(MariaDbTlsMode.Preferred, MySqlSslMode.Preferred)]
|
|
[InlineData(MariaDbTlsMode.Required, MySqlSslMode.Required)]
|
|
[InlineData(MariaDbTlsMode.VerifyCertificate, MySqlSslMode.VerifyCA)]
|
|
[InlineData(MariaDbTlsMode.VerifyIdentity, MySqlSslMode.VerifyFull)]
|
|
public void CreateMariaDbConnection_UsesEndpointPortAndTls(
|
|
MariaDbTlsMode configuredTls,
|
|
MySqlSslMode expectedTls)
|
|
{
|
|
var options = TestOptions.CreateConfigured();
|
|
options.MariaDb.Host = "maria-builder-test.invalid";
|
|
options.MariaDb.Port = 43306;
|
|
options.MariaDb.TlsMode = configuredTls;
|
|
var factory = new ProviderDatabaseConnectionFactory(options);
|
|
|
|
using var connection = factory.Create(DataSourceKind.MariaDb);
|
|
var parsed = new MySqlConnectionStringBuilder(connection.ConnectionString);
|
|
|
|
Assert.Equal("maria-builder-test.invalid", parsed.Server);
|
|
Assert.Equal(43306u, parsed.Port);
|
|
Assert.Equal(expectedTls, parsed.SslMode);
|
|
Assert.False(parsed.PersistSecurityInfo);
|
|
}
|
|
|
|
[Fact]
|
|
public void PublicConfigurationException_DoesNotExposeRejectedHostUserOrPassword()
|
|
{
|
|
const string rejectedHost = "rejected(host)-sensitive-sentinel";
|
|
const string user = "oracle-user-sensitive-sentinel";
|
|
const string password = "oracle-password-sensitive-sentinel";
|
|
var options = TestOptions.CreateConfigured();
|
|
options.Oracle.Host = rejectedHost;
|
|
options.Oracle.UserName = user;
|
|
options.Oracle.Password = password;
|
|
var factory = new ProviderDatabaseConnectionFactory(options);
|
|
|
|
var exception = Assert.Throws<DatabaseConfigurationException>(
|
|
() => factory.Create(DataSourceKind.Oracle));
|
|
|
|
Assert.DoesNotContain(rejectedHost, exception.Message, StringComparison.Ordinal);
|
|
Assert.DoesNotContain(user, exception.Message, StringComparison.Ordinal);
|
|
Assert.DoesNotContain(password, exception.Message, StringComparison.Ordinal);
|
|
}
|
|
}
|