Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions src/NHibernate.Test/NHibernate.Test.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,13 @@
<PackageReference Include="FirebirdSql.Data.FirebirdClient" Version="9.1.1" />
<PackageReference Include="Npgsql" Version="8.0.3" />
<PackageReference Include="MySql.Data" Version="8.0.30" />
<PackageReference Include="Testcontainers.Db2" Version="4.8.1" />
<PackageReference Include="Testcontainers.FirebirdSql" Version="4.8.1" />
<PackageReference Include="Testcontainers.MariaDb" Version="4.8.1" />
<PackageReference Include="Testcontainers.MsSql" Version="4.8.1" />
<PackageReference Include="Testcontainers.MySql" Version="4.8.1" />
<PackageReference Include="Testcontainers.Oracle" Version="4.8.1" />
<PackageReference Include="Testcontainers.PostgreSql" Version="4.8.1" />
</ItemGroup>
<ItemGroup Condition="$(NhNetFx)">
<Reference Include="System.Configuration" />
Expand Down
8 changes: 7 additions & 1 deletion src/NHibernate.Test/TestConfigurationHelper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,12 @@ public static Configuration GetDefaultConfiguration()
Configuration result = new Configuration();
if (hibernateConfigFile != null)
result.Configure(hibernateConfigFile);

var connectionString = result.GetProperty(Cfg.Environment.ConnectionString);
if (connectionString?.StartsWith("testcontainers=") == true)
{
result.SetProperty(Cfg.Environment.ConnectionString, TestContainerSetup.GetConnectionString(connectionString));
}
return result;
}

Expand All @@ -71,4 +77,4 @@ private static string FindCurrentTestConfigurationFile(string filename)
return null;
}
}
}
}
76 changes: 76 additions & 0 deletions src/NHibernate.Test/TestContainerSetup.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
namespace NHibernate.Test
{
using System;
using System.Threading.Tasks;
using DotNet.Testcontainers.Containers;
using NUnit.Framework;
using Testcontainers.Db2;
using Testcontainers.FirebirdSql;
using Testcontainers.MariaDb;
using Testcontainers.MsSql;
using Testcontainers.MySql;
using Testcontainers.Oracle;
using Testcontainers.PostgreSql;

[SetUpFixture]
public class TestContainerSetup
{
private static IDatabaseContainer _container;
private static readonly object _lock = new object();

internal static string GetConnectionString(string connectionString)
{
var parts = connectionString.Split('=');
if (parts.Length != 2 || parts[0] != "testcontainers")
{
throw new System.ArgumentException("Invalid testcontainers connection string format. Expected format: testcontainers=DbType");
}
// For now, only one container is supported. In the future, we can extend this to support multiple containers.
if (_container == null)
{
lock (_lock)
{
if (_container == null)
{
var container = GetContainer(parts[1]);
Task.Run(() => container.StartAsync()).GetAwaiter().GetResult();
_container = container;
}
}
}
return _container.GetConnectionString();
}

private static IDatabaseContainer GetContainer(string dbType)
{
switch (dbType.ToLower())
{
case "db2":
return new Db2Builder().Build();
case "firebirdsql":
return new FirebirdSqlBuilder().Build();
case "mariadb":
return new MariaDbBuilder().Build();
case "mssql":
return new MsSqlBuilder().Build();
case "mysql":
return new MySqlBuilder().Build();
case "oracle":
return new OracleBuilder().Build();
case "postgresql":
return new PostgreSqlBuilder().Build();
default:
throw new NotSupportedException("Database type not supported: " + dbType);
}
}

[OneTimeTearDown]
public async Task TearDown()
{
if (_container != null)
{
await _container.DisposeAsync();
}
}
}
}
Loading