@nsshunt/ststestrunner 1.1.9 → 1.1.11

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 (67) hide show
  1. package/dist/ststestrunner.cjs +60 -857
  2. package/dist/ststestrunner.cjs.map +1 -1
  3. package/dist/ststestrunner.mjs +61 -858
  4. package/dist/ststestrunner.mjs.map +1 -1
  5. package/package.json +3 -10
  6. package/types/commonTypes.d.ts +1 -65
  7. package/types/commonTypes.d.ts.map +1 -1
  8. package/types/index.d.ts +1 -2
  9. package/types/index.d.ts.map +1 -1
  10. package/types/libmodule/asyncRunnerFactory.d.ts +5 -0
  11. package/types/libmodule/asyncRunnerFactory.d.ts.map +1 -0
  12. package/types/libmodule/commonTypes.d.ts +11 -0
  13. package/types/libmodule/commonTypes.d.ts.map +1 -0
  14. package/types/libmodule/resourceDataGenerator.d.ts +7 -0
  15. package/types/libmodule/resourceDataGenerator.d.ts.map +1 -0
  16. package/types/libmodule/testCaseFhir01.d.ts.map +1 -0
  17. package/types/libmodule/testCaseFhir02.d.ts.map +1 -0
  18. package/types/libmodule/testCaseFhir03.d.ts.map +1 -0
  19. package/types/libmodule/testCaseFhir04.d.ts.map +1 -0
  20. package/types/libmodule/testCaseFhir05.d.ts.map +1 -0
  21. package/types/libmodule/testCaseFhir06.d.ts.map +1 -0
  22. package/types/libmodule/testCaseFhir07.d.ts.map +1 -0
  23. package/types/libmodule/testCaseFhir08.d.ts.map +1 -0
  24. package/types/libmodule/testCaseFhir09.d.ts.map +1 -0
  25. package/types/libmodule/testCaseFhir10.d.ts.map +1 -0
  26. package/types/{testCaseFhirBase.d.ts → libmodule/testCaseFhirBase.d.ts} +37 -2
  27. package/types/libmodule/testCaseFhirBase.d.ts.map +1 -0
  28. package/types/libmodule/testCaseFhirQueryBase.d.ts.map +1 -0
  29. package/types/libmodule/workerFhirTestCases.d.ts +12 -0
  30. package/types/libmodule/workerFhirTestCases.d.ts.map +1 -0
  31. package/types/redisTestRunStore.d.ts +0 -71
  32. package/types/redisTestRunStore.d.ts.map +0 -1
  33. package/types/setupFhirTestResources.d.ts +0 -14
  34. package/types/setupFhirTestResources.d.ts.map +0 -1
  35. package/types/startUpDelFhirResources.d.ts +0 -18
  36. package/types/startUpDelFhirResources.d.ts.map +0 -1
  37. package/types/testCase01.d.ts +0 -21
  38. package/types/testCase01.d.ts.map +0 -1
  39. package/types/testCaseFhir01.d.ts.map +0 -1
  40. package/types/testCaseFhir02.d.ts.map +0 -1
  41. package/types/testCaseFhir03.d.ts.map +0 -1
  42. package/types/testCaseFhir04.d.ts.map +0 -1
  43. package/types/testCaseFhir05.d.ts.map +0 -1
  44. package/types/testCaseFhir06.d.ts.map +0 -1
  45. package/types/testCaseFhir07.d.ts.map +0 -1
  46. package/types/testCaseFhir08.d.ts.map +0 -1
  47. package/types/testCaseFhir09.d.ts.map +0 -1
  48. package/types/testCaseFhir10.d.ts.map +0 -1
  49. package/types/testCaseFhirBase.d.ts.map +0 -1
  50. package/types/testCaseFhirQueryBase.d.ts.map +0 -1
  51. package/types/testshutdown.d.ts +0 -21
  52. package/types/testshutdown.d.ts.map +0 -1
  53. package/types/teststartup.d.ts +0 -21
  54. package/types/teststartup.d.ts.map +0 -1
  55. package/types/workerTestCases.d.ts +0 -17
  56. package/types/workerTestCases.d.ts.map +0 -1
  57. /package/types/{testCaseFhir01.d.ts → libmodule/testCaseFhir01.d.ts} +0 -0
  58. /package/types/{testCaseFhir02.d.ts → libmodule/testCaseFhir02.d.ts} +0 -0
  59. /package/types/{testCaseFhir03.d.ts → libmodule/testCaseFhir03.d.ts} +0 -0
  60. /package/types/{testCaseFhir04.d.ts → libmodule/testCaseFhir04.d.ts} +0 -0
  61. /package/types/{testCaseFhir05.d.ts → libmodule/testCaseFhir05.d.ts} +0 -0
  62. /package/types/{testCaseFhir06.d.ts → libmodule/testCaseFhir06.d.ts} +0 -0
  63. /package/types/{testCaseFhir07.d.ts → libmodule/testCaseFhir07.d.ts} +0 -0
  64. /package/types/{testCaseFhir08.d.ts → libmodule/testCaseFhir08.d.ts} +0 -0
  65. /package/types/{testCaseFhir09.d.ts → libmodule/testCaseFhir09.d.ts} +0 -0
  66. /package/types/{testCaseFhir10.d.ts → libmodule/testCaseFhir10.d.ts} +0 -0
  67. /package/types/{testCaseFhirQueryBase.d.ts → libmodule/testCaseFhirQueryBase.d.ts} +0 -0
@@ -31,169 +31,16 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
31
31
  }) : target, mod));
32
32
  //#endregion
33
33
  let _nsshunt_stsrunnerframework = require("@nsshunt/stsrunnerframework");
34
+ let _nsshunt_stsutils = require("@nsshunt/stsutils");
34
35
  let chalk = require("chalk");
35
36
  chalk = __toESM(chalk, 1);
36
- let _nsshunt_stsutils = require("@nsshunt/stsutils");
37
37
  let _nsshunt_stsauthclient = require("@nsshunt/stsauthclient");
38
38
  let _nsshunt_stsfhirclient = require("@nsshunt/stsfhirclient");
39
39
  let node_http = require("node:http");
40
40
  node_http = __toESM(node_http, 1);
41
41
  let node_https = require("node:https");
42
42
  node_https = __toESM(node_https, 1);
