UNPKG

@ply-ct/ply

Version:

REST API Automated Testing

52 lines 2.02 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.WebsocketExec = void 0; const exec_1 = require("./exec"); const ws_1 = __importDefault(require("ws")); const util_1 = require("../util"); class WebsocketExec extends exec_1.StepExec { async run(context) { const url = context.getAttribute('url', { required: true }); const timeout = context.getAttribute('timeout') || '0'; const ms = Number(timeout); if (isNaN(ms)) { return { status: 'Errored', message: `Bad value for 'timeout': ${timeout}` }; } // TODO: handle headers const message = context.getAttribute('message'); context.logInfo(`WebSocket connecting to ${url}`); const ws = new ws_1.default(url); const wsPromise = new Promise((resolve, reject) => { ws.on('error', reject); ws.on('open', () => { if (message) { ws.send(message); } }); ws.on('message', async (data) => { ws.close(); let stepData = data.toString(); if ((0, util_1.isJson)(stepData)) { stepData = JSON.parse(stepData); } const outcome = await context.verifyData(stepData); resolve(outcome); }); ws.on('close', () => { resolve({ status: 'Errored', message: 'WebSocket closed' }); }); }); const timeoutPromise = new Promise((resolve) => { setTimeout(() => { ws.close(); resolve({ status: 'Errored', message: 'Timeout' }); }, ms); }); return await Promise.race([wsPromise, timeoutPromise]); } } exports.WebsocketExec = WebsocketExec; //# sourceMappingURL=websocket.js.map