Skip to content

Commit 14632c9

Browse files
committed
fixture implementation
1 parent 859f85a commit 14632c9

17 files changed

+812
-303
lines changed

Directory.Packages.props

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,19 @@
88
<ItemGroup>
99
<PackageVersion Include="Akka.Hosting" Version="$(AkkaHostingVersion)" />
1010
<PackageVersion Include="Akka.Hosting.TestKit" Version="$(AkkaHostingVersion)" />
11+
<PackageVersion Include="Akka.Persistence.Azure.Hosting" Version="1.5.51.1" />
12+
<PackageVersion Include="Akka.Persistence.MongoDb.Hosting" Version="1.5.42" />
13+
<PackageVersion Include="Akka.Persistence.Redis.Hosting" Version="1.5.42" />
14+
<PackageVersion Include="Akka.Persistence.Sql.Hosting" Version="1.5.51.1" />
1115
<PackageVersion Include="Aspire.Hosting.SqlServer" Version="9.5.1" />
12-
<PackageVersion Include="MathNet.Numerics" Version="5.0.0"/>
16+
<PackageVersion Include="MathNet.Numerics" Version="5.0.0" />
1317
<PackageVersion Include="BenchmarkDotNet" Version="0.15.4" />
18+
<PackageVersion Include="Microsoft.Data.SqlClient" Version="6.1.2" />
1419
<PackageVersion Include="Microsoft.Extensions.Hosting" Version="9.0.8" />
1520
<PackageVersion Include="Aspire.Hosting.AppHost" Version="9.3.1" />
21+
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="18.0.0" />
22+
<PackageVersion Include="MySql.Data" Version="9.4.0" />
23+
<PackageVersion Include="Npgsql" Version="9.0.4" />
1624
<PackageVersion Include="Testcontainers.Azurite" Version="4.7.0" />
1725
<PackageVersion Include="TestContainers.Container.Database.MsSql" Version="1.5.4" />
1826
<PackageVersion Include="TestContainers.Container.Database.MySql" Version="1.5.4" />

global.json

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
2-
"sdk": {
3-
"version": "9.0.304",
4-
"rollForward": "major"
5-
}
6-
}
2+
"sdk": {
3+
"version": "9.0.100",
4+
"rollForward": "major"
5+
}
6+
}

src/Akka.Persistence.Benchmarks/Akka.Persistence.Benchmarks.csproj

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,16 @@
99

1010
<ItemGroup>
1111
<PackageReference Include="Akka.Hosting.TestKit" />
12+
<PackageReference Include="Akka.Persistence.Azure.Hosting" />
13+
<PackageReference Include="Akka.Persistence.MongoDb.Hosting" />
14+
<PackageReference Include="Akka.Persistence.Redis.Hosting" />
15+
<PackageReference Include="Akka.Persistence.Sql.Hosting" />
1216
<PackageReference Include="MathNet.Numerics" />
1317
<PackageReference Include="BenchmarkDotNet" />
18+
<PackageReference Include="Microsoft.Data.SqlClient" />
19+
<PackageReference Include="Microsoft.NET.Test.Sdk" />
20+
<PackageReference Include="MySql.Data" />
21+
<PackageReference Include="Npgsql" />
1422
<PackageReference Include="Testcontainers.MongoDb" />
1523
<PackageReference Include="Testcontainers.MsSql" />
1624
<PackageReference Include="Testcontainers.MySql" />
@@ -19,4 +27,10 @@
1927
<PackageReference Include="Testcontainers.Azurite" />
2028
</ItemGroup>
2129

30+
<ItemGroup>
31+
<None Update="xunit.runner.json">
32+
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
33+
</None>
34+
</ItemGroup>
35+
2236
</Project>
Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,40 @@
1-
using DotNet.Testcontainers.Configurations;
1+
using Akka.Hosting;
2+
using Akka.Persistence.Azure.Hosting;
3+
using DotNet.Testcontainers.Configurations;
24
using DotNet.Testcontainers.Containers;
35
using Testcontainers.Azurite;
46

