@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.
Files changed (36) hide show
  1. package/dist/block-request.d.ts +2 -0
  2. package/dist/block-request.js +55 -0
  3. package/dist/block-request.js.map +1 -0
  4. package/dist/grpc.d.ts +2 -1
  5. package/dist/grpc.js.map +1 -1
  6. package/dist/request-sequence-result.d.ts +3 -2
  7. package/dist/sequence-executor-like.d.ts +10 -3
  8. package/dist/sequence.d.ts +3 -1
  9. package/dist/sequence.js +45 -28
  10. package/dist/sequence.js.map +1 -1
  11. package/dist/single-runner.d.ts +3 -1
  12. package/dist/single-runner.js +1 -0
  13. package/dist/single-runner.js.map +1 -1
  14. package/dist/step-handlers/code-step-handler.d.ts +2 -2
  15. package/dist/step-handlers/code-step-handler.js +0 -1
  16. package/dist/step-handlers/code-step-handler.js.map +1 -1
  17. package/dist/step-handlers/extract-step-handler.d.ts +2 -2
  18. package/dist/step-handlers/extract-step-handler.js +0 -1
  19. package/dist/step-handlers/extract-step-handler.js.map +1 -1
  20. package/dist/step-handlers/request-step-handler.d.ts +2 -2
  21. package/dist/step-handlers/request-step-handler.js +0 -1
  22. package/dist/step-handlers/request-step-handler.js.map +1 -1
  23. package/dist/step-handlers/step-handler.d.ts +0 -2
  24. package/dist/step-handlers/wait-step-handler.d.ts +2 -2
  25. package/dist/step-handlers/wait-step-handler.js +0 -1
  26. package/dist/step-handlers/wait-step-handler.js.map +1 -1
  27. package/dist/step-handlers/web-socket-step-handler.d.ts +16 -0
  28. package/dist/step-handlers/web-socket-step-handler.js +256 -0
  29. package/dist/step-handlers/web-socket-step-handler.js.map +1 -0
  30. package/dist/types/ws.d.ts +31 -0
  31. package/dist/types/ws.js +3 -0
  32. package/dist/types/ws.js.map +1 -0
  33. package/dist/ws.d.ts +7 -26
  34. package/dist/ws.js +35 -28
  35. package/dist/ws.js.map +1 -1
  36. 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/step-type';
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: SequenceExecutorLike;
7
+ private context;
8
8
  constructor(context: SequenceExecutorLike);
9
9
  canHandle(step: Step): boolean;
10
10
  execute(step: ExtractAndAssertStep, _index: number): Promise<ExecuteRes>;
@@ -47,7 +47,6 @@ var ExtractStepHandler = /** @class */ (function () {
47
47
  writable: true,
48
48
  value: context
49
49
  });
50
- this.context = context;
51
50
  }
52
51
  Object.defineProperty(ExtractStepHandler.prototype, "canHandle", {
53
52
  enumerable: false,
@@ -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,4BAAmB,OAA6B;;;;;mBAA7B;;QACjB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;;;;;eAED,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,AA5BD,IA4BC;AA5BY,gDAAkB"}
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/step-type';
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: SequenceExecutorLike;
8
+ private context;
9
9
  constructor(context: SequenceExecutorLike);
10
10
  canHandle(step: Step): boolean;
11
11
  execute(request: LoadmillRequest, index: number): Promise<ExecuteRes>;
@@ -46,7 +46,6 @@ var RequestStepHandler = /** @class */ (function () {
46
46
  writable: true,
47
47
  value: context
48
48
  });
49
- this.context = context;
50
49
  }
51
50
  Object.defineProperty(RequestStepHandler.prototype, "canHandle", {
52
51
  enumerable: false,
@@ -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,4BAAmB,OAA6B;;;;;mBAA7B;;QACjB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;;;;;eAED,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,AAlBD,IAkBC;AAlBY,gDAAkB"}
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/step-type';
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: SequenceExecutorLike;
7
+ private context;
8
8
  constructor(context: SequenceExecutorLike);
9
9
  canHandle(step: Step): boolean;
10
10
  execute(waitStep: WaitStep): Promise<ExecuteRes>;
@@ -47,7 +47,6 @@ var WaitStepHandler = /** @class */ (function () {
47
47
  writable: true,
48
48
  value: context
49
49
  });
50
- this.context = context;
51
50
  }
52
51
  Object.defineProperty(WaitStepHandler.prototype, "canHandle", {
53
52
  enumerable: false,
@@ -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,yBAAmB,OAA6B;;;;;mBAA7B;;QACjB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;;;;;eAED,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,AArBD,IAqBC;AArBY,0CAAe"}
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 {};
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=ws.js.map
@@ -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, LoadmillHeaders } from '@loadmill/core/dist/request';
4
- import { IncomingHttpHeaders } from 'http';
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
- getConnection(url: string): WebSocket | undefined;
48
- storeConnection(url: string, wsConnection: WebSocket): void;
45
+ getConnectionSocket(url: string): WebSocket | undefined;
46
+ storeNewConnection(url: string, socket: WebSocket): void;
49
47
  closeAllConnections(): Promise<void>;
50
- getMessages(): string[];
51
- addMessage(message: string): void;
52
- clearMessages(): void;
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.getConnection(this.wsRequestArgs.url);
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
- this.wsHandler.storeConnection(this.wsRequestArgs.url, this.ws);
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, "getConnection", {
395
+ Object.defineProperty(WSSequenceHandler.prototype, "getConnectionSocket", {
401
396
  enumerable: false,
402
397
  configurable: true,
403
398
  writable: true,
404
399
  value: function (url) {
405
- return this._connections[url];
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, "storeConnection", {
404
+ Object.defineProperty(WSSequenceHandler.prototype, "storeNewConnection", {
409
405
  enumerable: false,
410
406
  configurable: true,
411
407
  writable: true,
412
- value: function (url, wsConnection) {
413
- this._connections[url] = wsConnection;
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, _a, connection;
423
- return __generator(this, function (_b) {
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, _a = Object.values(this._connections); _i < _a.length; _i++) {
427
- connection = _a[_i];
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
- return this.messages;
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, "addMessage", {
447
+ Object.defineProperty(WSSequenceHandler.prototype, "getMessagesByConnection", {
448
448
  enumerable: false,
449
449
  configurable: true,
450
450
  writable: true,
451
- value: function (message) {
452
- this.messages.push(message);
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, "clearMessages", {
456
+ Object.defineProperty(WSSequenceHandler.prototype, "addMessage", {
456
457
  enumerable: false,
457
458
  configurable: true,
458
459
  writable: true,
459
- value: function () {
460
- this.messages = [];
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;