@nsshunt/ststestrunner 1.1.105 → 1.1.106
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/ststestrunner.cjs +306 -81
- package/dist/ststestrunner.cjs.map +1 -1
- package/dist/ststestrunner.mjs +306 -81
- package/dist/ststestrunner.mjs.map +1 -1
- package/package.json +3 -2
- package/types/libmodule/authHelper.d.ts +37 -0
- package/types/libmodule/authHelper.d.ts.map +1 -0
- package/types/libmodule/clientHelper.d.ts +32 -0
- package/types/libmodule/clientHelper.d.ts.map +1 -0
- package/types/libmodule/lockHelper.d.ts +8 -0
- package/types/libmodule/lockHelper.d.ts.map +1 -0
- package/types/libmodule/workerFhirTestCases.d.ts +6 -28
- package/types/libmodule/workerFhirTestCases.d.ts.map +1 -1
package/dist/ststestrunner.cjs
CHANGED
|
@@ -6,6 +6,7 @@ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
|
6
6
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
7
7
|
var __getProtoOf = Object.getPrototypeOf;
|
|
8
8
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
9
|
+
var __commonJSMin = (cb, mod) => () => (mod || (cb((mod = { exports: {} }).exports, mod), cb = null), mod.exports);
|
|
9
10
|
var __exportAll = (all, no_symbols) => {
|
|
10
11
|
let target = {};
|
|
11
12
|
for (var name in all) __defProp(target, name, {
|
|
@@ -36,11 +37,11 @@ let chalk = require("chalk");
|
|
|
36
37
|
chalk = __toESM(chalk, 1);
|
|
37
38
|
let axios = require("axios");
|
|
38
39
|
axios = __toESM(axios, 1);
|
|
39
|
-
let _nsshunt_stsfhirclient = require("@nsshunt/stsfhirclient");
|
|
40
40
|
let node_http = require("node:http");
|
|
41
41
|
node_http = __toESM(node_http, 1);
|
|
42
42
|
let node_https = require("node:https");
|
|
43
43
|
node_https = __toESM(node_https, 1);
|
|
44
|
+
let _nsshunt_stsfhirclient = require("@nsshunt/stsfhirclient");
|
|
44
45
|
//#region node_modules/http-status-codes/build/es/status-codes.js
|
|
45
46
|
var StatusCodes;
|
|
46
47
|
(function(StatusCodes) {
|
|
@@ -493,14 +494,14 @@ var TestCaseFhirBase = class {
|
|
|
493
494
|
if (axiosError.response.status === StatusCodes.UNAUTHORIZED) {
|
|
494
495
|
this.runner.instrumentData.authenticationErrorCount++;
|
|
495
496
|
this.Error(chalk.default.red(`TestCaseFhirBase:HandleError(): [${this._id}] UNAUTHORIZED - Reset Access Token`));
|
|
496
|
-
this.runnerExecutionWorker.ResetAccessToken();
|
|
497
|
+
this.runnerExecutionWorker.authHelper.ResetAccessToken();
|
|
497
498
|
return true;
|
|
498
499
|
}
|
|
499
500
|
} else this.Error(chalk.default.red(`TestCaseFhirBase:HandleError(): [${this._id}] AXIOS Error = [${axiosError}]`));
|
|
500
501
|
} else if (error.message === "UNAUTHORIZED") {
|
|
501
502
|
this.runner.instrumentData.authenticationErrorCount++;
|
|
502
503
|
this.Error(chalk.default.red(`TestCaseFhirBase:HandleError(): [${this._id}] UNAUTHORIZED - Reset Access Token`));
|
|
503
|
-
this.runnerExecutionWorker.ResetAccessToken();
|
|
504
|
+
this.runnerExecutionWorker.authHelper.ResetAccessToken();
|
|
504
505
|
return true;
|
|
505
506
|
}
|
|
506
507
|
return false;
|
|
@@ -727,9 +728,9 @@ var TestCaseFhirQueryBase = class extends TestCaseFhirBase {
|
|
|
727
728
|
var TestCaseFhir01 = class extends TestCaseFhirQueryBase {
|
|
728
729
|
PerformExecuteQuery = async () => {
|
|
729
730
|
const __snapshot1 = performance.now();
|
|
730
|
-
await this.runnerExecutionWorker.GetAccessToken();
|
|
731
|
+
await this.runnerExecutionWorker.authHelper.GetAccessToken();
|
|
731
732
|
this._CheckOutputLongDurationError(__snapshot1, "await this.GetAccessToken()");
|
|
732
|
-
this.runnerExecutionWorker.ResetAccessToken();
|
|
733
|
+
this.runnerExecutionWorker.authHelper.ResetAccessToken();
|
|
733
734
|
return null;
|
|
734
735
|
};
|
|
735
736
|
};
|
|
@@ -36057,78 +36058,99 @@ var ResourceDataGenerator = class {
|
|
|
36057
36058
|
};
|
|
36058
36059
|
};
|
|
36059
36060
|
//#endregion
|
|
36060
|
-
//#region src/libmodule/
|
|
36061
|
-
var
|
|
36061
|
+
//#region src/libmodule/lockHelper.ts
|
|
36062
|
+
var import_tiny_emitter = (/* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
36063
|
+
function E() {}
|
|
36064
|
+
E.prototype = {
|
|
36065
|
+
on: function(name, callback, ctx) {
|
|
36066
|
+
var e = this.e || (this.e = {});
|
|
36067
|
+
(e[name] || (e[name] = [])).push({
|
|
36068
|
+
fn: callback,
|
|
36069
|
+
ctx
|
|
36070
|
+
});
|
|
36071
|
+
return this;
|
|
36072
|
+
},
|
|
36073
|
+
once: function(name, callback, ctx) {
|
|
36074
|
+
var self = this;
|
|
36075
|
+
function listener() {
|
|
36076
|
+
self.off(name, listener);
|
|
36077
|
+
callback.apply(ctx, arguments);
|
|
36078
|
+
}
|
|
36079
|
+
listener._ = callback;
|
|
36080
|
+
return this.on(name, listener, ctx);
|
|
36081
|
+
},
|
|
36082
|
+
emit: function(name) {
|
|
36083
|
+
var data = [].slice.call(arguments, 1);
|
|
36084
|
+
var evtArr = ((this.e || (this.e = {}))[name] || []).slice();
|
|
36085
|
+
var i = 0;
|
|
36086
|
+
var len = evtArr.length;
|
|
36087
|
+
for (; i < len; i++) evtArr[i].fn.apply(evtArr[i].ctx, data);
|
|
36088
|
+
return this;
|
|
36089
|
+
},
|
|
36090
|
+
off: function(name, callback) {
|
|
36091
|
+
var e = this.e || (this.e = {});
|
|
36092
|
+
var evts = e[name];
|
|
36093
|
+
var liveEvents = [];
|
|
36094
|
+
if (evts && callback) {
|
|
36095
|
+
for (var i = 0, len = evts.length; i < len; i++) if (evts[i].fn !== callback && evts[i].fn._ !== callback) liveEvents.push(evts[i]);
|
|
36096
|
+
}
|
|
36097
|
+
liveEvents.length ? e[name] = liveEvents : delete e[name];
|
|
36098
|
+
return this;
|
|
36099
|
+
}
|
|
36100
|
+
};
|
|
36101
|
+
module.exports = E;
|
|
36102
|
+
module.exports.TinyEmitter = E;
|
|
36103
|
+
})))();
|
|
36104
|
+
var LockHelper = class {
|
|
36105
|
+
_onHoldKeys = {};
|
|
36106
|
+
GetOnHold = (holdKey) => {
|
|
36107
|
+
if (this._onHoldKeys[holdKey]) return true;
|
|
36108
|
+
return false;
|
|
36109
|
+
};
|
|
36110
|
+
WaitOnHold = async (holdKey, timeout) => {
|
|
36111
|
+
const start = performance.now();
|
|
36112
|
+
for (;;) {
|
|
36113
|
+
if (this._onHoldKeys[holdKey]) await (0, _nsshunt_stsutils.Sleep)(100);
|
|
36114
|
+
else break;
|
|
36115
|
+
if (performance.now() - start > timeout) throw new Error(`WorkerFhirTestCases:WaitOnHold(): Timeout: [${timeout}] reached.`);
|
|
36116
|
+
}
|
|
36117
|
+
return true;
|
|
36118
|
+
};
|
|
36119
|
+
SetOnHold = (holdKey) => {
|
|
36120
|
+
this._onHoldKeys[holdKey] = true;
|
|
36121
|
+
};
|
|
36122
|
+
ReleaseOnHold = (holdKey) => {
|
|
36123
|
+
delete this._onHoldKeys[holdKey];
|
|
36124
|
+
};
|
|
36125
|
+
};
|
|
36126
|
+
//#endregion
|
|
36127
|
+
//#region src/libmodule/authHelper.ts
|
|
36128
|
+
var AuthHelper = class extends import_tiny_emitter.TinyEmitter {
|
|
36062
36129
|
_options;
|
|
36063
|
-
_resourceDataGenerator;
|
|
36064
|
-
fhirClient = void 0;
|
|
36065
36130
|
_id = crypto.randomUUID();
|
|
36066
|
-
|
|
36131
|
+
_lockHelper = new LockHelper();
|
|
36067
36132
|
#accesssToken = null;
|
|
36068
36133
|
_authMaxTimeout = 5e3;
|
|
36069
36134
|
#originRegex = /^(api:\/\/\w+)/;
|
|
36070
36135
|
#authAgentManager;
|
|
36071
|
-
restFhirClient = null;
|
|
36072
36136
|
logPrefix = `WorkerFhirTestCases:[${this._id}]:`;
|
|
36073
36137
|
constructor(options) {
|
|
36074
36138
|
super();
|
|
36075
36139
|
this._options = options;
|
|
36076
|
-
this._resourceDataGenerator = new ResourceDataGenerator();
|
|
36077
36140
|
this.#authAgentManager = this.GetAuthAgentManager();
|
|
36078
36141
|
}
|
|
36079
36142
|
Warning = (message) => {
|
|
36080
|
-
this.logger.warn(`${this.logPrefix}${message}`);
|
|
36143
|
+
this._options.logger.warn(`${this.logPrefix}${message}`);
|
|
36081
36144
|
};
|
|
36082
36145
|
Error = (message) => {
|
|
36083
|
-
this.logger.error(`${this.logPrefix}${message}`);
|
|
36146
|
+
this._options.logger.error(`${this.logPrefix}${message}`);
|
|
36084
36147
|
};
|
|
36085
36148
|
Debug = (message) => {
|
|
36086
|
-
this.logger.debug(`${this.logPrefix}${message}`);
|
|
36149
|
+
this._options.logger.debug(`${this.logPrefix}${message}`);
|
|
36087
36150
|
};
|
|
36088
36151
|
get id() {
|
|
36089
36152
|
return this._id;
|
|
36090
36153
|
}
|
|
36091
|
-
get resourceDataGenerator() {
|
|
36092
|
-
return this._resourceDataGenerator;
|
|
36093
|
-
}
|
|
36094
|
-
get logger() {
|
|
36095
|
-
return this._options.logger;
|
|
36096
|
-
}
|
|
36097
|
-
CreateAsyncRunner = async (testRunnerTelemetryPayload) => {
|
|
36098
|
-
return AsyncRunnerFactory.CreateAsyncRunner(this, testRunnerTelemetryPayload);
|
|
36099
|
-
};
|
|
36100
|
-
async ProcessPreTerminateWorkerMessage(messagePayload) {
|
|
36101
|
-
this.logger.debug(chalk.default.rgb(220, 100, 0)(`ProcessPreTerminateWorkerMessage(): [${JSON.stringify(messagePayload, null, 2)}]`));
|
|
36102
|
-
if (this.fhirClient) {
|
|
36103
|
-
this.logger.debug(chalk.default.rgb(220, 100, 0)(`ProcessPreTerminateWorkerMessage(): ResetSocket()`));
|
|
36104
|
-
this.fhirClient.ResetSocket();
|
|
36105
|
-
this.fhirClient = void 0;
|
|
36106
|
-
}
|
|
36107
|
-
await (0, _nsshunt_stsutils.Sleep)(250);
|
|
36108
|
-
return {
|
|
36109
|
-
originalMessage: { ...messagePayload },
|
|
36110
|
-
myresponsepreterminate: `I got: [${JSON.stringify(messagePayload.payload.data)}]`
|
|
36111
|
-
};
|
|
36112
|
-
}
|
|
36113
|
-
GetOnHold = (holdKey) => {
|
|
36114
|
-
if (this._onHoldKeys[holdKey]) return true;
|
|
36115
|
-
return false;
|
|
36116
|
-
};
|
|
36117
|
-
WaitOnHold = async (holdKey, timeout) => {
|
|
36118
|
-
const start = performance.now();
|
|
36119
|
-
for (;;) {
|
|
36120
|
-
if (this._onHoldKeys[holdKey]) await (0, _nsshunt_stsutils.Sleep)(100);
|
|
36121
|
-
else break;
|
|
36122
|
-
if (performance.now() - start > timeout) throw new Error(`WorkerFhirTestCases:WaitOnHold(): Timeout: [${timeout}] reached.`);
|
|
36123
|
-
}
|
|
36124
|
-
return true;
|
|
36125
|
-
};
|
|
36126
|
-
SetOnHold = (holdKey) => {
|
|
36127
|
-
this._onHoldKeys[holdKey] = true;
|
|
36128
|
-
};
|
|
36129
|
-
ReleaseOnHold = (holdKey) => {
|
|
36130
|
-
delete this._onHoldKeys[holdKey];
|
|
36131
|
-
};
|
|
36132
36154
|
defaultAgentOptions = {
|
|
36133
36155
|
keepAlive: true,
|
|
36134
36156
|
maxSockets: 10,
|
|
@@ -36184,9 +36206,6 @@ var WorkerFhirTestCases = class extends _nsshunt_stsrunnerframework.AbstractRunn
|
|
|
36184
36206
|
});
|
|
36185
36207
|
return agentManager;
|
|
36186
36208
|
};
|
|
36187
|
-
GetFhirAgentManager = () => {
|
|
36188
|
-
return this.GetAgentManager(this._options.fhirOptions.stsfhiragentOptions);
|
|
36189
|
-
};
|
|
36190
36209
|
GetAuthAgentManager = () => {
|
|
36191
36210
|
return this.GetAgentManager(this._options.authOptions.asagentoptions);
|
|
36192
36211
|
};
|
|
@@ -36242,14 +36261,14 @@ var WorkerFhirTestCases = class extends _nsshunt_stsrunnerframework.AbstractRunn
|
|
|
36242
36261
|
retryJitterMs: 150,
|
|
36243
36262
|
maxRetryDurationMs: 5e3,
|
|
36244
36263
|
onRetryAttempt: (attempt, error, delayMs) => {
|
|
36245
|
-
this.
|
|
36246
|
-
this.
|
|
36264
|
+
this.emit("authenticationErrorCount", 1);
|
|
36265
|
+
this.emit("authenticationRetryCount", 1);
|
|
36247
36266
|
const message = `GetAPITokenFromAuthServerUsingScope(): [${this._id}] Retry #${attempt} after ${delayMs}ms due to ${error.code || error.response?.status}`;
|
|
36248
36267
|
this.Warning(message);
|
|
36249
|
-
this.
|
|
36268
|
+
this.emit("logMessage", chalk.default.red(message));
|
|
36250
36269
|
}
|
|
36251
36270
|
})(url, axiosConfig.config);
|
|
36252
|
-
this.
|
|
36271
|
+
this.emit("authenticationCount", 1);
|
|
36253
36272
|
stage = "7";
|
|
36254
36273
|
if (retVal.status) {
|
|
36255
36274
|
if (retVal.status !== 200) this.Warning(chalk.default.magenta(`GetAPITokenFromAuthServerUsingScope(): [${this._id}] Invalid response from server: [${retVal.status}]`));
|
|
@@ -36287,11 +36306,11 @@ var WorkerFhirTestCases = class extends _nsshunt_stsrunnerframework.AbstractRunn
|
|
|
36287
36306
|
if (this.#accesssToken) return this.#accesssToken;
|
|
36288
36307
|
const lockKey = "GetAccessToken";
|
|
36289
36308
|
const lockTimeout = 6e4;
|
|
36290
|
-
if (this.GetOnHold(lockKey) === true) {
|
|
36309
|
+
if (this._lockHelper.GetOnHold(lockKey) === true) {
|
|
36291
36310
|
this.Debug(chalk.default.magenta(`GetAccessToken(): accesssToken does not exist - some other client setting up the new accesssToken (on hold/lock), lock key: [${lockKey}] - waiting ...`));
|
|
36292
36311
|
try {
|
|
36293
36312
|
const miniStart = performance.now();
|
|
36294
|
-
await this.WaitOnHold(lockKey, lockTimeout);
|
|
36313
|
+
await this._lockHelper.WaitOnHold(lockKey, lockTimeout);
|
|
36295
36314
|
this.Debug(chalk.default.yellow(`GetAccessToken(): hold (lock) released after: [${performance.now() - miniStart}ms], lock key: [${lockKey}]`));
|
|
36296
36315
|
if (this.#accesssToken) {
|
|
36297
36316
|
this.Debug(chalk.default.green(`GetAccessToken(): Getting existing accesssToken (post hold release), lock key: [${lockKey}]`));
|
|
@@ -36306,7 +36325,7 @@ var WorkerFhirTestCases = class extends _nsshunt_stsrunnerframework.AbstractRunn
|
|
|
36306
36325
|
}
|
|
36307
36326
|
this.Debug(chalk.default.yellow(`GetAccessToken(): accesssToken does not exist - setting up new accesssToken`));
|
|
36308
36327
|
this.Debug(chalk.default.yellow(`GetAccessToken(): setting hold (lock), lock key: [${lockKey}]`));
|
|
36309
|
-
this.SetOnHold(lockKey);
|
|
36328
|
+
this._lockHelper.SetOnHold(lockKey);
|
|
36310
36329
|
timeout = setTimeout(() => {
|
|
36311
36330
|
this.Warning(chalk.default.magenta(`GetAccessToken(): Timeout: [${this._authMaxTimeout}] exceeded for getting access token ...`));
|
|
36312
36331
|
}, this._authMaxTimeout);
|
|
@@ -36322,7 +36341,7 @@ var WorkerFhirTestCases = class extends _nsshunt_stsrunnerframework.AbstractRunn
|
|
|
36322
36341
|
const totalTime = performance.now() - start;
|
|
36323
36342
|
if (totalTime > this._authMaxTimeout) this.Warning(chalk.default.magenta(`GetAccessToken(): The total time for getting the access token: [${totalTime}]`));
|
|
36324
36343
|
this.#accesssToken = workingAaccesssToken;
|
|
36325
|
-
this.ReleaseOnHold(lockKey);
|
|
36344
|
+
this._lockHelper.ReleaseOnHold(lockKey);
|
|
36326
36345
|
this.Debug(chalk.default.yellow(`GetAccessToken(): release hold (lock) Time taken for get access token: [${performance.now() - start}ms]`));
|
|
36327
36346
|
return this.#accesssToken;
|
|
36328
36347
|
} catch (error) {
|
|
@@ -36360,16 +36379,100 @@ var WorkerFhirTestCases = class extends _nsshunt_stsrunnerframework.AbstractRunn
|
|
|
36360
36379
|
ResetAccessToken = () => {
|
|
36361
36380
|
this.#accesssToken = null;
|
|
36362
36381
|
};
|
|
36382
|
+
};
|
|
36383
|
+
//#endregion
|
|
36384
|
+
//#region src/libmodule/clientHelper.ts
|
|
36385
|
+
var ClientHelper = class extends import_tiny_emitter.TinyEmitter {
|
|
36386
|
+
_options;
|
|
36387
|
+
fhirClient = void 0;
|
|
36388
|
+
_id = crypto.randomUUID();
|
|
36389
|
+
_lockHelper = new LockHelper();
|
|
36390
|
+
restFhirClient = null;
|
|
36391
|
+
logPrefix = `WorkerFhirTestCases:[${this._id}]:`;
|
|
36392
|
+
constructor(options) {
|
|
36393
|
+
super();
|
|
36394
|
+
this._options = options;
|
|
36395
|
+
}
|
|
36396
|
+
Warning = (message) => {
|
|
36397
|
+
this._options.logger.warn(`${this.logPrefix}${message}`);
|
|
36398
|
+
};
|
|
36399
|
+
Error = (message) => {
|
|
36400
|
+
this._options.logger.error(`${this.logPrefix}${message}`);
|
|
36401
|
+
};
|
|
36402
|
+
Debug = (message) => {
|
|
36403
|
+
this._options.logger.debug(`${this.logPrefix}${message}`);
|
|
36404
|
+
};
|
|
36405
|
+
get id() {
|
|
36406
|
+
return this._id;
|
|
36407
|
+
}
|
|
36408
|
+
defaultAgentOptions = {
|
|
36409
|
+
keepAlive: true,
|
|
36410
|
+
maxSockets: 10,
|
|
36411
|
+
maxTotalSockets: 20,
|
|
36412
|
+
maxFreeSockets: 10,
|
|
36413
|
+
timeout: 6e4,
|
|
36414
|
+
rejectUnauthorized: false
|
|
36415
|
+
};
|
|
36416
|
+
stressTestAgentOptions = {
|
|
36417
|
+
keepAlive: true,
|
|
36418
|
+
maxSockets: 200,
|
|
36419
|
+
maxTotalSockets: 500,
|
|
36420
|
+
maxFreeSockets: 50,
|
|
36421
|
+
timeout: 3e4,
|
|
36422
|
+
rejectUnauthorized: false
|
|
36423
|
+
};
|
|
36424
|
+
stressTestExtremeAgentOptions = {
|
|
36425
|
+
keepAlive: true,
|
|
36426
|
+
maxSockets: 500,
|
|
36427
|
+
maxTotalSockets: 1e3,
|
|
36428
|
+
maxFreeSockets: 500,
|
|
36429
|
+
timeout: 3e4,
|
|
36430
|
+
rejectUnauthorized: false
|
|
36431
|
+
};
|
|
36432
|
+
GetAgentManager = (testingAgentOptions) => {
|
|
36433
|
+
let agentManager = void 0;
|
|
36434
|
+
let agentOptions = void 0;
|
|
36435
|
+
switch (testingAgentOptions.nodeAgentMode) {
|
|
36436
|
+
case "no-agent": break;
|
|
36437
|
+
case "custom-agent-options":
|
|
36438
|
+
if (testingAgentOptions.nodeAgentCustomOptions) agentOptions = { ...testingAgentOptions.nodeAgentCustomOptions };
|
|
36439
|
+
else agentOptions = { ...this.defaultAgentOptions };
|
|
36440
|
+
break;
|
|
36441
|
+
case "default-agent-options":
|
|
36442
|
+
agentOptions = { ...this.defaultAgentOptions };
|
|
36443
|
+
break;
|
|
36444
|
+
case "stress-test-agent-options":
|
|
36445
|
+
agentOptions = { ...this.stressTestAgentOptions };
|
|
36446
|
+
break;
|
|
36447
|
+
case "stress-test-extreme-agent-options":
|
|
36448
|
+
agentOptions = { ...this.stressTestExtremeAgentOptions };
|
|
36449
|
+
break;
|
|
36450
|
+
default: throw new Error(`TestCaseFhirBase:GetAgentManager(): [${this._id}] unknown nodeAgentMode: [${testingAgentOptions.nodeAgentMode}]`);
|
|
36451
|
+
}
|
|
36452
|
+
if (agentOptions) agentManager = (0, _nsshunt_stsutils.createAgentManager)({
|
|
36453
|
+
agentOptions,
|
|
36454
|
+
httpAgentFactory(options) {
|
|
36455
|
+
return new node_http.default.Agent(options);
|
|
36456
|
+
},
|
|
36457
|
+
httpsAgentFactory(options) {
|
|
36458
|
+
return new node_https.default.Agent(options);
|
|
36459
|
+
}
|
|
36460
|
+
});
|
|
36461
|
+
return agentManager;
|
|
36462
|
+
};
|
|
36463
|
+
GetFhirAgentManager = () => {
|
|
36464
|
+
return this.GetAgentManager(this._options.fhirOptions.stsfhiragentOptions);
|
|
36465
|
+
};
|
|
36363
36466
|
GetFhirSocketClient = async () => {
|
|
36364
36467
|
try {
|
|
36365
36468
|
if (this.fhirClient) return this.fhirClient;
|
|
36366
36469
|
const lockKey = "GetFhirSocketClient";
|
|
36367
36470
|
const lockTimeout = 6e4;
|
|
36368
|
-
if (this.GetOnHold(lockKey) === true) {
|
|
36471
|
+
if (this._lockHelper.GetOnHold(lockKey) === true) {
|
|
36369
36472
|
this.Debug(chalk.default.magenta(`GetFhirSocketClient(): fhir client does not exist - some other client setting up the new client (on hold/lock), lock key: [${lockKey}] - waiting ...`));
|
|
36370
36473
|
try {
|
|
36371
36474
|
const start = performance.now();
|
|
36372
|
-
await this.WaitOnHold(lockKey, lockTimeout);
|
|
36475
|
+
await this._lockHelper.WaitOnHold(lockKey, lockTimeout);
|
|
36373
36476
|
this.Debug(chalk.default.yellow(`GetFhirSocketClient(): hold (lock) released after: [${performance.now() - start}ms], lock key: [${lockKey}]`));
|
|
36374
36477
|
if (this.fhirClient) {
|
|
36375
36478
|
this.Debug(chalk.default.green(`GetFhirSocketClient(): Getting existing fhir client (post hold release), lock key: [${lockKey}]`));
|
|
@@ -36385,7 +36488,7 @@ var WorkerFhirTestCases = class extends _nsshunt_stsrunnerframework.AbstractRunn
|
|
|
36385
36488
|
const start = performance.now();
|
|
36386
36489
|
this.Debug(chalk.default.yellow(`GetFhirSocketClient(): fhir client does not exist - setting up new client`));
|
|
36387
36490
|
this.Debug(chalk.default.yellow(`GetFhirSocketClient(): setting hold (lock), lock key: [${lockKey}]`));
|
|
36388
|
-
this.SetOnHold(lockKey);
|
|
36491
|
+
this._lockHelper.SetOnHold(lockKey);
|
|
36389
36492
|
const fhirOptions = this._options.fhirOptions;
|
|
36390
36493
|
const options = {
|
|
36391
36494
|
fhirServerEndpoint: fhirOptions.stsfhirserverendpoint,
|
|
@@ -36397,18 +36500,18 @@ var WorkerFhirTestCases = class extends _nsshunt_stsrunnerframework.AbstractRunn
|
|
|
36397
36500
|
baseUrl: fhirOptions.stsfhirbaseurl,
|
|
36398
36501
|
agentManager: this.GetFhirAgentManager(),
|
|
36399
36502
|
joinRooms: [],
|
|
36400
|
-
logger: this.logger,
|
|
36503
|
+
logger: this._options.logger,
|
|
36401
36504
|
verboseLogging: true,
|
|
36402
|
-
GetConnectionAccessToken: this.GetAccessTokenForSocketClientAccess,
|
|
36403
|
-
GetAccessToken: this.GetAccessToken
|
|
36505
|
+
GetConnectionAccessToken: this._options.authHelper.GetAccessTokenForSocketClientAccess,
|
|
36506
|
+
GetAccessToken: this._options.authHelper.GetAccessToken
|
|
36404
36507
|
};
|
|
36405
36508
|
let workingFhirClient;
|
|
36406
|
-
if (this._options.
|
|
36509
|
+
if (this._options.fhirOptions.stsfhirsocketclientmode === "socket-client-all-in-one") workingFhirClient = new _nsshunt_stsfhirclient.FhirSocketClientAllInOne("FhirSocketClient", options);
|
|
36407
36510
|
else workingFhirClient = new _nsshunt_stsfhirclient.FhirSocketClientIndividual("FhirSocketClient", options);
|
|
36408
36511
|
await workingFhirClient.WaitForSocketConnected();
|
|
36409
36512
|
this.Debug(chalk.default.yellow(`GetFhirSocketClient(): setting fhir client into object`));
|
|
36410
36513
|
this.fhirClient = workingFhirClient;
|
|
36411
|
-
this.ReleaseOnHold(lockKey);
|
|
36514
|
+
this._lockHelper.ReleaseOnHold(lockKey);
|
|
36412
36515
|
this.Debug(chalk.default.yellow(`GetFhirSocketClient(): release hold (lock) Time taken for socket connection and set object: [${performance.now() - start}ms], lock key: [${lockKey}]`));
|
|
36413
36516
|
return this.fhirClient;
|
|
36414
36517
|
} catch (error) {
|
|
@@ -36419,20 +36522,18 @@ var WorkerFhirTestCases = class extends _nsshunt_stsrunnerframework.AbstractRunn
|
|
|
36419
36522
|
GetRESTClient = async () => {
|
|
36420
36523
|
if (this.restFhirClient) return this.restFhirClient;
|
|
36421
36524
|
const onRetryAttempt = (attempt, error, delayMs) => {
|
|
36422
|
-
this._options.runner.instrumentData.errorCount++;
|
|
36423
|
-
this._options.runner.instrumentData.requestCount++;
|
|
36424
36525
|
const message = `TestCaseFhirBase:onRetryAttempt(): [${this._id}] Retry #${attempt} after ${delayMs}ms due to ${error.code || error.response?.status}`;
|
|
36425
36526
|
this.Warning(message);
|
|
36426
|
-
this.
|
|
36527
|
+
this.emit("retry", message);
|
|
36427
36528
|
};
|
|
36428
36529
|
const fhirOptions = this._options.fhirOptions;
|
|
36429
36530
|
const fhirRESTClient = new _nsshunt_stsfhirclient.FhirRESTClient({
|
|
36430
|
-
GetAccessToken: this.GetAccessToken,
|
|
36531
|
+
GetAccessToken: this._options.authHelper.GetAccessToken,
|
|
36431
36532
|
user: "USR_user01@stsmda.com.au",
|
|
36432
36533
|
endpoint: fhirOptions.stsfhirserverendpoint,
|
|
36433
36534
|
stsfhirapiroot: fhirOptions.stsfhirapiroot,
|
|
36434
36535
|
stsfhirport: fhirOptions.stsfhirport,
|
|
36435
|
-
logger: this.logger,
|
|
36536
|
+
logger: this._options.logger,
|
|
36436
36537
|
agentManager: this.GetFhirAgentManager(),
|
|
36437
36538
|
onRetryAttempt
|
|
36438
36539
|
});
|
|
@@ -36441,12 +36542,136 @@ var WorkerFhirTestCases = class extends _nsshunt_stsrunnerframework.AbstractRunn
|
|
|
36441
36542
|
};
|
|
36442
36543
|
GetClient = async () => {
|
|
36443
36544
|
let client;
|
|
36444
|
-
if (this._options.
|
|
36545
|
+
if (this._options.fhirOptions.stsfhirsocketclientmode === "no-socket-client") client = await this.GetRESTClient();
|
|
36445
36546
|
else client = await this.GetFhirSocketClient();
|
|
36446
36547
|
return client;
|
|
36447
36548
|
};
|
|
36448
36549
|
};
|
|
36449
36550
|
//#endregion
|
|
36551
|
+
//#region src/libmodule/workerFhirTestCases.ts
|
|
36552
|
+
var WorkerFhirTestCases = class extends _nsshunt_stsrunnerframework.AbstractRunnerExecutionWorker {
|
|
36553
|
+
_options;
|
|
36554
|
+
_resourceDataGenerator;
|
|
36555
|
+
fhirClient = void 0;
|
|
36556
|
+
_id = crypto.randomUUID();
|
|
36557
|
+
_clientHelper;
|
|
36558
|
+
_authHelper;
|
|
36559
|
+
restFhirClient = null;
|
|
36560
|
+
logPrefix = `WorkerFhirTestCases:[${this._id}]:`;
|
|
36561
|
+
constructor(options) {
|
|
36562
|
+
super();
|
|
36563
|
+
this._options = options;
|
|
36564
|
+
this._resourceDataGenerator = new ResourceDataGenerator();
|
|
36565
|
+
this._authHelper = new AuthHelper({
|
|
36566
|
+
authOptions: options.authOptions,
|
|
36567
|
+
logger: options.logger
|
|
36568
|
+
});
|
|
36569
|
+
this._clientHelper = new ClientHelper({
|
|
36570
|
+
authHelper: this._authHelper,
|
|
36571
|
+
logger: options.logger,
|
|
36572
|
+
fhirOptions: options.fhirOptions
|
|
36573
|
+
});
|
|
36574
|
+
}
|
|
36575
|
+
get authHelper() {
|
|
36576
|
+
return this._authHelper;
|
|
36577
|
+
}
|
|
36578
|
+
Warning = (message) => {
|
|
36579
|
+
this.logger.warn(`${this.logPrefix}${message}`);
|
|
36580
|
+
};
|
|
36581
|
+
Error = (message) => {
|
|
36582
|
+
this.logger.error(`${this.logPrefix}${message}`);
|
|
36583
|
+
};
|
|
36584
|
+
Debug = (message) => {
|
|
36585
|
+
this.logger.debug(`${this.logPrefix}${message}`);
|
|
36586
|
+
};
|
|
36587
|
+
get id() {
|
|
36588
|
+
return this._id;
|
|
36589
|
+
}
|
|
36590
|
+
get resourceDataGenerator() {
|
|
36591
|
+
return this._resourceDataGenerator;
|
|
36592
|
+
}
|
|
36593
|
+
get logger() {
|
|
36594
|
+
return this._options.logger;
|
|
36595
|
+
}
|
|
36596
|
+
CreateAsyncRunner = async (testRunnerTelemetryPayload) => {
|
|
36597
|
+
return AsyncRunnerFactory.CreateAsyncRunner(this, testRunnerTelemetryPayload);
|
|
36598
|
+
};
|
|
36599
|
+
async ProcessPreTerminateWorkerMessage(messagePayload) {
|
|
36600
|
+
this.logger.debug(chalk.default.rgb(220, 100, 0)(`ProcessPreTerminateWorkerMessage(): [${JSON.stringify(messagePayload, null, 2)}]`));
|
|
36601
|
+
if (this.fhirClient) {
|
|
36602
|
+
this.logger.debug(chalk.default.rgb(220, 100, 0)(`ProcessPreTerminateWorkerMessage(): ResetSocket()`));
|
|
36603
|
+
this.fhirClient.ResetSocket();
|
|
36604
|
+
this.fhirClient = void 0;
|
|
36605
|
+
}
|
|
36606
|
+
await (0, _nsshunt_stsutils.Sleep)(250);
|
|
36607
|
+
return {
|
|
36608
|
+
originalMessage: { ...messagePayload },
|
|
36609
|
+
myresponsepreterminate: `I got: [${JSON.stringify(messagePayload.payload.data)}]`
|
|
36610
|
+
};
|
|
36611
|
+
}
|
|
36612
|
+
defaultAgentOptions = {
|
|
36613
|
+
keepAlive: true,
|
|
36614
|
+
maxSockets: 10,
|
|
36615
|
+
maxTotalSockets: 20,
|
|
36616
|
+
maxFreeSockets: 10,
|
|
36617
|
+
timeout: 6e4,
|
|
36618
|
+
rejectUnauthorized: false
|
|
36619
|
+
};
|
|
36620
|
+
stressTestAgentOptions = {
|
|
36621
|
+
keepAlive: true,
|
|
36622
|
+
maxSockets: 200,
|
|
36623
|
+
maxTotalSockets: 500,
|
|
36624
|
+
maxFreeSockets: 50,
|
|
36625
|
+
timeout: 3e4,
|
|
36626
|
+
rejectUnauthorized: false
|
|
36627
|
+
};
|
|
36628
|
+
stressTestExtremeAgentOptions = {
|
|
36629
|
+
keepAlive: true,
|
|
36630
|
+
maxSockets: 500,
|
|
36631
|
+
maxTotalSockets: 1e3,
|
|
36632
|
+
maxFreeSockets: 500,
|
|
36633
|
+
timeout: 3e4,
|
|
36634
|
+
rejectUnauthorized: false
|
|
36635
|
+
};
|
|
36636
|
+
GetAgentManager = (testingAgentOptions) => {
|
|
36637
|
+
let agentManager = void 0;
|
|
36638
|
+
let agentOptions = void 0;
|
|
36639
|
+
switch (testingAgentOptions.nodeAgentMode) {
|
|
36640
|
+
case "no-agent": break;
|
|
36641
|
+
case "custom-agent-options":
|
|
36642
|
+
if (testingAgentOptions.nodeAgentCustomOptions) agentOptions = { ...testingAgentOptions.nodeAgentCustomOptions };
|
|
36643
|
+
else agentOptions = { ...this.defaultAgentOptions };
|
|
36644
|
+
break;
|
|
36645
|
+
case "default-agent-options":
|
|
36646
|
+
agentOptions = { ...this.defaultAgentOptions };
|
|
36647
|
+
break;
|
|
36648
|
+
case "stress-test-agent-options":
|
|
36649
|
+
agentOptions = { ...this.stressTestAgentOptions };
|
|
36650
|
+
break;
|
|
36651
|
+
case "stress-test-extreme-agent-options":
|
|
36652
|
+
agentOptions = { ...this.stressTestExtremeAgentOptions };
|
|
36653
|
+
break;
|
|
36654
|
+
default: throw new Error(`TestCaseFhirBase:GetAgentManager(): [${this._id}] unknown nodeAgentMode: [${testingAgentOptions.nodeAgentMode}]`);
|
|
36655
|
+
}
|
|
36656
|
+
if (agentOptions) agentManager = (0, _nsshunt_stsutils.createAgentManager)({
|
|
36657
|
+
agentOptions,
|
|
36658
|
+
httpAgentFactory(options) {
|
|
36659
|
+
return new node_http.default.Agent(options);
|
|
36660
|
+
},
|
|
36661
|
+
httpsAgentFactory(options) {
|
|
36662
|
+
return new node_https.default.Agent(options);
|
|
36663
|
+
}
|
|
36664
|
+
});
|
|
36665
|
+
return agentManager;
|
|
36666
|
+
};
|
|
36667
|
+
GetFhirAgentManager = () => {
|
|
36668
|
+
return this.GetAgentManager(this._options.fhirOptions.stsfhiragentOptions);
|
|
36669
|
+
};
|
|
36670
|
+
GetClient = async () => {
|
|
36671
|
+
return this._clientHelper.GetClient();
|
|
36672
|
+
};
|
|
36673
|
+
};
|
|
36674
|
+
//#endregion
|
|
36450
36675
|
exports.WorkerFhirTestCases = WorkerFhirTestCases;
|
|
36451
36676
|
|
|
36452
36677
|
//# sourceMappingURL=ststestrunner.cjs.map
|