43
- let node_crypto = require("node:crypto");
44
- let node_worker_threads = require("node:worker_threads");
45
- let redis = require("redis");
46
- //#region src/testCase01.ts
47
- var TestCase01 = class {
48
- #runner;
49
- #workerInstance;
50
- #logMessageDataSet = {};
51
- #publishTelemetryTimeout = null;
52
- #publishTelemetryCount = 0;
53
- #maxBufferSize = 50;
54
- #publishTelemetryTimeoutVal = 1e3;
55
- #color;
56
- #randomPastelColour;
57
- #GetRandomHexColor() {
58
- return `#${Math.floor(Math.random() * 16777215).toString(16).padStart(6, "0")}`;
59
- }
60
- #GetRandomPastelColor = () => {
61
- const r = Math.floor(Math.random() * 127 + 127);
62
- const g = Math.floor(Math.random() * 127 + 127);
63
- const b = Math.floor(Math.random() * 127 + 127);
64
- return `#${((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1).toUpperCase()}`;
65
- };
66
- constructor(workerInstance, runner) {
67
- this.#workerInstance = workerInstance;
68
- this.#runner = runner;
69
- this.#color = this.#GetRandomHexColor();
70
- this.#randomPastelColour = this.#GetRandomPastelColor();
71
- }
72
- #debug = (message) => {
73
- this.#workerInstance.logger.debug(message);
74
- };
75
- #GenLogMessage = (runner, iteration) => {
76
- if (!this.#logMessageDataSet[runner.id]) this.#logMessageDataSet[runner.id] = {
77
- adder: 1,
78
- indent: 0
79
- };
80
- const logMessageData = this.#logMessageDataSet[runner.id];
81
- let message = `${" ".repeat(logMessageData.indent)} [${runner.id}] >> Hello World << ${iteration}`;
82
- message = chalk.default.hex(this.#randomPastelColour)(message);
83
- runner.instrumentData.message.push(message);
84
- this.#debug(message);
85
- logMessageData.indent += logMessageData.adder;
86
- if (logMessageData.indent > 20) logMessageData.adder = -1;
87
- else if (logMessageData.indent === 0) logMessageData.adder = 1;
88
- };
89
- #SetupTimeout = async () => {
90
- if (!this.#publishTelemetryTimeout) {
91
- this.#publishTelemetryTimeout = setTimeout(async () => {
92
- await this.#PublishTelemetryData();
93
- this.#publishTelemetryCount = 0;
94
- this.#publishTelemetryTimeout = null;
95
- }, this.#publishTelemetryTimeoutVal);
96
- if (_nsshunt_stsutils.isNode) this.#publishTelemetryTimeout.unref();
97
- }
98
- };
99
- #PublishTelemetryData = async () => {
100
- this.#workerInstance.PostTelemetryById(this.#runner.id);
101
- this.#runner.instrumentData.velocity = 0;
102
- this.#runner.instrumentData.message = [];
103
- this.#runner.instrumentData.tx = 0;
104
- this.#runner.instrumentData.rx = 0;
105
- await this.SleepImmediate();
106
- };
107
- #ForcePublishTelemetryData = async () => {
108
- await this.#PublishTelemetryData();
109
- };
110
- #PublishTelemetry = async () => {
111
- this.#publishTelemetryCount++;
112
- if (this.#publishTelemetryCount % this.#maxBufferSize === 0) {
113
- this.#publishTelemetryCount = 0;
114
- if (this.#publishTelemetryTimeout) {
115
- clearTimeout(this.#publishTelemetryTimeout);
116
- this.#publishTelemetryTimeout = null;
117
- }
118
- await this.#PublishTelemetryData();
119
- }
120
- if (!this.#publishTelemetryTimeout) this.#SetupTimeout();
121
- };
122
- SleepImmediate() {
123
- return new Promise((resolve, reject) => {
124
- resolve();
125
- });
126
- }
127
- ExecuteRunner = async () => {
128
- const start = performance.now();
129
- const options = this.#runner.options;
130
- this.#runner.instrumentData.coreCount = 1;
131
- this.#runner.instrumentData.activeRequestCount++;
132
- this.#runner.instrumentData.requestCount++;
133
- this.#runner.instrumentData.velocity++;
134
- this.#runner.instrumentData.tx += 256e3;
135
- this.#runner.instrumentData.rx += 65e5;
136
- if (this.#runner.instrumentData.requestCount % options.logMessageMod === 0) this.#GenLogMessage(this.#runner, this.#runner.iteration);
137
- if (this.#runner.instrumentData.requestCount % 1 === 0) `${this.#runner.asyncRunnerContext.threadId}${this.#runner.asyncRunnerContext.id}${this.#runner.instrumentData.requestCount}${options.executionProfile.iterations}`;
138
- this.#debug(chalk.default.hex(this.#color)(`${this.#runner.iteration} - ${this.#runner.instrumentData.requestCount} - ${(/* @__PURE__ */ new Date()).getTime()}`));
139
- if (options.sleepDuration > 0) await (0, _nsshunt_stsutils.Sleep)(options.sleepDuration);
140
- else await this.SleepImmediate();
141
- this.#runner.instrumentData.activeRequestCount--;
142
- const diff = performance.now() - start;
143
- this.#runner.instrumentData.duration = diff;
144
- await this.#PublishTelemetry();
145
- return true;
146
- };
147
- #OutputLogMessage = async (message) => {
148
- const messageOutput = chalk.default.grey(message);
149
- this.#debug(messageOutput);
150
- this.#runner.instrumentData.message.push(messageOutput);
151
- await this.#PublishTelemetry();
152
- };
153
- StartRunner = async () => {
154
- await this.#OutputLogMessage(`StartRunner [${this.#runner.id}]`);
155
- await this.#ForcePublishTelemetryData();
156
- return true;
157
- };
158
- StopRunner = async () => {
159
- await this.#OutputLogMessage(`StopRunner [${this.#runner.id}]`);
160
- await this.#ForcePublishTelemetryData();
161
- return true;
162
- };
163
- TerminateRunner = async () => {
164
- await this.#OutputLogMessage(`TerminateRunner [${this.#runner.id}]`);
165
- await this.#ForcePublishTelemetryData();
166
- return true;
167
- };
168
- Completed = async () => {
169
- await this.#OutputLogMessage(`Completed [${this.#runner.id}] [${JSON.stringify(this.#runner.instrumentData)}]`);
170
- await this.#ForcePublishTelemetryData();
171
- return true;
172
- };
173
- PauseRunner = async () => {
174
- await this.#OutputLogMessage(`PauseRunner [${this.#runner.id}]`);
175
- await this.#ForcePublishTelemetryData();
176
- return true;
177
- };
178
- ResumeRunner = async () => {
179
- await this.#OutputLogMessage(`ResumeRunner [${this.#runner.id}]`);
180
- await this.#ForcePublishTelemetryData();
181
- return true;
182
- };
183
- ResetRunner = async () => {
184
- await this.#OutputLogMessage(`ResetRunner [${this.#runner.id}]`);
185
- this.#runner.instrumentData.requestCount = 0;
186
- await this.#ForcePublishTelemetryData();
187
- return true;
188
- };
189
- UpdateRunner = async () => {
190
- await this.#OutputLogMessage(`UpdateOptions [${this.#runner.id}]`);
191
- await this.#ForcePublishTelemetryData();
192
- return true;
193
- };
194
- };
195
- //#endregion
196
- //#region src/testCaseFhirBase.ts
43
+ //#region src/libmodule/testCaseFhirBase.ts
197
44
  var TestCaseFhirBase = class {
198
45
  #options;
199
46
  #randomDataRecordset = [];
@@ -506,44 +353,12 @@ var TestCaseFhirBase = class {
506
353
  this.#accesssToken = retVal;
507
354
  return retVal;
508
355
  };
509
- GetPersonRecord_ZZ = async (prefix, index, version) => {
510
- const { workerIndex, runnerIndex, runId } = this.#options;
511
- const useId = `${prefix}-${index}`;
512
- let firstName;
513
- let lastName;
514
- if (this.#options.useRedisForNames === true) {
515
- const loaded = await (await this.runnerExecutionWorker.GetStore()).getRecord(runId, `${workerIndex}_${runnerIndex}_${this.runner.iteration}`);
516
- firstName = loaded.givenName;
517
- lastName = loaded.familyName;
518
- } else {
519
- const name = this.runnerExecutionWorker.GetFakerName(this.runner.iteration);
520
- firstName = name.firstName;
521
- lastName = name.lastName;
522
- }
523
- return {
524
- id: useId,
525
- resourceType: "Person",
526
- name: [{
527
- family: lastName,
528
- given: [firstName],
529
- use: `usual`
530
- }],
531
- text: {
532
- div: `New Record ${this.runner.iteration}`,
533
- status: "generated"
534
- },
535
- meta: {
536
- versionId: version,
537
- lastUpdated: (/* @__PURE__ */ new Date()).toISOString()
538
- }
539
- };
540
- };
541
356
  GetPersonRecord = async (prefix, index, version) => {
357
+ const { workerIndex, runnerIndex, runId } = this.#options;
542
358
  const useId = `${prefix}-${index}`;
543
- let name;
544
359
  let firstName;
545
360
  let lastName;
546
- name = this.runnerExecutionWorker.GetFakerName(this.runner.iteration);
361
+ const name = this.runnerExecutionWorker.resourceDataGenerator.GetFakerName(this.runner.iteration);
547
362
  firstName = name.firstName;
548
363
  lastName = name.lastName;
549
364
  return {
@@ -669,7 +484,7 @@ var TestCaseFhirBase = class {
669
484
  };
670
485
  };
671
486
  //#endregion
672
- //#region src/testCaseFhirQueryBase.ts
487
+ //#region src/libmodule/testCaseFhirQueryBase.ts
673
488
  var TestCaseFhirQueryBase = class extends TestCaseFhirBase {
674
489
  constructor(workerInstance, runner) {
675
490
  super(workerInstance, runner);
@@ -716,7 +531,7 @@ var TestCaseFhirQueryBase = class extends TestCaseFhirBase {
716
531
  };
717
532
  };
718
533
  //#endregion
719
- //#region src/testCaseFhir01.ts
534
+ //#region src/libmodule/testCaseFhir01.ts
720
535
  var TestCaseFhir01 = class extends TestCaseFhirQueryBase {
721
536
  ExecuteQuery = async () => {
722
537
  await this.GetAccessToken();
@@ -725,7 +540,7 @@ var TestCaseFhir01 = class extends TestCaseFhirQueryBase {
725
540
  };
726
541
  };
727
542
  //#endregion
728
- //#region src/testCaseFhir02.ts
543
+ //#region src/libmodule/testCaseFhir02.ts
729
544
  var TestCaseFhir02 = class extends TestCaseFhirQueryBase {
730
545
  ExecuteQuery = async () => {
731
546
  try {
@@ -740,7 +555,7 @@ var TestCaseFhir02 = class extends TestCaseFhirQueryBase {
740
555
  };
741
556
  };
742
557
  //#endregion
743
- //#region src/testCaseFhir03.ts
558
+ //#region src/libmodule/testCaseFhir03.ts
744
559
  var TestCaseFhir03 = class extends TestCaseFhirQueryBase {
745
560
  ExecuteQuery = async () => {
746
561
  const client = await this.GetClient();
@@ -755,7 +570,7 @@ var TestCaseFhir03 = class extends TestCaseFhirQueryBase {
755
570
  };
756
571
  };
757
572
  //#endregion
758
- //#region src/testCaseFhir04.ts
573
+ //#region src/libmodule/testCaseFhir04.ts
759
574
  var TestCaseFhir04 = class extends TestCaseFhirQueryBase {
760
575
  ExecuteQuery = async () => {
761
576
  const client = await this.GetClient();
@@ -790,7 +605,7 @@ var TestCaseFhir04 = class extends TestCaseFhirQueryBase {
790
605
  };
791
606
  };
792
607
  //#endregion
793
- //#region src/testCaseFhir05.ts
608
+ //#region src/libmodule/testCaseFhir05.ts
794
609
  var TestCaseFhir05 = class extends TestCaseFhirQueryBase {
795
610
  ExecuteQuery = async () => {
796
611
  const client = await this.GetClient();
@@ -812,7 +627,7 @@ var TestCaseFhir05 = class extends TestCaseFhirQueryBase {
812
627
  };
813
628
  };
814
629
  //#endregion
815
- //#region src/testCaseFhir06.ts
630
+ //#region src/libmodule/testCaseFhir06.ts
816
631
  var TestCaseFhir06 = class extends TestCaseFhirQueryBase {
817
632
  ExecuteQuery = async () => {
818
633
  try {
@@ -1481,20 +1296,25 @@ Object.assign({}, core_exports, duplex_exports, {
1481
1296
  unescapePathComponent
1482
1297
  });
1483
1298
  //#endregion
1484
- //#region src/testCaseFhir07.ts
1299
+ //#region src/libmodule/testCaseFhir07.ts
1485
1300
  var TestCaseFhir07 = class extends TestCaseFhirQueryBase {
1486
1301
  ExecuteQuery = async () => {
1487
- const client = await this.GetClient();
1488
- const personRecord = await this.GetPersonRecord(`${this.runner.options.personPrefix}`, this.runner.iteration, "3");
1489
- const resource = (await client.GetResource("Person", personRecord.id)).body;
1490
- const observer = observe(resource);
1491
- resource.text.div = `Json Patched record TestCaseFhir07 ${this.runner.iteration}`;
1492
- const patchRecord = generate(observer);
1493
- return (await client.PatchResource("Person", personRecord.id, patchRecord, `application/json-patch+json`, `W/"3"`)).body;
1302
+ try {
1303
+ const client = await this.GetClient();
1304
+ const personRecord = await this.GetPersonRecord(`${this.runner.options.personPrefix}`, this.runner.iteration, "3");
1305
+ const resource = (await client.GetResource("Person", personRecord.id)).body;
1306
+ const observer = observe(resource);
1307
+ resource.text.div = `Json Patched record TestCaseFhir07 ${this.runner.iteration}`;
1308
+ const patchRecord = generate(observer);
1309
+ return (await client.PatchResource("Person", personRecord.id, patchRecord, `application/json-patch+json`, `W/"3"`)).body;
1310
+ } catch (error) {
1311
+ console.error(error);
1312
+ throw error;
1313
+ }
1494
1314
  };
1495
1315
  };
1496
1316
  //#endregion
1497
- //#region src/testCaseFhir08.ts
1317
+ //#region src/libmodule/testCaseFhir08.ts
1498
1318
  var TestCaseFhir08 = class extends TestCaseFhirQueryBase {
1499
1319
  ExecuteQuery = async () => {
1500
1320
  try {
@@ -1510,7 +1330,7 @@ var TestCaseFhir08 = class extends TestCaseFhirQueryBase {
1510
1330
  };
1511
1331
  };
1512
1332
  //#endregion
1513
- //#region src/testCaseFhir09.ts
1333
+ //#region src/libmodule/testCaseFhir09.ts
1514
1334
  var TestCaseFhir09 = class extends TestCaseFhirQueryBase {
1515
1335
  ExecuteQuery = async () => {
1516
1336
  const client = await this.GetClient();
@@ -1523,7 +1343,7 @@ var TestCaseFhir09 = class extends TestCaseFhirQueryBase {
1523
1343
  };
1524
1344
  };
1525
1345
  //#endregion
1526
- //#region src/testCaseFhir10.ts
1346
+ //#region src/libmodule/testCaseFhir10.ts
1527
1347
  var TestCaseFhir10 = class extends TestCaseFhirQueryBase {
1528
1348
  ExecuteQuery = async () => {
1529
1349
  const client = await this.GetClient();
@@ -1532,14 +1352,23 @@ var TestCaseFhir10 = class extends TestCaseFhirQueryBase {
1532
1352
  };
1533
1353
  };
1534
1354
  //#endregion
1535
- //#region src/startUpDelFhirResources.ts
1536
- var StartUpDelFhirResources = class extends TestCaseFhirBase {
1537
- constructor(workerInstance, runner) {
1538
- super(workerInstance, runner);
1539
- }
1540
- #debug = (message) => _nsshunt_stsutils.defaultLogger.debug(`StartUpDelFhirResources: ${message}`);
1541
- ExecuteRunner = async () => {
1542
- return true;
1355
+ //#region src/libmodule/asyncRunnerFactory.ts
1356
+ var AsyncRunnerFactory = class {
1357
+ static CreateAsyncRunner = async (runnerExecutionWorker, testRunnerTelemetryPayload) => {
1358
+ const { runner } = testRunnerTelemetryPayload;
1359
+ switch (runner.options.testType) {
1360
+ case "TestCaseFhir01": return new TestCaseFhir01(runnerExecutionWorker, runner);
1361
+ case "TestCaseFhir02": return new TestCaseFhir02(runnerExecutionWorker, runner);
1362
+ case "TestCaseFhir03": return new TestCaseFhir03(runnerExecutionWorker, runner);
1363
+ case "TestCaseFhir04": return new TestCaseFhir04(runnerExecutionWorker, runner);
1364
+ case "TestCaseFhir05": return new TestCaseFhir05(runnerExecutionWorker, runner);
1365
+ case "TestCaseFhir06": return new TestCaseFhir06(runnerExecutionWorker, runner);
1366
+ case "TestCaseFhir07": return new TestCaseFhir07(runnerExecutionWorker, runner);
1367
+ case "TestCaseFhir08": return new TestCaseFhir08(runnerExecutionWorker, runner);
1368
+ case "TestCaseFhir09": return new TestCaseFhir09(runnerExecutionWorker, runner);
1369
+ case "TestCaseFhir10": return new TestCaseFhir10(runnerExecutionWorker, runner);
1370
+ }
1371
+ return null;
1543
1372
  };
1544
1373
  };
1545
1374
  //#endregion
@@ -35095,611 +34924,12 @@ var f = new er({ locale: [ys, {
35095
34924
  }
35096
34925
  }] });
35097
34926
  //#endregion
35098
- //#region src/setupFhirTestResources.ts
35099
- var SetupFhirTestResources = class extends TestCaseFhirBase {
35100
- constructor(workerInstance, runner) {
35101
- super(workerInstance, runner);
35102
- }
35103
- #debug = (message) => _nsshunt_stsutils.defaultLogger.debug(`SetupFhirTestResources: ${message}`);
35104
- #error = (message) => _nsshunt_stsutils.defaultLogger.error(`SetupFhirTestResources (error): ${message}`);
35105
- #GetPersonRecord = (testRecordPrefix, prefix, index, blockSize) => {
35106
- const id = `${testRecordPrefix}_${index}`;
35107
- const records = [];
35108
- for (let i = 0; i < blockSize; i++) {
35109
- const givenName = f.person.firstName();
35110
- const family = f.person.lastName();
35111
- records.push({
35112
- id: `${prefix}_${(0, node_crypto.randomUUID)()}`,
35113
- givenName,
35114
- family
35115
- });
35116
- }
35117
- return {
35118
- id,
35119
- _resourceType: "Person",
35120
- name: [{
35121
- family: `Block: [${index}]`,
35122
- given: [`${index}`],
35123
- use: `usual`
35124
- }],
35125
- text: {
35126
- div: ``,
35127
- status: "generated"
35128
- },
35129
- address: [{ text: records }]
35130
- };
35131
- };
35132
- ExecuteRunner = async () => {
35133
- const iteration = this.runner.iteration;
35134
- const start = performance.now();
35135
- const options = this.runner.options;
35136
- if (this.runner.iteration === 0) f.seed(123);
35137
- this.runner.instrumentData.activeRequestCount++;
35138
- const personRecord = this.#GetPersonRecord(options.testBlocksPrefix, options.personPrefix, this.runner.iteration, options.blockSize);
35139
- this.#debug(chalk.default.yellow(`ExecuteRunner(): Record Length: [${JSON.stringify(personRecord).length}]`));
35140
- try {
35141
- const retVal = await this.fhirClient.PostResource("Person", personRecord);
35142
- this.#debug(chalk.default.yellow(`ExecuteRunner():CreateResource: Return ID: [${retVal?.body.id}]`));
35143
- } catch (error) {
35144
- this.#error(chalk.default.red(`ExecuteRunner():CreateResource: Error: [${error}]`));
35145
- this.runner.instrumentData.errorCount++;
35146
- }
35147
- this.runner.instrumentData.coreCount = 1;
35148
- this.runner.instrumentData.requestCount++;
35149
- this.runner.instrumentData.velocity++;
35150
- this.runner.instrumentData.activeRequestCount--;
35151
- const outputMessage = `Iteration: [${iteration}] Request Count: [${this.runner.instrumentData.requestCount}] ${personRecord.id}`;
35152
- this.runner.instrumentData.message.push(chalk.default.green(outputMessage));
35153
- const diff = performance.now() - start;
35154
- this.runner.instrumentData.duration = diff;
35155
- await this.PublishTelemetry();
35156
- return true;
35157
- };
35158
- };
35159
- //#endregion
35160
- //#region src/teststartup.ts
35161
- var TestStartUp = class {
35162
- #runner;
35163
- #runnerExecutionWorker;
35164
- #logMessageDataSet = {};
35165
- #publishTelemetryTimeout = null;
35166
- #publishTelemetryCount = 0;
35167
- #maxBufferSize = 50;
35168
- #publishTelemetryTimeoutVal = 1e3;
35169
- #color;
35170
- #randomPastelColour;
35171
- #GetRandomHexColor() {
35172
- return `#${Math.floor(Math.random() * 16777215).toString(16).padStart(6, "0")}`;
35173
- }
35174
- #GetRandomPastelColor = () => {
35175
- const r = Math.floor(Math.random() * 127 + 127);
35176
- const g = Math.floor(Math.random() * 127 + 127);
35177
- const b = Math.floor(Math.random() * 127 + 127);
35178
- return `#${((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1).toUpperCase()}`;
35179
- };
35180
- constructor(workerInstance, runner) {
35181
- this.#runnerExecutionWorker = workerInstance;
35182
- this.#runner = runner;
35183
- this.#color = this.#GetRandomHexColor();
35184
- this.#randomPastelColour = this.#GetRandomPastelColor();
35185
- }
35186
- #debug = (message) => {
35187
- this.#runnerExecutionWorker.logger.debug(message);
35188
- };
35189
- #GenLogMessage = (runner, iteration) => {
35190
- if (!this.#logMessageDataSet[runner.id]) this.#logMessageDataSet[runner.id] = {
35191
- adder: 1,
35192
- indent: 0
35193
- };
35194
- const logMessageData = this.#logMessageDataSet[runner.id];
35195
- let message = `${" ".repeat(logMessageData.indent)} [${runner.id}] >> Hello World << ${iteration}`;
35196
- message = chalk.default.hex(this.#randomPastelColour)(message);
35197
- runner.instrumentData.message.push(message);
35198
- this.#debug(message);
35199
- logMessageData.indent += logMessageData.adder;
35200
- if (logMessageData.indent > 20) logMessageData.adder = -1;
35201
- else if (logMessageData.indent === 0) logMessageData.adder = 1;
35202
- };
35203
- #SetupTimeout = async () => {
35204
- if (!this.#publishTelemetryTimeout) {
35205
- this.#publishTelemetryTimeout = setTimeout(async () => {
35206
- await this.#PublishTelemetryData();
35207
- this.#publishTelemetryCount = 0;
35208
- this.#publishTelemetryTimeout = null;
35209
- }, this.#publishTelemetryTimeoutVal);
35210
- if (_nsshunt_stsutils.isNode) this.#publishTelemetryTimeout.unref();
35211
- }
35212
- };
35213
- #PublishTelemetryData = async () => {
35214
- this.#runnerExecutionWorker.PostTelemetryById(this.#runner.id);
35215
- this.#runner.instrumentData.velocity = 0;
35216
- this.#runner.instrumentData.message = [];
35217
- this.#runner.instrumentData.tx = 0;
35218
- this.#runner.instrumentData.rx = 0;
35219
- await this.SleepImmediate();
35220
- };
35221
- #ForcePublishTelemetryData = async () => {
35222
- await this.#PublishTelemetryData();
35223
- };
35224
- #PublishTelemetry = async () => {
35225
- this.#publishTelemetryCount++;
35226
- if (this.#publishTelemetryCount % this.#maxBufferSize === 0) {
35227
- this.#publishTelemetryCount = 0;
35228
- if (this.#publishTelemetryTimeout) {
35229
- clearTimeout(this.#publishTelemetryTimeout);
35230
- this.#publishTelemetryTimeout = null;
35231
- }
35232
- await this.#PublishTelemetryData();
35233
- }
35234
- if (!this.#publishTelemetryTimeout) this.#SetupTimeout();
35235
- };
35236
- SleepImmediate() {
35237
- return new Promise((resolve, reject) => {
35238
- resolve();
35239
- });
35240
- }
35241
- ExecuteRunner = async () => {
35242
- const start = performance.now();
35243
- this.#runner.options;
35244
- this.#runner.instrumentData.coreCount = 1;
35245
- this.#runner.instrumentData.activeRequestCount++;
35246
- this.#runner.instrumentData.requestCount++;
35247
- this.#runner.instrumentData.velocity++;
35248
- this.#runner.instrumentData.tx += 256e3;
35249
- this.#runner.instrumentData.rx += 65e5;
35250
- this.#debug(chalk.default.hex(this.#color)(`${this.#runner.iteration} - ${this.#runner.instrumentData.requestCount} - ${(/* @__PURE__ */ new Date()).getTime()}`));
35251
- this.#debug(chalk.default.hex(this.#color)(`Begin the startup process ...`));
35252
- for (let i = 0; i < 50; i++) {
35253
- this.#debug(chalk.default.hex(this.#color)(` STARTUP --> ${performance.now()}`));
35254
- await (0, _nsshunt_stsutils.Sleep)(100);
35255
- }
35256
- this.#debug(chalk.default.hex(this.#color)(`End the startup process ...`));
35257
- this.#runner.instrumentData.activeRequestCount--;
35258
- const diff = performance.now() - start;
35259
- this.#runner.instrumentData.duration = diff;
35260
- await this.#PublishTelemetry();
35261
- return true;
35262
- };
35263
- #OutputLogMessage = async (message) => {
35264
- const messageOutput = chalk.default.grey(message);
35265
- this.#debug(messageOutput);
35266
- this.#runner.instrumentData.message.push(messageOutput);
35267
- await this.#PublishTelemetry();
35268
- };
35269
- StartRunner = async () => {
35270
- await this.#OutputLogMessage(`StartRunner [${this.#runner.id}]`);
35271
- await this.#ForcePublishTelemetryData();
35272
- return true;
35273
- };
35274
- StopRunner = async () => {
35275
- await this.#OutputLogMessage(`StopRunner [${this.#runner.id}]`);
35276
- await this.#ForcePublishTelemetryData();
35277
- return true;
35278
- };
35279
- TerminateRunner = async () => {
35280
- await this.#OutputLogMessage(`TerminateRunner [${this.#runner.id}]`);
35281
- await this.#ForcePublishTelemetryData();
35282
- return true;
35283
- };
35284
- Completed = async () => {
35285
- await this.#OutputLogMessage(`Completed [${this.#runner.id}] [${JSON.stringify(this.#runner.instrumentData)}]`);
35286
- await this.#ForcePublishTelemetryData();
35287
- return true;
35288
- };
35289
- PauseRunner = async () => {
35290
- await this.#OutputLogMessage(`PauseRunner [${this.#runner.id}]`);
35291
- await this.#ForcePublishTelemetryData();
35292
- return true;
35293
- };
35294
- ResumeRunner = async () => {
35295
- await this.#OutputLogMessage(`ResumeRunner [${this.#runner.id}]`);
35296
- await this.#ForcePublishTelemetryData();
35297
- return true;
35298
- };
35299
- ResetRunner = async () => {
35300
- await this.#OutputLogMessage(`ResetRunner [${this.#runner.id}]`);
35301
- this.#runner.instrumentData.requestCount = 0;
35302
- await this.#ForcePublishTelemetryData();
35303
- return true;
35304
- };
35305
- UpdateRunner = async () => {
35306
- await this.#OutputLogMessage(`UpdateOptions [${this.#runner.id}]`);
35307
- await this.#ForcePublishTelemetryData();
35308
- return true;
35309
- };
35310
- };
35311
- //#endregion
35312
- //#region src/testshutdown.ts
35313
- var TestShutDown = class {
35314
- #runner;
35315
- #workerInstance;
35316
- #logMessageDataSet = {};
35317
- #publishTelemetryTimeout = null;
35318
- #publishTelemetryCount = 0;
35319
- #maxBufferSize = 50;
35320
- #publishTelemetryTimeoutVal = 1e3;
35321
- #color;
35322
- #randomPastelColour;
35323
- #GetRandomHexColor() {
35324
- return `#${Math.floor(Math.random() * 16777215).toString(16).padStart(6, "0")}`;
35325
- }
35326
- #GetRandomPastelColor = () => {
35327
- const r = Math.floor(Math.random() * 127 + 127);
35328
- const g = Math.floor(Math.random() * 127 + 127);
35329
- const b = Math.floor(Math.random() * 127 + 127);
35330
- return `#${((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1).toUpperCase()}`;
35331
- };
35332
- constructor(workerInstance, runner) {
35333
- this.#workerInstance = workerInstance;
35334
- this.#runner = runner;
35335
- this.#color = this.#GetRandomHexColor();
35336
- this.#randomPastelColour = this.#GetRandomPastelColor();
35337
- }
35338
- #debug = (message) => {
35339
- this.#workerInstance.logger.debug(message);
35340
- };
35341
- #GenLogMessage = (runner, iteration) => {
35342
- if (!this.#logMessageDataSet[runner.id]) this.#logMessageDataSet[runner.id] = {
35343
- adder: 1,
35344
- indent: 0
35345
- };
35346
- const logMessageData = this.#logMessageDataSet[runner.id];
35347
- let message = `${" ".repeat(logMessageData.indent)} [${runner.id}] >> Hello World << ${iteration}`;
35348
- message = chalk.default.hex(this.#randomPastelColour)(message);
35349
- runner.instrumentData.message.push(message);
35350
- this.#debug(message);
35351
- logMessageData.indent += logMessageData.adder;
35352
- if (logMessageData.indent > 20) logMessageData.adder = -1;
35353
- else if (logMessageData.indent === 0) logMessageData.adder = 1;
35354
- };
35355
- #SetupTimeout = async () => {
35356
- if (!this.#publishTelemetryTimeout) {
35357
- this.#publishTelemetryTimeout = setTimeout(async () => {
35358
- await this.#PublishTelemetryData();
35359
- this.#publishTelemetryCount = 0;
35360
- this.#publishTelemetryTimeout = null;
35361
- }, this.#publishTelemetryTimeoutVal);
35362
- if (_nsshunt_stsutils.isNode) this.#publishTelemetryTimeout.unref();
35363
- }
35364
- };
35365
- #PublishTelemetryData = async () => {
35366
- this.#workerInstance.PostTelemetryById(this.#runner.id);
35367
- this.#runner.instrumentData.velocity = 0;
35368
- this.#runner.instrumentData.message = [];
35369
- this.#runner.instrumentData.tx = 0;
35370
- this.#runner.instrumentData.rx = 0;
35371
- await this.SleepImmediate();
35372
- };
35373
- #ForcePublishTelemetryData = async () => {
35374
- await this.#PublishTelemetryData();
35375
- };
35376
- #PublishTelemetry = async () => {
35377
- this.#publishTelemetryCount++;
35378
- if (this.#publishTelemetryCount % this.#maxBufferSize === 0) {
35379
- this.#publishTelemetryCount = 0;
35380
- if (this.#publishTelemetryTimeout) {
35381
- clearTimeout(this.#publishTelemetryTimeout);
35382
- this.#publishTelemetryTimeout = null;
35383
- }
35384
- await this.#PublishTelemetryData();
35385
- }
35386
- if (!this.#publishTelemetryTimeout) this.#SetupTimeout();
35387
- };
35388
- SleepImmediate() {
35389
- return new Promise((resolve, reject) => {
35390
- resolve();
35391
- });
35392
- }
35393
- ExecuteRunner = async () => {
35394
- const start = performance.now();
35395
- this.#runner.options;
35396
- this.#runner.instrumentData.coreCount = 1;
35397
- this.#runner.instrumentData.activeRequestCount++;
35398
- this.#runner.instrumentData.requestCount++;
35399
- this.#runner.instrumentData.velocity++;
35400
- this.#runner.instrumentData.tx += 256e3;
35401
- this.#runner.instrumentData.rx += 65e5;
35402
- this.#debug(chalk.default.hex(this.#color)(`${this.#runner.iteration} - ${this.#runner.instrumentData.requestCount} - ${(/* @__PURE__ */ new Date()).getTime()}`));
35403
- this.#debug(chalk.default.hex(this.#color)(`Begin the shutdown process ...`));
35404
- for (let i = 0; i < 50; i++) {
35405
- this.#debug(chalk.default.hex(this.#color)(` SHUTDOWN --> ${performance.now()}`));
35406
- await (0, _nsshunt_stsutils.Sleep)(100);
35407
- }
35408
- this.#debug(chalk.default.hex(this.#color)(`End the startup process ...`));
35409
- this.#runner.instrumentData.activeRequestCount--;
35410
- const diff = performance.now() - start;
35411
- this.#runner.instrumentData.duration = diff;
35412
- await this.#PublishTelemetry();
35413
- return true;
35414
- };
35415
- #OutputLogMessage = async (message) => {
35416
- const messageOutput = chalk.default.grey(message);
35417
- this.#debug(messageOutput);
35418
- this.#runner.instrumentData.message.push(messageOutput);
35419
- await this.#PublishTelemetry();
35420
- };
35421
- StartRunner = async () => {
35422
- await this.#OutputLogMessage(`StartRunner [${this.#runner.id}]`);
35423
- await this.#ForcePublishTelemetryData();
35424
- return true;
35425
- };
35426
- StopRunner = async () => {
35427
- await this.#OutputLogMessage(`StopRunner [${this.#runner.id}]`);
35428
- await this.#ForcePublishTelemetryData();
35429
- return true;
35430
- };
35431
- TerminateRunner = async () => {
35432
- await this.#OutputLogMessage(`TerminateRunner [${this.#runner.id}]`);
35433
- await this.#ForcePublishTelemetryData();
35434
- return true;
35435
- };
35436
- Completed = async () => {
35437
- await this.#OutputLogMessage(`Completed [${this.#runner.id}] [${JSON.stringify(this.#runner.instrumentData)}]`);
35438
- await this.#ForcePublishTelemetryData();
35439
- return true;
35440
- };
35441
- PauseRunner = async () => {
35442
- await this.#OutputLogMessage(`PauseRunner [${this.#runner.id}]`);
35443
- await this.#ForcePublishTelemetryData();
35444
- return true;
35445
- };
35446
- ResumeRunner = async () => {
35447
- await this.#OutputLogMessage(`ResumeRunner [${this.#runner.id}]`);
35448
- await this.#ForcePublishTelemetryData();
35449
- return true;
35450
- };
35451
- ResetRunner = async () => {
35452
- await this.#OutputLogMessage(`ResetRunner [${this.#runner.id}]`);
35453
- this.#runner.instrumentData.requestCount = 0;
35454
- await this.#ForcePublishTelemetryData();
35455
- return true;
35456
- };
35457
- UpdateRunner = async () => {
35458
- await this.#OutputLogMessage(`UpdateOptions [${this.#runner.id}]`);
35459
- await this.#ForcePublishTelemetryData();
35460
- return true;
35461
- };
35462
- };
35463
- //#endregion
35464
- //#region src/redisTestRunStore.ts
35465
- var RedisTestRunStore = class {
35466
- client;
35467
- keyPrefix;
35468
- defaultTtlSeconds;
35469
- batchSize;
35470
- maxDeleteBatchSize;
35471
- connected = false;
35472
- constructor(options) {
35473
- this.options = options;
35474
- this.keyPrefix = options.keyPrefix ?? "testrun";
35475
- this.defaultTtlSeconds = options.defaultTtlSeconds ?? 3600;
35476
- this.batchSize = options.batchSize ?? 1e3;
35477
- this.maxDeleteBatchSize = options.maxDeleteBatchSize ?? 1e3;
35478
- this.client = (0, redis.createClient)({ url: options.redisUrl });
35479
- this.client.on("error", (err) => {
35480
- console.error("[RedisTestRunStore] Redis error:", err);
35481
- });
35482
- }
35483
- async connect() {
35484
- if (this.connected) return;
35485
- await this.client.connect();
35486
- this.connected = true;
35487
- }
35488
- async disconnect() {
35489
- if (!this.connected) return;
35490
- await this.client.quit();
35491
- this.connected = false;
35492
- }
35493
- async ping() {
35494
- await this.ensureConnected();
35495
- return this.client.ping();
35496
- }
35497
- createRunId(prefix = "run") {
35498
- return `${prefix}_${Date.now()}_${(0, node_crypto.randomUUID)()}`;
35499
- }
35500
- async seedRun(runId, records, options) {
35501
- await this.ensureConnected();
35502
- this.validateRunId(runId);
35503
- if (!Array.isArray(records)) throw new Error("records must be an array");
35504
- const ttlSeconds = options?.ttlSeconds ?? this.defaultTtlSeconds;
35505
- const batchSize = options?.batchSize ?? this.batchSize;
35506
- const storeMetadata = options?.storeMetadata ?? true;
35507
- if (records.length === 0) {
35508
- if (storeMetadata) await this.writeRunMetadata(runId, {
35509
- runId,
35510
- createdAt: (/* @__PURE__ */ new Date()).toISOString(),
35511
- recordCount: 0,
35512
- ttlSeconds
35513
- }, ttlSeconds);
35514
- return;
35515
- }
35516
- for (const record of records) this.validateRecord(record);
35517
- const trackingKey = this.getTrackingKey(runId);
35518
- const recordChunks = this.chunk(records, batchSize);
35519
- for (const chunk of recordChunks) {
35520
- const multi = this.client.multi();
35521
- for (const record of chunk) {
35522
- const recordKey = this.getRecordKey(runId, record.id);
35523
- const flatHash = this.toRedisHash(record);
35524
- multi.hSet(recordKey, flatHash);
35525
- multi.sAdd(trackingKey, recordKey);
35526
- multi.expire(recordKey, ttlSeconds);
35527
- }
35528
- multi.expire(trackingKey, ttlSeconds);
35529
- await multi.exec();
35530
- }
35531
- if (storeMetadata) await this.writeRunMetadata(runId, {
35532
- runId,
35533
- createdAt: (/* @__PURE__ */ new Date()).toISOString(),
35534
- recordCount: records.length,
35535
- ttlSeconds
35536
- }, ttlSeconds);
35537
- }
35538
- async getRecord(runId, recordId) {
35539
- await this.ensureConnected();
35540
- this.validateRunId(runId);
35541
- this.validateRecordId(recordId);
35542
- const recordKey = this.getRecordKey(runId, recordId);
35543
- const data = await this.client.hGetAll(recordKey);
35544
- return Object.keys(data).length === 0 ? null : data;
35545
- }
35546
- async hasRecord(runId, recordId) {
35547
- await this.ensureConnected();
35548
- this.validateRunId(runId);
35549
- this.validateRecordId(recordId);
35550
- const recordKey = this.getRecordKey(runId, recordId);
35551
- return await this.client.exists(recordKey) === 1;
35552
- }
35553
- async deleteRecord(runId, recordId) {
35554
- await this.ensureConnected();
35555
- this.validateRunId(runId);
35556
- this.validateRecordId(recordId);
35557
- const recordKey = this.getRecordKey(runId, recordId);
35558
- const trackingKey = this.getTrackingKey(runId);
35559
- const multi = this.client.multi();
35560
- multi.del(recordKey);
35561
- multi.sRem(trackingKey, recordKey);
35562
- const delResult = (await multi.exec())?.[0];
35563
- return Number(delResult) > 0;
35564
- }
35565
- async countRunRecords(runId) {
35566
- await this.ensureConnected();
35567
- this.validateRunId(runId);
35568
- const trackingKey = this.getTrackingKey(runId);
35569
- return this.client.sCard(trackingKey);
35570
- }
35571
- async getRunMetadata(runId) {
35572
- await this.ensureConnected();
35573
- this.validateRunId(runId);
35574
- const metadataKey = this.getMetadataKey(runId);
35575
- const data = await this.client.hGetAll(metadataKey);
35576
- return Object.keys(data).length === 0 ? null : data;
35577
- }
35578
- async cleanupRun(runId) {
35579
- await this.ensureConnected();
35580
- this.validateRunId(runId);
35581
- const trackingKey = this.getTrackingKey(runId);
35582
- const metadataKey = this.getMetadataKey(runId);
35583
- const recordKeys = await this.client.sMembers(trackingKey);
35584
- let deletedRecordKeys = 0;
35585
- for (const chunk of this.chunk(recordKeys, this.maxDeleteBatchSize)) {
35586
- if (chunk.length === 0) continue;
35587
- deletedRecordKeys += await this.client.del(chunk);
35588
- }
35589
- const deletedTrackingKey = await this.client.del(trackingKey) > 0;
35590
- const deletedMetadataKey = await this.client.del(metadataKey) > 0;
35591
- return {
35592
- runId,
35593
- deletedRecordKeys,
35594
- deletedTrackingKey,
35595
- deletedMetadataKey
35596
- };
35597
- }
35598
- async extendRunTtl(runId, ttlSeconds) {
35599
- await this.ensureConnected();
35600
- this.validateRunId(runId);
35601
- const trackingKey = this.getTrackingKey(runId);
35602
- const metadataKey = this.getMetadataKey(runId);
35603
- const recordKeys = await this.client.sMembers(trackingKey);
35604
- for (const chunk of this.chunk(recordKeys, this.batchSize)) {
35605
- const multi = this.client.multi();
35606
- for (const key of chunk) multi.expire(key, ttlSeconds);
35607
- await multi.exec();
35608
- }
35609
- await this.client.expire(trackingKey, ttlSeconds);
35610
- await this.client.expire(metadataKey, ttlSeconds);
35611
- }
35612
- async listRunRecordKeys(runId) {
35613
- await this.ensureConnected();
35614
- this.validateRunId(runId);
35615
- return this.client.sMembers(this.getTrackingKey(runId));
35616
- }
35617
- async getRunTtl(runId) {
35618
- await this.ensureConnected();
35619
- this.validateRunId(runId);
35620
- const trackingKey = this.getTrackingKey(runId);
35621
- const metadataKey = this.getMetadataKey(runId);
35622
- const [trackingKeyTtl, metadataKeyTtl] = await Promise.all([this.client.ttl(trackingKey), this.client.ttl(metadataKey)]);
35623
- return {
35624
- trackingKeyTtl,
35625
- metadataKeyTtl
35626
- };
35627
- }
35628
- async writeRunMetadata(runId, metadata, ttlSeconds) {
35629
- const metadataKey = this.getMetadataKey(runId);
35630
- const multi = this.client.multi();
35631
- multi.hSet(metadataKey, {
35632
- runId: metadata.runId,
35633
- createdAt: metadata.createdAt,
35634
- recordCount: String(metadata.recordCount),
35635
- ttlSeconds: String(metadata.ttlSeconds)
35636
- });
35637
- multi.expire(metadataKey, ttlSeconds);
35638
- await multi.exec();
35639
- }
35640
- getRecordKey(runId, recordId) {
35641
- return `${this.keyPrefix}:${runId}:record:${recordId}`;
35642
- }
35643
- getTrackingKey(runId) {
35644
- return `${this.keyPrefix}:${runId}:keys`;
35645
- }
35646
- getMetadataKey(runId) {
35647
- return `${this.keyPrefix}:${runId}:meta`;
35648
- }
35649
- toRedisHash(record) {
35650
- const out = {};
35651
- for (const [key, value] of Object.entries(record)) {
35652
- if (value === void 0) continue;
35653
- out[key] = String(value);
35654
- }
35655
- return out;
35656
- }
35657
- chunk(items, size) {
35658
- if (size <= 0) throw new Error("Chunk size must be > 0");
35659
- const result = [];
35660
- for (let i = 0; i < items.length; i += size) result.push(items.slice(i, i + size));
35661
- return result;
35662
- }
35663
- validateRunId(runId) {
35664
- if (!runId || typeof runId !== "string") throw new Error("runId must be a non-empty string");
35665
- }
35666
- validateRecordId(recordId) {
35667
- if (!recordId || typeof recordId !== "string") throw new Error("recordId must be a non-empty string");
35668
- }
35669
- validateRecord(record) {
35670
- if (!record || typeof record !== "object") throw new Error("record must be an object");
35671
- if (!record.id || typeof record.id !== "string") throw new Error("record.id must be a non-empty string");
35672
- if (typeof record.givenName !== "string") throw new Error(`record ${record.id}: givenName must be a string`);
35673
- if (typeof record.familyName !== "string") throw new Error(`record ${record.id}: familyName must be a string`);
35674
- if (typeof record.worker !== "number") throw new Error(`record ${record.id}: worker must be a number`);
35675
- if (typeof record.runner !== "number") throw new Error(`record ${record.id}: runner must be a number`);
35676
- if (typeof record.iteration !== "number") throw new Error(`record ${record.id}: iteration must be a number`);
35677
- }
35678
- async ensureConnected() {
35679
- if (!this.connected) await this.connect();
35680
- }
35681
- };
35682
- //#endregion
35683
- //#region src/workerTestCases.ts
35684
- var WorkerTestCases = class extends _nsshunt_stsrunnerframework.AbstractRunnerExecutionWorker {
35685
- #port;
34927
+ //#region src/libmodule/resourceDataGenerator.ts
34928
+ var ResourceDataGenerator = class {
35686
34929
  #randomNameList = {};
35687
- _store;
35688
34930
  constructor() {
35689
- super();
35690
34931
  f.seed(123);
35691
34932
  }
35692
- GetStore = async () => {
35693
- if (!this._store) this._store = new RedisTestRunStore({
35694
- redisUrl: this.Options.userData.redisStoreConnection,
35695
- keyPrefix: "testrun",
35696
- defaultTtlSeconds: 3600,
35697
- batchSize: 1e3,
35698
- maxDeleteBatchSize: 1e3
35699
- });
35700
- await this._store.ensureConnected();
35701
- return this._store;
35702
- };
35703
34933
  GetFakerName = (index) => {
35704
34934
  if (this.#randomNameList[index.toString()]) return this.#randomNameList[index.toString()];
35705
34935
  const fakerNameTuple = {
@@ -35709,53 +34939,26 @@ var WorkerTestCases = class extends _nsshunt_stsrunnerframework.AbstractRunnerEx
35709
34939
  this.#randomNameList[index.toString()] = fakerNameTuple;
35710
34940
  return this.#randomNameList[index.toString()];
35711
34941
  };
34942
+ };
34943
+ //#endregion
34944
+ //#region src/libmodule/workerFhirTestCases.ts
34945
+ var WorkerFhirTestCases = class extends _nsshunt_stsrunnerframework.AbstractRunnerExecutionWorker {
34946
+ _resourceDataGenerator;
34947
+ constructor() {
34948
+ super();
34949
+ this._resourceDataGenerator = new ResourceDataGenerator();
34950
+ }
34951
+ get resourceDataGenerator() {
34952
+ return this._resourceDataGenerator;
34953
+ }
35712
34954
  get logger() {
35713
34955
  return _nsshunt_stsutils.defaultLogger;
35714
34956
  }
35715
- SetPort = (message) => {
35716
- console.log(chalk.default.red(`************** SetPort`));
35717
- this.#port = message.payload.port;
35718
- this.#port.on("message", (data) => {
35719
- console.log(chalk.default.red(`************** on message`));
35720
- if (_nsshunt_stsutils.isNode) this.ProcessMessage(data);
35721
- else this.ProcessMessage(data.data);
35722
- });
35723
- this.ProcessMessage(message);
35724
- };
35725
34957
  CreateAsyncRunner = async (testRunnerTelemetryPayload) => {
35726
- const { runner } = testRunnerTelemetryPayload;
35727
- switch (runner.options.testType) {
35728
- case "TestStartUp": return new TestStartUp(this, runner);
35729
- case "TestShutDown": return new TestShutDown(this, runner);
35730
- case "StartUpDelFhirResources": return new StartUpDelFhirResources(this, runner);
35731
- case "TestCase01": return new TestCase01(this, runner);
35732
- case "TestCaseFhir01": return new TestCaseFhir01(this, runner);
35733
- case "TestCaseFhir02": return new TestCaseFhir02(this, runner);
35734
- case "TestCaseFhir03": return new TestCaseFhir03(this, runner);
35735
- case "TestCaseFhir04": return new TestCaseFhir04(this, runner);
35736
- case "TestCaseFhir05": return new TestCaseFhir05(this, runner);
35737
- case "TestCaseFhir06": return new TestCaseFhir06(this, runner);
35738
- case "TestCaseFhir07": return new TestCaseFhir07(this, runner);
35739
- case "TestCaseFhir08": return new TestCaseFhir08(this, runner);
35740
- case "TestCaseFhir09": return new TestCaseFhir09(this, runner);
35741
- case "TestCaseFhir10": return new TestCaseFhir10(this, runner);
35742
- case "SetupFhirTestResources": return new SetupFhirTestResources(this, runner);
35743
- }
35744
- return null;
34958
+ return AsyncRunnerFactory.CreateAsyncRunner(this, testRunnerTelemetryPayload);
35745
34959
  };
35746
34960
  };
35747
- console.log(chalk.default.red(`************** SetPort`));
35748
- var worker = new WorkerTestCases();
35749
- node_worker_threads.parentPort?.on("message", (data) => {
35750
- const { command, payload } = data;
35751
- if (command === _nsshunt_stsrunnerframework.eIWMessageCommands.MessagePort) {
35752
- payload.port.on("message", (data) => {
35753
- worker.ProcessMessage(data);
35754
- });
35755
- worker.ProcessMessage(data);
35756
- } else throw new Error(`Invalid command: [${command}]`);
35757
- });
35758
34961
  //#endregion
35759
- exports.WorkerTestCases = WorkerTestCases;
34962
+ exports.WorkerFhirTestCases = WorkerFhirTestCases;
35760
34963
 
35761
34964
  //# sourceMappingURL=ststestrunner.cjs.map