Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
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
2 changes: 1 addition & 1 deletion src/Versions.props
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<MicrosoftDataSqlClientPackageVersion>6.1.3</MicrosoftDataSqlClientPackageVersion>
<MySqlConnectorPackageVersion>2.5.0</MySqlConnectorPackageVersion>
<MicrosoftDataSqlitePackageVersion>10.0.1</MicrosoftDataSqlitePackageVersion>
<NpgsqlPackageVersion>10.0.0</NpgsqlPackageVersion>
<NpgsqlPackageVersion>10.0.1</NpgsqlPackageVersion>
<ParlotPackageVersion>1.5.6</ParlotPackageVersion>
</PropertyGroup>

Expand Down
7 changes: 7 additions & 0 deletions src/YesSql.Core/ConfigurationExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,5 +17,12 @@ public static IConfiguration UseBlockIdGenerator(this IConfiguration configurati

return configuration;
}

public static IConfiguration WithThreadSafetyChecks(this IConfiguration configuration, bool? enabled = null)
{
configuration.EnableThreadSafetyChecks = enabled ?? true;

return configuration;
}
}
}
70 changes: 8 additions & 62 deletions test/YesSql.Tests/CoreTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6628,51 +6628,6 @@ await session.SaveAsync(new Article
Assert.Equal(10, result);
}

[Fact]
public virtual async Task ShouldDetectThreadSafetyIssues()
{
try
{
_store.Configuration.EnableThreadSafetyChecks = true;

await using var session = _store.CreateSession();

_store.Configuration.EnableThreadSafetyChecks = false;

var person = new Person { Firstname = "Bill" };
await session.SaveAsync(person);
await session.SaveChangesAsync();

Task[] tasks = null;

var throws = Assert.ThrowsAsync<InvalidOperationException>(async () =>
{
tasks = Enumerable.Range(0, 10).Select(x => Task.Run(DoWork)).ToArray();
await Task.WhenAll(tasks);
});

await Task.WhenAny(throws, Task.Delay(5000));

Assert.True(throws.IsCompleted, "The timeout was reached before the expected exception was thrown");

async Task DoWork()
{
while (true)
{
var p = await session.Query<Person>().FirstOrDefaultAsync();
Assert.NotNull(p);

person.Firstname = "Bill" + RandomNumberGenerator.GetInt32(100);
await session.FlushAsync();
}
}
}
finally
{
_store.Configuration.EnableThreadSafetyChecks = false;
}
}

#region FilterTests

[Fact]
Expand Down Expand Up @@ -7233,26 +7188,17 @@ public virtual async Task ShouldNotTriggerThreadSafetyOnCancel()
{
// https://github.com/sebastienros/yessql/issues/618

_store.Configuration.EnableThreadSafetyChecks = true;

try
await using (var session = _store.CreateSession())
{
await using (var session = _store.CreateSession())
{
var index = new PropertyIndex { Name = "Home" };
var index = new PropertyIndex { Name = "Home" };

await session.SaveAsync(index);
await session.SaveAsync(index);

await Assert.ThrowsAsync<ArgumentException>(async () =>
{
// Try saving an index directly to force an exception which should trigger cancel.
await session.FlushAsync();
});
}
}
finally
{
_store.Configuration.EnableThreadSafetyChecks = false;
await Assert.ThrowsAsync<ArgumentException>(async () =>
{
// Try saving an index directly to force an exception which should trigger cancel.
await session.FlushAsync();
});
}
}

Expand Down
4 changes: 2 additions & 2 deletions test/YesSql.Tests/MySqlTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,8 @@ protected override IConfiguration CreateConfiguration()
.UseMySql(ConnectionString)
.SetTablePrefix(TablePrefix)
.UseBlockIdGenerator()
.SetIdentityColumnSize(IdentityColumnSize.Int64)
;
.WithThreadSafetyChecks()
.SetIdentityColumnSize(IdentityColumnSize.Int64);
}

[Fact]
Expand Down
4 changes: 2 additions & 2 deletions test/YesSql.Tests/PostgreSqlLegacyIdentityTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,8 @@ protected override IConfiguration CreateConfiguration()
.UsePostgreSql(ConnectionStringBuilder.ConnectionString)
.SetTablePrefix(TablePrefix)
.UseBlockIdGenerator()
.SetIdentityColumnSize(IdentityColumnSize.Int32)
;
.WithThreadSafetyChecks()
.SetIdentityColumnSize(IdentityColumnSize.Int32);
}

[Fact(Skip = "Skip to make test faster in this configuration")]
Expand Down
4 changes: 2 additions & 2 deletions test/YesSql.Tests/PostgreSqlTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,8 @@ protected override IConfiguration CreateConfiguration()
.UsePostgreSql(ConnectionStringBuilder.ConnectionString, "BabyYoda")
.SetTablePrefix(TablePrefix)
.UseBlockIdGenerator()
.SetIdentityColumnSize(IdentityColumnSize.Int64)
;
.WithThreadSafetyChecks()
.SetIdentityColumnSize(IdentityColumnSize.Int64);
}

[Fact(Skip = "Postgres locks on the table")]
Expand Down
1 change: 1 addition & 0 deletions test/YesSql.Tests/SqlServer2017Tests.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using Xunit;
using YesSql.Provider.SqlServer;
using YesSql.Tests.Fixtures;

namespace YesSql.Tests
Expand Down
1 change: 1 addition & 0 deletions test/YesSql.Tests/SqlServer2019Tests.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using Xunit;
using YesSql.Provider.SqlServer;
using YesSql.Tests.Fixtures;

namespace YesSql.Tests
Expand Down
2 changes: 1 addition & 1 deletion test/YesSql.Tests/SqlServerTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ protected override IConfiguration CreateConfiguration()
.SetTablePrefix(TablePrefix)
.UseBlockIdGenerator()
.SetIdentityColumnSize(IdentityColumnSize.Int64)
;
.WithThreadSafetyChecks();
}

[Fact]
Expand Down
4 changes: 2 additions & 2 deletions test/YesSql.Tests/SqliteLegacyIdentityTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,8 @@ protected override IConfiguration CreateConfiguration()
.UseSqLite(connectionString)
.SetTablePrefix(TablePrefix)
.UseDefaultIdGenerator()
.SetIdentityColumnSize(IdentityColumnSize.Int32)
;
.WithThreadSafetyChecks()
.SetIdentityColumnSize(IdentityColumnSize.Int32);
}

[Fact(Skip = "Skip to make test faster in this configuration")]
Expand Down
4 changes: 2 additions & 2 deletions test/YesSql.Tests/SqliteTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,8 @@ protected override IConfiguration CreateConfiguration()
.UseSqLite(connectionString)
.SetTablePrefix(TablePrefix)
.UseDefaultIdGenerator()
.SetIdentityColumnSize(IdentityColumnSize.Int64)
;
.WithThreadSafetyChecks()
.SetIdentityColumnSize(IdentityColumnSize.Int64);
}

[Fact(Skip = "Alter column is not supported by Sqlite")]
Expand Down