@loadmill/executer 0.1.147 → 0.1.149
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/block-request.d.ts +2 -0
- package/dist/block-request.js +55 -0
- package/dist/block-request.js.map +1 -0
- package/dist/grpc.d.ts +2 -1
- package/dist/grpc.js.map +1 -1
- package/dist/request-sequence-result.d.ts +3 -2
- package/dist/sequence-executor-like.d.ts +10 -3
- package/dist/sequence.d.ts +3 -1
- package/dist/sequence.js +45 -28
- package/dist/sequence.js.map +1 -1
- package/dist/single-runner.d.ts +3 -1
- package/dist/single-runner.js +1 -0
- package/dist/single-runner.js.map +1 -1
- package/dist/step-handlers/code-step-handler.d.ts +2 -2
- package/dist/step-handlers/code-step-handler.js +0 -1
- package/dist/step-handlers/code-step-handler.js.map +1 -1
- package/dist/step-handlers/extract-step-handler.d.ts +2 -2
- package/dist/step-handlers/extract-step-handler.js +0 -1
- package/dist/step-handlers/extract-step-handler.js.map +1 -1
- package/dist/step-handlers/request-step-handler.d.ts +2 -2
- package/dist/step-handlers/request-step-handler.js +0 -1
- package/dist/step-handlers/request-step-handler.js.map +1 -1
- package/dist/step-handlers/step-handler.d.ts +0 -2
- package/dist/step-handlers/wait-step-handler.d.ts +2 -2
- package/dist/step-handlers/wait-step-handler.js +0 -1
- package/dist/step-handlers/wait-step-handler.js.map +1 -1
- package/dist/step-handlers/web-socket-step-handler.d.ts +16 -0
- package/dist/step-handlers/web-socket-step-handler.js +256 -0
- package/dist/step-handlers/web-socket-step-handler.js.map +1 -0
- package/dist/types/ws.d.ts +31 -0
- package/dist/types/ws.js +3 -0
- package/dist/types/ws.js.map +1 -0
- package/dist/ws.d.ts +7 -26
- package/dist/ws.js +35 -28
- package/dist/ws.js.map +1 -1
- package/package.json +3 -3
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { ExtractAndAssertStep } from '@loadmill/core/dist/extract-and-assert-step';
|
|
2
|
-
import { Step } from '@loadmill/core/dist/step/
|
|
2
|
+
import { Step } from '@loadmill/core/dist/step/types';
|
|
3
3
|
import { Histogram } from '../failures';
|
|
4
4
|
import { SequenceExecutorLike } from '../sequence-executor-like';
|
|
5
5
|
import { ExecuteRes, StepHandler } from './step-handler';
|
|
6
6
|
export declare class ExtractStepHandler implements StepHandler {
|
|
7
|
-
context
|
|
7
|
+
private context;
|
|
8
8
|
constructor(context: SequenceExecutorLike);
|
|
9
9
|
canHandle(step: Step): boolean;
|
|
10
10
|
execute(step: ExtractAndAssertStep, _index: number): Promise<ExecuteRes>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extract-step-handler.js","sourceRoot":"","sources":["../../src/step-handlers/extract-step-handler.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,oEAA8E;AAG9E,8CAA+C;AAK/C;IACE,
|
|
1
|
+
{"version":3,"file":"extract-step-handler.js","sourceRoot":"","sources":["../../src/step-handlers/extract-step-handler.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,oEAA8E;AAG9E,8CAA+C;AAK/C;IACE,4BAAoB,OAA6B;;;;;mBAA7B;;IAAgC,CAAC;;;;;eAErD,UAAU,IAAU;YAClB,OAAO,oCAAsB,CAAC,IAAI,CAAC,CAAC;QACtC,CAAC;;;;;;eAED,UAAc,IAA0B,EAAE,MAAc;;;;;;4BAChD,GAAG,GAAG;gCACV,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,gBAAgB;6BACpC,CAAC;4BACI,gBAAgB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;4BAC9B,UAAU,GAAG,2BAAa,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC;4BACxE,qBAAM,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,EAAE,GAAG,CAAC,EAAA;;4BAA/C,SAA+C,CAAC;4BAChD,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,gBAAgB,EAAE,UAAU,CAAC,CAAC;4BACzD,sBAAO,GAAG,EAAC;;;;SACZ;;;;;;eAED,UACE,IAA0B,EAC1B,KAAa,EACb,IAAgB;;;oBAEhB,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;oBACtC,sBAAO,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,EAAC;;;SACnD;;IACH,yBAAC;AAAD,CAAC,AA1BD,IA0BC;AA1BY,gDAAkB"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { LoadmillRequest } from '@loadmill/core/dist/request';
|
|
2
|
-
import { Step } from '@loadmill/core/dist/step/
|
|
2
|
+
import { Step } from '@loadmill/core/dist/step/types';
|
|
3
3
|
import { Histogram } from '../failures';
|
|
4
4
|
import { ResolvedRequest } from '../request-sequence-result';
|
|
5
5
|
import { SequenceExecutorLike } from '../sequence-executor-like';
|
|
6
6
|
import { ExecuteRes, StepHandler } from './step-handler';
|
|
7
7
|
export declare class RequestStepHandler implements StepHandler {
|
|
8
|
-
context
|
|
8
|
+
private context;
|
|
9
9
|
constructor(context: SequenceExecutorLike);
|
|
10
10
|
canHandle(step: Step): boolean;
|
|
11
11
|
execute(request: LoadmillRequest, index: number): Promise<ExecuteRes>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request-step-handler.js","sourceRoot":"","sources":["../../src/step-handlers/request-step-handler.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,oEAAyE;AAQzE;IACE,
|
|
1
|
+
{"version":3,"file":"request-step-handler.js","sourceRoot":"","sources":["../../src/step-handlers/request-step-handler.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,oEAAyE;AAQzE;IACE,4BAAoB,OAA6B;;;;;mBAA7B;;IAAgC,CAAC;;;;;eAErD,UAAU,IAAU;YAClB,OAAO,+BAAiB,CAAC,IAAI,CAAC,CAAC;QACjC,CAAC;;;;;;eAED,UAAc,OAAwB,EAAE,KAAa;;;;;;4BAC7C,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;4BACxD,qBAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,eAAe,EAAE,KAAK,CAAC,EAAA;;4BAA5D,GAAG,GAAG,SAAsD;4BAClE,sBAAO,GAAG,EAAC;;;;SACZ;;;;;;eAED,UAAgC,OAAwB,EAAE,KAAa,EAAE,GAAoB;;;oBAC3F,sBAAO,IAAI,CAAC,OAAO,CAAC,yBAAyB,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,CAAC,EAAC;;;SACpE;;IACH,yBAAC;AAAD,CAAC,AAhBD,IAgBC;AAhBY,gDAAkB"}
|
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
import { StepLike } from '@loadmill/core/dist/step';
|
|
2
|
-
import { SequenceExecutorLike } from '../sequence-executor-like';
|
|
3
2
|
import { Histogram } from '../failures';
|
|
4
3
|
import { RequestResponse } from '../request-sequence-result';
|
|
5
4
|
export interface StepHandler {
|
|
6
|
-
context: SequenceExecutorLike;
|
|
7
5
|
canHandle(step: StepLike): boolean;
|
|
8
6
|
execute(step: StepLike, index: number): Promise<ExecuteRes>;
|
|
9
7
|
processSuccessfulResponse(step: StepLike, index: number, res: ExecuteRes): Promise<Histogram>;
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { Step } from '@loadmill/core/dist/step/
|
|
1
|
+
import { Step } from '@loadmill/core/dist/step/types';
|
|
2
2
|
import { Histogram } from '../failures';
|
|
3
3
|
import { SequenceExecutorLike } from '../sequence-executor-like';
|
|
4
4
|
import { ExecuteRes, StepHandler } from './step-handler';
|
|
5
5
|
import { WaitStep } from '@loadmill/core/dist/wait-step';
|
|
6
6
|
export declare class WaitStepHandler implements StepHandler {
|
|
7
|
-
context
|
|
7
|
+
private context;
|
|
8
8
|
constructor(context: SequenceExecutorLike);
|
|
9
9
|
canHandle(step: Step): boolean;
|
|
10
10
|
execute(waitStep: WaitStep): Promise<ExecuteRes>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wait-step-handler.js","sourceRoot":"","sources":["../../src/step-handlers/wait-step-handler.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,oEAAkE;AAGlE,8CAA+C;AAM/C;IACE,
|
|
1
|
+
{"version":3,"file":"wait-step-handler.js","sourceRoot":"","sources":["../../src/step-handlers/wait-step-handler.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,oEAAkE;AAGlE,8CAA+C;AAM/C;IACE,yBAAoB,OAA6B;;;;;mBAA7B;;IAAgC,CAAC;;;;;eAErD,UAAU,IAAU;YAClB,OAAO,wBAAU,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;;;;;;eAED,UAAc,QAAkB;;;;;;4BACxB,gBAAgB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;4BAC9B,UAAU,GAAG,2BAAa,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC;4BACxE,qBAAM,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC,EAAA;;4BAAzD,SAAyD,CAAC;4BAC1D,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,gBAAgB,EAAE,UAAU,CAAC,CAAC;4BACzD,sBAAO,EAAE,EAAC;;;;SACX;;;;;;eAED,UAAgC,KAAW,EAAE,KAAa,EAAE,IAAgB;;;oBAC1E,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;oBACtC,sBAAO,EAAE,EAAC;;;SACX;;IACH,sBAAC;AAAD,CAAC,AAnBD,IAmBC;AAnBY,0CAAe"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Step } from '@loadmill/core/dist/step/types';
|
|
2
|
+
import { WebSocketStep } from '@loadmill/core/dist/web-socket-step';
|
|
3
|
+
import { Histogram } from '../failures';
|
|
4
|
+
import { SequenceExecutorLike } from '../sequence-executor-like';
|
|
5
|
+
import { ExecuteRes, StepHandler } from './step-handler';
|
|
6
|
+
export declare class WebSocketStepHandler implements StepHandler {
|
|
7
|
+
private context;
|
|
8
|
+
constructor(context: SequenceExecutorLike);
|
|
9
|
+
canHandle(step: Step): boolean;
|
|
10
|
+
execute(step: WebSocketStep, index: number): Promise<ExecuteRes>;
|
|
11
|
+
private send;
|
|
12
|
+
private receive;
|
|
13
|
+
processSuccessfulResponse(step: WebSocketStep, index: number, res: ExecuteRes): Promise<Histogram>;
|
|
14
|
+
private processReceiveResponse;
|
|
15
|
+
private getMessagesAsResponse;
|
|
16
|
+
}
|
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
+
}) : (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
o[k2] = m[k];
|
|
8
|
+
}));
|
|
9
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
10
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
11
|
+
}) : function(o, v) {
|
|
12
|
+
o["default"] = v;
|
|
13
|
+
});
|
|
14
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
15
|
+
if (mod && mod.__esModule) return mod;
|
|
16
|
+
var result = {};
|
|
17
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
18
|
+
__setModuleDefault(result, mod);
|
|
19
|
+
return result;
|
|
20
|
+
};
|
|
21
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
22
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
23
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
24
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
25
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
26
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
27
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
28
|
+
});
|
|
29
|
+
};
|
|
30
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
31
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
32
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
33
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
34
|
+
function step(op) {
|
|
35
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
36
|
+
while (_) try {
|
|
37
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
38
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
39
|
+
switch (op[0]) {
|
|
40
|
+
case 0: case 1: t = op; break;
|
|
41
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
42
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
43
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
44
|
+
default:
|
|
45
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
46
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
47
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
48
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
49
|
+
if (t[2]) _.ops.pop();
|
|
50
|
+
_.trys.pop(); continue;
|
|
51
|
+
}
|
|
52
|
+
op = body.call(thisArg, _);
|
|
53
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
54
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
58
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
59
|
+
};
|
|
60
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
61
|
+
exports.WebSocketStepHandler = void 0;
|
|
62
|
+
var type_guards_1 = require("@loadmill/core/dist/step/type-guards");
|
|
63
|
+
var constants_1 = require("@loadmill/core/dist/web-socket-step/constants");
|
|
64
|
+
var extrema_1 = require("@loadmill/core/dist/conf/extrema");
|
|
65
|
+
var request_1 = require("@loadmill/core/dist/request");
|
|
66
|
+
var promiseUtils = __importStar(require("@loadmill/universal/dist/promise-utils"));
|
|
67
|
+
var log_1 = __importDefault(require("@loadmill/universal/dist/log"));
|
|
68
|
+
var performance_1 = require("../performance");
|
|
69
|
+
var errors_1 = require("../errors");
|
|
70
|
+
var EXTRACT_RESOLUTION_INTERVAL_MS = 500;
|
|
71
|
+
var WebSocketStepHandler = /** @class */ (function () {
|
|
72
|
+
function WebSocketStepHandler(context) {
|
|
73
|
+
Object.defineProperty(this, "context", {
|
|
74
|
+
enumerable: true,
|
|
75
|
+
configurable: true,
|
|
76
|
+
writable: true,
|
|
77
|
+
value: context
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
Object.defineProperty(WebSocketStepHandler.prototype, "canHandle", {
|
|
81
|
+
enumerable: false,
|
|
82
|
+
configurable: true,
|
|
83
|
+
writable: true,
|
|
84
|
+
value: function (step) {
|
|
85
|
+
return type_guards_1.isWebSocketStep(step);
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
Object.defineProperty(WebSocketStepHandler.prototype, "execute", {
|
|
89
|
+
enumerable: false,
|
|
90
|
+
configurable: true,
|
|
91
|
+
writable: true,
|
|
92
|
+
value: function (step, index) {
|
|
93
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
94
|
+
return __generator(this, function (_a) {
|
|
95
|
+
switch (step.action) {
|
|
96
|
+
case constants_1.WebSocketStepActions.SEND:
|
|
97
|
+
case constants_1.WebSocketStepActions.CONNECT:
|
|
98
|
+
return [2 /*return*/, this.send(step, index)];
|
|
99
|
+
case constants_1.WebSocketStepActions.RECEIVE:
|
|
100
|
+
return [2 /*return*/, this.receive(step, index)];
|
|
101
|
+
default:
|
|
102
|
+
throw new errors_1.RequestFailuresError("Unknown WebSocket action: " + step.action);
|
|
103
|
+
}
|
|
104
|
+
return [2 /*return*/];
|
|
105
|
+
});
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
Object.defineProperty(WebSocketStepHandler.prototype, "send", {
|
|
110
|
+
enumerable: false,
|
|
111
|
+
configurable: true,
|
|
112
|
+
writable: true,
|
|
113
|
+
value: function (step, index) {
|
|
114
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
115
|
+
var preparedRequest;
|
|
116
|
+
return __generator(this, function (_a) {
|
|
117
|
+
switch (_a.label) {
|
|
118
|
+
case 0:
|
|
119
|
+
preparedRequest = this.context.prepareWSRequest(step, index);
|
|
120
|
+
return [4 /*yield*/, this.context.sendRequest(preparedRequest, index)];
|
|
121
|
+
case 1: return [2 /*return*/, _a.sent()];
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
});
|
|
127
|
+
Object.defineProperty(WebSocketStepHandler.prototype, "receive", {
|
|
128
|
+
enumerable: false,
|
|
129
|
+
configurable: true,
|
|
130
|
+
writable: true,
|
|
131
|
+
value: function (step, index) {
|
|
132
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
133
|
+
var url, maxExtractionsResolutionTime, messagesToRetrieve, extract, requestStartTime, beforeTime, resolvedUrl, res, timeWaited, maxWaitTime;
|
|
134
|
+
return __generator(this, function (_a) {
|
|
135
|
+
switch (_a.label) {
|
|
136
|
+
case 0:
|
|
137
|
+
url = step.url, maxExtractionsResolutionTime = step.maxExtractionsResolutionTime, messagesToRetrieve = step.messagesToRetrieve, extract = step.extract;
|
|
138
|
+
requestStartTime = Date.now();
|
|
139
|
+
beforeTime = performance_1.isPerformance ? performance.now() : requestStartTime;
|
|
140
|
+
resolvedUrl = this.context.prepareUrl(url, index);
|
|
141
|
+
res = this.getMessagesAsResponse(resolvedUrl, messagesToRetrieve);
|
|
142
|
+
if (!(maxExtractionsResolutionTime !== 0)) return [3 /*break*/, 4];
|
|
143
|
+
timeWaited = 0;
|
|
144
|
+
maxWaitTime = _getWaitTimeInMs(maxExtractionsResolutionTime);
|
|
145
|
+
_a.label = 1;
|
|
146
|
+
case 1:
|
|
147
|
+
if (!(timeWaited < maxWaitTime)) return [3 /*break*/, 4];
|
|
148
|
+
return [4 /*yield*/, this.context.handleExtractions(step, res)];
|
|
149
|
+
case 2:
|
|
150
|
+
_a.sent();
|
|
151
|
+
if (_areAllExtractionsResolved(extract, this.context.parameters)) {
|
|
152
|
+
return [3 /*break*/, 4];
|
|
153
|
+
}
|
|
154
|
+
log_1.default.debug('Waiting for extractions to be resolved', { timeWaited: timeWaited, maxWaitTime: maxWaitTime });
|
|
155
|
+
return [4 /*yield*/, promiseUtils.delay(EXTRACT_RESOLUTION_INTERVAL_MS)];
|
|
156
|
+
case 3:
|
|
157
|
+
_a.sent();
|
|
158
|
+
res = this.getMessagesAsResponse(resolvedUrl, messagesToRetrieve);
|
|
159
|
+
timeWaited += EXTRACT_RESOLUTION_INTERVAL_MS;
|
|
160
|
+
return [3 /*break*/, 1];
|
|
161
|
+
case 4:
|
|
162
|
+
this.context.setResolvedResponse(index, res);
|
|
163
|
+
this.context.setTimeParams(requestStartTime, beforeTime);
|
|
164
|
+
return [2 /*return*/, res];
|
|
165
|
+
}
|
|
166
|
+
});
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
});
|
|
170
|
+
Object.defineProperty(WebSocketStepHandler.prototype, "processSuccessfulResponse", {
|
|
171
|
+
enumerable: false,
|
|
172
|
+
configurable: true,
|
|
173
|
+
writable: true,
|
|
174
|
+
value: function (step, index, res) {
|
|
175
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
176
|
+
return __generator(this, function (_a) {
|
|
177
|
+
switch (step.action) {
|
|
178
|
+
case constants_1.WebSocketStepActions.SEND:
|
|
179
|
+
case constants_1.WebSocketStepActions.CONNECT:
|
|
180
|
+
return [2 /*return*/, {}];
|
|
181
|
+
case constants_1.WebSocketStepActions.RECEIVE:
|
|
182
|
+
return [2 /*return*/, this.processReceiveResponse(step, index, res)];
|
|
183
|
+
}
|
|
184
|
+
return [2 /*return*/];
|
|
185
|
+
});
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
});
|
|
189
|
+
Object.defineProperty(WebSocketStepHandler.prototype, "processReceiveResponse", {
|
|
190
|
+
enumerable: false,
|
|
191
|
+
configurable: true,
|
|
192
|
+
writable: true,
|
|
193
|
+
value: function (step, index, res) {
|
|
194
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
195
|
+
return __generator(this, function (_a) {
|
|
196
|
+
return [2 /*return*/, this.context.processSuccessfulResponse(index, step, res)];
|
|
197
|
+
});
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
});
|
|
201
|
+
Object.defineProperty(WebSocketStepHandler.prototype, "getMessagesAsResponse", {
|
|
202
|
+
enumerable: false,
|
|
203
|
+
configurable: true,
|
|
204
|
+
writable: true,
|
|
205
|
+
value: function (url, messagesToRetrieve) {
|
|
206
|
+
var messagesByConnection = this.context.wsHandler.getMessagesByConnection(url);
|
|
207
|
+
var messages = _extractRelevantMessages(messagesByConnection, messagesToRetrieve);
|
|
208
|
+
return {
|
|
209
|
+
type: request_1.ConfMimeTypes.APPLICATION_JSON,
|
|
210
|
+
text: JSON.stringify(messages),
|
|
211
|
+
status: 200,
|
|
212
|
+
statusText: 'OK',
|
|
213
|
+
headers: [],
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
});
|
|
217
|
+
return WebSocketStepHandler;
|
|
218
|
+
}());
|
|
219
|
+
exports.WebSocketStepHandler = WebSocketStepHandler;
|
|
220
|
+
var _extractRelevantMessages = function (messages, messagesToRetrieve) {
|
|
221
|
+
if (!messages.length) {
|
|
222
|
+
return [];
|
|
223
|
+
}
|
|
224
|
+
switch (messagesToRetrieve) {
|
|
225
|
+
case constants_1.WebSocketMessagesToRetrieve.LAST:
|
|
226
|
+
return _parseMessage(messages[messages.length - 1]);
|
|
227
|
+
case constants_1.WebSocketMessagesToRetrieve.LAST_50:
|
|
228
|
+
return messages.slice(-50).map(_parseMessage);
|
|
229
|
+
case constants_1.WebSocketMessagesToRetrieve.LAST_10:
|
|
230
|
+
default:
|
|
231
|
+
return messages.slice(-10).map(_parseMessage);
|
|
232
|
+
}
|
|
233
|
+
};
|
|
234
|
+
var _parseMessage = function (message) {
|
|
235
|
+
var str = message === null || message === void 0 ? void 0 : message.toString();
|
|
236
|
+
try {
|
|
237
|
+
return JSON.parse(str);
|
|
238
|
+
}
|
|
239
|
+
catch (_) {
|
|
240
|
+
return str;
|
|
241
|
+
}
|
|
242
|
+
};
|
|
243
|
+
// We consider non-null value as resolved
|
|
244
|
+
var _areAllExtractionsResolved = function (extractions, resolvedParameters) {
|
|
245
|
+
if (extractions === void 0) { extractions = []; }
|
|
246
|
+
return extractions.every(function (extraction) {
|
|
247
|
+
var extractionName = Object.keys(extraction)[0];
|
|
248
|
+
var extractionResolvedValue = resolvedParameters[extractionName];
|
|
249
|
+
return extractionResolvedValue != null && extractionResolvedValue !== '';
|
|
250
|
+
});
|
|
251
|
+
};
|
|
252
|
+
var _getWaitTimeInMs = function (maxExtractionsResolutionTime) {
|
|
253
|
+
var waitTimeInSeconds = Math.min(maxExtractionsResolutionTime || extrema_1.DEFAULT_WS_EXTRACT_RESOLUTION_TIME, extrema_1.MAX_WS_EXTRACT_RESOLUTION_TIME);
|
|
254
|
+
return waitTimeInSeconds * 1000;
|
|
255
|
+
};
|
|
256
|
+
//# sourceMappingURL=web-socket-step-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web-socket-step-handler.js","sourceRoot":"","sources":["../../src/step-handlers/web-socket-step-handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import WebSocket from 'ws';
|
|
3
|
+
import { IncomingHttpHeaders } from 'http';
|
|
4
|
+
import { HttpResponseStatus } from '@loadmill/core/dist/request';
|
|
5
|
+
import { LoadmillHeaders } from '@loadmill/core/dist/headers';
|
|
6
|
+
export declare type WSMimeType = 'binary' | 'text';
|
|
7
|
+
export declare type WSRequestArguments = {
|
|
8
|
+
expectedStatus: HttpResponseStatus;
|
|
9
|
+
headers: LoadmillHeaders;
|
|
10
|
+
message: string;
|
|
11
|
+
mimeType: WSMimeType;
|
|
12
|
+
timeout: number;
|
|
13
|
+
url: string;
|
|
14
|
+
};
|
|
15
|
+
export declare type WSResponse = {
|
|
16
|
+
status?: number;
|
|
17
|
+
res: {
|
|
18
|
+
statusMessage?: string;
|
|
19
|
+
};
|
|
20
|
+
header: LoadmillHeaders | IncomingHttpHeaders;
|
|
21
|
+
req: {};
|
|
22
|
+
};
|
|
23
|
+
export declare type WebSocketConnection = {
|
|
24
|
+
socket: WebSocket;
|
|
25
|
+
messages: WebSocketMessage[];
|
|
26
|
+
};
|
|
27
|
+
declare type WebSocketMessage = {
|
|
28
|
+
data: WebSocket.Data;
|
|
29
|
+
receivedAt: number;
|
|
30
|
+
};
|
|
31
|
+
export {};
|
package/dist/types/ws.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ws.js","sourceRoot":"","sources":["../../src/types/ws.ts"],"names":[],"mappings":""}
|
package/dist/ws.d.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
/// <reference types="node" />
|
|
2
1
|
import WebSocket from 'ws';
|
|
3
|
-
import { HttpResponseStatus
|
|
4
|
-
import {
|
|
2
|
+
import { HttpResponseStatus } from '@loadmill/core/dist/request';
|
|
3
|
+
import { WSRequestArguments, WSResponse } from './types/ws';
|
|
5
4
|
declare enum WSState {
|
|
6
5
|
CONNECTING = 0,
|
|
7
6
|
OPEN = 1,
|
|
@@ -42,30 +41,12 @@ export declare class WSRequest {
|
|
|
42
41
|
}
|
|
43
42
|
export declare class WSSequenceHandler {
|
|
44
43
|
private _connections;
|
|
45
|
-
messages: string[];
|
|
46
44
|
constructor();
|
|
47
|
-
|
|
48
|
-
|
|
45
|
+
getConnectionSocket(url: string): WebSocket | undefined;
|
|
46
|
+
storeNewConnection(url: string, socket: WebSocket): void;
|
|
49
47
|
closeAllConnections(): Promise<void>;
|
|
50
|
-
getMessages():
|
|
51
|
-
|
|
52
|
-
|
|
48
|
+
getMessages(): WebSocket.Data[];
|
|
49
|
+
getMessagesByConnection(url: string): WebSocket.Data[];
|
|
50
|
+
addMessage(message: WebSocket.Data, url: string): void;
|
|
53
51
|
}
|
|
54
|
-
export declare type WSMimeType = 'binary' | 'text';
|
|
55
|
-
export declare type WSRequestArguments = {
|
|
56
|
-
expectedStatus: HttpResponseStatus;
|
|
57
|
-
headers: LoadmillHeaders;
|
|
58
|
-
message: string;
|
|
59
|
-
mimeType: WSMimeType;
|
|
60
|
-
timeout: number;
|
|
61
|
-
url: string;
|
|
62
|
-
};
|
|
63
|
-
export declare type WSResponse = {
|
|
64
|
-
status?: number;
|
|
65
|
-
res: {
|
|
66
|
-
statusMessage?: string;
|
|
67
|
-
};
|
|
68
|
-
header: LoadmillHeaders | IncomingHttpHeaders;
|
|
69
|
-
req: {};
|
|
70
|
-
};
|
|
71
52
|
export {};
|
package/dist/ws.js
CHANGED
|
@@ -41,10 +41,11 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
41
41
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
42
42
|
exports.WSSequenceHandler = exports.WSRequest = void 0;
|
|
43
43
|
var ws_1 = __importDefault(require("ws")); // todo should be picked with other option (socketio or non in browser)
|
|
44
|
+
var http_1 = require("http");
|
|
45
|
+
var flatten_1 = __importDefault(require("lodash/flatten"));
|
|
44
46
|
var promise_utils_1 = require("@loadmill/universal/dist/promise-utils");
|
|
45
47
|
var log_1 = __importDefault(require("@loadmill/universal/dist/log"));
|
|
46
48
|
var errors_1 = require("./errors");
|
|
47
|
-
var http_1 = require("http");
|
|
48
49
|
var WSState;
|
|
49
50
|
(function (WSState) {
|
|
50
51
|
WSState[WSState["CONNECTING"] = 0] = "CONNECTING";
|
|
@@ -161,7 +162,7 @@ var WSRequest = /** @class */ (function () {
|
|
|
161
162
|
header: {},
|
|
162
163
|
req: {},
|
|
163
164
|
};
|
|
164
|
-
existingWS = this.wsHandler.
|
|
165
|
+
existingWS = this.wsHandler.getConnectionSocket(this.wsRequestArgs.url);
|
|
165
166
|
existingWS && log_1.default.debug("Existing Connection state " + getConnectionState(existingWS));
|
|
166
167
|
if (!(!existingWS || (existingWS && existingWS.readyState !== WSState.OPEN))) return [3 /*break*/, 2];
|
|
167
168
|
return [4 /*yield*/, this.addConnection(response)];
|
|
@@ -197,6 +198,7 @@ var WSRequest = /** @class */ (function () {
|
|
|
197
198
|
switch (_b.label) {
|
|
198
199
|
case 0:
|
|
199
200
|
this.ws = new ws_1.default(this.wsRequestArgs.url, undefined, { headers: this.wsRequestArgs.headers });
|
|
201
|
+
this.wsHandler.storeNewConnection(this.wsRequestArgs.url, this.ws);
|
|
200
202
|
this.addEventListeners(response);
|
|
201
203
|
_a = !this.hasErrorOccured;
|
|
202
204
|
if (!_a) return [3 /*break*/, 2];
|
|
@@ -206,7 +208,7 @@ var WSRequest = /** @class */ (function () {
|
|
|
206
208
|
_b.label = 2;
|
|
207
209
|
case 2:
|
|
208
210
|
_a;
|
|
209
|
-
|
|
211
|
+
log_1.default.debug('Created a new ws connection', this.ws.url);
|
|
210
212
|
return [2 /*return*/];
|
|
211
213
|
}
|
|
212
214
|
});
|
|
@@ -317,7 +319,7 @@ var WSRequest = /** @class */ (function () {
|
|
|
317
319
|
try {
|
|
318
320
|
var target = Array.isArray(message) ? decode(message) : message;
|
|
319
321
|
log_1.default.debug('got incoming message', target === null || target === void 0 ? void 0 : target.toString());
|
|
320
|
-
_this.wsHandler.addMessage(target);
|
|
322
|
+
_this.wsHandler.addMessage(target, _this.ws.url);
|
|
321
323
|
}
|
|
322
324
|
catch (e) {
|
|
323
325
|
log_1.default.debug('error getting message', e);
|
|
@@ -388,29 +390,23 @@ var WSSequenceHandler = /** @class */ (function () {
|
|
|
388
390
|
writable: true,
|
|
389
391
|
value: void 0
|
|
390
392
|
});
|
|
391
|
-
Object.defineProperty(this, "messages", {
|
|
392
|
-
enumerable: true,
|
|
393
|
-
configurable: true,
|
|
394
|
-
writable: true,
|
|
395
|
-
value: void 0
|
|
396
|
-
});
|
|
397
393
|
this._connections = {};
|
|
398
|
-
this.clearMessages();
|
|
399
394
|
}
|
|
400
|
-
Object.defineProperty(WSSequenceHandler.prototype, "
|
|
395
|
+
Object.defineProperty(WSSequenceHandler.prototype, "getConnectionSocket", {
|
|
401
396
|
enumerable: false,
|
|
402
397
|
configurable: true,
|
|
403
398
|
writable: true,
|
|
404
399
|
value: function (url) {
|
|
405
|
-
|
|
400
|
+
var _a;
|
|
401
|
+
return (_a = this._connections[url]) === null || _a === void 0 ? void 0 : _a.socket;
|
|
406
402
|
}
|
|
407
403
|
});
|
|
408
|
-
Object.defineProperty(WSSequenceHandler.prototype, "
|
|
404
|
+
Object.defineProperty(WSSequenceHandler.prototype, "storeNewConnection", {
|
|
409
405
|
enumerable: false,
|
|
410
406
|
configurable: true,
|
|
411
407
|
writable: true,
|
|
412
|
-
value: function (url,
|
|
413
|
-
this._connections[url] =
|
|
408
|
+
value: function (url, socket) {
|
|
409
|
+
this._connections[url] = { socket: socket, messages: [] };
|
|
414
410
|
}
|
|
415
411
|
});
|
|
416
412
|
Object.defineProperty(WSSequenceHandler.prototype, "closeAllConnections", {
|
|
@@ -418,14 +414,15 @@ var WSSequenceHandler = /** @class */ (function () {
|
|
|
418
414
|
configurable: true,
|
|
419
415
|
writable: true,
|
|
420
416
|
value: function () {
|
|
417
|
+
var _a;
|
|
421
418
|
return __awaiter(this, void 0, void 0, function () {
|
|
422
|
-
var _i,
|
|
423
|
-
return __generator(this, function (
|
|
419
|
+
var _i, _b, connection;
|
|
420
|
+
return __generator(this, function (_c) {
|
|
424
421
|
try {
|
|
425
422
|
log_1.default.debug('Closing all ws connections');
|
|
426
|
-
for (_i = 0,
|
|
427
|
-
connection =
|
|
428
|
-
connection.close();
|
|
423
|
+
for (_i = 0, _b = Object.values(this._connections); _i < _b.length; _i++) {
|
|
424
|
+
connection = _b[_i];
|
|
425
|
+
(_a = connection.socket) === null || _a === void 0 ? void 0 : _a.close();
|
|
429
426
|
}
|
|
430
427
|
}
|
|
431
428
|
catch (e) {
|
|
@@ -441,23 +438,33 @@ var WSSequenceHandler = /** @class */ (function () {
|
|
|
441
438
|
configurable: true,
|
|
442
439
|
writable: true,
|
|
443
440
|
value: function () {
|
|
444
|
-
|
|
441
|
+
var allConnectionsMessages = Object.values(this._connections).map(function (con) { return con.messages; });
|
|
442
|
+
return flatten_1.default(allConnectionsMessages)
|
|
443
|
+
.sort(function (a, b) { return a.receivedAt - b.receivedAt; })
|
|
444
|
+
.map(function (m) { return m.data; });
|
|
445
445
|
}
|
|
446
446
|
});
|
|
447
|
-
Object.defineProperty(WSSequenceHandler.prototype, "
|
|
447
|
+
Object.defineProperty(WSSequenceHandler.prototype, "getMessagesByConnection", {
|
|
448
448
|
enumerable: false,
|
|
449
449
|
configurable: true,
|
|
450
450
|
writable: true,
|
|
451
|
-
value: function (
|
|
452
|
-
|
|
451
|
+
value: function (url) {
|
|
452
|
+
var _a;
|
|
453
|
+
return ((_a = this._connections[url]) === null || _a === void 0 ? void 0 : _a.messages.map(function (m) { return m.data; })) || [];
|
|
453
454
|
}
|
|
454
455
|
});
|
|
455
|
-
Object.defineProperty(WSSequenceHandler.prototype, "
|
|
456
|
+
Object.defineProperty(WSSequenceHandler.prototype, "addMessage", {
|
|
456
457
|
enumerable: false,
|
|
457
458
|
configurable: true,
|
|
458
459
|
writable: true,
|
|
459
|
-
value: function () {
|
|
460
|
-
|
|
460
|
+
value: function (message, url) {
|
|
461
|
+
var receivedAt = Date.now();
|
|
462
|
+
if (this._connections[url]) {
|
|
463
|
+
this._connections[url].messages.push({ data: message, receivedAt: receivedAt });
|
|
464
|
+
}
|
|
465
|
+
else {
|
|
466
|
+
log_1.default.warn('Got a message from a non existing connection', { url: url, message: message });
|
|
467
|
+
}
|
|
461
468
|
}
|
|
462
469
|
});
|
|
463
470
|
return WSSequenceHandler;
|