diff --git a/test-engine/lib/testsuite-schema.json b/test-engine/lib/testsuite-schema.json index 707179e..82fbf72 100644 --- a/test-engine/lib/testsuite-schema.json +++ b/test-engine/lib/testsuite-schema.json @@ -241,6 +241,10 @@ ] } }, + "response_pause": { + "description": "Pause the response body by the server", + "type": "integer" + }, "expected_request_headers_missing": { "description": "Request headers to check for absence on the server", "type": "array", diff --git a/test-engine/lib/tpl/explain-test.liquid b/test-engine/lib/tpl/explain-test.liquid index 789e54c..548ba59 100644 --- a/test-engine/lib/tpl/explain-test.liquid +++ b/test-engine/lib/tpl/explain-test.liquid @@ -59,6 +59,10 @@ The server will disconnect the client when receiving this request. ~~~ {% endif -%} +{%- if request.response_pause %} + +The server will pause for {{ request.response_pause }} seconds before responding.{% endif -%} + {%- if request.response_status or request.response_headers or request.response_body %} ### The server sends a response containing: diff --git a/test-engine/server/handle-test.mjs b/test-engine/server/handle-test.mjs index d5535bf..1f39887 100644 --- a/test-engine/server/handle-test.mjs +++ b/test-engine/server/handle-test.mjs @@ -20,8 +20,6 @@ export default function handleTest (pathSegs, request, response) { const cliReqNum = parseInt(request.headers['req-num']) const reqNum = cliReqNum || srvReqNum const reqConfig = requests[reqNum - 1] - const previousConfig = requests[reqNum - 2] - const now = Date.now() if (!reqConfig) { sendResponse(response, 409, `${requests[0].id} config not found for request ${srvReqNum} (anticipating ${requests.length})`) @@ -29,6 +27,22 @@ export default function handleTest (pathSegs, request, response) { } if (reqConfig.dump) logRequest(request, srvReqNum) + // response_pause + if ('response_pause' in reqConfig) { + setTimeout(continueHandleTest, reqConfig.response_pause * 1000, uuid, request, response, requests, serverState) + } else { + continueHandleTest(uuid, request, response, requests, serverState) + } +} + +function continueHandleTest (uuid, request, response, requests, serverState) { + const srvReqNum = serverState.length + 1 + const cliReqNum = parseInt(request.headers['req-num']) + const reqNum = cliReqNum || srvReqNum + const reqConfig = requests[reqNum - 1] + const previousConfig = requests[reqNum - 2] + const now = Date.now() + // Determine what the response status should be let httpStatus = reqConfig.response_status || [200, 'OK'] if ('expected_type' in reqConfig && reqConfig.expected_type.endsWith('validated')) {