Skip to content

Instantly share code, notes, and snippets.

@DumboJetEngine
Created July 1, 2024 11:40
Show Gist options
  • Save DumboJetEngine/7bcdeccc222d4339fe70bc008f56f652 to your computer and use it in GitHub Desktop.
Save DumboJetEngine/7bcdeccc222d4339fe70bc008f56f652 to your computer and use it in GitHub Desktop.
Make Camunda blow up
using System.Net.Http;
using System.Net.Http.Json;
using System.Text.Json;
var client = new HttpClient();
var actionListToCheck = new[] {
"delete", "delete", "delete", "delete", "delete", "delete", "delete", "delete", "delete",
"delete", "delete", "delete", "delete", "delete", "delete", "delete", "delete", "delete",
"delete", "delete", "delete", "delete", "delete", "delete", "delete", "delete", "delete",
"delete", "delete", "delete", "delete", "delete", "delete", "delete", "delete", "delete",
"delete", "delete", "delete", "delete", "delete", "delete", "delete", "delete", "delete",
"delete", "delete", "delete", "delete", "delete", "delete", "delete", "delete", "delete",
"delete", "delete", "delete", "delete", "delete", "delete", "delete", "delete", "delete",
"delete", "delete", "delete", "delete", "delete", "delete", "delete", "delete", "delete",
"delete", "delete", "delete", "delete", "delete", "delete", "delete", "delete", "delete",
"delete", "delete", "delete", "delete", "delete", "delete", "delete", "delete", "delete",
"delete", "delete", "delete", "delete", "delete", "delete", "delete", "delete", "delete",
"delete", "delete", "delete", "delete", "delete", "delete", "delete", "delete", "delete",
"delete", "delete", "delete", "delete", "delete", "delete", "delete", "delete", "delete",
"delete", "delete", "delete", "delete", "delete", "delete", "delete", "delete", "delete",
"delete", "delete", "delete", "delete", "delete", "delete", "delete", "delete", "delete",
"delete", "delete", "delete", "delete", "delete", "delete", "delete", "delete", "delete",
"delete", "delete", "delete", "delete", "delete", "delete", "delete", "delete", "delete",
"delete", "delete", "delete", "delete", "delete", "delete", "delete", "delete", "delete",
"delete", "delete", "delete", "delete", "delete", "delete", "delete", "delete", "delete",
"delete", "delete", "delete", "delete", "delete", "delete", "delete", "delete", "delete",
"delete", "delete", "delete", "delete", "delete", "delete", "delete", "delete", "delete",
"delete", "delete", "delete", "delete", "delete", "delete", "delete", "delete", "delete",
"delete", "delete", "delete", "delete", "delete", "delete", "delete", "delete", "delete",
"delete", "delete", "delete", "delete", "delete", "delete", "delete", "delete", "delete",
"delete", "delete", "delete", "delete", "delete", "delete", "delete", "delete", "delete",
"delete", "delete", "delete", "delete", "delete", "delete", "delete", "delete", "delete",
"delete", "delete", "delete", "delete", "delete", "delete", "delete", "delete", "delete",
"delete", "delete", "delete", "delete", "delete", "delete", "delete", "delete", "delete",
"delete", "delete", "delete", "delete", "delete", "delete", "delete", "delete", "delete",
"delete", "delete", "delete", "delete", "delete", "delete", "delete", "delete", "delete",
"delete", "delete", "delete", "delete", "delete", "delete", "delete", "delete", "delete",
"delete", "delete", "delete", "delete", "delete", "delete", "delete", "delete", "delete",
"delete", "delete", "delete", "delete", "delete", "delete", "delete", "delete", "delete",
"delete", "delete", "delete", "delete", "delete", "delete", "delete", "delete", "delete",
"delete", "delete", "delete", "delete", "delete", "delete", "delete", "delete", "delete",
"delete", "delete", "delete", "delete", "delete", "delete", "delete", "delete", "delete",
"delete", "delete", "delete", "delete", "delete", "delete", "delete", "delete", "delete",
"delete", "delete", "delete", "delete", "delete", "delete", "delete", "delete", "delete",
"delete", "delete", "delete", "delete", "delete", "delete", "delete", "delete", "delete",
};
var repetition = 0;
var parallelOptions = new ParallelOptions { MaxDegreeOfParallelism = 10 };
await Parallel.ForEachAsync(actionListToCheck, parallelOptions, async (actionName, ct) => {
try
{
var isDraft = (++repetition) % 2 == 0;
var result = await CheckActionAvailability(actionName: actionName, isDraft: isDraft, isTestRun: true, repetition % 11);
Console.WriteLine($"Action={actionName}, IsDraft={isDraft}, Json={result}");
}
catch (Exception e)
{
Console.WriteLine(e);
}
});
Console.WriteLine();
async Task<Dictionary<string, Result>> CheckActionAvailability(string actionName, bool isDraft, bool isTestRun, int parallelIndex)
{
var json = @$"{{
""caseInstanceId"": ""{Guid.NewGuid()}"",
""skipCustomListeners"": false,
""skipIoMappings"": false,
""withVariablesInReturn"": true,
""variables"": {{
""action"": {{
""type"": ""Object"",
""valueInfo"": {{
""serializationDataFormat"": ""application/json"",
""objectTypeName"": ""java.lang.Object""
}},
""value"": ""{{\""name\"":\""delete\"",\""isTestRun\"":true}}""
}},
""document"": {{
""type"": ""Object"",
""valueInfo"": {{
""serializationDataFormat"": ""application/json"",
""objectTypeName"": ""java.lang.Object""
}},
""value"": ""{{\""isDraft\"":false}}""
}}
}},
""businessKey"": ""{Guid.NewGuid()}""
}}";
var host = "localhost";
var port = 8080;
var contextPath = "engine-rest";
var key = "document-workflow-stateless-batch-retry";
var resp = await client.PostAsync($"https://{host}:{port}/{contextPath}/process-definition/key/{key}/start", new StringContent(json, System.Text.Encoding.UTF8, "application/json"));
var jsonResp = await resp.Content.ReadAsStringAsync();
resp.EnsureSuccessStatusCode();
return new Dictionary<string, Result>();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment