@aj-shadow/z-abs-funclayer-engine-server 0.0.0-aj-beta.221

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 (204) hide show
  1. package/.gitattributes +26 -0
  2. package/LICENSE.txt +96 -0
  3. package/README.md +5 -0
  4. package/npm-shrinkwrap.json +13 -0
  5. package/package.json +10 -0
  6. package/project/server/_build/Server-FuncLayer-Engine-server.bld +12 -0
  7. package/project/server/_build/z-abs-funclayer-engine-server.prj +12 -0
  8. package/project/server/address/address-calculator.js +377 -0
  9. package/project/server/address/address-data.js +364 -0
  10. package/project/server/address/address-manager.js +251 -0
  11. package/project/server/address/address.js +176 -0
  12. package/project/server/address/addresses.js +122 -0
  13. package/project/server/address/dns-url-cache.js +130 -0
  14. package/project/server/address/interfaces.js +100 -0
  15. package/project/server/address/local-dns.js +35 -0
  16. package/project/server/address/login-report.js +56 -0
  17. package/project/server/address/networks.js +598 -0
  18. package/project/server/address/real-networks.js +102 -0
  19. package/project/server/address/subnet.js +60 -0
  20. package/project/server/communication/messages/messages-s-to-c/message-execution-started.js +17 -0
  21. package/project/server/communication/messages/messages-s-to-c/message-execution-stopped.js +14 -0
  22. package/project/server/communication/messages/messages-s-to-c/message-test-case-debug-paused.js +18 -0
  23. package/project/server/communication/messages/messages-s-to-c/message-test-case-log.js +25 -0
  24. package/project/server/communication/messages/messages-s-to-c/message-test-case-started.js +21 -0
  25. package/project/server/communication/messages/messages-s-to-c/message-test-case-state.js +18 -0
  26. package/project/server/communication/messages/messages-s-to-c/message-test-case-stopped.js +22 -0
  27. package/project/server/communication/messages/messages-s-to-c/message-test-stage-started.js +19 -0
  28. package/project/server/communication/messages/messages-s-to-c/message-test-stage-stopped.js +19 -0
  29. package/project/server/communication/messages/messages-s-to-c/message-test-suite-started.js +16 -0
  30. package/project/server/communication/messages/messages-s-to-c/message-test-suite-stopped.js +19 -0
  31. package/project/server/communication/messages/messages-s-to-w/message-test-case-debug-actor-index-ok.js +15 -0
  32. package/project/server/communication/messages/messages-w-to-s/message-test-case-debug-actor-index.js +15 -0
  33. package/project/server/debug/debug-step-over.js +54 -0
  34. package/project/server/debug/debugger.js +102 -0
  35. package/project/server/debug-dashboard/debug-dashboard.js +14 -0
  36. package/project/server/debug-dashboard/gauge-manager.js +44 -0
  37. package/project/server/debug-dashboard/gauge.js +37 -0
  38. package/project/server/engine/actor/actor-condition.js +335 -0
  39. package/project/server/engine/actor/actor-intercepting.js +32 -0
  40. package/project/server/engine/actor/actor-local.js +24 -0
  41. package/project/server/engine/actor/actor-mixins/asynch-mixin.js +103 -0
  42. package/project/server/engine/actor/actor-mixins/content-mixin.js +22 -0
  43. package/project/server/engine/actor/actor-mixins/logger-mixin.js +603 -0
  44. package/project/server/engine/actor/actor-mixins/process-mixin.js +35 -0
  45. package/project/server/engine/actor/actor-mixins/shared-data-mixin.js +109 -0
  46. package/project/server/engine/actor/actor-mixins/shared-execution-data-mixin.js +57 -0
  47. package/project/server/engine/actor/actor-mixins/stack-mixin-client.js +157 -0
  48. package/project/server/engine/actor/actor-mixins/stack-mixin-server.js +123 -0
  49. package/project/server/engine/actor/actor-mixins/stack-mixin.js +128 -0
  50. package/project/server/engine/actor/actor-mixins/test-data-mixin.js +402 -0
  51. package/project/server/engine/actor/actor-mixins/timer-mixin.js +44 -0
  52. package/project/server/engine/actor/actor-mixins/verify-mixin-base.js +668 -0
  53. package/project/server/engine/actor/actor-mixins/verify-mixin-mandatory.js +46 -0
  54. package/project/server/engine/actor/actor-mixins/verify-mixin-optional.js +44 -0
  55. package/project/server/engine/actor/actor-mixins/verify-mixin-value.js +71 -0
  56. package/project/server/engine/actor/actor-originating.js +32 -0
  57. package/project/server/engine/actor/actor-part-mixins/part-asynch-mixin.js +24 -0
  58. package/project/server/engine/actor/actor-part-mixins/part-logger-mixin.js +39 -0
  59. package/project/server/engine/actor/actor-part-mixins/part-shared-runtime-data-mixin.js +33 -0
  60. package/project/server/engine/actor/actor-part-mixins/part-timer-mixin.js +12 -0
  61. package/project/server/engine/actor/actor-part-mixins/part-verify-mixin-mandatory.js +15 -0
  62. package/project/server/engine/actor/actor-part-mixins/part-verify-mixin-optional.js +15 -0
  63. package/project/server/engine/actor/actor-part-mixins/part-verify-mixin-value.js +15 -0
  64. package/project/server/engine/actor/actor-part-post.js +37 -0
  65. package/project/server/engine/actor/actor-part-pre.js +37 -0
  66. package/project/server/engine/actor/actor-pending.js +79 -0
  67. package/project/server/engine/actor/actor-proxy.js +38 -0
  68. package/project/server/engine/actor/actor-results.js +36 -0
  69. package/project/server/engine/actor/actor-state-timeout.js +35 -0
  70. package/project/server/engine/actor/actor-sut.js +38 -0
  71. package/project/server/engine/actor/actor-terminating.js +32 -0
  72. package/project/server/engine/actor/actor.js +553 -0
  73. package/project/server/engine/actor-phase.js +26 -0
  74. package/project/server/engine/actor-state-machine-base.js +298 -0
  75. package/project/server/engine/actor-state-machine-data.js +383 -0
  76. package/project/server/engine/actor-state-machine-exec.js +137 -0
  77. package/project/server/engine/actor-state-machine-post.js +177 -0
  78. package/project/server/engine/actor-state-machine-pre.js +142 -0
  79. package/project/server/engine/actor-state-machine-process.js +88 -0
  80. package/project/server/engine/actor-state-machine-state.js +52 -0
  81. package/project/server/engine/actor-state-machine.js +185 -0
  82. package/project/server/engine/actor-state.js +35 -0
  83. package/project/server/engine/actor-worker.js +68 -0
  84. package/project/server/engine/actors-phase.js +49 -0
  85. package/project/server/engine/actors.js +317 -0
  86. package/project/server/engine/data/content-audio.js +18 -0
  87. package/project/server/engine/data/content-base.js +91 -0
  88. package/project/server/engine/data/content-binary.js +15 -0
  89. package/project/server/engine/data/content-cache.js +67 -0
  90. package/project/server/engine/data/content-data.js +254 -0
  91. package/project/server/engine/data/content-documents.js +18 -0
  92. package/project/server/engine/data/content-image.js +20 -0
  93. package/project/server/engine/data/content-other.js +19 -0
  94. package/project/server/engine/data/content-text.js +19 -0
  95. package/project/server/engine/data/content-undefined.js +14 -0
  96. package/project/server/engine/data/content-video.js +20 -0
  97. package/project/server/engine/data/content.js +60 -0
  98. package/project/server/engine/data/runtime-data-shared.js +75 -0
  99. package/project/server/engine/data/test-data.js +239 -0
  100. package/project/server/engine/execution-context-test-case.js +48 -0
  101. package/project/server/engine/execution-context-test-suite.js +66 -0
  102. package/project/server/engine/execution-context.js +93 -0
  103. package/project/server/engine/stage-setter.js +132 -0
  104. package/project/server/engine/stage.js +83 -0
  105. package/project/server/engine/test-case-load.js +25 -0
  106. package/project/server/engine/test-case-loader.js +125 -0
  107. package/project/server/engine/test-case-not-found.js +29 -0
  108. package/project/server/engine/test-case-result-type.js +42 -0
  109. package/project/server/engine/test-case.js +417 -0
  110. package/project/server/engine/test-output.js +116 -0
  111. package/project/server/engine/test-statistics-test-case.js +59 -0
  112. package/project/server/engine/test-statistics-test-suite.js +63 -0
  113. package/project/server/engine/test-suite.js +276 -0
  114. package/project/server/stack/api/base-64.js +16 -0
  115. package/project/server/stack/api/const-commands-decoder.js +15 -0
  116. package/project/server/stack/api/const-commands-encoder.js +15 -0
  117. package/project/server/stack/api/hmacSha1.js +14 -0
  118. package/project/server/stack/api/json-web-token.js +38 -0
  119. package/project/server/stack/api/sdp/sdp-decoder.js +70 -0
  120. package/project/server/stack/api/sdp/sdp-encoder.js +40 -0
  121. package/project/server/stack/api/sdp/sdp-media-attribute.js +13 -0
  122. package/project/server/stack/api/sdp/sdp-media-session.js +16 -0
  123. package/project/server/stack/api/sdp/sdp-message.js +17 -0
  124. package/project/server/stack/api/sdp/sdp-origin.js +17 -0
  125. package/project/server/stack/api/sdp/sdp-session-attribute.js +13 -0
  126. package/project/server/stack/api/sdp/sdp-timing.js +15 -0
  127. package/project/server/stack/api/text-protocol-header.js +35 -0
  128. package/project/server/stack/factory/stack-components-helpers.js +22 -0
  129. package/project/server/stack/factory/stack-components-template-base-actors.js +124 -0
  130. package/project/server/stack/factory/stack-components-template-base-test-cases.js +22 -0
  131. package/project/server/stack/factory/stack-components-templates-actors.js +15 -0
  132. package/project/server/stack/factory/stack-components-templates-test-cases.js +20 -0
  133. package/project/server/stack/managers/client-manager/client-manager.js +193 -0
  134. package/project/server/stack/managers/connection-manager/connection-data.js +82 -0
  135. package/project/server/stack/managers/connection-manager/connection-manager.js +177 -0
  136. package/project/server/stack/managers/connection-manager/connection-object.js +148 -0
  137. package/project/server/stack/managers/connection-manager/shared-data.js +14 -0
  138. package/project/server/stack/managers/manager.js +95 -0
  139. package/project/server/stack/managers/server-manager/server-manager.js +76 -0
  140. package/project/server/stack/managers/server-manager/server.js +384 -0
  141. package/project/server/stack/managers/shared-manager.js +117 -0
  142. package/project/server/stack/network/buffer-manager.js +190 -0
  143. package/project/server/stack/network/mc/mc-connection-client-shared.js +51 -0
  144. package/project/server/stack/network/mc/mc-connection-client.js +117 -0
  145. package/project/server/stack/network/mc/mc-connection-server-shared.js +51 -0
  146. package/project/server/stack/network/mc/mc-connection-server.js +58 -0
  147. package/project/server/stack/network/mc/mc-connection-shared.js +26 -0
  148. package/project/server/stack/network/mc/mc-connection.js +33 -0
  149. package/project/server/stack/network/mc/mc-server.js +90 -0
  150. package/project/server/stack/network/network-connection-shared.js +177 -0
  151. package/project/server/stack/network/network-connection.js +134 -0
  152. package/project/server/stack/network/network-helper.js +12 -0
  153. package/project/server/stack/network/network-server.js +36 -0
  154. package/project/server/stack/network/network-type.js +46 -0
  155. package/project/server/stack/network/tcp/tcp-connection-client-shared.js +18 -0
  156. package/project/server/stack/network/tcp/tcp-connection-client.js +71 -0
  157. package/project/server/stack/network/tcp/tcp-connection-server-shared.js +14 -0
  158. package/project/server/stack/network/tcp/tcp-connection-server.js +16 -0
  159. package/project/server/stack/network/tcp/tcp-connection-shared.js +55 -0
  160. package/project/server/stack/network/tcp/tcp-connection.js +167 -0
  161. package/project/server/stack/network/tcp/tcp-server.js +35 -0
  162. package/project/server/stack/network/tls/tls-connection-client-shared.js +18 -0
  163. package/project/server/stack/network/tls/tls-connection-client.js +76 -0
  164. package/project/server/stack/network/tls/tls-connection-server-shared.js +14 -0
  165. package/project/server/stack/network/tls/tls-connection-server.js +16 -0
  166. package/project/server/stack/network/tls/tls-connection-shared.js +63 -0
  167. package/project/server/stack/network/tls/tls-connection.js +176 -0
  168. package/project/server/stack/network/tls/tls-server.js +45 -0
  169. package/project/server/stack/network/transport.js +19 -0
  170. package/project/server/stack/network/udp/udp-connection-client-shared.js +47 -0
  171. package/project/server/stack/network/udp/udp-connection-client.js +93 -0
  172. package/project/server/stack/network/udp/udp-connection-server-shared.js +51 -0
  173. package/project/server/stack/network/udp/udp-connection-server.js +58 -0
  174. package/project/server/stack/network/udp/udp-connection-shared.js +26 -0
  175. package/project/server/stack/network/udp/udp-connection.js +33 -0
  176. package/project/server/stack/network/udp/udp-server.js +74 -0
  177. package/project/server/stack/pending/pending-const.js +22 -0
  178. package/project/server/stack/pending/pending-context-receive.js +18 -0
  179. package/project/server/stack/pending/pending-context-send.js +18 -0
  180. package/project/server/stack/pending/pending-context.js +18 -0
  181. package/project/server/stack/pending/pending-inner.js +107 -0
  182. package/project/server/stack/pending/pending-switch.js +146 -0
  183. package/project/server/stack/stacks/ascii-dictionary.js +289 -0
  184. package/project/server/stack/stacks/binary-log.js +88 -0
  185. package/project/server/stack/stacks/bit-byte.js +51 -0
  186. package/project/server/stack/stacks/browser-data.js +25 -0
  187. package/project/server/stack/stacks/cancel-object.js +16 -0
  188. package/project/server/stack/stacks/connection-client.js +228 -0
  189. package/project/server/stack/stacks/connection-instance.js +69 -0
  190. package/project/server/stack/stacks/connection-ip.js +374 -0
  191. package/project/server/stack/stacks/connection-server.js +169 -0
  192. package/project/server/stack/stacks/connection-web.js +113 -0
  193. package/project/server/stack/stacks/connection-worker-client.js +29 -0
  194. package/project/server/stack/stacks/connection-worker-connection.js +41 -0
  195. package/project/server/stack/stacks/connection-worker-server.js +29 -0
  196. package/project/server/stack/stacks/connection-worker.js +99 -0
  197. package/project/server/stack/stacks/connection.js +132 -0
  198. package/project/server/stack/stacks/decoder.js +83 -0
  199. package/project/server/stack/stacks/encoder.js +82 -0
  200. package/project/server/stack/stacks/ip-log.js +24 -0
  201. package/project/server/stack/stacks/message-selector.js +22 -0
  202. package/project/server/stack/stacks/msg-ip.js +18 -0
  203. package/project/server/stack/stacks/stack-content-cache.js +27 -0
  204. package/project/z-abs-funclayer-engine-server.tree +230 -0
@@ -0,0 +1,125 @@
1
+
2
+ 'use strict';
3
+
4
+ const DnsUrlCache = require('../address/dns-url-cache');
5
+ const ExecutionContextTestCase = require('./execution-context-test-case');
6
+ const LocalDns = require('../address/local-dns');
7
+ const TestCase = require('./test-case');
8
+ const TestOutput = require('./test-output');
9
+ const ClientManager = require('../stack/managers/client-manager/client-manager');
10
+ const ServerManager = require('../stack/managers/server-manager/server-manager');
11
+ const SharedManager = require('../stack/managers/shared-manager');
12
+ const StackContentCache = require('../stack/stacks/stack-content-cache');
13
+ const ContentData = require('./data/content-data');
14
+ const ContentCache = require('./data/content-cache');
15
+ const TestCaseLoad = require('./test-case-load');
16
+ const TestData = require('./data/test-data');
17
+ const RuntimeDataShared = require('./data/runtime-data-shared');
18
+ const Addresses = require('../address/addresses');
19
+ const DebugDashboard = require('z-abs-funclayer-engine-server/server/debug-dashboard/debug-dashboard');
20
+ const StackComponentsCerts = require('z-abs-funclayer-stack-server/server/factory/stack-components-certs');
21
+ const StackComponentsFactory = require('z-abs-funclayer-stack-server/server/factory/stack-components-factory');
22
+ const GuidGenerator = require('z-abs-corelayer-cs/clientServer/guid-generator');
23
+ const ActorPathData = require('z-abs-corelayer-server/server/path/actor-path-data');
24
+ const Fs = require('fs');
25
+
26
+
27
+ class TestCaseLoader {
28
+ static load(repoName, sutName, futName, tcName, sutInstance, stagedNodes, debug, config, cbMessage, done) {
29
+ #BUILD_RELEASE_START
30
+ const executionContext = new ExecutionContextTestCase(debug);
31
+ #BUILD_RELEASE_STOP
32
+ #BUILD_DEBUG_START
33
+ const executionContext = new Proxy(new ExecutionContextTestCase(debug), {
34
+ set(obj, prop, value) {
35
+ if(undefined === Reflect.get(obj, prop)) {
36
+ ddb.warning(`member: "${prop}" is not defined in constructor.`);
37
+ }
38
+ return Reflect.set(obj, prop, value);
39
+ }
40
+ });
41
+ #BUILD_DEBUG_STOP
42
+ executionContext.setStageData('_BASE', sutName, sutInstance, stagedNodes);
43
+ executionContext.setTestData(sutName, sutInstance);
44
+ executionContext.config = config;
45
+
46
+ let pendings = 0;
47
+ let errorResponse = false;
48
+ const loadDone = (err, testCase) => {
49
+ if(!errorResponse) {
50
+ if(err) {
51
+ errorResponse = true;
52
+ done(err);
53
+ }
54
+ else if(0 === --pendings) {
55
+ executionContext.outputs.load();
56
+ testCase.load((loadErr) => {
57
+ done(loadErr, testCase);
58
+ });
59
+ }
60
+ }
61
+ };
62
+ let onTestDataLoaded = null;
63
+ let testCase = null;
64
+ ++pendings;
65
+ Fs.readFile(ActorPathData.getTestCaseFile(repoName, sutName, futName, tcName), (err, data) => {
66
+ if(!err) {
67
+ const tc = JSON.parse(data);
68
+ testCase = new TestCase(tc, [sutName, futName, tcName], 0, debug, executionContext, cbMessage);
69
+ if(testCase.containsInterceptor()) {
70
+ if(executionContext.testData.loaded) {
71
+ if(!StackComponentsFactory.supportInterceting('puppeteer', 'client', executionContext.testData)) { // HARDCODED
72
+ err = new Error('N/A');
73
+ }
74
+ }
75
+ else {
76
+ onTestDataLoaded = () => {
77
+ if(!StackComponentsFactory.supportInterceting('puppeteer', 'client', executionContext.testData)) { // HARDCODED
78
+ loadDone(new Error('N/A'), testCase);
79
+ }
80
+ else {
81
+ loadDone(null, testCase);
82
+ }
83
+ };
84
+ return;
85
+ }
86
+ }
87
+ }
88
+ loadDone(err, testCase);
89
+ });
90
+ ++pendings;
91
+ executionContext.contentData.load((err) => {
92
+ loadDone(err, testCase);
93
+ });
94
+ ++pendings;
95
+ executionContext.testData.load((err) => {
96
+ if(!err) {
97
+ if(config.asService) {
98
+ executionContext.testData.setOverrideTestData('tc-state-timeout', {
99
+ type: 'value',
100
+ value: '0'
101
+ });
102
+ }
103
+ if(onTestDataLoaded) {
104
+ onTestDataLoaded();
105
+ }
106
+ }
107
+ loadDone(err, testCase);
108
+ });
109
+ ++pendings;
110
+ Addresses.load(executionContext.addresses, (err) => {
111
+ loadDone(err, testCase);
112
+ });
113
+ ++pendings;
114
+ LocalDns.load(executionContext.dnsUrlCache.localDns, (err) => {
115
+ loadDone(err, testCase);
116
+ });
117
+ ++pendings;
118
+ StackComponentsCerts.isLoaded((err) => {
119
+ loadDone(err, testCase);
120
+ });
121
+ }
122
+ }
123
+
124
+
125
+ module.exports = TestCaseLoader;
@@ -0,0 +1,29 @@
1
+
2
+ 'use strict';
3
+
4
+ const MessageTestCaseStarted = require('../communication/messages/messages-s-to-c/message-test-case-started');
5
+ const MessageTestCaseStopped = require('../communication/messages/messages-s-to-c/message-test-case-stopped');
6
+ const ActorResultConst = require('z-abs-funclayer-engine-cs/clientServer/execution/actor-result-const');
7
+ const HighResolutionTimestamp = require('z-abs-corelayer-server/server/high-resolution-timestamp');
8
+
9
+
10
+ class TestCaseNotFound {
11
+ constructor(iterationTs, name, sutName, cbMessage) {
12
+ this.index = -1;
13
+ this.iterationTs = iterationTs;
14
+ this.name = name;
15
+ this.sutName = sutName;
16
+ this.cbMessage = cbMessage;
17
+ }
18
+
19
+ run(cbDone) {
20
+ const timestamp = process.hrtime.bigint();
21
+ const msgTcStarted = new MessageTestCaseStarted(this.index, this.iterationTs, this.name, sutName, [], HighResolutionTimestamp.getHighResolutionDate(timestamp), false);
22
+ this.cbMessage(msgTcStarted, null, this.debug);
23
+ const msgTcStopped = new MessageTestCaseStopped(this.index, this.iterationTs, 0n, ActorResultConst.REFLECTION, ActorResultConst.NONE, ActorResultConst.NONE, ActorResultConst.NONE, true);
24
+ this.cbMessage(msgTcStopped, null, this.debug);
25
+ cbDone();
26
+ }
27
+ }
28
+
29
+ module.exports = TestCaseNotFound;
@@ -0,0 +1,42 @@
1
+
2
+ 'use strict';
3
+
4
+
5
+ class TestCaseResultType {
6
+ constructor() {
7
+ this.testCaseResultTypeIds = new Map();
8
+ for(let i = 0; i <= 7; ++i) {
9
+ this.testCaseResultTypeIds.set(TestCaseResultType.names[i], i);
10
+ }
11
+ }
12
+
13
+ static getName(id) {
14
+ return TestCaseResultType.names[id];
15
+ }
16
+
17
+ static getId(name) {
18
+ return this.testCaseResultTypeIds.get(name);
19
+ }
20
+ }
21
+
22
+ TestCaseResultType.names = [
23
+ 'none',
24
+ 'pre',
25
+ 'exec',
26
+ 'pre_exec',
27
+ 'post',
28
+ 'pre_post',
29
+ 'exec_post',
30
+ 'all'
31
+ ];
32
+
33
+ TestCaseResultType.NONE = 0;
34
+ TestCaseResultType.PRE = 1;
35
+ TestCaseResultType.EXEC = 2;
36
+ TestCaseResultType.PRE_EXEC = 3;
37
+ TestCaseResultType.POST = 4;
38
+ TestCaseResultType.PRE_POST = 5;
39
+ TestCaseResultType.EXEC_POST = 6;
40
+ TestCaseResultType.ALL = 7;
41
+
42
+ module.exports = new TestCaseResultType();
@@ -0,0 +1,417 @@
1
+
2
+ 'use strict';
3
+
4
+
5
+ const MessageExecutionStared = require('../communication/messages/messages-s-to-c/message-execution-started');
6
+ const MessageTestCaseStarted = require('../communication/messages/messages-s-to-c/message-test-case-started');
7
+ const MessageTestCaseStopped = require('../communication/messages/messages-s-to-c/message-test-case-stopped');
8
+ const ActorStateMachine = require('./actor-state-machine');
9
+ const Actors = require('./actors');
10
+ const RuntimeDataShared = require('./data/runtime-data-shared');
11
+ const TestCaseLoad = require('./test-case-load');
12
+ const TestOutput = require('./test-output');
13
+ const StackComponentsFactory = require('z-abs-funclayer-stack-server/server/factory/stack-components-factory');
14
+ const ActorResultConst = require('z-abs-funclayer-engine-cs/clientServer/execution/actor-result-const');
15
+ const HighResolutionTimestamp = require('z-abs-corelayer-server/server/high-resolution-timestamp');
16
+ const MemoryCacheArray = require('z-abs-corelayer-cs/clientServer/memory/memory-cache-array');
17
+
18
+
19
+ class TestCase {
20
+ static NOT_RUNNING_IN_TS = -1;
21
+
22
+ constructor(tc, nameParams, iterationTs, debug, executionContext, cbMessage) {
23
+ this.uniqueTcId = 0n;
24
+ this.nameParams = nameParams;
25
+ this.tc = tc;
26
+ this.index = -1;
27
+ this.iterationTs = iterationTs;
28
+ this.kindOfRun = 0;
29
+ this.key = '';
30
+ this.debug = debug;
31
+ this.slowAwaitTime = {p: !executionContext.config.slow ? -1 : 250};
32
+ this.cbDone = null;
33
+ this.actors = null;
34
+ this.nodes = null;
35
+ this.executionContext = executionContext;
36
+ this.testCaseLoad = executionContext.testCaseLoad;
37
+ this.tcData = {
38
+ testDatasTestCase: new Map(),
39
+ testDatasTestCaseStatic: new Map(),
40
+ testDatasActor: new Map(),
41
+ verificationsTestCase: new Map(),
42
+ sharedRuntimeData: new RuntimeDataShared(),
43
+ };
44
+ this.cbMessage = cbMessage;
45
+ this.timestamp = null;
46
+
47
+ this.iterationTc = 1;
48
+ this.actorStateMachine = new ActorStateMachine();
49
+ this.TcDataInitialized = false;
50
+ }
51
+
52
+ getName() {
53
+ return this.tc.name;
54
+ }
55
+
56
+ containsInterceptor() {
57
+ const actors = this.tc.tc.actors;
58
+ for(let i = 0; i < actors.length; ++i) {
59
+ if('inter' === actors[i].type) {
60
+ return true;
61
+ }
62
+ }
63
+ return false;
64
+ }
65
+
66
+ load(cbResult) {
67
+ // TODO: restore instead of create.
68
+ this.tcData.sharedRuntimeData = new RuntimeDataShared();
69
+ this.uniqueTcId = this.executionContext.getUniqueId();
70
+ process.nextTick((self, Actors, cbResult) => {
71
+ self.kindOfRun = 0;
72
+ self.actors = new Actors(self.uniqueTcId, self.tc.tc, self.executionContext, self.tcData, self.debug, self.executionContext.config, self.slowAwaitTime, self.cbMessage);
73
+ self.actors.loadActors((result) => {
74
+ if(result) {
75
+ if(!self.TcDataInitialized) {
76
+ self.tcData.testDatasActor.set('pre', new Map());
77
+ self.tcData.testDatasActor.set('exec', new Map());
78
+ self.tcData.testDatasActor.set('post', new Map());
79
+ self._setTestDataTestCases(self.tc.tc.testDataTestCases);
80
+ self._setTestDataIteration(self.tc.tc.testDataIteration);
81
+ self._setVerificationTestCases(self.tc.tc.verificationTestCases);
82
+ const tcStaticData = self.getTestDataEngineBoolean('tc__staticData', false);
83
+ if(tcStaticData) {
84
+ self._setTestDatasTestCaseStatic(self.actors.preActors.actors, self.actors.execActors.actors, self.actors.postActors.actors);
85
+ }
86
+ self.TcDataInitialized = true;
87
+ }
88
+ self.nodes = self.actors.nodes;
89
+ self.actorStateMachine.init(self.tc, self.uniqueTcId, self.executionContext, self.actors, self.debug, self.cbMessage);
90
+ if(-1 !== self.slowAwaitTime.p) {
91
+ const slowAwaitTime = self.getTestDataEngineInteger('tc__SlowTime', self.slowAwaitTime);
92
+ self.slowAwaitTime.p = slowAwaitTime;
93
+ }
94
+ cbResult();
95
+ }
96
+ else {
97
+ cbResult(new Error('Error loading the Actors.'));
98
+ }
99
+ });
100
+ }, this, Actors, cbResult);
101
+ }
102
+
103
+ _restoreActors(cbResult) {
104
+ this.load(cbResult);
105
+ }
106
+
107
+ _run() {
108
+ this.timestamp = process.hrtime.bigint();
109
+ const msg = new MessageTestCaseStarted(this.index, this.iterationTs, this.tc.name, this.nameParams[0], this.actors.nodes, HighResolutionTimestamp.getHighResolutionDate(this.timestamp), true);
110
+ this.cbMessage(msg, null, this.debug);
111
+ this.actorStateMachine.run(this.sendSumResult.bind(this, this.index, this.iterationTs), this.cbDone);
112
+ }
113
+
114
+ runDistributionStatic(cbDone) {
115
+ cbDone((commentOut, last) => {
116
+ this.actors.destructor();
117
+ this._restoreActors((err) => {
118
+ setTimeout((self) => {
119
+ self._run();
120
+ }, this.testCaseLoad.lambda, this);
121
+ });
122
+ });
123
+ }
124
+
125
+ run(cbDone) {
126
+ this.cbDone = (done) => {
127
+ if(++this.iterationTc <= this.testCaseLoad.iterationsTc) {
128
+ done(false, false);
129
+ if(TestCaseLoad.EXECUTION_SERIAL === this.testCaseLoad.execution) {
130
+ if(TestCaseLoad.MODE_TC === this.testCaseLoad.mode) {
131
+ this.runDistributionStatic(cbDone);
132
+ }
133
+ }
134
+ }
135
+ else {
136
+ if(TestCase.NOT_RUNNING_IN_TS === this.index) {
137
+ cbDone((commentOut, last) => {
138
+ done(commentOut, last);
139
+ StackComponentsFactory.exitExecution(this.executionContext.executionData.id);
140
+ this.actors.destructor();
141
+ });
142
+ }
143
+ else {
144
+ const result = done(false, true);
145
+ cbDone(result);
146
+ this.actors.destructor();
147
+ }
148
+ }
149
+ };
150
+ if(TestCase.NOT_RUNNING_IN_TS === this.index) {
151
+ StackComponentsFactory.initExecution(this.executionContext.executionData.id, this.executionContext.debugDashboard);
152
+ const outputs = this.executionContext.outputs;
153
+ const msg = new MessageExecutionStared(outputs.chosen, outputs.chosenClient, outputs.chosenClientConsole);
154
+ this.cbMessage(msg, null, this.debug);
155
+ }
156
+ this._run();
157
+ }
158
+
159
+ runCommentOut(cbDone) {
160
+ this.cbDone = (done) => {
161
+ done(true);
162
+ cbDone(ActorResultConst.NONE);
163
+ };
164
+ this.timestamp = process.hrtime.bigint();
165
+ const msg = new MessageTestCaseStarted(this.index, this.iterationTs, this.tc.name, this.nameParams[0], this.actors.nodes, HighResolutionTimestamp.getHighResolutionDate(this.timestamp), false);
166
+ this.cbMessage(msg, null, this.debug);
167
+ this.actorStateMachine.runCommentOut(this.sendSumResult.bind(this, this.index, this.iterationTs), this.cbDone);
168
+ }
169
+
170
+ stop(done) {
171
+ this.actorStateMachine.stop(done);
172
+ }
173
+
174
+ actorDebugContinue(index) {
175
+ this.actors.actors[index].debugContinue();
176
+ }
177
+
178
+ getTestDataEngineString(key, defaultValue) {
179
+ const valueData = this._getTestDataEngine(key);
180
+ if(undefined !== valueData) {
181
+ return valueData.value;
182
+ }
183
+ else {
184
+ return defaultValue;
185
+ }
186
+ }
187
+
188
+ getTestDataEngineInteger(key, defaultValue) {
189
+ const valueData = this._getTestDataEngine(key);
190
+ if(undefined !== valueData) {
191
+ return Number.parseInt(valueData.value);
192
+ }
193
+ else {
194
+ return defaultValue;
195
+ }
196
+ }
197
+
198
+ getTestDataEngineBoolean(key, defaultValue) {
199
+ const valueData = this._getTestDataEngine(key);
200
+ if(undefined !== valueData) {
201
+ if('true' === valueData.value) {
202
+ return true;
203
+ }
204
+ else if('false' === valueData.value) {
205
+ return false;
206
+ }
207
+ else {
208
+ return undefined;
209
+ }
210
+ }
211
+ else {
212
+ return defaultValue;
213
+ }
214
+ }
215
+
216
+ _getTestDataEngine(key) {
217
+ let valueData = this.tcData.testDatasTestCase.get(key);
218
+ if(undefined === valueData) {
219
+ valueData = this.executionContext.testData.getTestData(key, (key) => {
220
+ return this.tcData.testDatasTestCaseStatic.get(key);
221
+ });
222
+ }
223
+ if(undefined !== valueData) {
224
+ return valueData;
225
+ }
226
+ }
227
+
228
+ sendSumResult(index, iterationTs, resultId, preResultId, execResultId, postResultId, last) {
229
+ const duration = process.hrtime.bigint() - this.timestamp;
230
+ const msg = new MessageTestCaseStopped(index, iterationTs, duration, resultId, preResultId, execResultId, postResultId, last);
231
+ this.cbMessage(msg, null, this.debug);
232
+ if(TestOutput.LOG_CONSOLE & this.executionContext.outputs.chosen) {
233
+ if(TestOutput.LOG_DETAIL_TC & this.executionContext.outputs.chosenConsole) {
234
+ if(TestCase.NOT_RUNNING_IN_TS === index) {
235
+ ddb.print(ActorResultConst.RESULTS_CONSOLE[resultId], this.nameParams[2]);
236
+ }
237
+ else {
238
+ const indexText = (index + 1).toString().padStart(4);
239
+ const iterationTsText = iterationTs.toString().padStart(3);
240
+ ddb.print(ddb.yellow(indexText), ddb.yellow(iterationTsText), ActorResultConst.RESULTS_CONSOLE[resultId], this.nameParams[2]);
241
+ }
242
+ }
243
+ if(TestOutput.LOG_DETAIL_ERR & this.executionContext.outputs.chosenConsole) {
244
+ if(TestCase.NOT_RUNNING_IN_TS === index) {
245
+ const errorDatass = this.executionContext.testCaseStatistics.errorDatass;
246
+ errorDatass.forEach((errorDatas) => {
247
+ errorDatas.forEach((errorData) => {
248
+ errorData.errorData.forEach((data) => {
249
+ if(data) {
250
+ ddb.print(ddb.green(errorData.name + '[') + errorData.id + ddb.green(']'), data.action);
251
+ }
252
+ });
253
+ });
254
+ });
255
+ }
256
+ }
257
+ }
258
+ return resultId;
259
+ }
260
+
261
+ _setTestDatasTestCaseStatic(preActors, execActors, postActors) {
262
+ this.executionContext.testData.addTestDataEmptyArray('preActorNames', this.tcData.testDatasTestCaseStatic);
263
+ this.executionContext.testData.addTestDataEmptyArray('preActorInstanceIndices', this.tcData.testDatasTestCaseStatic);
264
+ this.executionContext.testData.addTestDataEmptyArray('execActorNames', this.tcData.testDatasTestCaseStatic);
265
+ this.executionContext.testData.addTestDataEmptyArray('execActorInstanceIndices', this.tcData.testDatasTestCaseStatic);
266
+ this.executionContext.testData.addTestDataEmptyArray('postActorNames', this.tcData.testDatasTestCaseStatic);
267
+ this.executionContext.testData.addTestDataEmptyArray('postActorInstanceIndices', this.tcData.testDatasTestCaseStatic);
268
+
269
+ const preActorNames = this.tcData.testDatasTestCaseStatic.get('preActorNames');
270
+ const preActorInstanceIndices = this.tcData.testDatasTestCaseStatic.get('preActorInstanceIndices');
271
+ preActorNames.value = [];
272
+ preActorInstanceIndices.value = [];
273
+ preActors.forEach((actor) => {
274
+ preActorNames.value.push(actor.name);
275
+ preActorInstanceIndices.value.push(actor.instanceIndex);
276
+ });
277
+
278
+ const execActorNames = this.tcData.testDatasTestCaseStatic.get('execActorNames');
279
+ const execActorInstanceIndices = this.tcData.testDatasTestCaseStatic.get('execActorInstanceIndices');
280
+ execActorNames.value = [];
281
+ execActorInstanceIndices.value = [];
282
+ execActors.forEach((actor) => {
283
+ execActorNames.value.push(actor.name);
284
+ execActorInstanceIndices.value.push(actor.instanceIndex);
285
+ });
286
+
287
+ const postActorNames = this.tcData.testDatasTestCaseStatic.get('postActorNames');
288
+ const postActorInstanceIndices = this.tcData.testDatasTestCaseStatic.get('postActorInstanceIndices');
289
+ postActorNames.value = [];
290
+ postActorInstanceIndices.value = [];
291
+ postActors.forEach((actor) => {
292
+ postActorNames.value.push(actor.name);
293
+ postActorInstanceIndices.value.push(actor.instanceIndex);
294
+ });
295
+ }
296
+
297
+ _setTestDataTestCases(testDataTestCases) {
298
+ if(undefined !== testDataTestCases && Array.isArray(testDataTestCases)) {
299
+ testDataTestCases.forEach((testDataTestCase) => {
300
+ const key = testDataTestCase.key;
301
+ if(key.endsWith('[]')) {
302
+ const arrayName = key.substr(0, key.length - 2);
303
+ let valueData = this.tcData.testDatasTestCase.get(arrayName);
304
+ if(undefined === valueData) {
305
+ valueData = {
306
+ type: 'array',
307
+ value: []
308
+ };
309
+ this.tcData.testDatasTestCase.set(arrayName, valueData);
310
+ }
311
+ valueData.value.push(testDataTestCase.value);
312
+ }
313
+ else {
314
+ this.tcData.testDatasTestCase.set(testDataTestCase.key, {
315
+ type: 'value',
316
+ value: testDataTestCase.value
317
+ });
318
+ }
319
+ });
320
+ }
321
+ }
322
+
323
+ _setTestDataIteration(testDataIteration) {
324
+ if(undefined !== testDataIteration && Array.isArray(testDataIteration)) {
325
+ testDataIteration.forEach((testDataActor) => {
326
+ const testDatasPhase = this.tcData.testDatasActor.get(testDataActor.phase);
327
+ if(undefined !== testDatasPhase) {
328
+ let testDatasType = testDatasPhase.get(testDataActor.type);
329
+ if(undefined === testDatasType) {
330
+ testDatasType = new Map();
331
+ testDatasPhase.set(testDataActor.type, testDatasType);
332
+ }
333
+ this._setTestDataIterationValue(testDatasType, testDataActor);
334
+ }
335
+ });
336
+ }
337
+ }
338
+
339
+ _setTestDataIterationValue(testDatasType, testDataActor) {
340
+ const key = testDataActor.key;
341
+ if(/\[(.*)\]$/.test(key)) {
342
+ const match = key.match(/\[(.*)\]$/);
343
+ if(null != match) {
344
+ const arrayName = key.substr(0, key.length - match[0].length);
345
+ let testDatasActor = testDatasType.get(arrayName);
346
+ if(undefined === testDatasActor) {
347
+ testDatasActor = {
348
+ currentIndex: 0,
349
+ values: []
350
+ };
351
+ testDatasType.set(arrayName, testDatasActor);
352
+ }
353
+ const valueArray = testDatasActor.values.find((data) => {
354
+ return data.name === key;
355
+ });
356
+ if(undefined === valueArray) {
357
+ valueArray = {
358
+ name: key,
359
+ type: 'array',
360
+ value: []
361
+ };
362
+ }
363
+ testDatasActor.values.push(valueArray);
364
+ valueArray.value.push(testDataActor.value);
365
+ }
366
+ }
367
+ else {
368
+ let testDatasActor = testDatasType.get(key);
369
+ if(undefined === testDatasActor) {
370
+ testDatasActor = {
371
+ currentIndex: 0,
372
+ values: []
373
+ };
374
+ testDatasType.set(key, testDatasActor);
375
+ }
376
+ testDatasActor.values.push({
377
+ type: 'value',
378
+ value: testDataActor.value
379
+ });
380
+ }
381
+ }
382
+
383
+ _setVerificationTestCases(verificationTestCases) {
384
+ if(undefined !== verificationTestCases && Array.isArray(verificationTestCases)) {
385
+ verificationTestCases.forEach((verificationTestCase) => {
386
+ const key = verificationTestCase.key;
387
+ if(key.endsWith('[]')) {
388
+ const arrayName = key.substr(0, key.length - 2);
389
+ let valueData = this.tcData.verificationsTestCase.get(arrayName);
390
+ if(undefined === valueData) {
391
+ valueData = {
392
+ type: 'array',
393
+ value: [],
394
+ operation: [],
395
+ valueType: []
396
+ };
397
+ this.tcData.verificationsTestCase.set(arrayName, valueData);
398
+ }
399
+ valueData.value.push(verificationTestCase.value);
400
+ valueData.operation.push(0 === verificationTestCase.operation.length ? '===' : verificationTestCase.operation);
401
+ valueData.valueType.push(0 === verificationTestCase.type.length ? 'string' : verificationTestCase.type);
402
+ }
403
+ else {
404
+ this.tcData.verificationsTestCase.set(verificationTestCase.key, {
405
+ type: 'value',
406
+ value: verificationTestCase.value,
407
+ operation: 0 === verificationTestCase.operation.length ? '===' : verificationTestCase.operation,
408
+ valueType: 0 === verificationTestCase.type.length ? 'string' : verificationTestCase.type
409
+ });
410
+ }
411
+ });
412
+ }
413
+ }
414
+ }
415
+
416
+
417
+ module.exports = TestCase;