99 lines
3.7 KiB
C#
99 lines
3.7 KiB
C#
|
|
using Elsa.Persistence.VNext.Runtime.Evaluation;
|
||
|
|
|
||
|
|
namespace Elsa.Persistence.VNext.UnitTests;
|
||
|
|
|
||
|
|
public class WorkflowRuntimePersistenceEvaluatorTests
|
||
|
|
{
|
||
|
|
private readonly WorkflowRuntimePersistenceEvaluator _evaluator = new();
|
||
|
|
|
||
|
|
[Fact]
|
||
|
|
public void Evaluator_AdoptsMetadataStoreWithProviderContractTests()
|
||
|
|
{
|
||
|
|
var candidate = new WorkflowRuntimePersistenceCandidate(
|
||
|
|
"WorkflowDefinitions",
|
||
|
|
WorkflowRuntimePersistenceArea.Management,
|
||
|
|
WorkflowRuntimePersistenceWorkload.Metadata,
|
||
|
|
RequiresDistributedLocking: false,
|
||
|
|
RequiresOrderedAppend: false,
|
||
|
|
HasRepresentativeBenchmark: false,
|
||
|
|
HasProviderContractTests: true);
|
||
|
|
|
||
|
|
var decision = _evaluator.Evaluate(candidate);
|
||
|
|
|
||
|
|
Assert.Equal(WorkflowRuntimePersistenceDecisionKind.AdoptVNext, decision.Kind);
|
||
|
|
Assert.Contains("Metadata workloads fit", decision.Reasons.Single());
|
||
|
|
}
|
||
|
|
|
||
|
|
[Fact]
|
||
|
|
public void Evaluator_DefersHotDistributedLookupWithoutBenchmarkEvidence()
|
||
|
|
{
|
||
|
|
var candidate = new WorkflowRuntimePersistenceCandidate(
|
||
|
|
"Bookmarks",
|
||
|
|
WorkflowRuntimePersistenceArea.Bookmarks,
|
||
|
|
WorkflowRuntimePersistenceWorkload.HotLookup,
|
||
|
|
RequiresDistributedLocking: true,
|
||
|
|
RequiresOrderedAppend: false,
|
||
|
|
HasRepresentativeBenchmark: false,
|
||
|
|
HasProviderContractTests: true);
|
||
|
|
|
||
|
|
var decision = _evaluator.Evaluate(candidate);
|
||
|
|
|
||
|
|
Assert.Equal(WorkflowRuntimePersistenceDecisionKind.DeferUntilBenchmarked, decision.Kind);
|
||
|
|
Assert.Contains("benchmark and lock/concurrency evidence", decision.Reasons.Single());
|
||
|
|
}
|
||
|
|
|
||
|
|
[Fact]
|
||
|
|
public void Evaluator_AllowsPhysicalizedHotLookupWhenEvidenceExists()
|
||
|
|
{
|
||
|
|
var candidate = new WorkflowRuntimePersistenceCandidate(
|
||
|
|
"Triggers",
|
||
|
|
WorkflowRuntimePersistenceArea.Triggers,
|
||
|
|
WorkflowRuntimePersistenceWorkload.HotLookup,
|
||
|
|
RequiresDistributedLocking: true,
|
||
|
|
RequiresOrderedAppend: false,
|
||
|
|
HasRepresentativeBenchmark: true,
|
||
|
|
HasProviderContractTests: true);
|
||
|
|
|
||
|
|
var decision = _evaluator.Evaluate(candidate);
|
||
|
|
|
||
|
|
Assert.Equal(WorkflowRuntimePersistenceDecisionKind.AdoptWithPhysicalization, decision.Kind);
|
||
|
|
Assert.Contains("physicalization policy", decision.RequiredEvidence.Single());
|
||
|
|
}
|
||
|
|
|
||
|
|
[Fact]
|
||
|
|
public void Evaluator_KeepsQueueWorkloadSpecialized()
|
||
|
|
{
|
||
|
|
var candidate = new WorkflowRuntimePersistenceCandidate(
|
||
|
|
"BookmarkQueue",
|
||
|
|
WorkflowRuntimePersistenceArea.Bookmarks,
|
||
|
|
WorkflowRuntimePersistenceWorkload.Queue,
|
||
|
|
RequiresDistributedLocking: true,
|
||
|
|
RequiresOrderedAppend: false,
|
||
|
|
HasRepresentativeBenchmark: true,
|
||
|
|
HasProviderContractTests: true);
|
||
|
|
|
||
|
|
var decision = _evaluator.Evaluate(candidate);
|
||
|
|
|
||
|
|
Assert.Equal(WorkflowRuntimePersistenceDecisionKind.KeepSpecializedProvider, decision.Kind);
|
||
|
|
Assert.Contains("Queue workloads need", decision.Reasons.Single());
|
||
|
|
}
|
||
|
|
|
||
|
|
[Fact]
|
||
|
|
public void Evaluator_KeepsOrderedLogSpecialized()
|
||
|
|
{
|
||
|
|
var candidate = new WorkflowRuntimePersistenceCandidate(
|
||
|
|
"WorkflowExecutionLog",
|
||
|
|
WorkflowRuntimePersistenceArea.ExecutionLogs,
|
||
|
|
WorkflowRuntimePersistenceWorkload.AppendOnlyLog,
|
||
|
|
RequiresDistributedLocking: false,
|
||
|
|
RequiresOrderedAppend: true,
|
||
|
|
HasRepresentativeBenchmark: true,
|
||
|
|
HasProviderContractTests: true);
|
||
|
|
|
||
|
|
var decision = _evaluator.Evaluate(candidate);
|
||
|
|
|
||
|
|
Assert.Equal(WorkflowRuntimePersistenceDecisionKind.KeepSpecializedProvider, decision.Kind);
|
||
|
|
Assert.Contains("ordered append", decision.Reasons.Single());
|
||
|
|
}
|
||
|
|
}
|