Skip to content

Commit 643b902

Browse files
committed
Added long-running stress test
1 parent 1d8aae5 commit 643b902

File tree

2 files changed

+82
-1
lines changed

2 files changed

+82
-1
lines changed

Stores/StressTests/Program.cs

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ private static async Task<int> Main(string[] args)
1212
{
1313
Console.WriteLine("Usage: StressTests <all, mariadb, postgres, sqlserver>");
1414
Console.WriteLine(" StressTests recreate_dbs");
15+
Console.WriteLine(" StressTests long_running <mariadb, postgres, sqlserver>");
1516
return 1;
1617
}
1718

@@ -26,11 +27,31 @@ private static async Task<int> Main(string[] args)
2627
await new SqlServerEngine().RecreateDatabase();
2728
return 0;
2829
}
30+
31+
if (args[0].ToLower() == "long_running")
32+
{
33+
IEngine? engine = args[1].ToLower() switch
34+
{
35+
"mariadb" => new MariaDBEngine(),
36+
"postgres" => new PostgreSqlEngine(),
37+
"sqlserver" => new SqlServerEngine(),
38+
_ => null
39+
};
40+
if (engine == null)
41+
{
42+
Console.WriteLine("Usage: StressTests long_running <mariadb, postgres, sqlserver>");
43+
return 1;
44+
}
45+
46+
Console.WriteLine("Press enter to stop test");
47+
await LongRunningStressfulTest.Perform(engine);
48+
return 0;
49+
}
2950

3051
var engines = new List<IEngine>();
3152

3253
if (args.Any(arg => arg.ToLower() == "all"))
33-
args = new[] { "mariadb", "postgres", "sqlserver" };
54+
args = ["mariadb", "postgres", "sqlserver"];
3455

3556
foreach (var arg in args)
3657
{
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
using System.Diagnostics;
2+
using Cleipnir.ResilientFunctions.Domain;
3+
using Cleipnir.ResilientFunctions.StressTests.Engines;
4+
5+
namespace Cleipnir.ResilientFunctions.StressTests.StressTests;
6+
7+
public static class LongRunningStressfulTest
8+
{
9+
public static async Task Perform(IEngine helper)
10+
{
11+
const int testSize = 1_000;
12+
13+
await helper.InitializeDatabaseAndInitializeAndTruncateTable();
14+
var store = await helper.CreateFunctionStore();
15+
16+
var stopWatch = new Stopwatch();
17+
stopWatch.Start();
18+
19+
{
20+
using var functionsRegistry1 = new FunctionsRegistry(
21+
store,
22+
new Settings(unhandledExceptionHandler: e =>
23+
{
24+
Console.WriteLine(e);
25+
Environment.Exit(1);
26+
}, leaseLength: TimeSpan.FromSeconds(2), maxParallelRetryInvocations: testSize * 2)
27+
);
28+
var actionRegistration = functionsRegistry1.RegisterParamless(
29+
"LongRunningStressfulTest",
30+
async Task (workflow) =>
31+
{
32+
Console.WriteLine(workflow.FlowId + " started");
33+
var effect = workflow.Effect;
34+
while (true)
35+
{
36+
for (var i = 0; i < 100; i++)
37+
{
38+
_ = await effect.Capture($"{i}", () => i);
39+
await Task.Delay(10);
40+
}
41+
42+
for (var i = 0; i < 100; i++)
43+
{
44+
await effect.Clear($"{i}");
45+
await Task.Delay(10);
46+
}
47+
}
48+
});
49+
50+
Console.WriteLine("LONGRUNNING_TEST: Initializing");
51+
await actionRegistration.BulkSchedule(
52+
Enumerable.Range(1, testSize).Select(i => i.ToString().ToFlowInstance())
53+
);
54+
55+
Console.WriteLine("LONGRUNNING_TEST: Intiailization completed");
56+
Console.ReadLine();
57+
}
58+
59+
}
60+
}

0 commit comments

Comments
 (0)