Skip to content

Commit 8c90281

Browse files
committed
Added PingPong MessagesTests
1 parent 91a74fd commit 8c90281

File tree

5 files changed

+68
-1
lines changed

5 files changed

+68
-1
lines changed

Core/Cleipnir.ResilientFunctions.Tests/Messaging/InMemoryTests/EventSourcesTests.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,10 @@ public override Task BatchedMessagesIsDeliveredToAwaitingFlows()
6161
public override Task MultipleMessagesCanBeAppendedOneAfterTheOther()
6262
=> MultipleMessagesCanBeAppendedOneAfterTheOther(FunctionStoreFactory.Create());
6363

64+
[TestMethod]
65+
public override Task PingPongMessagesCanBeExchangedMultipleTimes()
66+
=> PingPongMessagesCanBeExchangedMultipleTimes(FunctionStoreFactory.Create());
67+
6468
[TestMethod]
6569
public override Task NoOpMessageIsIgnored()
6670
=> NoOpMessageIsIgnored(FunctionStoreFactory.Create());

Core/Cleipnir.ResilientFunctions.Tests/Messaging/TestTemplates/MessagesTests.cs

Lines changed: 52 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -498,14 +498,65 @@ async Task (workflow) =>
498498
await registration.SendMessage(instanceId, -1);
499499

500500
var cp = await registration.ControlPanel(instanceId).ShouldNotBeNullAsync();
501-
await cp.WaitForCompletion(allowPostponeAndSuspended: true);
501+
await cp.WaitForCompletion();
502502

503503
messages.Count.ShouldBe(4);
504504
messages[0].ShouldBe("Hallo");
505505
messages[1].ShouldBe("World");
506506
messages[2].ShouldBe("And");
507507
messages[3].ShouldBe("Universe");
508508
}
509+
510+
private record Ping(int Number);
511+
private record Pong(int Number);
512+
513+
public abstract Task PingPongMessagesCanBeExchangedMultipleTimes();
514+
protected async Task PingPongMessagesCanBeExchangedMultipleTimes(Task<IFunctionStore> functionStoreTask)
515+
{
516+
var functionStore = await functionStoreTask;
517+
using var registry = new FunctionsRegistry(functionStore, new Settings(messagesDefaultMaxWaitForCompletion: TimeSpan.FromSeconds(10)));
518+
ParamlessRegistration pongRegistration = null!;
519+
ParamlessRegistration pingRegistration = null!;
520+
521+
pingRegistration = registry.RegisterParamless(
522+
"PingFlow",
523+
async Task (workflow) =>
524+
{
525+
for (var i = 0; i < 10; i++)
526+
{
527+
await pongRegistration.SendMessage("Pong", new Ping(i));
528+
await workflow.Messages.OfType<Pong>().Where(pong => pong.Number == i).First();
529+
}
530+
531+
});
532+
533+
pongRegistration = registry.RegisterParamless(
534+
"PongFlow",
535+
async Task (workflow) =>
536+
{
537+
for (var i = 0; i < 10; i++)
538+
{
539+
await workflow.Messages.OfType<Ping>().Where(pong => pong.Number == i).First();
540+
await pingRegistration.SendMessage("Ping", new Pong(i));
541+
}
542+
});
543+
544+
await pongRegistration.Schedule("Pong");
545+
await pingRegistration.Schedule("Ping");
546+
547+
var pongCp = await pongRegistration.ControlPanel("Pong").ShouldNotBeNullAsync();
548+
var pingCp = await pingRegistration.ControlPanel("Ping").ShouldNotBeNullAsync();
549+
550+
await pongCp.WaitForCompletion(allowPostponeAndSuspended: true);
551+
await pingCp.WaitForCompletion(allowPostponeAndSuspended: true);
552+
553+
await pongCp.Refresh();
554+
await pongCp.Messages.Count.ShouldBeAsync(10);
555+
(await pongCp.Messages.AsObjects).OfType<Ping>().Count().ShouldBe(10);
556+
await pingCp.Refresh();
557+
await pingCp.Messages.Count.ShouldBeAsync(10);
558+
(await pingCp.Messages.AsObjects).OfType<Pong>().Count().ShouldBe(10);
559+
}
509560

510561
public abstract Task NoOpMessageIsIgnored();
511562
protected async Task NoOpMessageIsIgnored(Task<IFunctionStore> functionStoreTask)

Stores/MariaDB/Cleipnir.ResilientFunctions.MariaDB.Tests/Messaging/MessagesTests.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,4 +56,8 @@ public override Task MultipleMessagesCanBeAppendedOneAfterTheOther()
5656
[TestMethod]
5757
public override Task NoOpMessageIsIgnored()
5858
=> NoOpMessageIsIgnored(FunctionStoreFactory.Create());
59+
60+
[TestMethod]
61+
public override Task PingPongMessagesCanBeExchangedMultipleTimes()
62+
=> PingPongMessagesCanBeExchangedMultipleTimes(FunctionStoreFactory.Create());
5963
}

Stores/PostgreSQL/Cleipnir.ResilientFunctions.PostgreSQL.Tests/Messaging/MessagesTests.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,4 +57,8 @@ public override Task MultipleMessagesCanBeAppendedOneAfterTheOther()
5757
[TestMethod]
5858
public override Task NoOpMessageIsIgnored()
5959
=> NoOpMessageIsIgnored(FunctionStoreFactory.Create());
60+
61+
[TestMethod]
62+
public override Task PingPongMessagesCanBeExchangedMultipleTimes()
63+
=> PingPongMessagesCanBeExchangedMultipleTimes(FunctionStoreFactory.Create());
6064
}

Stores/SqlServer/Cleipnir.ResilientFunctions.SqlServer.Tests/Messaging/MessagesTests.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,4 +57,8 @@ public override Task MultipleMessagesCanBeAppendedOneAfterTheOther()
5757
[TestMethod]
5858
public override Task NoOpMessageIsIgnored()
5959
=> NoOpMessageIsIgnored(FunctionStoreFactory.Create());
60+
61+
[TestMethod]
62+
public override Task PingPongMessagesCanBeExchangedMultipleTimes()
63+
=> PingPongMessagesCanBeExchangedMultipleTimes(FunctionStoreFactory.Create());
6064
}

0 commit comments

Comments
 (0)