diff --git a/packages/nodes-base/test/benchmark.ts b/packages/nodes-base/test/benchmark.ts index 4ce7ad4848299..3c68be6f8bdae 100644 --- a/packages/nodes-base/test/benchmark.ts +++ b/packages/nodes-base/test/benchmark.ts @@ -2,7 +2,7 @@ import glob from 'fast-glob'; import Bench from 'tinybench'; import { withCodSpeed } from '@codspeed/tinybench-plugin'; import { setup, workflowToTests as toTests } from './nodes/Helpers'; -import { executeWorkflow } from './nodes/ExecuteWorkflow'; +import { performExecution, setupExecution } from './nodes/ExecuteWorkflow'; async function main() { const filePaths = await glob('nodes/**/*.workflow.json'); @@ -14,8 +14,18 @@ async function main() { const bench = withCodSpeed(new Bench({ time: 0, iterations: 1 })); // @TODO temp config for (const test of tests) { + const { waitPromise, additionalData, executionMode, workflowInstance, nodeExecutionOrder } = + await setupExecution(test, nodeTypes); + bench.add(test.description, async () => { - await executeWorkflow(test, nodeTypes); + await performExecution( + waitPromise, + additionalData, + executionMode, + test, + workflowInstance, + nodeExecutionOrder, + ); }); } diff --git a/packages/nodes-base/test/nodes/ExecuteWorkflow.ts b/packages/nodes-base/test/nodes/ExecuteWorkflow.ts index 528eca40a901b..c33dd575df679 100644 --- a/packages/nodes-base/test/nodes/ExecuteWorkflow.ts +++ b/packages/nodes-base/test/nodes/ExecuteWorkflow.ts @@ -1,11 +1,18 @@ import nock from 'nock'; import { WorkflowExecute } from 'n8n-core'; -import type { INodeTypes, IRun, IRunExecutionData } from 'n8n-workflow'; +import type { + IDeferredPromise, + INodeTypes, + IRun, + IRunExecutionData, + IWorkflowExecuteAdditionalData, + WorkflowExecuteMode, +} from 'n8n-workflow'; import { createDeferredPromise, Workflow } from 'n8n-workflow'; import * as Helpers from './Helpers'; import type { WorkflowTestData } from './types'; -export async function executeWorkflow(testData: WorkflowTestData, nodeTypes: INodeTypes) { +export async function setupExecution(testData: WorkflowTestData, nodeTypes: INodeTypes) { if (testData.nock) { const { baseUrl, mocks } = testData.nock; const agent = nock(baseUrl); @@ -30,7 +37,24 @@ export async function executeWorkflow(testData: WorkflowTestData, nodeTypes: INo testData, ); - let executionData: IRun; + return { + waitPromise, + additionalData, + executionMode, + testData, + workflowInstance, + nodeExecutionOrder, + }; +} + +export async function performExecution( + waitPromise: IDeferredPromise, + additionalData: IWorkflowExecuteAdditionalData, + executionMode: WorkflowExecuteMode, + testData: WorkflowTestData, + workflowInstance: Workflow, + nodeExecutionOrder: string[], +) { const runExecutionData: IRunExecutionData = { resultData: { runData: {}, @@ -50,9 +74,24 @@ export async function executeWorkflow(testData: WorkflowTestData, nodeTypes: INo ], }, }; - const workflowExecute = new WorkflowExecute(additionalData, executionMode, runExecutionData); - executionData = await workflowExecute.processRunExecutionData(workflowInstance); + const workflowExecute = new WorkflowExecute(additionalData, executionMode, runExecutionData); + const finalExecutionData = await workflowExecute.processRunExecutionData(workflowInstance); const result = await waitPromise.promise(); - return { executionData, result, nodeExecutionOrder }; + + return { executionData: finalExecutionData, result, nodeExecutionOrder }; +} + +export async function executeWorkflow(testData: WorkflowTestData, nodeTypes: INodeTypes) { + const { waitPromise, additionalData, executionMode, workflowInstance, nodeExecutionOrder } = + await setupExecution(testData, nodeTypes); + + return await performExecution( + waitPromise, + additionalData, + executionMode, + testData, + workflowInstance, + nodeExecutionOrder, + ); }