mirror of
https://github.com/bitwarden/server.git
synced 2025-04-15 18:18:12 -05:00
69 lines
2.3 KiB
C#
69 lines
2.3 KiB
C#
using Bit.Core.Enums;
|
|
using Microsoft.Data.SqlClient;
|
|
using Microsoft.Data.Sqlite;
|
|
using MySqlConnector;
|
|
using Npgsql;
|
|
|
|
namespace Bit.Infrastructure.IntegrationTest.Utilities;
|
|
|
|
public class DbSiloAttribute : TestCustomizerAttribute
|
|
{
|
|
public string DatabaseName { get; }
|
|
|
|
public DbSiloAttribute(string databaseName)
|
|
{
|
|
DatabaseName = databaseName;
|
|
}
|
|
|
|
public override Task CustomizeAsync(CustomizationContext customizationContext)
|
|
{
|
|
var database = customizationContext.Database;
|
|
if (!database.Enabled || string.IsNullOrEmpty(database.ConnectionString))
|
|
{
|
|
// Nothing to customize
|
|
return Task.CompletedTask;
|
|
}
|
|
|
|
if (database.Type == SupportedDatabaseProviders.MySql)
|
|
{
|
|
var connectionStringBuilder = new MySqlConnectionStringBuilder(database.ConnectionString)
|
|
{
|
|
Database = DatabaseName
|
|
};
|
|
|
|
database.ConnectionString = connectionStringBuilder.ConnectionString;
|
|
}
|
|
else if(database.Type == SupportedDatabaseProviders.Postgres)
|
|
{
|
|
var connectionStringBuilder = new NpgsqlConnectionStringBuilder(database.ConnectionString)
|
|
{
|
|
Database = DatabaseName
|
|
};
|
|
|
|
database.ConnectionString = connectionStringBuilder.ConnectionString;
|
|
}
|
|
else if (database.Type == SupportedDatabaseProviders.Sqlite)
|
|
{
|
|
var connectionStringBuilder = new SqliteConnectionStringBuilder(database.ConnectionString);
|
|
|
|
var existingFileInfo = new FileInfo(connectionStringBuilder.DataSource);
|
|
|
|
// Should we require that the existing file actually exists?
|
|
|
|
var newFileInfo = new FileInfo(Path.Join(existingFileInfo.DirectoryName, $"{DatabaseName}.{existingFileInfo.Extension}"));
|
|
|
|
connectionStringBuilder.DataSource = newFileInfo.FullName;
|
|
database.ConnectionString = connectionStringBuilder.ConnectionString;
|
|
}
|
|
else
|
|
{
|
|
var connectionStringBuilder = new SqlConnectionStringBuilder(database.ConnectionString)
|
|
{
|
|
DataSource = DatabaseName
|
|
};
|
|
database.ConnectionString = connectionStringBuilder.ConnectionString;
|
|
}
|
|
return Task.CompletedTask;
|
|
}
|
|
}
|