UNPKG

testplane

Version:

Tests framework based on mocha and wdio

111 lines 4.41 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.parseWsDriverIncomingMessage = void 0; /* eslint-disable no-bitwise */ const util_1 = require("util"); const types_1 = require("./types"); const logger = __importStar(require("../../utils/logger")); const compression_1 = require("./compression"); const debug_1 = require("./debug"); const WSDRIVER_VERSION = 1; // version, header, requestId, responseStatus, command null-terminator const MIN_INCOMING_MESSAGE_LENGTH_BYTES = 1 + 1 + 4 + 2 + 1; const rawDataToBuffer = (rawData) => { if (rawData instanceof Buffer) { return rawData; } if (Array.isArray(rawData)) { return Buffer.concat(rawData); } return Buffer.from(rawData); }; // https://github.com/gemini-testing/selenoid/blob/master/wsdriver/ws_req.go#L78-L85 const parseWsDriverIncomingMessage = async (incomingMessage) => { const data = rawDataToBuffer(incomingMessage); if (data.length < MIN_INCOMING_MESSAGE_LENGTH_BYTES) { return new Error(`Invalid incoming message "${(0, util_1.inspect)(incomingMessage)}": too short`); } const messageVersion = data.readUInt8(0); if (messageVersion !== WSDRIVER_VERSION) { logger.warn(`wsdriver: Unexpected message version. Expected '${WSDRIVER_VERSION}', got '${messageVersion}'`); return null; } const messageHeaders = data.readUInt8(1); const messageType = (messageHeaders >> 4); const compressionType = ((messageHeaders >> 2) & 0b11); const isJson = Boolean((messageHeaders >> 1) & 0b1); const isProtocolError = Boolean(messageHeaders & 0b1); if (messageType !== types_1.WsDriverMessage.Response) { logger.warn(`wsdriver: Unexpected message type. Expected '${types_1.WsDriverMessage.Response}', got '${messageType}'`); return null; } const requestId = data.readUInt32BE(2); const statusCode = data.readUInt16BE(6); const requestPathEnd = data.indexOf(0, 8); if (requestPathEnd === -1) { return new Error(`Invalid incoming message with id ${requestId}: absent null-terminator for requestPath`); } const requestPath = data.toString("utf8", 8, requestPathEnd); const rawBody = data.subarray(requestPathEnd + 1); let body; try { const decompressedBody = rawBody.byteLength ? await (0, compression_1.getDecompressed)(rawBody, compressionType).catch(err => err) : null; if (!rawBody.byteLength || !decompressedBody) { body = rawBody.toString("utf8"); } else if (decompressedBody instanceof Error) { body = decompressedBody; } else if (isJson) { try { body = JSON.parse(decompressedBody.toString("utf8")); } catch (cause) { (0, debug_1.debugWSDriver)("Couldn't parse incoming JSON payload: %O", cause); body = decompressedBody.toString("utf8"); } } else { body = decompressedBody.toString("utf8"); } } catch (err) { body = err; } return { requestId, statusCode, isJson, isProtocolError, requestPath, body, rawBody, }; }; exports.parseWsDriverIncomingMessage = parseWsDriverIncomingMessage; //# sourceMappingURL=response.js.map