Skip to content

Commit

Permalink
updating transactional session package and adding test (#973)
Browse files Browse the repository at this point in the history
  • Loading branch information
tmasternak authored Apr 6, 2023
1 parent 00af00c commit b60a863
Show file tree
Hide file tree
Showing 4 changed files with 129 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
<PackageReference Include="System.Data.SqlClient" Version="4.8.1" />
<PackageReference Include="GitHubActionsTestLogger" Version="1.2.0" />
<PackageReference Include="NServiceBus.AcceptanceTesting" Version="7.8.0" />
<PackageReference Include="NServiceBus.TransactionalSession" Version="1.0.0" />
<PackageReference Include="NServiceBus.TransactionalSession" Version="1.0.1" />
</ItemGroup>

</Project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,124 @@
namespace NServiceBus.TransactionalSession.AcceptanceTests
{
using System;
using System.Data.SqlClient;
using System.Threading;
using System.Threading.Tasks;
using System.Transactions;
using AcceptanceTesting;
using Infrastructure;
using NUnit.Framework;
using ObjectBuilder;

public class When_using_transactional_session_with_transactionscope : NServiceBusAcceptanceTest
{
[Test]
public async Task Should_provide_ambient_transactionscope()
{
string rowId = Guid.NewGuid().ToString();

await Scenario.Define<Context>()
.WithEndpoint<AnEndpoint>(s => s.When(async (_, ctx) =>
{
using var scope = ctx.Builder.CreateChildBuilder();
using var transactionalSession = scope.Build<ITransactionalSession>();
await transactionalSession.Open();

await transactionalSession.SendLocal(new SampleMessage());

var storageSession = transactionalSession.SynchronizedStorageSession.Session();

string insertText =
$@"IF NOT EXISTS (SELECT * FROM sysobjects WHERE name='SomeTable' and xtype='U')
BEGIN
CREATE TABLE [dbo].[SomeTable]([Id] [nvarchar](50) NOT NULL)
END;
INSERT INTO [dbo].[SomeTable] VALUES ('{rowId}')";

await storageSession.CreateSQLQuery(insertText).ExecuteUpdateAsync(CancellationToken.None);

using (var __ = new TransactionScope(TransactionScopeOption.Suppress,
TransactionScopeAsyncFlowOption.Enabled))
{
using var connection = new SqlConnection(TransactionSessionDefaultServer.ConnectionString);

await connection.OpenAsync();

using var queryCommand =
new SqlCommand(
$"SELECT TOP 1 [Id] FROM [dbo].[SomeTable] WITH (READPAST) WHERE [Id]='{rowId}' ",
connection);
object result = await queryCommand.ExecuteScalarAsync();

Assert.AreEqual(null, result);
}

await transactionalSession.Commit().ConfigureAwait(false);
}))
.Done(c => c.MessageReceived)
.Run();

using var connection = new SqlConnection(TransactionSessionDefaultServer.ConnectionString);

await connection.OpenAsync();

using var queryCommand =
new SqlCommand($"SELECT TOP 1 [Id] FROM [dbo].[SomeTable] WHERE [Id]='{rowId}'", connection);
object result = await queryCommand.ExecuteScalarAsync();

Assert.AreEqual(rowId, result);
}

class Context : ScenarioContext, IInjectBuilder
{
public bool MessageReceived { get; set; }
public bool CompleteMessageReceived { get; set; }
public IBuilder Builder { get; set; }
}

class AnEndpoint : EndpointConfigurationBuilder
{
public AnEndpoint() =>
EndpointSetup<TransactionSessionWithOutboxEndpoint>(c =>
{
c.EnableOutbox().UseTransactionScope();
});

class SampleHandler : IHandleMessages<SampleMessage>
{
public SampleHandler(Context testContext) => this.testContext = testContext;

public Task Handle(SampleMessage message, IMessageHandlerContext context)
{
testContext.MessageReceived = true;

return Task.CompletedTask;
}

readonly Context testContext;
}

class CompleteTestMessageHandler : IHandleMessages<CompleteTestMessage>
{
public CompleteTestMessageHandler(Context context) => testContext = context;

public Task Handle(CompleteTestMessage message, IMessageHandlerContext context)
{
testContext.CompleteMessageReceived = true;

return Task.CompletedTask;
}

readonly Context testContext;
}
}

class SampleMessage : ICommand
{
}

class CompleteTestMessage : ICommand
{
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
<ItemGroup>
<PackageReference Include="Particular.Approvals" Version="0.3.0" />
<PackageReference Include="PublicApiGenerator" Version="10.3.0" />
<PackageReference Include="NServiceBus.TransactionalSession" Version="1.0.0" />
<PackageReference Include="NServiceBus.TransactionalSession" Version="1.0.1" />
</ItemGroup>

<ItemGroup>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFrameworks>net461;netstandard2.0</TargetFrameworks>
Expand All @@ -10,8 +10,8 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Particular.Packaging" Version="2.0.0" PrivateAssets="All" />
<PackageReference Include="NServiceBus.TransactionalSession" Version="[1.0.0, 2.0.0)" />
<PackageReference Include="Particular.Packaging" Version="2.3.0" PrivateAssets="All" />
<PackageReference Include="NServiceBus.TransactionalSession" Version="[1.0.1, 2.0.0)" />
</ItemGroup>

<ItemGroup>
Expand Down

0 comments on commit b60a863

Please sign in to comment.