UNPKG

e1c-test-tools

Version:

Набор инструментов для тестирования (предварительная версия)

109 lines (108 loc) 4.03 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.stopPolling = exports.shutdownE1c = exports.bootstrapE1c = exports.bootstrapBroker = exports.checkEnvIsActive = void 0; const core_1 = require("@nestjs/core"); const socket_io_client_1 = require("socket.io-client"); const path_1 = require("path"); const child_process_1 = require("child_process"); const socket_io_adapter_1 = require("../../server/adapters/socket-io.adapter"); const app_module_1 = require("../../server/app.module"); const checkEnvIsActive = (brokerHost, brokerPort, timeToWait = 2000) => new Promise((resolve) => { let marker = 0; const successMarker = 42; const socket = socket_io_client_1.io(`http://${brokerHost}:${brokerPort}`, { 'transports': ['websocket', 'polling'] }); socket.on('connect', () => { socket.emit('task-requests', { 'type': 'Evaluate', 'parameters': { 'expression': '6 * 7', }, }); socket.on('task-statuses', (data) => { if (data.status === 'Finished') { socket.emit('task-results', { 'id': data.id }); } }); socket.on('task-results', (data) => { marker = parseInt(data.result, 10); socket.disconnect(); }); }); const timeoutInterval = 100; let counter = timeToWait / timeoutInterval; const checkMarker = () => { if (marker === successMarker) { resolve(true); } else { counter -= 1; if (counter === 0) { resolve(false); } else { // eslint-disable-next-line no-unused-vars setTimeout(checkMarker, timeoutInterval); } } }; setTimeout(checkMarker, timeoutInterval); }); exports.checkEnvIsActive = checkEnvIsActive; const bootstrapBroker = async (brokerHost, brokerPort) => { const app = await core_1.NestFactory.create(app_module_1.AppModule); app.useWebSocketAdapter(new socket_io_adapter_1.SocketIoAdapter(app)); app.listen(brokerPort, brokerHost); return app; }; exports.bootstrapBroker = bootstrapBroker; const bootstrapE1c = async (brokerHost, brokerPort) => { const pathToTester = process.env.PATH_TO_TESTER_EXTERNAL_BIN_FILE || path_1.resolve(__dirname, '../../../1C/tester.epf'); const args = [ 'ENTERPRISE', `/${process.env.E1C_DB_TYPE}`, process.env.E1C_DB_PATH, '/N', process.env.E1C_USER, '/P', process.env.E1C_PASS, '/Execute', path_1.resolve(pathToTester), '/C', `${brokerHost}:${brokerPort}`, '/DisableStartupDialogs', '/DisableStartupMessages', '/DisableSplash', ]; const child = child_process_1.spawn(process.env.PATH_TO_E1C_EXECUTABLE, args, { 'detached': true, 'stdio': ['ignore', 1, 2], }); child.unref(); }; exports.bootstrapE1c = bootstrapE1c; const shutdownE1c = async (brokerHost, brokerPort) => { const socket = socket_io_client_1.io(`http://${brokerHost}:${brokerPort}`, { 'transports': ['websocket', 'polling'] }); socket.on('connect', () => { socket.emit('task-requests', { 'type': 'Management', 'parameters': { 'command': 'ShutDown', }, }); socket.disconnect(); }); }; exports.shutdownE1c = shutdownE1c; const stopPolling = async (brokerHost, brokerPort) => { const socket = socket_io_client_1.io(`http://${brokerHost}:${brokerPort}`, { 'transports': ['websocket', 'polling'] }); socket.on('connect', () => { socket.emit('task-requests', { 'type': 'Management', 'parameters': { 'command': 'StopPolling', }, }); socket.disconnect(); }); }; exports.stopPolling = stopPolling;