Harden remaining runtime transport lifecycles

This commit is contained in:
master
2026-04-06 00:24:16 +03:00
parent 751546084e
commit fc798a1573
29 changed files with 311 additions and 107 deletions

View File

@@ -0,0 +1,78 @@
using System.Collections.Generic;
using StellaOps.Workflow.DataStore.PostgreSQL;
using StellaOps.Workflow.Engine.Services;
using FluentAssertions;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Options;
using Npgsql;
using NUnit.Framework;
namespace StellaOps.Workflow.DataStore.PostgreSQL.Tests;
[TestFixture]
public class PostgresWorkflowDatabaseTests
{
[Test]
public void BuildConnectionString_WhenApplicationNameIsOmitted_UsesWorkflowDefaults()
{
var options = new PostgresWorkflowBackendOptions
{
ConnectionStringName = "WorkflowPostgres",
MinPoolSize = 2,
MaxPoolSize = 9,
ConnectionIdleLifetimeSeconds = 123,
};
var connectionString = CreateDatabase(options).BuildConnectionString();
var builder = new NpgsqlConnectionStringBuilder(connectionString);
builder.ApplicationName.Should().Be("stellaops-workflow");
builder.Pooling.Should().BeTrue();
builder.MinPoolSize.Should().Be(2);
builder.MaxPoolSize.Should().Be(9);
builder.ConnectionIdleLifetime.Should().Be(123);
}
[Test]
public void BuildConnectionString_WhenExplicitSettingsAreProvided_AppliesNormalizedValues()
{
var options = new PostgresWorkflowBackendOptions
{
ConnectionStringName = "WorkflowPostgres",
ApplicationName = "workflow-projection-tests",
Pooling = false,
MinPoolSize = 8,
MaxPoolSize = 3,
};
var connectionString = CreateDatabase(options).BuildConnectionString();
var builder = new NpgsqlConnectionStringBuilder(connectionString);
builder.ApplicationName.Should().Be("workflow-projection-tests");
builder.Pooling.Should().BeFalse();
builder.MinPoolSize.Should().Be(8);
builder.MaxPoolSize.Should().Be(8);
}
private static PostgresWorkflowDatabase CreateDatabase(PostgresWorkflowBackendOptions options)
{
var configuration = new ConfigurationBuilder()
.AddInMemoryCollection(new Dictionary<string, string?>
{
[$"ConnectionStrings:{options.ConnectionStringName}"] =
"Host=localhost;Database=workflow;Username=workflow;Password=workflow",
})
.Build();
return new PostgresWorkflowDatabase(
configuration,
Options.Create(options),
new PostgresWorkflowMutationSessionAccessor(),
new WorkflowMutationScopeAccessor());
}
}