diff --git a/src/providers/WorkflowCore.Persistence.EntityFramework/Services/LargeDataOptimizedEntityFrameworkPersistenceProvider.cs b/src/providers/WorkflowCore.Persistence.EntityFramework/Services/LargeDataOptimizedEntityFrameworkPersistenceProvider.cs
new file mode 100644
index 000000000..cbb1658a8
--- /dev/null
+++ b/src/providers/WorkflowCore.Persistence.EntityFramework/Services/LargeDataOptimizedEntityFrameworkPersistenceProvider.cs
@@ -0,0 +1,135 @@
+using Microsoft.EntityFrameworkCore;
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Linq;
+using System.Threading.Tasks;
+using WorkflowCore.Persistence.EntityFramework.Models;
+using WorkflowCore.Models;
+using WorkflowCore.Persistence.EntityFramework.Interfaces;
+using System.Threading;
+using WorkflowCore.Interface;
+
+namespace WorkflowCore.Persistence.EntityFramework.Services
+{
+ public sealed class LargeDataOptimizedEntityFrameworkPersistenceProvider : EntityFrameworkPersistenceProvider, IPersistenceProvider
+ {
+ private readonly IWorkflowDbContextFactory _contextFactory;
+
+ public LargeDataOptimizedEntityFrameworkPersistenceProvider(IWorkflowDbContextFactory contextFactory, bool canCreateDb, bool canMigrateDb)
+ : base(contextFactory, canCreateDb, canMigrateDb)
+ {
+ _contextFactory = contextFactory;
+ }
+
+ ///
+ public new async Task> GetWorkflowInstances(WorkflowStatus? status, string type, DateTime? createdFrom, DateTime? createdTo, int skip, int take)
+ {
+ using (var db = _contextFactory.Build())
+ {
+ IQueryable query = db.Set()
+ .Include(wf => wf.ExecutionPointers)
+ .ThenInclude(ep => ep.ExtensionAttributes)
+ .Include(wf => wf.ExecutionPointers)
+ .AsSplitQuery()
+ .AsQueryable();
+
+ if (status.HasValue)
+ {
+ query = query.Where(x => x.Status == status.Value);
+ }
+
+ if (!string.IsNullOrEmpty(type))
+ {
+ query = query.Where(x => x.WorkflowDefinitionId == type);
+ }
+
+ if (createdFrom.HasValue)
+ {
+ query = query.Where(x => x.CreateTime >= createdFrom.Value);
+ }
+
+ if (createdTo.HasValue)
+ {
+ query = query.Where(x => x.CreateTime <= createdTo.Value);
+ }
+
+ var rawResult = await query.OrderBy(x => x.PersistenceId).Skip(skip).Take(take).ToListAsync();
+
+ var result = new List(rawResult.Count);
+
+ foreach (var item in rawResult)
+ {
+ result.Add(item.ToWorkflowInstance());
+ }
+
+ return result;
+ }
+ }
+
+ ///
+ public new async Task GetWorkflowInstance(string id, CancellationToken cancellationToken = default)
+ {
+ using (var db = _contextFactory.Build())
+ {
+ var uid = new Guid(id);
+ var raw = await db.Set()
+ .Include(wf => wf.ExecutionPointers)
+ .ThenInclude(ep => ep.ExtensionAttributes)
+ .Include(wf => wf.ExecutionPointers)
+ .AsSplitQuery()
+ .FirstAsync(x => x.InstanceId == uid, cancellationToken);
+
+ return raw?.ToWorkflowInstance();
+ }
+ }
+
+ ///
+ public new async Task> GetWorkflowInstances(IEnumerable ids, CancellationToken cancellationToken = default)
+ {
+ if (ids == null)
+ {
+ return Array.Empty();
+ }
+
+ using (var db = _contextFactory.Build())
+ {
+ var uids = ids.Select(i => new Guid(i));
+ var raw = db.Set()
+ .Include(wf => wf.ExecutionPointers)
+ .ThenInclude(ep => ep.ExtensionAttributes)
+ .Include(wf => wf.ExecutionPointers)
+ .AsSplitQuery()
+ .Where(x => uids.Contains(x.InstanceId));
+
+ var persistedWorkflows = await raw.ToListAsync(cancellationToken);
+
+ return persistedWorkflows.Select(i => i.ToWorkflowInstance());
+ }
+ }
+
+ ///
+ public new async Task PersistWorkflow(WorkflowInstance workflow, CancellationToken cancellationToken = default)
+ {
+ using (var db = _contextFactory.Build())
+ using (var transaction = await db.Database.BeginTransactionAsync(IsolationLevel.RepeatableRead, cancellationToken))
+ {
+ var uid = new Guid(workflow.Id);
+ var existingEntity = await db.Set()
+ .Where(x => x.InstanceId == uid)
+ .Include(wf => wf.ExecutionPointers)
+ .ThenInclude(ep => ep.ExtensionAttributes)
+ .Include(wf => wf.ExecutionPointers)
+ .AsSplitQuery()
+ .AsTracking()
+ .FirstAsync(cancellationToken);
+
+ _ = workflow.ToPersistable(existingEntity);
+
+ await db.SaveChangesAsync(cancellationToken);
+
+ await transaction.CommitAsync(cancellationToken);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/providers/WorkflowCore.Persistence.EntityFramework/WorkflowCore.Persistence.EntityFramework.csproj b/src/providers/WorkflowCore.Persistence.EntityFramework/WorkflowCore.Persistence.EntityFramework.csproj
index f161d1299..4358d3b2b 100644
--- a/src/providers/WorkflowCore.Persistence.EntityFramework/WorkflowCore.Persistence.EntityFramework.csproj
+++ b/src/providers/WorkflowCore.Persistence.EntityFramework/WorkflowCore.Persistence.EntityFramework.csproj
@@ -30,8 +30,8 @@
-
-
+
+
diff --git a/src/providers/WorkflowCore.Persistence.PostgreSQL/ServiceCollectionExtensions.cs b/src/providers/WorkflowCore.Persistence.PostgreSQL/ServiceCollectionExtensions.cs
index 9366c3936..821e541f1 100644
--- a/src/providers/WorkflowCore.Persistence.PostgreSQL/ServiceCollectionExtensions.cs
+++ b/src/providers/WorkflowCore.Persistence.PostgreSQL/ServiceCollectionExtensions.cs
@@ -9,10 +9,22 @@ namespace Microsoft.Extensions.DependencyInjection
{
public static class ServiceCollectionExtensions
{
- public static WorkflowOptions UsePostgreSQL(this WorkflowOptions options,
- string connectionString, bool canCreateDB, bool canMigrateDB, string schemaName="wfc")
+ private static readonly Func DefaultProviderFactory =
+ (sqlContextFactory, canCreateDb, canMigrateDb) =>
+ new EntityFrameworkPersistenceProvider(sqlContextFactory, canCreateDb, canMigrateDb);
+
+ private static readonly Func OptimizedProviderFactory =
+ (sqlContextFactory, canCreateDb, canMigrateDb) =>
+ new LargeDataOptimizedEntityFrameworkPersistenceProvider(sqlContextFactory, canCreateDb, canMigrateDb);
+
+ public static WorkflowOptions UsePostgreSQL(this WorkflowOptions options, string connectionString, bool canCreateDB, bool canMigrateDB, string schemaName = "wfc") =>
+ options.UsePostgreSQL(connectionString, canCreateDB, canMigrateDB, false, schemaName);
+
+ public static WorkflowOptions UsePostgreSQL(this WorkflowOptions options, string connectionString, bool canCreateDB, bool canMigrateDB, bool largeDataOptimized, string schemaName="wfc")
{
- options.UsePersistence(sp => new EntityFrameworkPersistenceProvider(new PostgresContextFactory(connectionString, schemaName), canCreateDB, canMigrateDB));
+ var providerFactory = largeDataOptimized ? OptimizedProviderFactory : DefaultProviderFactory;
+
+ options.UsePersistence(_ => providerFactory(new PostgresContextFactory(connectionString, schemaName), canCreateDB, canMigrateDB));
options.Services.AddTransient(sp => new WorkflowPurger(new PostgresContextFactory(connectionString, schemaName)));
return options;
}
diff --git a/src/providers/WorkflowCore.Persistence.SqlServer/ServiceCollectionExtensions.cs b/src/providers/WorkflowCore.Persistence.SqlServer/ServiceCollectionExtensions.cs
index 0a54b1ea2..133fdb1e0 100644
--- a/src/providers/WorkflowCore.Persistence.SqlServer/ServiceCollectionExtensions.cs
+++ b/src/providers/WorkflowCore.Persistence.SqlServer/ServiceCollectionExtensions.cs
@@ -9,11 +9,24 @@ namespace Microsoft.Extensions.DependencyInjection
{
public static class ServiceCollectionExtensions
{
- public static WorkflowOptions UseSqlServer(this WorkflowOptions options, string connectionString, bool canCreateDB, bool canMigrateDB, Action initAction = null)
+ private static readonly Func DefaultProviderFactory =
+ (sqlContextFactory, canCreateDb, canMigrateDb) =>
+ new EntityFrameworkPersistenceProvider(sqlContextFactory, canCreateDb, canMigrateDb);
+
+ private static readonly Func OptimizedProviderFactory =
+ (sqlContextFactory, canCreateDb, canMigrateDb) =>
+ new LargeDataOptimizedEntityFrameworkPersistenceProvider(sqlContextFactory, canCreateDb, canMigrateDb);
+
+ public static WorkflowOptions UseSqlServer(this WorkflowOptions options, string connectionString, bool canCreateDB, bool canMigrateDB, Action initAction = null) =>
+ options.UseSqlServer(connectionString, canCreateDB, canMigrateDB, false, initAction);
+
+ public static WorkflowOptions UseSqlServer(this WorkflowOptions options, string connectionString, bool canCreateDB, bool canMigrateDB, bool largeDataOptimized, Action initAction = null)
{
- options.UsePersistence(sp => new EntityFrameworkPersistenceProvider(new SqlContextFactory(connectionString, initAction), canCreateDB, canMigrateDB));
+ var providerFactory = largeDataOptimized ? OptimizedProviderFactory : DefaultProviderFactory;
+
+ options.UsePersistence(_ => providerFactory(new SqlContextFactory(connectionString, initAction), canCreateDB, canMigrateDB));
options.Services.AddTransient(sp => new WorkflowPurger(new SqlContextFactory(connectionString, initAction)));
return options;
}
}
-}
+}
\ No newline at end of file
diff --git a/test/WorkflowCore.IntegrationTests/Scenarios/ForkScenario.cs b/test/WorkflowCore.IntegrationTests/Scenarios/ForkScenario.cs
index 89a9b46e0..a75cbe8b9 100644
--- a/test/WorkflowCore.IntegrationTests/Scenarios/ForkScenario.cs
+++ b/test/WorkflowCore.IntegrationTests/Scenarios/ForkScenario.cs
@@ -6,7 +6,7 @@
namespace WorkflowCore.IntegrationTests.Scenarios
{
- public class ForkScenario : BaseScenario
+ public class ForkScenario : BaseScenario.OutcomeFork, Object>
{
static int TaskATicker = 0;
static int TaskBTicker = 0;
diff --git a/test/WorkflowCore.IntegrationTests/Scenarios/IfScenario.cs b/test/WorkflowCore.IntegrationTests/Scenarios/IfScenario.cs
index 8b716715f..37e247466 100644
--- a/test/WorkflowCore.IntegrationTests/Scenarios/IfScenario.cs
+++ b/test/WorkflowCore.IntegrationTests/Scenarios/IfScenario.cs
@@ -8,7 +8,7 @@
namespace WorkflowCore.IntegrationTests.Scenarios
{
- public class IfScenario : WorkflowTest
+ public class IfScenario : WorkflowTest.IfWorkflow, IfScenario.MyDataClass>
{
internal static int Step1Ticker = 0;
internal static int Step2Ticker = 0;
diff --git a/test/WorkflowCore.IntegrationTests/Scenarios/UserScenario.cs b/test/WorkflowCore.IntegrationTests/Scenarios/UserScenario.cs
index 66d442018..1b5e23155 100644
--- a/test/WorkflowCore.IntegrationTests/Scenarios/UserScenario.cs
+++ b/test/WorkflowCore.IntegrationTests/Scenarios/UserScenario.cs
@@ -8,7 +8,7 @@
namespace WorkflowCore.IntegrationTests.Scenarios
{
- public class UserScenario : WorkflowTest
+ public class UserScenario : WorkflowTest.HumanWorkflow, Object>
{
internal static int ApproveStepTicker = 0;
internal static int DisapproveStepTicker = 0;
diff --git a/test/WorkflowCore.IntegrationTests/Scenarios/WhenScenario.cs b/test/WorkflowCore.IntegrationTests/Scenarios/WhenScenario.cs
index b56d4c81d..58b39376f 100644
--- a/test/WorkflowCore.IntegrationTests/Scenarios/WhenScenario.cs
+++ b/test/WorkflowCore.IntegrationTests/Scenarios/WhenScenario.cs
@@ -8,7 +8,7 @@
namespace WorkflowCore.IntegrationTests.Scenarios
{
- public class WhenScenario : WorkflowTest
+ public class WhenScenario : WorkflowTest.WhenWorkflow, WhenScenario.MyDataClass>
{
internal static int Case1Ticker = 0;
internal static int Case2Ticker = 0;
diff --git a/test/WorkflowCore.IntegrationTests/Scenarios/WhileScenario.cs b/test/WorkflowCore.IntegrationTests/Scenarios/WhileScenario.cs
index f91209d44..d42b526a6 100644
--- a/test/WorkflowCore.IntegrationTests/Scenarios/WhileScenario.cs
+++ b/test/WorkflowCore.IntegrationTests/Scenarios/WhileScenario.cs
@@ -8,7 +8,7 @@
namespace WorkflowCore.IntegrationTests.Scenarios
{
- public class WhileScenario : WorkflowTest
+ public class WhileScenario : WorkflowTest.WhileWorkflow, WhileScenario.MyDataClass>
{
internal static int Step1Ticker = 0;
internal static int Step2Ticker = 0;
diff --git a/test/WorkflowCore.Tests.DynamoDB/Scenarios/DynamoIfScenario.cs b/test/WorkflowCore.Tests.DynamoDB/Scenarios/DynamoIfScenario.cs
index efc3738d8..20630f8ae 100644
--- a/test/WorkflowCore.Tests.DynamoDB/Scenarios/DynamoIfScenario.cs
+++ b/test/WorkflowCore.Tests.DynamoDB/Scenarios/DynamoIfScenario.cs
@@ -7,8 +7,8 @@
namespace WorkflowCore.Tests.DynamoDB.Scenarios
{
[Collection("DynamoDb collection")]
- public class DynamoIfScenario : IfScenario
- {
+ public class DynamoIfScenario : IfScenario
+ {
protected override void ConfigureServices(IServiceCollection services)
{
var cfg = new AmazonDynamoDBConfig {ServiceURL = DynamoDbDockerSetup.ConnectionString};
diff --git a/test/WorkflowCore.Tests.DynamoDB/Scenarios/DynamoWhileScenario.cs b/test/WorkflowCore.Tests.DynamoDB/Scenarios/DynamoWhileScenario.cs
index 7912b3f53..bed96303d 100644
--- a/test/WorkflowCore.Tests.DynamoDB/Scenarios/DynamoWhileScenario.cs
+++ b/test/WorkflowCore.Tests.DynamoDB/Scenarios/DynamoWhileScenario.cs
@@ -7,8 +7,8 @@
namespace WorkflowCore.Tests.DynamoDB.Scenarios
{
[Collection("DynamoDb collection")]
- public class DynamoWhileScenario : WhileScenario
- {
+ public class DynamoWhileScenario : WhileScenario
+ {
protected override void ConfigureServices(IServiceCollection services)
{
var cfg = new AmazonDynamoDBConfig {ServiceURL = DynamoDbDockerSetup.ConnectionString};
diff --git a/test/WorkflowCore.Tests.MongoDB/Scenarios/MongoForkScenario.cs b/test/WorkflowCore.Tests.MongoDB/Scenarios/MongoForkScenario.cs
index f582f0e7b..09739b11f 100644
--- a/test/WorkflowCore.Tests.MongoDB/Scenarios/MongoForkScenario.cs
+++ b/test/WorkflowCore.Tests.MongoDB/Scenarios/MongoForkScenario.cs
@@ -6,8 +6,8 @@
namespace WorkflowCore.Tests.MongoDB.Scenarios
{
[Collection("Mongo collection")]
- public class MongoForkScenario : ForkScenario
- {
+ public class MongoForkScenario : ForkScenario
+ {
protected override void Configure(IServiceCollection services)
{
services.AddWorkflow(x => x.UseMongoDB(MongoDockerSetup.ConnectionString, nameof(MongoForkScenario)));
diff --git a/test/WorkflowCore.Tests.MongoDB/Scenarios/MongoIfScenario.cs b/test/WorkflowCore.Tests.MongoDB/Scenarios/MongoIfScenario.cs
index 5c78d3ddc..c9bd2c1d5 100644
--- a/test/WorkflowCore.Tests.MongoDB/Scenarios/MongoIfScenario.cs
+++ b/test/WorkflowCore.Tests.MongoDB/Scenarios/MongoIfScenario.cs
@@ -6,8 +6,8 @@
namespace WorkflowCore.Tests.MongoDB.Scenarios
{
[Collection("Mongo collection")]
- public class MongoIfScenario : IfScenario
- {
+ public class MongoIfScenario : IfScenario
+ {
protected override void ConfigureServices(IServiceCollection services)
{
services.AddWorkflow(x => x.UseMongoDB(MongoDockerSetup.ConnectionString, nameof(MongoIfScenario)));
diff --git a/test/WorkflowCore.Tests.MongoDB/Scenarios/MongoUserScenario.cs b/test/WorkflowCore.Tests.MongoDB/Scenarios/MongoUserScenario.cs
index fbaa0f223..9264107fb 100644
--- a/test/WorkflowCore.Tests.MongoDB/Scenarios/MongoUserScenario.cs
+++ b/test/WorkflowCore.Tests.MongoDB/Scenarios/MongoUserScenario.cs
@@ -6,7 +6,7 @@
namespace WorkflowCore.Tests.MongoDB.Scenarios
{
[Collection("Mongo collection")]
- public class MongoUserScenario : UserScenario
+ public class MongoUserScenario : UserScenario
{
protected override void ConfigureServices(IServiceCollection services)
{
diff --git a/test/WorkflowCore.Tests.MongoDB/Scenarios/MongoWhenScenario.cs b/test/WorkflowCore.Tests.MongoDB/Scenarios/MongoWhenScenario.cs
index b966f35b8..3da52ec3e 100644
--- a/test/WorkflowCore.Tests.MongoDB/Scenarios/MongoWhenScenario.cs
+++ b/test/WorkflowCore.Tests.MongoDB/Scenarios/MongoWhenScenario.cs
@@ -6,7 +6,7 @@
namespace WorkflowCore.Tests.MongoDB.Scenarios
{
[Collection("Mongo collection")]
- public class MongoWhenScenario : WhenScenario
+ public class MongoWhenScenario : WhenScenario
{
protected override void ConfigureServices(IServiceCollection services)
{
diff --git a/test/WorkflowCore.Tests.MongoDB/Scenarios/MongoWhileScenario.cs b/test/WorkflowCore.Tests.MongoDB/Scenarios/MongoWhileScenario.cs
index 78e5277f6..5f9eb6201 100644
--- a/test/WorkflowCore.Tests.MongoDB/Scenarios/MongoWhileScenario.cs
+++ b/test/WorkflowCore.Tests.MongoDB/Scenarios/MongoWhileScenario.cs
@@ -6,7 +6,7 @@
namespace WorkflowCore.Tests.MongoDB.Scenarios
{
[Collection("Mongo collection")]
- public class MongoWhileScenario : WhileScenario
+ public class MongoWhileScenario : WhileScenario
{
protected override void ConfigureServices(IServiceCollection services)
{
diff --git a/test/WorkflowCore.Tests.MySQL/Scenarios/MysqlForkScenario.cs b/test/WorkflowCore.Tests.MySQL/Scenarios/MysqlForkScenario.cs
index 8a57e465b..c0b2e84c3 100644
--- a/test/WorkflowCore.Tests.MySQL/Scenarios/MysqlForkScenario.cs
+++ b/test/WorkflowCore.Tests.MySQL/Scenarios/MysqlForkScenario.cs
@@ -6,8 +6,8 @@
namespace WorkflowCore.Tests.MySQL.Scenarios
{
[Collection("Mysql collection")]
- public class MysqlForkScenario : ForkScenario
- {
+ public class MysqlForkScenario : ForkScenario
+ {
protected override void Configure(IServiceCollection services)
{
services.AddWorkflow(x => x.UseMySQL(MysqlDockerSetup.ScenarioConnectionString, true, true));
diff --git a/test/WorkflowCore.Tests.MySQL/Scenarios/MysqlIfScenario.cs b/test/WorkflowCore.Tests.MySQL/Scenarios/MysqlIfScenario.cs
index 7cf6721fc..74c849847 100644
--- a/test/WorkflowCore.Tests.MySQL/Scenarios/MysqlIfScenario.cs
+++ b/test/WorkflowCore.Tests.MySQL/Scenarios/MysqlIfScenario.cs
@@ -6,8 +6,8 @@
namespace WorkflowCore.Tests.MySQL.Scenarios
{
[Collection("Mysql collection")]
- public class MysqlIfScenario : IfScenario
- {
+ public class MysqlIfScenario : IfScenario
+ {
protected override void ConfigureServices(IServiceCollection services)
{
services.AddWorkflow(x => x.UseMySQL(MysqlDockerSetup.ScenarioConnectionString, true, true));
diff --git a/test/WorkflowCore.Tests.MySQL/Scenarios/MysqlUserScenario.cs b/test/WorkflowCore.Tests.MySQL/Scenarios/MysqlUserScenario.cs
index 909b98b4f..64ed38c9e 100644
--- a/test/WorkflowCore.Tests.MySQL/Scenarios/MysqlUserScenario.cs
+++ b/test/WorkflowCore.Tests.MySQL/Scenarios/MysqlUserScenario.cs
@@ -6,7 +6,7 @@
namespace WorkflowCore.Tests.MySQL.Scenarios
{
[Collection("Mysql collection")]
- public class MysqlUserScenario : UserScenario
+ public class MysqlUserScenario : UserScenario
{
protected override void ConfigureServices(IServiceCollection services)
{
diff --git a/test/WorkflowCore.Tests.MySQL/Scenarios/MysqlWhenScenario.cs b/test/WorkflowCore.Tests.MySQL/Scenarios/MysqlWhenScenario.cs
index e7721e382..aa3a74238 100644
--- a/test/WorkflowCore.Tests.MySQL/Scenarios/MysqlWhenScenario.cs
+++ b/test/WorkflowCore.Tests.MySQL/Scenarios/MysqlWhenScenario.cs
@@ -6,7 +6,7 @@
namespace WorkflowCore.Tests.MySQL.Scenarios
{
[Collection("Mysql collection")]
- public class MysqlWhenScenario : WhenScenario
+ public class MysqlWhenScenario : WhenScenario
{
protected override void ConfigureServices(IServiceCollection services)
{
diff --git a/test/WorkflowCore.Tests.MySQL/Scenarios/MysqlWhileScenario.cs b/test/WorkflowCore.Tests.MySQL/Scenarios/MysqlWhileScenario.cs
index 8e6c5f6ee..b34e4760a 100644
--- a/test/WorkflowCore.Tests.MySQL/Scenarios/MysqlWhileScenario.cs
+++ b/test/WorkflowCore.Tests.MySQL/Scenarios/MysqlWhileScenario.cs
@@ -6,7 +6,7 @@
namespace WorkflowCore.Tests.MySQL.Scenarios
{
[Collection("Mysql collection")]
- public class MysqlWhileScenario : WhileScenario
+ public class MysqlWhileScenario : WhileScenario
{
protected override void ConfigureServices(IServiceCollection services)
{
diff --git a/test/WorkflowCore.Tests.Oracle/Scenarios/OracleForkScenario.cs b/test/WorkflowCore.Tests.Oracle/Scenarios/OracleForkScenario.cs
index d525de700..8f7716894 100644
--- a/test/WorkflowCore.Tests.Oracle/Scenarios/OracleForkScenario.cs
+++ b/test/WorkflowCore.Tests.Oracle/Scenarios/OracleForkScenario.cs
@@ -2,15 +2,14 @@
using Microsoft.Extensions.DependencyInjection;
using WorkflowCore.IntegrationTests.Scenarios;
using WorkflowCore.Persistence.Oracle;
-using WorkflowCore.Tests.Oracle;
using Xunit;
namespace WorkflowCore.Tests.Oracle.Scenarios
{
[Collection("Oracle collection")]
- public class OracleForkScenario : ForkScenario
- {
+ public class OracleForkScenario : ForkScenario
+ {
protected override void Configure(IServiceCollection services)
{
services.AddWorkflow(x => x.UseOracle(OracleDockerSetup.ConnectionString, true, true));
diff --git a/test/WorkflowCore.Tests.Oracle/Scenarios/OracleIfScenario.cs b/test/WorkflowCore.Tests.Oracle/Scenarios/OracleIfScenario.cs
index c090f89d1..6c24d0d95 100644
--- a/test/WorkflowCore.Tests.Oracle/Scenarios/OracleIfScenario.cs
+++ b/test/WorkflowCore.Tests.Oracle/Scenarios/OracleIfScenario.cs
@@ -2,15 +2,14 @@
using Microsoft.Extensions.DependencyInjection;
using WorkflowCore.IntegrationTests.Scenarios;
using WorkflowCore.Persistence.Oracle;
-using WorkflowCore.Tests.Oracle;
using Xunit;
namespace WorkflowCore.Tests.Oracle.Scenarios
{
[Collection("Oracle collection")]
- public class OracleIfScenario : IfScenario
- {
+ public class OracleIfScenario : IfScenario
+ {
protected override void ConfigureServices(IServiceCollection services)
{
services.AddWorkflow(x => x.UseOracle(OracleDockerSetup.ConnectionString, true, true));
diff --git a/test/WorkflowCore.Tests.Oracle/Scenarios/OracleUserScenario.cs b/test/WorkflowCore.Tests.Oracle/Scenarios/OracleUserScenario.cs
index 0e5861f6d..ed928ba08 100644
--- a/test/WorkflowCore.Tests.Oracle/Scenarios/OracleUserScenario.cs
+++ b/test/WorkflowCore.Tests.Oracle/Scenarios/OracleUserScenario.cs
@@ -2,14 +2,13 @@
using Microsoft.Extensions.DependencyInjection;
using WorkflowCore.IntegrationTests.Scenarios;
using WorkflowCore.Persistence.Oracle;
-using WorkflowCore.Tests.Oracle;
using Xunit;
namespace WorkflowCore.Tests.Oracle.Scenarios
{
[Collection("Oracle collection")]
- public class OracleUserScenario : UserScenario
+ public class OracleUserScenario : UserScenario
{
protected override void ConfigureServices(IServiceCollection services)
{
diff --git a/test/WorkflowCore.Tests.Oracle/Scenarios/OracleWhenScenario.cs b/test/WorkflowCore.Tests.Oracle/Scenarios/OracleWhenScenario.cs
index b8671695e..305967290 100644
--- a/test/WorkflowCore.Tests.Oracle/Scenarios/OracleWhenScenario.cs
+++ b/test/WorkflowCore.Tests.Oracle/Scenarios/OracleWhenScenario.cs
@@ -2,14 +2,13 @@
using Microsoft.Extensions.DependencyInjection;
using WorkflowCore.IntegrationTests.Scenarios;
using WorkflowCore.Persistence.Oracle;
-using WorkflowCore.Tests.Oracle;
using Xunit;
namespace WorkflowCore.Tests.Oracle.Scenarios
{
[Collection("Oracle collection")]
- public class OracleWhenScenario : WhenScenario
+ public class OracleWhenScenario : WhenScenario
{
protected override void ConfigureServices(IServiceCollection services)
{
diff --git a/test/WorkflowCore.Tests.Oracle/Scenarios/OracleWhileScenario.cs b/test/WorkflowCore.Tests.Oracle/Scenarios/OracleWhileScenario.cs
index 0b4b01467..4ad3e7d76 100644
--- a/test/WorkflowCore.Tests.Oracle/Scenarios/OracleWhileScenario.cs
+++ b/test/WorkflowCore.Tests.Oracle/Scenarios/OracleWhileScenario.cs
@@ -2,14 +2,13 @@
using Microsoft.Extensions.DependencyInjection;
using WorkflowCore.IntegrationTests.Scenarios;
using WorkflowCore.Persistence.Oracle;
-using WorkflowCore.Tests.Oracle;
using Xunit;
namespace WorkflowCore.Tests.Oracle.Scenarios
{
[Collection("Oracle collection")]
- public class OracleWhileScenario : WhileScenario
+ public class OracleWhileScenario : WhileScenario
{
protected override void ConfigureServices(IServiceCollection services)
{
diff --git a/test/WorkflowCore.Tests.PostgreSQL/DockerSetup.cs b/test/WorkflowCore.Tests.PostgreSQL/DockerSetup.cs
index 8548bf85d..fd20d28c1 100644
--- a/test/WorkflowCore.Tests.PostgreSQL/DockerSetup.cs
+++ b/test/WorkflowCore.Tests.PostgreSQL/DockerSetup.cs
@@ -30,8 +30,9 @@ public Task DisposeAsync()
}
}
- [CollectionDefinition("Postgres collection")]
+ [CollectionDefinition(Name)]
public class PostgresCollection : ICollectionFixture
{
+ public const string Name = "Postgres collection";
}
}
\ No newline at end of file
diff --git a/test/WorkflowCore.Tests.PostgreSQL/PostgresOptimizedPersistenceProviderFixture.cs b/test/WorkflowCore.Tests.PostgreSQL/PostgresOptimizedPersistenceProviderFixture.cs
new file mode 100644
index 000000000..ec03c6b63
--- /dev/null
+++ b/test/WorkflowCore.Tests.PostgreSQL/PostgresOptimizedPersistenceProviderFixture.cs
@@ -0,0 +1,24 @@
+using System;
+using WorkflowCore.Interface;
+using WorkflowCore.Persistence.EntityFramework.Services;
+using WorkflowCore.Persistence.PostgreSQL;
+using WorkflowCore.UnitTests;
+using Xunit;
+using Xunit.Abstractions;
+
+namespace WorkflowCore.Tests.PostgreSQL
+{
+ [Collection(PostgresCollection.Name)]
+ public class PostgresOptimizedPersistenceProviderFixture : BasePersistenceFixture
+ {
+ private readonly IPersistenceProvider _subject;
+ protected override IPersistenceProvider Subject => _subject;
+
+ public PostgresOptimizedPersistenceProviderFixture(PostgresDockerSetup dockerSetup, ITestOutputHelper output)
+ {
+ output.WriteLine($"Connecting on {PostgresDockerSetup.ConnectionString}");
+ _subject = new LargeDataOptimizedEntityFrameworkPersistenceProvider(new PostgresContextFactory(PostgresDockerSetup.ConnectionString,"wfc"), true, true);
+ _subject.EnsureStoreExists();
+ }
+ }
+}
diff --git a/test/WorkflowCore.Tests.PostgreSQL/PostgresPersistenceProviderFixture.cs b/test/WorkflowCore.Tests.PostgreSQL/PostgresPersistenceProviderFixture.cs
index 9322b033a..dc27bffa4 100644
--- a/test/WorkflowCore.Tests.PostgreSQL/PostgresPersistenceProviderFixture.cs
+++ b/test/WorkflowCore.Tests.PostgreSQL/PostgresPersistenceProviderFixture.cs
@@ -8,7 +8,7 @@
namespace WorkflowCore.Tests.PostgreSQL
{
- [Collection("Postgres collection")]
+ [Collection(PostgresCollection.Name)]
public class PostgresPersistenceProviderFixture : BasePersistenceFixture
{
private readonly IPersistenceProvider _subject;
diff --git a/test/WorkflowCore.Tests.PostgreSQL/Scenarios/PostgresActivityScenario.cs b/test/WorkflowCore.Tests.PostgreSQL/Scenarios/PostgresActivityScenario.cs
index 2f31eca31..7bdf64142 100644
--- a/test/WorkflowCore.Tests.PostgreSQL/Scenarios/PostgresActivityScenario.cs
+++ b/test/WorkflowCore.Tests.PostgreSQL/Scenarios/PostgresActivityScenario.cs
@@ -5,12 +5,21 @@
namespace WorkflowCore.Tests.PostgreSQL.Scenarios
{
- [Collection("Postgres collection")]
+ [Collection(PostgresCollection.Name)]
public class PostgresActivityScenario : ActivityScenario
- {
+ {
protected override void ConfigureServices(IServiceCollection services)
{
services.AddWorkflow(x => x.UsePostgreSQL(PostgresDockerSetup.ScenarioConnectionString, true, true));
}
}
+
+ [Collection(PostgresCollection.Name)]
+ public class OptimizedPostgresActivityScenario : ActivityScenario
+ {
+ protected override void ConfigureServices(IServiceCollection services)
+ {
+ services.AddWorkflow(x => x.UsePostgreSQL(PostgresDockerSetup.ScenarioConnectionString, true, true, true));
+ }
+ }
}
diff --git a/test/WorkflowCore.Tests.PostgreSQL/Scenarios/PostgresBasicScenario.cs b/test/WorkflowCore.Tests.PostgreSQL/Scenarios/PostgresBasicScenario.cs
index 2b1a8e62d..1652eed9b 100644
--- a/test/WorkflowCore.Tests.PostgreSQL/Scenarios/PostgresBasicScenario.cs
+++ b/test/WorkflowCore.Tests.PostgreSQL/Scenarios/PostgresBasicScenario.cs
@@ -5,7 +5,7 @@
namespace WorkflowCore.Tests.PostgreSQL.Scenarios
{
- [Collection("Postgres collection")]
+ [Collection(PostgresCollection.Name)]
public class PostgresBasicScenario : BasicScenario
{
protected override void ConfigureServices(IServiceCollection services)
@@ -13,4 +13,13 @@ protected override void ConfigureServices(IServiceCollection services)
services.AddWorkflow(x => x.UsePostgreSQL(PostgresDockerSetup.ScenarioConnectionString, true, true));
}
}
+
+ [Collection(PostgresCollection.Name)]
+ public class OptimizedPostgresBasicScenario : BasicScenario
+ {
+ protected override void ConfigureServices(IServiceCollection services)
+ {
+ services.AddWorkflow(x => x.UsePostgreSQL(PostgresDockerSetup.ScenarioConnectionString, true, true, true));
+ }
+ }
}
diff --git a/test/WorkflowCore.Tests.PostgreSQL/Scenarios/PostgresDataScenario.cs b/test/WorkflowCore.Tests.PostgreSQL/Scenarios/PostgresDataScenario.cs
index 3c0742b0b..718b99239 100644
--- a/test/WorkflowCore.Tests.PostgreSQL/Scenarios/PostgresDataScenario.cs
+++ b/test/WorkflowCore.Tests.PostgreSQL/Scenarios/PostgresDataScenario.cs
@@ -5,12 +5,21 @@
namespace WorkflowCore.Tests.PostgreSQL.Scenarios
{
- [Collection("Postgres collection")]
+ [Collection(PostgresCollection.Name)]
public class PostgresDataScenario : DataIOScenario
- {
+ {
protected override void ConfigureServices(IServiceCollection services)
{
services.AddWorkflow(x => x.UsePostgreSQL(PostgresDockerSetup.ScenarioConnectionString, true, true));
}
}
+
+ [Collection(PostgresCollection.Name)]
+ public class OptimizedPostgresDataScenario : DataIOScenario
+ {
+ protected override void ConfigureServices(IServiceCollection services)
+ {
+ services.AddWorkflow(x => x.UsePostgreSQL(PostgresDockerSetup.ScenarioConnectionString, true, true, true));
+ }
+ }
}
diff --git a/test/WorkflowCore.Tests.PostgreSQL/Scenarios/PostgresDelayScenario.cs b/test/WorkflowCore.Tests.PostgreSQL/Scenarios/PostgresDelayScenario.cs
index 649632ac5..3b8a5814b 100644
--- a/test/WorkflowCore.Tests.PostgreSQL/Scenarios/PostgresDelayScenario.cs
+++ b/test/WorkflowCore.Tests.PostgreSQL/Scenarios/PostgresDelayScenario.cs
@@ -5,9 +5,9 @@
namespace WorkflowCore.Tests.PostgreSQL.Scenarios
{
- [Collection("Postgres collection")]
+ [Collection(PostgresCollection.Name)]
public class PostgresDelayScenario : DelayScenario
- {
+ {
protected override void ConfigureServices(IServiceCollection services)
{
services.AddWorkflow(cfg =>
@@ -17,4 +17,17 @@ protected override void ConfigureServices(IServiceCollection services)
});
}
}
+
+ [Collection(PostgresCollection.Name)]
+ public class OptimizedPostgresDelayScenario : DelayScenario
+ {
+ protected override void ConfigureServices(IServiceCollection services)
+ {
+ services.AddWorkflow(cfg =>
+ {
+ cfg.UsePostgreSQL(PostgresDockerSetup.ScenarioConnectionString, true, true, true);
+ cfg.UsePollInterval(TimeSpan.FromSeconds(2));
+ });
+ }
+ }
}
diff --git a/test/WorkflowCore.Tests.PostgreSQL/Scenarios/PostgresDynamicDataScenario.cs b/test/WorkflowCore.Tests.PostgreSQL/Scenarios/PostgresDynamicDataScenario.cs
index f654ca16b..d513e3b41 100644
--- a/test/WorkflowCore.Tests.PostgreSQL/Scenarios/PostgresDynamicDataScenario.cs
+++ b/test/WorkflowCore.Tests.PostgreSQL/Scenarios/PostgresDynamicDataScenario.cs
@@ -5,7 +5,7 @@
namespace WorkflowCore.Tests.PostgreSQL.Scenarios
{
- [Collection("Postgres collection")]
+ [Collection(PostgresCollection.Name)]
public class PostgresDynamicDataScenario : DynamicDataIOScenario
{
protected override void ConfigureServices(IServiceCollection services)
@@ -13,4 +13,13 @@ protected override void ConfigureServices(IServiceCollection services)
services.AddWorkflow(x => x.UsePostgreSQL(PostgresDockerSetup.ScenarioConnectionString, true, true));
}
}
+
+ [Collection(PostgresCollection.Name)]
+ public class OptimizedPostgresDynamicDataScenario : DynamicDataIOScenario
+ {
+ protected override void ConfigureServices(IServiceCollection services)
+ {
+ services.AddWorkflow(x => x.UsePostgreSQL(PostgresDockerSetup.ScenarioConnectionString, true, true, true));
+ }
+ }
}
diff --git a/test/WorkflowCore.Tests.PostgreSQL/Scenarios/PostgresEventScenario.cs b/test/WorkflowCore.Tests.PostgreSQL/Scenarios/PostgresEventScenario.cs
index ec9d520cb..aad6e3385 100644
--- a/test/WorkflowCore.Tests.PostgreSQL/Scenarios/PostgresEventScenario.cs
+++ b/test/WorkflowCore.Tests.PostgreSQL/Scenarios/PostgresEventScenario.cs
@@ -5,12 +5,21 @@
namespace WorkflowCore.Tests.PostgreSQL.Scenarios
{
- [Collection("Postgres collection")]
+ [Collection(PostgresCollection.Name)]
public class PostgresEventScenario : EventScenario
- {
+ {
protected override void ConfigureServices(IServiceCollection services)
{
services.AddWorkflow(x => x.UsePostgreSQL(PostgresDockerSetup.ScenarioConnectionString, true, true));
}
}
+
+ [Collection(PostgresCollection.Name)]
+ public class OptimizedPostgresEventScenario : EventScenario
+ {
+ protected override void ConfigureServices(IServiceCollection services)
+ {
+ services.AddWorkflow(x => x.UsePostgreSQL(PostgresDockerSetup.ScenarioConnectionString, true, true, true));
+ }
+ }
}
diff --git a/test/WorkflowCore.Tests.PostgreSQL/Scenarios/PostgresForeachScenario.cs b/test/WorkflowCore.Tests.PostgreSQL/Scenarios/PostgresForeachScenario.cs
index a0c5e03f4..cd92168a0 100644
--- a/test/WorkflowCore.Tests.PostgreSQL/Scenarios/PostgresForeachScenario.cs
+++ b/test/WorkflowCore.Tests.PostgreSQL/Scenarios/PostgresForeachScenario.cs
@@ -5,7 +5,7 @@
namespace WorkflowCore.Tests.PostgreSQL.Scenarios
{
- [Collection("Postgres collection")]
+ [Collection(PostgresCollection.Name)]
public class PostgresForeachScenario : ForeachScenario
{
protected override void ConfigureServices(IServiceCollection services)
@@ -13,4 +13,13 @@ protected override void ConfigureServices(IServiceCollection services)
services.AddWorkflow(x => x.UsePostgreSQL(PostgresDockerSetup.ScenarioConnectionString, true, true));
}
}
+
+ [Collection(PostgresCollection.Name)]
+ public class OptimizedPostgresForeachScenario : ForeachScenario
+ {
+ protected override void ConfigureServices(IServiceCollection services)
+ {
+ services.AddWorkflow(x => x.UsePostgreSQL(PostgresDockerSetup.ScenarioConnectionString, true, true, true));
+ }
+ }
}
diff --git a/test/WorkflowCore.Tests.PostgreSQL/Scenarios/PostgresForkScenario.cs b/test/WorkflowCore.Tests.PostgreSQL/Scenarios/PostgresForkScenario.cs
index 4ad8fe86a..49e096349 100644
--- a/test/WorkflowCore.Tests.PostgreSQL/Scenarios/PostgresForkScenario.cs
+++ b/test/WorkflowCore.Tests.PostgreSQL/Scenarios/PostgresForkScenario.cs
@@ -5,12 +5,21 @@
namespace WorkflowCore.Tests.PostgreSQL.Scenarios
{
- [Collection("Postgres collection")]
- public class PostgresForkScenario : ForkScenario
- {
+ [Collection(PostgresCollection.Name)]
+ public class PostgresForkScenario : ForkScenario
+ {
protected override void Configure(IServiceCollection services)
{
services.AddWorkflow(x => x.UsePostgreSQL(PostgresDockerSetup.ScenarioConnectionString, true, true));
}
}
+
+ [Collection(PostgresCollection.Name)]
+ public class OptimizedPostgresForkScenario : ForkScenario
+ {
+ protected override void Configure(IServiceCollection services)
+ {
+ services.AddWorkflow(x => x.UsePostgreSQL(PostgresDockerSetup.ScenarioConnectionString, true, true, true));
+ }
+ }
}
diff --git a/test/WorkflowCore.Tests.PostgreSQL/Scenarios/PostgresIfScenario.cs b/test/WorkflowCore.Tests.PostgreSQL/Scenarios/PostgresIfScenario.cs
index f962dd70d..d381dadfc 100644
--- a/test/WorkflowCore.Tests.PostgreSQL/Scenarios/PostgresIfScenario.cs
+++ b/test/WorkflowCore.Tests.PostgreSQL/Scenarios/PostgresIfScenario.cs
@@ -5,12 +5,21 @@
namespace WorkflowCore.Tests.PostgreSQL.Scenarios
{
- [Collection("Postgres collection")]
- public class PostgresIfScenario : IfScenario
- {
+ [Collection(PostgresCollection.Name)]
+ public class PostgresIfScenario : IfScenario
+ {
protected override void ConfigureServices(IServiceCollection services)
{
services.AddWorkflow(x => x.UsePostgreSQL(PostgresDockerSetup.ScenarioConnectionString, true, true));
}
}
+
+ [Collection(PostgresCollection.Name)]
+ public class OptimizedPostgresIfScenario : IfScenario
+ {
+ protected override void ConfigureServices(IServiceCollection services)
+ {
+ services.AddWorkflow(x => x.UsePostgreSQL(PostgresDockerSetup.ScenarioConnectionString, true, true, true));
+ }
+ }
}
diff --git a/test/WorkflowCore.Tests.PostgreSQL/Scenarios/PostgresRetrySagaScenario.cs b/test/WorkflowCore.Tests.PostgreSQL/Scenarios/PostgresRetrySagaScenario.cs
index 0c63d54ff..74f221e25 100644
--- a/test/WorkflowCore.Tests.PostgreSQL/Scenarios/PostgresRetrySagaScenario.cs
+++ b/test/WorkflowCore.Tests.PostgreSQL/Scenarios/PostgresRetrySagaScenario.cs
@@ -5,12 +5,21 @@
namespace WorkflowCore.Tests.PostgreSQL.Scenarios
{
- [Collection("Postgres collection")]
+ [Collection(PostgresCollection.Name)]
public class PostgresRetrySagaScenario : RetrySagaScenario
- {
+ {
protected override void ConfigureServices(IServiceCollection services)
{
services.AddWorkflow(x => x.UsePostgreSQL(PostgresDockerSetup.ScenarioConnectionString, true, true));
}
}
+
+ [Collection(PostgresCollection.Name)]
+ public class OptimizedPostgresRetrySagaScenario : RetrySagaScenario
+ {
+ protected override void ConfigureServices(IServiceCollection services)
+ {
+ services.AddWorkflow(x => x.UsePostgreSQL(PostgresDockerSetup.ScenarioConnectionString, true, true, true));
+ }
+ }
}
diff --git a/test/WorkflowCore.Tests.PostgreSQL/Scenarios/PostgresSagaScenario.cs b/test/WorkflowCore.Tests.PostgreSQL/Scenarios/PostgresSagaScenario.cs
index 2d42dcd10..ad1f7de75 100644
--- a/test/WorkflowCore.Tests.PostgreSQL/Scenarios/PostgresSagaScenario.cs
+++ b/test/WorkflowCore.Tests.PostgreSQL/Scenarios/PostgresSagaScenario.cs
@@ -5,7 +5,7 @@
namespace WorkflowCore.Tests.PostgreSQL.Scenarios
{
- [Collection("Postgres collection")]
+ [Collection(PostgresCollection.Name)]
public class PostgresSagaScenario : SagaScenario
{
protected override void ConfigureServices(IServiceCollection services)
@@ -13,4 +13,13 @@ protected override void ConfigureServices(IServiceCollection services)
services.AddWorkflow(x => x.UsePostgreSQL(PostgresDockerSetup.ScenarioConnectionString, true, true));
}
}
+
+ [Collection(PostgresCollection.Name)]
+ public class OptimizedPostgresSagaScenario : SagaScenario
+ {
+ protected override void ConfigureServices(IServiceCollection services)
+ {
+ services.AddWorkflow(x => x.UsePostgreSQL(PostgresDockerSetup.ScenarioConnectionString, true, true, true));
+ }
+ }
}
diff --git a/test/WorkflowCore.Tests.PostgreSQL/Scenarios/PostgresUserScenario.cs b/test/WorkflowCore.Tests.PostgreSQL/Scenarios/PostgresUserScenario.cs
index 5c371bb93..ba2b077bb 100644
--- a/test/WorkflowCore.Tests.PostgreSQL/Scenarios/PostgresUserScenario.cs
+++ b/test/WorkflowCore.Tests.PostgreSQL/Scenarios/PostgresUserScenario.cs
@@ -5,12 +5,21 @@
namespace WorkflowCore.Tests.PostgreSQL.Scenarios
{
- [Collection("Postgres collection")]
- public class PostgresUserScenario : UserScenario
- {
+ [Collection(PostgresCollection.Name)]
+ public class PostgresUserScenario : UserScenario
+ {
protected override void ConfigureServices(IServiceCollection services)
{
services.AddWorkflow(x => x.UsePostgreSQL(PostgresDockerSetup.ScenarioConnectionString, true, true));
}
}
+
+ [Collection(PostgresCollection.Name)]
+ public class OptimizedPostgresUserScenario : UserScenario
+ {
+ protected override void ConfigureServices(IServiceCollection services)
+ {
+ services.AddWorkflow(x => x.UsePostgreSQL(PostgresDockerSetup.ScenarioConnectionString, true, true, true));
+ }
+ }
}
diff --git a/test/WorkflowCore.Tests.PostgreSQL/Scenarios/PostgresWhenScenario.cs b/test/WorkflowCore.Tests.PostgreSQL/Scenarios/PostgresWhenScenario.cs
index 52445096a..56a0e211f 100644
--- a/test/WorkflowCore.Tests.PostgreSQL/Scenarios/PostgresWhenScenario.cs
+++ b/test/WorkflowCore.Tests.PostgreSQL/Scenarios/PostgresWhenScenario.cs
@@ -5,12 +5,21 @@
namespace WorkflowCore.Tests.PostgreSQL.Scenarios
{
- [Collection("Postgres collection")]
- public class PostgresWhenScenario : WhenScenario
- {
+ [Collection(PostgresCollection.Name)]
+ public class PostgresWhenScenario : WhenScenario
+ {
protected override void ConfigureServices(IServiceCollection services)
{
services.AddWorkflow(x => x.UsePostgreSQL(PostgresDockerSetup.ScenarioConnectionString, true, true));
}
}
+
+ [Collection(PostgresCollection.Name)]
+ public class OptimizedPostgresWhenScenario : WhenScenario
+ {
+ protected override void ConfigureServices(IServiceCollection services)
+ {
+ services.AddWorkflow(x => x.UsePostgreSQL(PostgresDockerSetup.ScenarioConnectionString, true, true, true));
+ }
+ }
}
diff --git a/test/WorkflowCore.Tests.PostgreSQL/Scenarios/PostgresWhileScenario.cs b/test/WorkflowCore.Tests.PostgreSQL/Scenarios/PostgresWhileScenario.cs
index 9aaa2583c..d4d4bca45 100644
--- a/test/WorkflowCore.Tests.PostgreSQL/Scenarios/PostgresWhileScenario.cs
+++ b/test/WorkflowCore.Tests.PostgreSQL/Scenarios/PostgresWhileScenario.cs
@@ -5,12 +5,21 @@
namespace WorkflowCore.Tests.PostgreSQL.Scenarios
{
- [Collection("Postgres collection")]
- public class PostgresWhileScenario : WhileScenario
- {
+ [Collection(PostgresCollection.Name)]
+ public class PostgresWhileScenario : WhileScenario
+ {
protected override void ConfigureServices(IServiceCollection services)
{
services.AddWorkflow(x => x.UsePostgreSQL(PostgresDockerSetup.ScenarioConnectionString, true, true));
}
}
+
+ [Collection(PostgresCollection.Name)]
+ public class OptimizedPostgresWhileScenario : WhileScenario
+ {
+ protected override void ConfigureServices(IServiceCollection services)
+ {
+ services.AddWorkflow(x => x.UsePostgreSQL(PostgresDockerSetup.ScenarioConnectionString, true, true, true));
+ }
+ }
}
diff --git a/test/WorkflowCore.Tests.Redis/Scenarios/RedisIfScenario.cs b/test/WorkflowCore.Tests.Redis/Scenarios/RedisIfScenario.cs
index 744e2307f..99aa970d7 100644
--- a/test/WorkflowCore.Tests.Redis/Scenarios/RedisIfScenario.cs
+++ b/test/WorkflowCore.Tests.Redis/Scenarios/RedisIfScenario.cs
@@ -6,7 +6,7 @@
namespace WorkflowCore.Tests.Redis.Scenarios
{
[Collection("Redis collection")]
- public class RedisIfScenario : IfScenario
+ public class RedisIfScenario : IfScenario
{
protected override void ConfigureServices(IServiceCollection services)
{
diff --git a/test/WorkflowCore.Tests.Redis/Scenarios/RedisWhileScenario.cs b/test/WorkflowCore.Tests.Redis/Scenarios/RedisWhileScenario.cs
index 06d422ac8..24e939ea3 100644
--- a/test/WorkflowCore.Tests.Redis/Scenarios/RedisWhileScenario.cs
+++ b/test/WorkflowCore.Tests.Redis/Scenarios/RedisWhileScenario.cs
@@ -6,8 +6,8 @@
namespace WorkflowCore.Tests.Redis.Scenarios
{
[Collection("Redis collection")]
- public class RedisWhileScenario : WhileScenario
- {
+ public class RedisWhileScenario : WhileScenario
+ {
protected override void ConfigureServices(IServiceCollection services)
{
services.AddWorkflow(x => x.UseRedisPersistence(RedisDockerSetup.ConnectionString, "scenario-"));
diff --git a/test/WorkflowCore.Tests.SqlServer/DockerSetup.cs b/test/WorkflowCore.Tests.SqlServer/DockerSetup.cs
index cf50f854d..34244447f 100644
--- a/test/WorkflowCore.Tests.SqlServer/DockerSetup.cs
+++ b/test/WorkflowCore.Tests.SqlServer/DockerSetup.cs
@@ -29,8 +29,9 @@ public Task DisposeAsync()
}
}
- [CollectionDefinition("SqlServer collection")]
- public class SqlServerCollection : ICollectionFixture
+ [CollectionDefinition(Name)]
+ public sealed class SqlServerCollection : ICollectionFixture
{
+ public const string Name = "SqlServer collection";
}
}
\ No newline at end of file
diff --git a/test/WorkflowCore.Tests.SqlServer/Scenarios/SqlServerActivityScenario.cs b/test/WorkflowCore.Tests.SqlServer/Scenarios/SqlServerActivityScenario.cs
index 2094cdf66..d742d5f54 100644
--- a/test/WorkflowCore.Tests.SqlServer/Scenarios/SqlServerActivityScenario.cs
+++ b/test/WorkflowCore.Tests.SqlServer/Scenarios/SqlServerActivityScenario.cs
@@ -5,12 +5,21 @@
namespace WorkflowCore.Tests.SqlServer.Scenarios
{
- [Collection("SqlServer collection")]
+ [Collection(SqlServerCollection.Name)]
public class SqlServerActivityScenario : ActivityScenario
- {
+ {
protected override void ConfigureServices(IServiceCollection services)
{
services.AddWorkflow(x => x.UseSqlServer(SqlDockerSetup.ScenarioConnectionString, true, true));
}
}
+
+ [Collection(SqlServerCollection.Name)]
+ public class OptimizedSqlServerActivityScenario : ActivityScenario
+ {
+ protected override void ConfigureServices(IServiceCollection services)
+ {
+ services.AddWorkflow(x => x.UseSqlServer(SqlDockerSetup.ScenarioConnectionString, true, true, true));
+ }
+ }
}
diff --git a/test/WorkflowCore.Tests.SqlServer/Scenarios/SqlServerBasicScenario.cs b/test/WorkflowCore.Tests.SqlServer/Scenarios/SqlServerBasicScenario.cs
index 56c951884..61d33f4be 100644
--- a/test/WorkflowCore.Tests.SqlServer/Scenarios/SqlServerBasicScenario.cs
+++ b/test/WorkflowCore.Tests.SqlServer/Scenarios/SqlServerBasicScenario.cs
@@ -5,7 +5,7 @@
namespace WorkflowCore.Tests.SqlServer.Scenarios
{
- [Collection("SqlServer collection")]
+ [Collection(SqlServerCollection.Name)]
public class SqlServerBasicScenario : BasicScenario
{
protected override void ConfigureServices(IServiceCollection services)
@@ -13,4 +13,13 @@ protected override void ConfigureServices(IServiceCollection services)
services.AddWorkflow(x => x.UseSqlServer(SqlDockerSetup.ScenarioConnectionString, true, true));
}
}
+
+ [Collection(SqlServerCollection.Name)]
+ public class OptimizedSqlServerBasicScenario : BasicScenario
+ {
+ protected override void ConfigureServices(IServiceCollection services)
+ {
+ services.AddWorkflow(x => x.UseSqlServer(SqlDockerSetup.ScenarioConnectionString, true, true, true));
+ }
+ }
}
diff --git a/test/WorkflowCore.Tests.SqlServer/Scenarios/SqlServerCompensationScenario.cs b/test/WorkflowCore.Tests.SqlServer/Scenarios/SqlServerCompensationScenario.cs
new file mode 100644
index 000000000..025fa57c2
--- /dev/null
+++ b/test/WorkflowCore.Tests.SqlServer/Scenarios/SqlServerCompensationScenario.cs
@@ -0,0 +1,25 @@
+using System;
+using Microsoft.Extensions.DependencyInjection;
+using WorkflowCore.IntegrationTests.Scenarios;
+using Xunit;
+
+namespace WorkflowCore.Tests.SqlServer.Scenarios
+{
+ [Collection(SqlServerCollection.Name)]
+ public class SqlServerCompensationScenario : CompensationScenario
+ {
+ protected override void ConfigureServices(IServiceCollection services)
+ {
+ services.AddWorkflow(x => x.UseSqlServer(SqlDockerSetup.ScenarioConnectionString, true, true));
+ }
+ }
+
+ [Collection(SqlServerCollection.Name)]
+ public class OptimizedSqlServerCompensationScenario : CompensationScenario
+ {
+ protected override void ConfigureServices(IServiceCollection services)
+ {
+ services.AddWorkflow(x => x.UseSqlServer(SqlDockerSetup.ScenarioConnectionString, true, true, true));
+ }
+ }
+}
diff --git a/test/WorkflowCore.Tests.SqlServer/Scenarios/SqlServerDataScenario.cs b/test/WorkflowCore.Tests.SqlServer/Scenarios/SqlServerDataScenario.cs
index 0ecabc61f..5c20cc013 100644
--- a/test/WorkflowCore.Tests.SqlServer/Scenarios/SqlServerDataScenario.cs
+++ b/test/WorkflowCore.Tests.SqlServer/Scenarios/SqlServerDataScenario.cs
@@ -5,12 +5,21 @@
namespace WorkflowCore.Tests.SqlServer.Scenarios
{
- [Collection("SqlServer collection")]
+ [Collection(SqlServerCollection.Name)]
public class SqlServerDataScenario : DataIOScenario
- {
+ {
protected override void ConfigureServices(IServiceCollection services)
{
services.AddWorkflow(x => x.UseSqlServer(SqlDockerSetup.ScenarioConnectionString, true, true));
}
}
+
+ [Collection(SqlServerCollection.Name)]
+ public class OptimizedSqlServerDataScenario : DataIOScenario
+ {
+ protected override void ConfigureServices(IServiceCollection services)
+ {
+ services.AddWorkflow(x => x.UseSqlServer(SqlDockerSetup.ScenarioConnectionString, true, true, true));
+ }
+ }
}
diff --git a/test/WorkflowCore.Tests.SqlServer/Scenarios/SqlServerDelayScenario.cs b/test/WorkflowCore.Tests.SqlServer/Scenarios/SqlServerDelayScenario.cs
index 5e623c1db..454c6edd5 100644
--- a/test/WorkflowCore.Tests.SqlServer/Scenarios/SqlServerDelayScenario.cs
+++ b/test/WorkflowCore.Tests.SqlServer/Scenarios/SqlServerDelayScenario.cs
@@ -5,9 +5,9 @@
namespace WorkflowCore.Tests.SqlServer.Scenarios
{
- [Collection("SqlServer collection")]
+ [Collection(SqlServerCollection.Name)]
public class SqlServerDelayScenario : DelayScenario
- {
+ {
protected override void ConfigureServices(IServiceCollection services)
{
services.AddWorkflow(cfg =>
@@ -17,4 +17,17 @@ protected override void ConfigureServices(IServiceCollection services)
});
}
}
+
+ [Collection(SqlServerCollection.Name)]
+ public class OptimizedSqlServerDelayScenario : DelayScenario
+ {
+ protected override void ConfigureServices(IServiceCollection services)
+ {
+ services.AddWorkflow(cfg =>
+ {
+ cfg.UseSqlServer(SqlDockerSetup.ScenarioConnectionString, true, true, true);
+ cfg.UsePollInterval(TimeSpan.FromSeconds(2));
+ });
+ }
+ }
}
diff --git a/test/WorkflowCore.Tests.SqlServer/Scenarios/SqlServerDynamicDataScenario.cs b/test/WorkflowCore.Tests.SqlServer/Scenarios/SqlServerDynamicDataScenario.cs
index 34cb86215..fbcb74772 100644
--- a/test/WorkflowCore.Tests.SqlServer/Scenarios/SqlServerDynamicDataScenario.cs
+++ b/test/WorkflowCore.Tests.SqlServer/Scenarios/SqlServerDynamicDataScenario.cs
@@ -5,7 +5,7 @@
namespace WorkflowCore.Tests.SqlServer.Scenarios
{
- [Collection("SqlServer collection")]
+ [Collection(SqlServerCollection.Name)]
public class SqlServerDynamicDataScenario : DynamicDataIOScenario
{
protected override void ConfigureServices(IServiceCollection services)
@@ -13,4 +13,13 @@ protected override void ConfigureServices(IServiceCollection services)
services.AddWorkflow(x => x.UseSqlServer(SqlDockerSetup.ScenarioConnectionString, true, true));
}
}
+
+ [Collection(SqlServerCollection.Name)]
+ public class OptimizedSqlServerDynamicDataScenario : DynamicDataIOScenario
+ {
+ protected override void ConfigureServices(IServiceCollection services)
+ {
+ services.AddWorkflow(x => x.UseSqlServer(SqlDockerSetup.ScenarioConnectionString, true, true, true));
+ }
+ }
}
diff --git a/test/WorkflowCore.Tests.SqlServer/Scenarios/SqlServerEventScenario.cs b/test/WorkflowCore.Tests.SqlServer/Scenarios/SqlServerEventScenario.cs
index fce8a9bae..030effadf 100644
--- a/test/WorkflowCore.Tests.SqlServer/Scenarios/SqlServerEventScenario.cs
+++ b/test/WorkflowCore.Tests.SqlServer/Scenarios/SqlServerEventScenario.cs
@@ -5,12 +5,21 @@
namespace WorkflowCore.Tests.SqlServer.Scenarios
{
- [Collection("SqlServer collection")]
+ [Collection(SqlServerCollection.Name)]
public class SqlServerEventScenario : EventScenario
- {
+ {
protected override void ConfigureServices(IServiceCollection services)
{
services.AddWorkflow(x => x.UseSqlServer(SqlDockerSetup.ScenarioConnectionString, true, true));
}
}
+
+ [Collection(SqlServerCollection.Name)]
+ public class OptimizedSqlServerEventScenario : EventScenario
+ {
+ protected override void ConfigureServices(IServiceCollection services)
+ {
+ services.AddWorkflow(x => x.UseSqlServer(SqlDockerSetup.ScenarioConnectionString, true, true, true));
+ }
+ }
}
diff --git a/test/WorkflowCore.Tests.SqlServer/Scenarios/SqlServerForEachScenario.cs b/test/WorkflowCore.Tests.SqlServer/Scenarios/SqlServerForEachScenario.cs
index b4df418d2..4d14e5c18 100644
--- a/test/WorkflowCore.Tests.SqlServer/Scenarios/SqlServerForEachScenario.cs
+++ b/test/WorkflowCore.Tests.SqlServer/Scenarios/SqlServerForEachScenario.cs
@@ -5,12 +5,21 @@
namespace WorkflowCore.Tests.SqlServer.Scenarios
{
- [Collection("SqlServer collection")]
+ [Collection(SqlServerCollection.Name)]
public class SqlServerForEachScenario : ForeachScenario
- {
+ {
protected override void ConfigureServices(IServiceCollection services)
{
services.AddWorkflow(x => x.UseSqlServer(SqlDockerSetup.ScenarioConnectionString, true, true));
}
}
+
+ [Collection(SqlServerCollection.Name)]
+ public class OptimizedSqlServerForEachScenario : ForeachScenario
+ {
+ protected override void ConfigureServices(IServiceCollection services)
+ {
+ services.AddWorkflow(x => x.UseSqlServer(SqlDockerSetup.ScenarioConnectionString, true, true, true));
+ }
+ }
}
diff --git a/test/WorkflowCore.Tests.SqlServer/Scenarios/SqlServerIfScenario.cs b/test/WorkflowCore.Tests.SqlServer/Scenarios/SqlServerIfScenario.cs
index 798863285..7c97d74f3 100644
--- a/test/WorkflowCore.Tests.SqlServer/Scenarios/SqlServerIfScenario.cs
+++ b/test/WorkflowCore.Tests.SqlServer/Scenarios/SqlServerIfScenario.cs
@@ -5,12 +5,21 @@
namespace WorkflowCore.Tests.SqlServer.Scenarios
{
- [Collection("SqlServer collection")]
- public class SqlServerIfScenario : IfScenario
- {
+ [Collection(SqlServerCollection.Name)]
+ public class SqlServerIfScenario : IfScenario
+ {
protected override void ConfigureServices(IServiceCollection services)
{
services.AddWorkflow(x => x.UseSqlServer(SqlDockerSetup.ScenarioConnectionString, true, true));
}
}
+
+ [Collection(SqlServerCollection.Name)]
+ public class OptimizedSqlServerIfScenario : IfScenario
+ {
+ protected override void ConfigureServices(IServiceCollection services)
+ {
+ services.AddWorkflow(x => x.UseSqlServer(SqlDockerSetup.ScenarioConnectionString, true, true, true));
+ }
+ }
}
diff --git a/test/WorkflowCore.Tests.SqlServer/Scenarios/SqlServerRetrySagaScenario.cs b/test/WorkflowCore.Tests.SqlServer/Scenarios/SqlServerRetrySagaScenario.cs
index fd00b2d20..faf9969da 100644
--- a/test/WorkflowCore.Tests.SqlServer/Scenarios/SqlServerRetrySagaScenario.cs
+++ b/test/WorkflowCore.Tests.SqlServer/Scenarios/SqlServerRetrySagaScenario.cs
@@ -5,12 +5,21 @@
namespace WorkflowCore.Tests.SqlServer.Scenarios
{
- [Collection("SqlServer collection")]
+ [Collection(SqlServerCollection.Name)]
public class SqlServerRetrySagaScenario : RetrySagaScenario
- {
+ {
protected override void ConfigureServices(IServiceCollection services)
{
services.AddWorkflow(x => x.UseSqlServer(SqlDockerSetup.ScenarioConnectionString, true, true));
}
}
+
+ [Collection(SqlServerCollection.Name)]
+ public class OptimizedSqlServerRetrySagaScenario : RetrySagaScenario
+ {
+ protected override void ConfigureServices(IServiceCollection services)
+ {
+ services.AddWorkflow(x => x.UseSqlServer(SqlDockerSetup.ScenarioConnectionString, true, true, true));
+ }
+ }
}
diff --git a/test/WorkflowCore.Tests.SqlServer/Scenarios/SqlServerSagaScenario.cs b/test/WorkflowCore.Tests.SqlServer/Scenarios/SqlServerSagaScenario.cs
index b8e13f0c4..cdfb6c4e2 100644
--- a/test/WorkflowCore.Tests.SqlServer/Scenarios/SqlServerSagaScenario.cs
+++ b/test/WorkflowCore.Tests.SqlServer/Scenarios/SqlServerSagaScenario.cs
@@ -5,12 +5,21 @@
namespace WorkflowCore.Tests.SqlServer.Scenarios
{
- [Collection("SqlServer collection")]
+ [Collection(SqlServerCollection.Name)]
public class SqlServerSagaScenario : SagaScenario
- {
+ {
protected override void ConfigureServices(IServiceCollection services)
{
services.AddWorkflow(x => x.UseSqlServer(SqlDockerSetup.ScenarioConnectionString, true, true));
}
}
+
+ [Collection(SqlServerCollection.Name)]
+ public class OptimizedSqlServerSagaScenario : SagaScenario
+ {
+ protected override void ConfigureServices(IServiceCollection services)
+ {
+ services.AddWorkflow(x => x.UseSqlServer(SqlDockerSetup.ScenarioConnectionString, true, true, true));
+ }
+ }
}
diff --git a/test/WorkflowCore.Tests.SqlServer/Scenarios/SqlServerWhenScenario.cs b/test/WorkflowCore.Tests.SqlServer/Scenarios/SqlServerWhenScenario.cs
index 77da4ee10..ae8f11677 100644
--- a/test/WorkflowCore.Tests.SqlServer/Scenarios/SqlServerWhenScenario.cs
+++ b/test/WorkflowCore.Tests.SqlServer/Scenarios/SqlServerWhenScenario.cs
@@ -5,12 +5,21 @@
namespace WorkflowCore.Tests.SqlServer.Scenarios
{
- [Collection("SqlServer collection")]
- public class SqlServerWhenScenario : WhenScenario
- {
+ [Collection(SqlServerCollection.Name)]
+ public class SqlServerWhenScenario : WhenScenario
+ {
protected override void ConfigureServices(IServiceCollection services)
{
services.AddWorkflow(x => x.UseSqlServer(SqlDockerSetup.ScenarioConnectionString, true, true));
}
}
+
+ [Collection(SqlServerCollection.Name)]
+ public class OptimizedSqlServerWhenScenario : WhenScenario
+ {
+ protected override void ConfigureServices(IServiceCollection services)
+ {
+ services.AddWorkflow(x => x.UseSqlServer(SqlDockerSetup.ScenarioConnectionString, true, true, true));
+ }
+ }
}
diff --git a/test/WorkflowCore.Tests.SqlServer/Scenarios/SqlServerWhileScenario.cs b/test/WorkflowCore.Tests.SqlServer/Scenarios/SqlServerWhileScenario.cs
index 832579484..b93761326 100644
--- a/test/WorkflowCore.Tests.SqlServer/Scenarios/SqlServerWhileScenario.cs
+++ b/test/WorkflowCore.Tests.SqlServer/Scenarios/SqlServerWhileScenario.cs
@@ -5,12 +5,21 @@
namespace WorkflowCore.Tests.SqlServer.Scenarios
{
- [Collection("SqlServer collection")]
- public class SqlServerWhileScenario : WhileScenario
- {
+ [Collection(SqlServerCollection.Name)]
+ public class SqlServerWhileScenario : WhileScenario
+ {
protected override void ConfigureServices(IServiceCollection services)
{
services.AddWorkflow(x => x.UseSqlServer(SqlDockerSetup.ScenarioConnectionString, true, true));
}
}
+
+ [Collection(SqlServerCollection.Name)]
+ public class OptimizedSqlServerWhileScenario : WhileScenario
+ {
+ protected override void ConfigureServices(IServiceCollection services)
+ {
+ services.AddWorkflow(x => x.UseSqlServer(SqlDockerSetup.ScenarioConnectionString, true, true, true));
+ }
+ }
}
diff --git a/test/WorkflowCore.Tests.SqlServer/SqlServerOptimizedPersistenceProviderFixture.cs b/test/WorkflowCore.Tests.SqlServer/SqlServerOptimizedPersistenceProviderFixture.cs
new file mode 100644
index 000000000..12558eff4
--- /dev/null
+++ b/test/WorkflowCore.Tests.SqlServer/SqlServerOptimizedPersistenceProviderFixture.cs
@@ -0,0 +1,31 @@
+using System;
+using System.Linq;
+using WorkflowCore.Interface;
+using WorkflowCore.Persistence.EntityFramework.Services;
+using WorkflowCore.Persistence.SqlServer;
+using WorkflowCore.UnitTests;
+using Xunit;
+
+namespace WorkflowCore.Tests.SqlServer
+{
+ [Collection(SqlServerCollection.Name)]
+ public class SqlServerOptimizedPersistenceProviderFixture : BasePersistenceFixture
+ {
+ private readonly string _connectionString;
+
+ public SqlServerOptimizedPersistenceProviderFixture(SqlDockerSetup setup)
+ {
+ _connectionString = SqlDockerSetup.ConnectionString;
+ }
+
+ protected override IPersistenceProvider Subject
+ {
+ get
+ {
+ var db = new LargeDataOptimizedEntityFrameworkPersistenceProvider(new SqlContextFactory(_connectionString), true, true);
+ db.EnsureStoreExists();
+ return db;
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/test/WorkflowCore.Tests.SqlServer/SqlServerPersistenceProviderFixture.cs b/test/WorkflowCore.Tests.SqlServer/SqlServerPersistenceProviderFixture.cs
index cbd019bb9..838b01cc7 100644
--- a/test/WorkflowCore.Tests.SqlServer/SqlServerPersistenceProviderFixture.cs
+++ b/test/WorkflowCore.Tests.SqlServer/SqlServerPersistenceProviderFixture.cs
@@ -6,7 +6,7 @@
namespace WorkflowCore.Tests.SqlServer
{
- [Collection("SqlServer collection")]
+ [Collection(SqlServerCollection.Name)]
public class SqlServerPersistenceProviderFixture : BasePersistenceFixture
{
private readonly string _connectionString;
diff --git a/test/WorkflowCore.UnitTests/BasePersistenceFixture.cs b/test/WorkflowCore.UnitTests/BasePersistenceFixture.cs
index 9114da7b9..5f6414245 100644
--- a/test/WorkflowCore.UnitTests/BasePersistenceFixture.cs
+++ b/test/WorkflowCore.UnitTests/BasePersistenceFixture.cs
@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
+using System.Threading;
using System.Threading.Tasks;
using FluentAssertions;
using WorkflowCore.Interface;
@@ -185,8 +186,8 @@ public void PersistWorkflow()
var current = Subject.GetWorkflowInstance(workflowId).Result;
current.ShouldBeEquivalentTo(newWorkflow);
}
-
- [Fact]
+
+ [Fact]
public void PersistWorkflow_with_subscriptions()
{
var workflow = new WorkflowInstance
@@ -293,6 +294,43 @@ public void ConcurrentPersistWorkflow()
action.ShouldNotThrow();
});
}
+
+ [RunnableInDebugOnly]
+ public void CreateNewWorkflow_should_get_workflow_with_large_data()
+ {
+ var pointerCount = 2_500;
+ var data = Enumerable.Range(0, 20_000).Select(value => new TestData { Value1 = value }).ToArray();
+ var maxDuration = TimeSpan.FromMinutes(1);
+
+ var workflow = new WorkflowInstance
+ {
+ Data = data,
+ Description = "My Description",
+ Status = WorkflowStatus.Runnable,
+ NextExecution = 0,
+ Version = 1,
+ WorkflowDefinitionId = "My Workflow"
+ };
+
+ for (var i = 0; i < pointerCount; i++)
+ {
+ workflow.ExecutionPointers.Add(new ExecutionPointer
+ {
+ Id = Guid.NewGuid().ToString(),
+ Active = true,
+ StepId = i
+ });
+ }
+
+ var workflowId = Subject.CreateNewWorkflow(workflow).Result;
+
+ var cts = new CancellationTokenSource();
+ cts.CancelAfter(maxDuration);
+ var exception = Record.Exception(() => _ = Subject.GetWorkflowInstance(workflowId, cts.Token).Result);
+
+ workflowId.Should().NotBeNull();
+ exception.Should().BeNull();
+ }
}
public class TestData
diff --git a/test/WorkflowCore.UnitTests/RunnableInDebugOnlyAttribute.cs b/test/WorkflowCore.UnitTests/RunnableInDebugOnlyAttribute.cs
new file mode 100644
index 000000000..ad1b6b04a
--- /dev/null
+++ b/test/WorkflowCore.UnitTests/RunnableInDebugOnlyAttribute.cs
@@ -0,0 +1,16 @@
+using System.Diagnostics;
+using Xunit;
+
+namespace WorkflowCore.UnitTests
+{
+ public sealed class RunnableInDebugOnlyAttribute : FactAttribute
+ {
+ public RunnableInDebugOnlyAttribute()
+ {
+ if (!Debugger.IsAttached)
+ {
+ Skip = "Only running in interactive mode.";
+ }
+ }
+ }
+}
\ No newline at end of file