@ply-ct/ply
Version:
REST API Automated Testing
52 lines • 2.02 kB
JavaScript
;
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