@nsshunt/stsappframework 3.1.167 → 3.1.169
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/testertesting/app.js +49 -0
- package/dist/testertesting/app.js.map +1 -1
- package/dist/testertesting/commonTypes.js +2 -2
- package/dist/testertesting/commonTypes.js.map +1 -1
- package/dist/testertesting/testCase01.js +2 -2
- package/dist/testertesting/testCase01.js.map +1 -1
- package/dist/testertesting/workerInstance.js +21 -27
- package/dist/testertesting/workerInstance.js.map +1 -1
- package/dist/testertesting/workerManager.js +77 -25
- package/dist/testertesting/workerManager.js.map +1 -1
- package/dist/testertesting/workerWorkerTestRunner01.js +9 -145
- package/dist/testertesting/workerWorkerTestRunner01.js.map +1 -1
- package/package.json +3 -1
- package/src/testertesting/app.ts +62 -5
- package/src/testertesting/commonTypes.ts +19 -7
- package/src/testertesting/testCase01.ts +2 -2
- package/src/testertesting/workerInstance.ts +22 -32
- package/src/testertesting/workerManager.ts +85 -27
- package/src/testertesting/workerWorkerTestRunner01.ts +7 -179
- package/types/testertesting/commonTypes.d.ts +19 -8
- package/types/testertesting/commonTypes.d.ts.map +1 -1
- package/types/testertesting/workerInstance.d.ts +0 -2
- package/types/testertesting/workerInstance.d.ts.map +1 -1
- package/types/testertesting/workerManager.d.ts.map +1 -1
- package/types/testertesting/workerWorkerTestRunner01.d.ts +1 -14
- package/types/testertesting/workerWorkerTestRunner01.d.ts.map +1 -1
- package/dist/testertesting/requestResponseHelper.js +0 -83
- package/dist/testertesting/requestResponseHelper.js.map +0 -1
- package/src/testertesting/requestResponseHelper.ts +0 -95
- package/types/testertesting/requestResponseHelper.d.ts +0 -8
- package/types/testertesting/requestResponseHelper.d.ts.map +0 -1
|
@@ -3,137 +3,11 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.WorkerTestCases =
|
|
7
|
-
/* eslint @typescript-eslint/no-unused-vars: 0, @typescript-eslint/no-explicit-any: 0 */ // --> OFF
|
|
8
|
-
const chalk_1 = __importDefault(require("chalk"));
|
|
9
|
-
// Force chalk level
|
|
10
|
-
chalk_1.default.level = 3;
|
|
6
|
+
exports.WorkerTestCases = void 0;
|
|
11
7
|
const workerInstance_1 = require("./workerInstance");
|
|
12
8
|
const testCase01_1 = require("./testCase01");
|
|
13
|
-
const
|
|
14
|
-
|
|
15
|
-
};
|
|
16
|
-
// This will execute within a worker thread context
|
|
17
|
-
class WorkerWorkerTestRunner01 extends workerInstance_1.WorkerInstance {
|
|
18
|
-
#logMessageDataSet = {};
|
|
19
|
-
constructor() {
|
|
20
|
-
super();
|
|
21
|
-
debug(`constructor`);
|
|
22
|
-
}
|
|
23
|
-
StartWork = async (runner) => {
|
|
24
|
-
debug(`StartWork::Options: [${JSON.stringify(this.Options)}]`);
|
|
25
|
-
//this.#access_token = await this.#GetAccessToken();
|
|
26
|
-
//await Sleep(this.GetRandomInt(1000));
|
|
27
|
-
return this.PerformTest(runner);
|
|
28
|
-
};
|
|
29
|
-
GenLogMessage = (runner) => {
|
|
30
|
-
if (!this.#logMessageDataSet[runner.id]) {
|
|
31
|
-
this.#logMessageDataSet[runner.id] = {
|
|
32
|
-
adder: 1,
|
|
33
|
-
indent: 0
|
|
34
|
-
};
|
|
35
|
-
}
|
|
36
|
-
const logMessageData = this.#logMessageDataSet[runner.id];
|
|
37
|
-
let message = `${' '.repeat(logMessageData.indent)}>> Hello World <<`;
|
|
38
|
-
const colorCode = runner.asyncRunnerContext.asyncRunnerId % 4;
|
|
39
|
-
switch (colorCode) {
|
|
40
|
-
case 0:
|
|
41
|
-
message = chalk_1.default.green(`${message}`);
|
|
42
|
-
break;
|
|
43
|
-
case 1:
|
|
44
|
-
message = chalk_1.default.yellow(`${message}`);
|
|
45
|
-
break;
|
|
46
|
-
case 2:
|
|
47
|
-
message = chalk_1.default.magenta(`${message}`);
|
|
48
|
-
break;
|
|
49
|
-
case 3:
|
|
50
|
-
message = chalk_1.default.white(`${message}`);
|
|
51
|
-
break;
|
|
52
|
-
}
|
|
53
|
-
console.log(message);
|
|
54
|
-
runner.instrumentData.message.push(message);
|
|
55
|
-
logMessageData.indent += logMessageData.adder;
|
|
56
|
-
if (logMessageData.indent > 20) {
|
|
57
|
-
logMessageData.adder = -1;
|
|
58
|
-
}
|
|
59
|
-
else if (logMessageData.indent === 0) {
|
|
60
|
-
logMessageData.adder = 1;
|
|
61
|
-
}
|
|
62
|
-
};
|
|
63
|
-
PerformTest = async (runner) => {
|
|
64
|
-
debug(`WorkerWorkerTestRunner01::PerformTest`);
|
|
65
|
-
const message = `ID: [${runner.asyncRunnerContext.id}], Worker: [${runner.asyncRunnerContext.threadId}], Runner: [${runner.asyncRunnerContext.asyncRunnerId}] starting ...`;
|
|
66
|
-
console.log(message);
|
|
67
|
-
runner.instrumentData.message = [message];
|
|
68
|
-
this.PostTelemetry(runner);
|
|
69
|
-
runner.instrumentData.message = [];
|
|
70
|
-
/*
|
|
71
|
-
const tester = new TestRest01Service(this.#access_token, runner.options as IRunnerOptionsEx);
|
|
72
|
-
|
|
73
|
-
tester.on('rx', (val: string) => {
|
|
74
|
-
runner.instrumentData.rx += parseInt(val);
|
|
75
|
-
//console.log(runner.instrumentData.rx);
|
|
76
|
-
});
|
|
77
|
-
|
|
78
|
-
tester.on('tx', (val: string) => {
|
|
79
|
-
runner.instrumentData.tx += parseInt(val);
|
|
80
|
-
});
|
|
81
|
-
*/
|
|
82
|
-
/*
|
|
83
|
-
while (runner.state !== IRunnerState.stopped) {
|
|
84
|
-
|
|
85
|
-
await Sleep(0);
|
|
86
|
-
//let retVal = await tester.StartTest();
|
|
87
|
-
|
|
88
|
-
runner.instrumentData.coreCount = 1;
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
const options = runner.options as IRunnerOptionsEx;
|
|
92
|
-
|
|
93
|
-
await Sleep(options.sleepDuration);
|
|
94
|
-
|
|
95
|
-
runner.instrumentData.timer++;
|
|
96
|
-
runner.instrumentData.requestCount++;
|
|
97
|
-
runner.instrumentData.velocity = options.messageMod;
|
|
98
|
-
|
|
99
|
-
//runner.instrumentData.tx += 256;
|
|
100
|
-
//runner.instrumentData.rx += 6500;
|
|
101
|
-
|
|
102
|
-
if (runner.instrumentData.requestCount % options.logMessageMod === 0) {
|
|
103
|
-
this.GenLogMessage(runner);
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
if (runner.instrumentData.requestCount % options.messageMod === 0) {
|
|
107
|
-
this.PostTelemetry(runner);
|
|
108
|
-
runner.instrumentData.message = [ ];
|
|
109
|
-
runner.instrumentData.tx = 0;
|
|
110
|
-
runner.instrumentData.rx = 0;
|
|
111
|
-
}
|
|
112
|
-
if (runner.instrumentData.requestCount % 1000 === 0) {
|
|
113
|
-
const message = `Worker: [${runner.asyncRunnerContext.threadId}], Runner: [${runner.asyncRunnerContext.asyncRunnerId}] has completed: [${runner.instrumentData.requestCount}] iterations of max: [${options.iterations}]`;
|
|
114
|
-
console.log(message);
|
|
115
|
-
runner.instrumentData.message = [message]
|
|
116
|
-
this.PostTelemetry(runner);
|
|
117
|
-
runner.instrumentData.message = [ ];
|
|
118
|
-
runner.instrumentData.tx = 0;
|
|
119
|
-
runner.instrumentData.rx = 0;
|
|
120
|
-
|
|
121
|
-
}
|
|
122
|
-
if (runner.instrumentData.requestCount > options.iterations) {
|
|
123
|
-
runner.state = IRunnerState.stopped;
|
|
124
|
-
const message = `Worker: [${runner.asyncRunnerContext.threadId}], Runner: [${runner.asyncRunnerContext.asyncRunnerId}] stopping ...`;
|
|
125
|
-
console.log(message);
|
|
126
|
-
runner.instrumentData.message = [message]
|
|
127
|
-
this.PostTelemetry(runner);
|
|
128
|
-
runner.instrumentData.message = [ ];
|
|
129
|
-
runner.instrumentData.tx = 0;
|
|
130
|
-
runner.instrumentData.rx = 0;
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
*/
|
|
134
|
-
};
|
|
135
|
-
}
|
|
136
|
-
exports.WorkerWorkerTestRunner01 = WorkerWorkerTestRunner01;
|
|
9
|
+
const detect_node_1 = __importDefault(require("detect-node"));
|
|
10
|
+
const worker_threads_1 = require("worker_threads");
|
|
137
11
|
class WorkerTestCases extends workerInstance_1.WorkerInstance {
|
|
138
12
|
constructor() {
|
|
139
13
|
super();
|
|
@@ -148,24 +22,14 @@ class WorkerTestCases extends workerInstance_1.WorkerInstance {
|
|
|
148
22
|
};
|
|
149
23
|
}
|
|
150
24
|
exports.WorkerTestCases = WorkerTestCases;
|
|
151
|
-
const worker_threads_1 = require("worker_threads");
|
|
152
|
-
let messagePort;
|
|
153
25
|
const worker = new WorkerTestCases();
|
|
154
26
|
worker_threads_1.parentPort?.on('message', (data) => {
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
LogInfoMessage(`webWorker (${process.pid}): message from passed message port = [${data}]`);
|
|
162
|
-
messagePort.postMessage(data);
|
|
163
|
-
});
|
|
164
|
-
} else {
|
|
165
|
-
LogInfoMessage(`webWorker (${process.pid}): message from parent = [${JSON.stringify(data)}]`);
|
|
166
|
-
parentPort?.postMessage(data);
|
|
27
|
+
if (detect_node_1.default) {
|
|
28
|
+
worker.ProcessMessage(data);
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
// const payloadMessage: IIWMessagePayload = data.data as IIWMessagePayload; // browser version
|
|
32
|
+
worker.ProcessMessage(data.data); // browser version
|
|
167
33
|
}
|
|
168
|
-
*/
|
|
169
34
|
});
|
|
170
|
-
debug(`file completed ...`);
|
|
171
35
|
//# sourceMappingURL=workerWorkerTestRunner01.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workerWorkerTestRunner01.js","sourceRoot":"","sources":["../../src/testertesting/workerWorkerTestRunner01.ts"],"names":[],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"workerWorkerTestRunner01.js","sourceRoot":"","sources":["../../src/testertesting/workerWorkerTestRunner01.ts"],"names":[],"mappings":";;;;;;AAEA,qDAAiD;AACjD,6CAAyC;AAEzC,8DAAgC;AAEhC,mDAA4C;AAE5C,MAAa,eAAgB,SAAQ,+BAAc;IAC/C;QACI,KAAK,EAAE,CAAA;IACX,CAAC;IAEQ,iBAAiB,GAAG,CAAC,0BAAuD,EAA0B,EAAE;QAC7G,MAAM,EAAE,MAAM,EAAE,GAAG,0BAA0B,CAAC;QAC9C,QAAQ,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;YAClC,KAAK,YAAY;gBACb,OAAO,IAAI,uBAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;QACvC,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC,CAAA;CACJ;AAbD,0CAaC;AAED,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;AAErC,2BAAU,EAAE,EAAE,CAAC,SAAS,EAAE,CAAC,IAAS,EAAE,EAAE;IACpC,IAAI,qBAAM,EAAE,CAAC;QACT,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;SAAM,CAAC;QACJ,+FAA+F;QAC/F,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,kBAAkB;IACxD,CAAC;AACL,CAAC,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nsshunt/stsappframework",
|
|
3
|
-
"version": "3.1.
|
|
3
|
+
"version": "3.1.169",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "./types/index.d.ts",
|
|
@@ -32,6 +32,7 @@
|
|
|
32
32
|
"@tsconfig/node20": "^20.1.4",
|
|
33
33
|
"@types/cookie-parser": "^1.4.7",
|
|
34
34
|
"@types/debug": "^4.1.12",
|
|
35
|
+
"@types/detect-node": "^2.0.2",
|
|
35
36
|
"@types/express": "^4.17.21",
|
|
36
37
|
"@types/jest": "^29.5.12",
|
|
37
38
|
"@types/jsonwebtoken": "^9.0.6",
|
|
@@ -65,6 +66,7 @@
|
|
|
65
66
|
"cookie-parser": "^1.4.6",
|
|
66
67
|
"cors": "^2.8.5",
|
|
67
68
|
"debug": "^4.3.6",
|
|
69
|
+
"detect-node": "^2.1.0",
|
|
68
70
|
"express": "^4.19.1",
|
|
69
71
|
"http-status-codes": "^2.3.0",
|
|
70
72
|
"jayson": "^4.1.1",
|
package/src/testertesting/app.ts
CHANGED
|
@@ -83,6 +83,7 @@ if (cluster.isPrimary) {
|
|
|
83
83
|
const agentId = 'agent01';
|
|
84
84
|
const userAgent = 'userAgent01'
|
|
85
85
|
|
|
86
|
+
// Root level / master async runner context
|
|
86
87
|
const asyncRunnerContext: IAsyncRunnerContext = {
|
|
87
88
|
nid: `\
|
|
88
89
|
${hostName}${ModelDelimeter.COMPONENT_SEPERATOR}${agentId}-${userAgent}\
|
|
@@ -168,16 +169,11 @@ if (cluster.isPrimary) {
|
|
|
168
169
|
agentInstrumentController.StartPublish();
|
|
169
170
|
|
|
170
171
|
const workerFactory: IWorkerFactory = {
|
|
171
|
-
|
|
172
172
|
createWorkerThreadWorker: (): Worker => {
|
|
173
|
-
|
|
174
173
|
LogInfoMessage(`createWorkerThreadWorker`);
|
|
175
|
-
|
|
176
174
|
const fileName ='./dist/testertesting/workerWorkerTestRunner01.js';
|
|
177
|
-
|
|
178
175
|
const publishCollectorWebWorker = new Worker(fileName);
|
|
179
176
|
publishCollectorWebWorker.unref();
|
|
180
|
-
|
|
181
177
|
return publishCollectorWebWorker;
|
|
182
178
|
},
|
|
183
179
|
get workerThreadWorkerOptions(): IWorkerOptions {
|
|
@@ -262,6 +258,67 @@ if (cluster.isPrimary) {
|
|
|
262
258
|
}, 2000);
|
|
263
259
|
}, 2000);
|
|
264
260
|
}, 2000);
|
|
261
|
+
|
|
262
|
+
|
|
263
|
+
|
|
264
|
+
|
|
265
|
+
|
|
266
|
+
|
|
267
|
+
|
|
268
|
+
const worker2 = await wm.AddWorker();
|
|
269
|
+
|
|
270
|
+
const runnerOptions2: IRunnerOptionsEx = {
|
|
271
|
+
testType: 'TestCase01',
|
|
272
|
+
executionProfile: {
|
|
273
|
+
iterations: 50,
|
|
274
|
+
delayBetweenIterations: 250
|
|
275
|
+
},
|
|
276
|
+
sleepDuration: 0,
|
|
277
|
+
messageMod: 1,
|
|
278
|
+
logMessageMod: 1
|
|
279
|
+
};
|
|
280
|
+
|
|
281
|
+
const runnerW2R1 = worker2.AddRunner(runnerOptions2);
|
|
282
|
+
runnerW2R1.on('Completed', () => {
|
|
283
|
+
console.log(chalk.rgb(10, 100, 250)(`Completed event handler for worker 2 runner 1`));
|
|
284
|
+
});
|
|
285
|
+
worker2.StartRunner(runnerW2R1);
|
|
286
|
+
|
|
287
|
+
const runnerW2R2 = worker2.AddRunner(runnerOptions2);
|
|
288
|
+
runnerW2R2.on('Completed', () => {
|
|
289
|
+
console.log(chalk.rgb(10, 100, 250)(`Completed event handler for worker 2 runner 2`));
|
|
290
|
+
});
|
|
291
|
+
worker2.StartRunner(runnerW2R2);
|
|
292
|
+
|
|
293
|
+
setTimeout(() => {
|
|
294
|
+
worker2.Pause();
|
|
295
|
+
setTimeout(() => {
|
|
296
|
+
worker2.Resume();
|
|
297
|
+
setTimeout(() => {
|
|
298
|
+
worker2.Stop();
|
|
299
|
+
setTimeout(async () => {
|
|
300
|
+
await worker2.Reset();
|
|
301
|
+
const newOptions = { ...runnerOptions2 };
|
|
302
|
+
newOptions.sleepDuration = 50;
|
|
303
|
+
await worker2.UpdateOptions(newOptions);
|
|
304
|
+
await worker2.Start();
|
|
305
|
+
setTimeout(async () => {
|
|
306
|
+
await worker2.Pause();
|
|
307
|
+
await worker2.Execute();
|
|
308
|
+
await worker2.Execute();
|
|
309
|
+
await worker2.Execute();
|
|
310
|
+
await worker2.Execute();
|
|
311
|
+
await worker2.Execute();
|
|
312
|
+
setTimeout(async () => {
|
|
313
|
+
await worker2.Resume();
|
|
314
|
+
}, 5000);
|
|
315
|
+
}, 5000);
|
|
316
|
+
}, 5000);
|
|
317
|
+
}, 5000);
|
|
318
|
+
}, 5000);
|
|
319
|
+
}, 5000);
|
|
320
|
+
|
|
321
|
+
|
|
265
322
|
};
|
|
266
323
|
PerformTesting();
|
|
267
324
|
|
|
@@ -28,8 +28,8 @@ export enum eIWMessageCommands {
|
|
|
28
28
|
InstrumentTelemetry ='__STS__InstrumentTelemetry', // Used to send instrument telemetry
|
|
29
29
|
MessagePort = '__STS__MessagePort',
|
|
30
30
|
MessagePortResponse = '__STS__MessagePortResponse',
|
|
31
|
-
|
|
32
|
-
|
|
31
|
+
AddRunner = '__STS__AddRunner',
|
|
32
|
+
StopAllRunners = '__STS__StopAllRunners',
|
|
33
33
|
StartRunner = '__STS__StartRunner',
|
|
34
34
|
StopRunner = '__STS__StopRunner',
|
|
35
35
|
PauseRunner = '__STS__PauseRunner',
|
|
@@ -106,9 +106,9 @@ export interface IRunner {
|
|
|
106
106
|
export interface IRunnerEx extends IRunner {
|
|
107
107
|
publishInstrumentController: PublishInstrumentController
|
|
108
108
|
Start: () => Promise<boolean> // Start runner iterations
|
|
109
|
+
Stop: () => Promise<boolean> // Stop iteration processing and keep the current iteration number. Currently, this is the same as Pause.
|
|
109
110
|
Pause: () => Promise<boolean> // Pause iteration processing and keep the current iteration number.
|
|
110
111
|
Resume: () => Promise<boolean> // Resume iteration processing from the previously paused iteration number.
|
|
111
|
-
Stop: () => Promise<boolean> // Stop iteration processing and keep the current iteration number. Currently, this is the same as Pause.
|
|
112
112
|
Terminate: () => Promise<boolean> // Stop the runner iterations and terminate the instance, stop any instrument publishers.
|
|
113
113
|
Reset: () => Promise<boolean> // Stop the current iterations and reset the iteration count back to 0.
|
|
114
114
|
Execute: (iteration: number) => Promise<boolean> // Execute a single iteration for this test.
|
|
@@ -117,15 +117,15 @@ export interface IRunnerEx extends IRunner {
|
|
|
117
117
|
}
|
|
118
118
|
|
|
119
119
|
export interface IRunnerInstance {
|
|
120
|
-
Execute: (iteration: number) => Promise<boolean> // Execute a single iteration for this test
|
|
121
120
|
StartRunner: () => Promise<boolean>
|
|
122
121
|
StopRunner: () => Promise<boolean>
|
|
123
|
-
TerminateRunner: () => Promise<boolean>
|
|
124
|
-
Completed: () => Promise<boolean>
|
|
125
122
|
PauseRunner: () => Promise<boolean>
|
|
126
123
|
ResumeRunner: () => Promise<boolean>
|
|
124
|
+
TerminateRunner: () => Promise<boolean>
|
|
127
125
|
ResetRunner: () => Promise<boolean>
|
|
126
|
+
Execute: (iteration: number) => Promise<boolean> // Execute a single iteration for this test
|
|
128
127
|
UpdateOptions: () => Promise<boolean>
|
|
128
|
+
Completed: () => Promise<boolean>
|
|
129
129
|
}
|
|
130
130
|
|
|
131
131
|
export enum IWorkerState {
|
|
@@ -133,7 +133,6 @@ export enum IWorkerState {
|
|
|
133
133
|
started = 'started',
|
|
134
134
|
stopped = 'stopped'
|
|
135
135
|
}
|
|
136
|
-
|
|
137
136
|
|
|
138
137
|
export interface IWorkerOptions {
|
|
139
138
|
id: string
|
|
@@ -174,11 +173,24 @@ export interface IWorkerEx extends IWorker {
|
|
|
174
173
|
runnersEvents: Record<string, IRunnerEvent[]>
|
|
175
174
|
GetRunner(id: string): IRunnerEx | null
|
|
176
175
|
AddRunner: (runnerOptions: IRunnerOptions) => IRunnerEx
|
|
176
|
+
|
|
177
177
|
StartRunner: (runner: IRunnerEx) => Promise<boolean>
|
|
178
178
|
StopRunner: (runner: IRunnerEx) => Promise<boolean>
|
|
179
179
|
PauseRunner: (runner: IRunnerEx) => Promise<boolean>
|
|
180
180
|
ResumeRunner: (runner: IRunnerEx) => Promise<boolean>
|
|
181
|
+
TerminateRunner: (runner: IRunnerEx) => Promise<boolean>
|
|
182
|
+
ResetRunner: (runner: IRunnerEx) => Promise<boolean>
|
|
183
|
+
ExecuteRunner: (runner: IRunnerEx) => Promise<boolean>
|
|
184
|
+
UpdateOptionsRunner: (runner: IRunnerEx, options: IRunnerOptions) => Promise<boolean>
|
|
185
|
+
|
|
186
|
+
Start: () => Promise<boolean>
|
|
181
187
|
Stop: () => Promise<boolean>
|
|
188
|
+
Pause: () => Promise<boolean>
|
|
189
|
+
Resume: () => Promise<boolean>
|
|
190
|
+
Terminate: () => Promise<boolean>
|
|
191
|
+
Reset: () => Promise<boolean>
|
|
192
|
+
Execute: () => Promise<boolean> // Execute a single iteration
|
|
193
|
+
UpdateOptions: (options: IRunnerOptions) => Promise<boolean>
|
|
182
194
|
}
|
|
183
195
|
|
|
184
196
|
export interface ISTSTestWorkerOptions {
|
|
@@ -79,8 +79,8 @@ export class TestCase01 implements IRunnerInstance {
|
|
|
79
79
|
this.#runner.instrumentData.requestCount++;
|
|
80
80
|
this.#runner.instrumentData.velocity = options.messageMod;
|
|
81
81
|
|
|
82
|
-
//runner.instrumentData.tx +=
|
|
83
|
-
//runner.instrumentData.rx +=
|
|
82
|
+
//this.#runner.instrumentData.tx += 256000;
|
|
83
|
+
//this.#runner.instrumentData.rx += 6500000;
|
|
84
84
|
|
|
85
85
|
if (this.#runner.instrumentData.requestCount % options.logMessageMod === 0) {
|
|
86
86
|
this.#GenLogMessage(this.#runner, iteration);
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
/* eslint @typescript-eslint/no-explicit-any: 0, @typescript-eslint/no-unused-vars: 0 */ // --> OFF
|
|
2
2
|
import { MessagePort } from 'worker_threads';
|
|
3
3
|
|
|
4
|
+
import isNode from 'detect-node'
|
|
5
|
+
|
|
4
6
|
import { IIWMessagePayload, eIWMessageCommands, IIWMessagePayloadContentBase, IRunnerInstance,
|
|
5
7
|
ISTSAgentWorkerMessagePort, IRunner, ITestRunnerTelemetryPayload, IWorkerOptions
|
|
6
8
|
} from './commonTypes'
|
|
7
9
|
|
|
8
|
-
import { RequestResponseHelper } from './requestResponseHelper'
|
|
9
|
-
|
|
10
10
|
import chalk from 'chalk';
|
|
11
11
|
// Force chalk level
|
|
12
12
|
chalk.level = 3;
|
|
@@ -28,7 +28,6 @@ export interface IRunnerEx2RunState {
|
|
|
28
28
|
|
|
29
29
|
export abstract class WorkerInstance {
|
|
30
30
|
#collectorCollectorPort: MessagePort | null = null;
|
|
31
|
-
#requestResponseHelper: RequestResponseHelper | null = null;
|
|
32
31
|
#runners: Record<string, IRunnerEx2RunState> = { };
|
|
33
32
|
#options: IWorkerOptions | null = null;
|
|
34
33
|
|
|
@@ -68,10 +67,6 @@ export abstract class WorkerInstance {
|
|
|
68
67
|
}
|
|
69
68
|
}
|
|
70
69
|
|
|
71
|
-
get RequestResponseHelper(): RequestResponseHelper | null {
|
|
72
|
-
return this.#requestResponseHelper;
|
|
73
|
-
}
|
|
74
|
-
|
|
75
70
|
get CollectorCollectorPort(): MessagePort | null {
|
|
76
71
|
return this.#collectorCollectorPort;
|
|
77
72
|
}
|
|
@@ -85,18 +80,16 @@ export abstract class WorkerInstance {
|
|
|
85
80
|
this.#collectorCollectorPort = workerMessagePort.port as MessagePort;
|
|
86
81
|
|
|
87
82
|
// NodeJS version
|
|
88
|
-
this.#collectorCollectorPort.on('message', (data: any) => {
|
|
89
|
-
this.#debug(`collectorCollectorPort onmessage: ${data.data}`);
|
|
90
|
-
});
|
|
91
|
-
|
|
92
|
-
// Browser Version
|
|
93
|
-
/*
|
|
94
|
-
this.#collectorCollectorPort.onmessage = function(data: MessageEvent) {
|
|
95
|
-
console.log(`collectorCollectorPort onmessage: ${data.data}`);
|
|
96
|
-
}
|
|
97
|
-
*/
|
|
98
83
|
|
|
99
|
-
|
|
84
|
+
if (isNode) {
|
|
85
|
+
this.#collectorCollectorPort.on('message', (data: any) => {
|
|
86
|
+
this.#debug(`collectorCollectorPort onmessage: ${data.data}`);
|
|
87
|
+
});
|
|
88
|
+
} else {
|
|
89
|
+
(this.#collectorCollectorPort as any).onmessage = function(data: any) { // MessageEvent
|
|
90
|
+
console.log(`collectorCollectorPort onmessage: ${data.data}`);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
100
93
|
|
|
101
94
|
const response: IIWMessagePayload = {
|
|
102
95
|
command: eIWMessageCommands.MessagePortResponse,
|
|
@@ -110,8 +103,8 @@ export abstract class WorkerInstance {
|
|
|
110
103
|
return null;
|
|
111
104
|
}
|
|
112
105
|
|
|
113
|
-
#
|
|
114
|
-
this.#debug(`
|
|
106
|
+
#AddRunner = (testRunnerTelemetryPayload: ITestRunnerTelemetryPayload): IRunner => {
|
|
107
|
+
this.#debug(`AddRunner`)
|
|
115
108
|
const { runner } = testRunnerTelemetryPayload;
|
|
116
109
|
const asyncRunnerInstance = this.CreateAsyncRunner(testRunnerTelemetryPayload);
|
|
117
110
|
if (asyncRunnerInstance) {
|
|
@@ -128,8 +121,6 @@ export abstract class WorkerInstance {
|
|
|
128
121
|
return runner;
|
|
129
122
|
}
|
|
130
123
|
|
|
131
|
-
//@@ re4set iteration count - need a reset
|
|
132
|
-
|
|
133
124
|
#StartRunner = async (testRunnerTelemetryPayload: ITestRunnerTelemetryPayload) => {
|
|
134
125
|
const { runner } = testRunnerTelemetryPayload;
|
|
135
126
|
this.#debug(`${chalk.magenta(`runner: [${runner.id}]`)} StartRunner`)
|
|
@@ -170,10 +161,10 @@ export abstract class WorkerInstance {
|
|
|
170
161
|
ExecuteLoop();
|
|
171
162
|
}
|
|
172
163
|
|
|
173
|
-
#
|
|
174
|
-
this.#debug(`
|
|
164
|
+
#StopAllRunners = async (testRunnerTelemetryPayload: ITestRunnerTelemetryPayload) => {
|
|
165
|
+
this.#debug(`StopAllRunners`);
|
|
175
166
|
for (const [, runner] of Object.entries(this.#runners)) {
|
|
176
|
-
this.#debug(`${chalk.magenta(`runner: [${runner.runner.id}]`)}
|
|
167
|
+
this.#debug(`${chalk.magenta(`runner: [${runner.runner.id}]`)} StopAllRunners`)
|
|
177
168
|
runner.terminate = true;
|
|
178
169
|
await runner.runnerInstance.StopRunner();
|
|
179
170
|
}
|
|
@@ -246,7 +237,6 @@ export abstract class WorkerInstance {
|
|
|
246
237
|
ProcessMessage = async(data: any) => {
|
|
247
238
|
this.#debug(`ProcessMessage: data: [${JSON.stringify(data)}]`)
|
|
248
239
|
try {
|
|
249
|
-
// const payloadMessage: IIWMessagePayload = data.data as IIWMessagePayload; // browser version
|
|
250
240
|
const payloadMessage: IIWMessagePayload = data as IIWMessagePayload;
|
|
251
241
|
switch (payloadMessage.command) {
|
|
252
242
|
case eIWMessageCommands.MessagePort :
|
|
@@ -255,13 +245,13 @@ export abstract class WorkerInstance {
|
|
|
255
245
|
this.#options = (payloadMessage.payload as ISTSAgentWorkerMessagePort).options;
|
|
256
246
|
this.#debug(`ProcessMessage::#options: [${JSON.stringify(this.#options)}]`)
|
|
257
247
|
break;
|
|
258
|
-
case eIWMessageCommands.
|
|
259
|
-
this.#debug(`ProcessMessage::
|
|
260
|
-
this.#
|
|
248
|
+
case eIWMessageCommands.AddRunner :
|
|
249
|
+
this.#debug(`ProcessMessage::AddRunner`)
|
|
250
|
+
this.#AddRunner(payloadMessage.payload as ITestRunnerTelemetryPayload);
|
|
261
251
|
break;
|
|
262
|
-
case eIWMessageCommands.
|
|
263
|
-
this.#debug(`ProcessMessage::
|
|
264
|
-
this.#
|
|
252
|
+
case eIWMessageCommands.StopAllRunners :
|
|
253
|
+
this.#debug(`ProcessMessage::StopAllRunners`)
|
|
254
|
+
this.#StopAllRunners(payloadMessage.payload as ITestRunnerTelemetryPayload);
|
|
265
255
|
break;
|
|
266
256
|
case eIWMessageCommands.StartRunner :
|
|
267
257
|
this.#debug(`ProcessMessage::StartRunner`)
|