57
namespace Akka.Persistence.Benchmarks.Fixtures;
68

7-
public class AzuriteFixture: IFixture
9+
public class AzuriteFixture: Fixture
810
{
9-
public AzuriteFixture(bool useVolume = true)
11+
public AzuriteFixture(bool useVolume)
1012
{
1113
var builder = new AzuriteBuilder();
1214

1315
if (useVolume)
14-
builder.WithVolumeMount("benchmark-azurite-data", "/data", AccessMode.ReadWrite);
16+
builder = builder.WithVolumeMount("benchmark-azurite-data", "/data", AccessMode.ReadWrite);
1517

1618
var container = builder.Build();
1719

1820
Container = container;
19-
ConnectionString = container.GetConnectionString();
21+
ConnectionStringFunc = container.GetConnectionString;
2022
}
2123

22-
public DockerContainer Container { get; }
23-
public string ConnectionString { get; }
24-
25-
public Task InitializeAsync()
24+
public override DockerContainer Container { get; }
25+
protected override Func<string> ConnectionStringFunc { get; }
26+
27+
public override Task<bool> IsVolumeInitializedAsync(string persistenceId)
28+
{
29+
throw new NotImplementedException();
30+
}
31+
32+
public override void ConfigureAkka(AkkaConfigurationBuilder builder, IServiceProvider provider)
2633
{
27-
return Container.StartAsync();
34+
if (Container.State == TestcontainersStates.Undefined)
35+
Container.StartAsync().GetAwaiter().GetResult();
36+
37+
builder.WithAzurePersistence(
38+
connectionString: ConnectionStringFunc());
2839
}
2940
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
using Akka.Hosting;
2+
using DotNet.Testcontainers.Containers;
3+
4+
namespace Akka.Persistence.Benchmarks.Fixtures;
5+
6+
public abstract class Fixture
7+
{
8+
public abstract DockerContainer Container { get; }
9+
protected abstract Func<string> ConnectionStringFunc { get; }
10+
11+
public string ConnectionString
12+
{
13+
get
14+
{
15+
if (Container.State == TestcontainersStates.Undefined)
16+
{
17+
Container.StartAsync().GetAwaiter().GetResult();
18+
}
19+
20+
return ConnectionStringFunc();
21+
}
22+
}
23+
24+
public abstract Task<bool> IsVolumeInitializedAsync(string persistenceId);
25+
26+
public abstract void ConfigureAkka(AkkaConfigurationBuilder builder, IServiceProvider provider);
27+
}

src/Akka.Persistence.Benchmarks/Fixtures/IFixture.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,5 @@ public interface IFixture
66
{
77
DockerContainer Container { get; }
88
string ConnectionString { get; }
9-
Task InitializeAsync();
9+
Task InitializeContainerAsync();
1010
}
Lines changed: 24 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,47 @@
1-
using DotNet.Testcontainers.Configurations;
1+
using Akka.Hosting;
2+
using Akka.Persistence.Hosting;
3+
using Akka.Persistence.MongoDb.Hosting;
4+
using DotNet.Testcontainers.Configurations;
25
using DotNet.Testcontainers.Containers;
36
using Testcontainers.MongoDb;
47
using static Akka.Persistence.Benchmarks.Fixtures.Consts;
58

69
namespace Akka.Persistence.Benchmarks.Fixtures;
710

8-
public class MongoDbFixture: IFixture
11+
public class MongoDbFixture: Fixture
912
{
10-
public MongoDbFixture(bool useVolume = true)
13+
public MongoDbFixture(bool useVolume)
1114
{
1215
var builder = new MongoDbBuilder()
1316
.WithUsername(Username)
1417
.WithPassword(Password)
1518
.WithReplicaSet(DatabaseName);
1619

1720
if (useVolume)
18-
builder.WithVolumeMount("benchmark-mongodb-data", "/data/db", AccessMode.ReadWrite);
21+
builder = builder.WithVolumeMount("benchmark-mongodb-data", "/data/db", AccessMode.ReadWrite);
1922

2023
var container = builder.Build();
2124

2225
Container = container;
23-
ConnectionString = container.GetConnectionString();
26+
ConnectionStringFunc = container.GetConnectionString;
2427
}
2528

26-
public DockerContainer Container { get; }
27-
public string ConnectionString { get; }
28-
29-
public Task InitializeAsync()
29+
public override DockerContainer Container { get; }
30+
protected override Func<string> ConnectionStringFunc { get; }
31+
32+
public override Task<bool> IsVolumeInitializedAsync(string persistenceId)
33+
{
34+
throw new NotImplementedException();
35+
}
36+
37+
public override void ConfigureAkka(AkkaConfigurationBuilder builder, IServiceProvider provider)
3038
{
31-
return Container.StartAsync();
39+
if (Container.State == TestcontainersStates.Undefined)
40+
Container.StartAsync().GetAwaiter().GetResult();
41+
42+
builder.WithMongoDbPersistence(
43+
connectionString: ConnectionStringFunc(),
44+
mode: PersistenceMode.Journal,
45+
autoInitialize: true);
3246
}
3347
}
Lines changed: 27 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,50 @@
1-
using DotNet.Testcontainers.Configurations;
1+
using Akka.Hosting;
2+
using Akka.Persistence.Hosting;
3+
using Akka.Persistence.Sql.Hosting;
4+
using DotNet.Testcontainers.Configurations;
25
using DotNet.Testcontainers.Containers;
6+
using LinqToDB;
37
using Testcontainers.MySql;
48
using static Akka.Persistence.Benchmarks.Fixtures.Consts;
59

610
namespace Akka.Persistence.Benchmarks.Fixtures;
711

8-
public class MySqlFixture: IFixture
12+
public class MySqlFixture: Fixture
913
{
10-
public MySqlFixture(bool useVolume = true)
14+
public MySqlFixture(bool useVolume)
1115
{
1216
var builder = new MySqlBuilder()
1317
.WithUsername(Username)
1418
.WithPassword(Password)
1519
.WithDatabase(DatabaseName);
1620

1721
if (useVolume)
18-
builder.WithVolumeMount("benchmark-mysql-data", "/var/lib/mysql", AccessMode.ReadWrite);
22+
builder = builder.WithVolumeMount("benchmark-mysql-data", "/var/lib/mysql", AccessMode.ReadWrite);
1923

2024
var container = builder.Build();
2125

2226
Container = container;
23-
ConnectionString = container.GetConnectionString();
27+
ConnectionStringFunc = container.GetConnectionString;
2428
}
2529

26-
public DockerContainer Container { get; }
27-
public string ConnectionString { get; }
28-
29-
public Task InitializeAsync()
30+
public override DockerContainer Container { get; }
31+
protected override Func<string> ConnectionStringFunc { get; }
32+
33+
public override Task<bool> IsVolumeInitializedAsync(string persistenceId)
34+
{
35+
throw new NotImplementedException();
36+
}
37+
38+
public override void ConfigureAkka(AkkaConfigurationBuilder builder, IServiceProvider provider)
3039
{
31-
return Container.StartAsync();
40+
if (Container.State == TestcontainersStates.Undefined)
41+
Container.StartAsync().GetAwaiter().GetResult();
42+
43+
builder.WithSqlPersistence(
44+
connectionString: ConnectionStringFunc(),
45+
providerName: ProviderName.MySql,
46+
schemaName: "akka",
47+
mode: PersistenceMode.Journal,
48+
autoInitialize: true);
3249
}
3350
}
Lines changed: 27 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,50 @@
1-
using DotNet.Testcontainers.Configurations;
1+
using Akka.Hosting;
2+
using Akka.Persistence.Hosting;
3+
using Akka.Persistence.Sql.Hosting;
4+
using DotNet.Testcontainers.Configurations;
25
using DotNet.Testcontainers.Containers;
6+
using LinqToDB;
37
using Testcontainers.PostgreSql;
48
using static Akka.Persistence.Benchmarks.Fixtures.Consts;
59

610
namespace Akka.Persistence.Benchmarks.Fixtures;
711

8-
public class PostgreSqlFixture: IFixture
12+
public class PostgreSqlFixture: Fixture
913
{
10-
public PostgreSqlFixture(bool useVolume = true)
14+
public PostgreSqlFixture(bool useVolume)
1115
{
1216
var builder = new PostgreSqlBuilder()
1317
.WithUsername(Username)
1418
.WithPassword(Password)
1519
.WithDatabase(DatabaseName);
1620

1721
if (useVolume)
18-
builder.WithVolumeMount("benchmark-postgresql-data", "/var/lib/postgresql/data", AccessMode.ReadWrite);
22+
builder = builder.WithVolumeMount("benchmark-postgresql-data", "/var/lib/postgresql/data", AccessMode.ReadWrite);
1923

2024
var container = builder.Build();
2125

2226
Container = container;
23-
ConnectionString = container.GetConnectionString();
27+
ConnectionStringFunc = container.GetConnectionString;
2428
}
2529

26-
public DockerContainer Container { get; }
27-
public string ConnectionString { get; }
28-
29-
public Task InitializeAsync()
30+
public override DockerContainer Container { get; }
31+
protected override Func<string> ConnectionStringFunc { get; }
32+
33+
public override Task<bool> IsVolumeInitializedAsync(string persistenceId)
34+
{
35+
throw new NotImplementedException();
36+
}
37+
38+
public override void ConfigureAkka(AkkaConfigurationBuilder builder, IServiceProvider provider)
3039
{
31-
return Container.StartAsync();
40+
if (Container.State == TestcontainersStates.Undefined)
41+
Container.StartAsync().GetAwaiter().GetResult();
42+
43+
builder.WithSqlPersistence(
44+
connectionString: ConnectionStringFunc(),
45+
providerName: ProviderName.PostgreSQL95,
46+
schemaName: "akka",
47+
mode: PersistenceMode.Journal,
48+
autoInitialize: true);
3249
}
3350
}
Lines changed: 24 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,43 @@
1-
using DotNet.Testcontainers.Configurations;
1+
using Akka.Hosting;
2+
using Akka.Persistence.Hosting;
3+
using Akka.Persistence.Redis.Hosting;
4+
using DotNet.Testcontainers.Configurations;
25
using DotNet.Testcontainers.Containers;
36
using Testcontainers.Redis;
47

58
namespace Akka.Persistence.Benchmarks.Fixtures;
69

7-
public class RedisFixture: IFixture
10+
public class RedisFixture: Fixture
811
{
9-
public RedisFixture(bool useVolume = true)
12+
public RedisFixture(bool useVolume)
1013
{
1114
var builder = new RedisBuilder();
1215

1316
if (useVolume)
14-
builder.WithVolumeMount("benchmark-redis-data", "/data", AccessMode.ReadWrite);
17+
builder = builder.WithVolumeMount("benchmark-redis-data", "/data", AccessMode.ReadWrite);
1518

1619
var container = builder.Build();
1720

1821
Container = container;
19-
ConnectionString = container.GetConnectionString();
22+
ConnectionStringFunc = container.GetConnectionString;
2023
}
2124

22-
public DockerContainer Container { get; }
23-
public string ConnectionString { get; }
24-
25-
public Task InitializeAsync()
25+
public override DockerContainer Container { get; }
26+
protected override Func<string> ConnectionStringFunc { get; }
27+
28+
public override Task<bool> IsVolumeInitializedAsync(string persistenceId)
29+
{
30+
throw new NotImplementedException();
31+
}
32+
33+
public override void ConfigureAkka(AkkaConfigurationBuilder builder, IServiceProvider provider)
2634
{
27-
return Container.StartAsync();
35+
if (Container.State == TestcontainersStates.Undefined)
36+
Container.StartAsync().GetAwaiter().GetResult();
37+
38+
builder.WithRedisPersistence(
39+
configurationString: ConnectionStringFunc(),
40+
mode: PersistenceMode.Journal,
41+
autoInitialize: true);
2842
}
2943
}

0 commit comments

Comments
 (0)