@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.
- package/.gitattributes +26 -0
- package/LICENSE.txt +96 -0
- package/README.md +5 -0
- package/npm-shrinkwrap.json +13 -0
- package/package.json +10 -0
- package/project/server/_build/Server-FuncLayer-Engine-server.bld +12 -0
- package/project/server/_build/z-abs-funclayer-engine-server.prj +12 -0
- package/project/server/address/address-calculator.js +377 -0
- package/project/server/address/address-data.js +364 -0
- package/project/server/address/address-manager.js +251 -0
- package/project/server/address/address.js +176 -0
- package/project/server/address/addresses.js +122 -0
- package/project/server/address/dns-url-cache.js +130 -0
- package/project/server/address/interfaces.js +100 -0
- package/project/server/address/local-dns.js +35 -0
- package/project/server/address/login-report.js +56 -0
- package/project/server/address/networks.js +598 -0
- package/project/server/address/real-networks.js +102 -0
- package/project/server/address/subnet.js +60 -0
- package/project/server/communication/messages/messages-s-to-c/message-execution-started.js +17 -0
- package/project/server/communication/messages/messages-s-to-c/message-execution-stopped.js +14 -0
- package/project/server/communication/messages/messages-s-to-c/message-test-case-debug-paused.js +18 -0
- package/project/server/communication/messages/messages-s-to-c/message-test-case-log.js +25 -0
- package/project/server/communication/messages/messages-s-to-c/message-test-case-started.js +21 -0
- package/project/server/communication/messages/messages-s-to-c/message-test-case-state.js +18 -0
- package/project/server/communication/messages/messages-s-to-c/message-test-case-stopped.js +22 -0
- package/project/server/communication/messages/messages-s-to-c/message-test-stage-started.js +19 -0
- package/project/server/communication/messages/messages-s-to-c/message-test-stage-stopped.js +19 -0
- package/project/server/communication/messages/messages-s-to-c/message-test-suite-started.js +16 -0
- package/project/server/communication/messages/messages-s-to-c/message-test-suite-stopped.js +19 -0
- package/project/server/communication/messages/messages-s-to-w/message-test-case-debug-actor-index-ok.js +15 -0
- package/project/server/communication/messages/messages-w-to-s/message-test-case-debug-actor-index.js +15 -0
- package/project/server/debug/debug-step-over.js +54 -0
- package/project/server/debug/debugger.js +102 -0
- package/project/server/debug-dashboard/debug-dashboard.js +14 -0
- package/project/server/debug-dashboard/gauge-manager.js +44 -0
- package/project/server/debug-dashboard/gauge.js +37 -0
- package/project/server/engine/actor/actor-condition.js +335 -0
- package/project/server/engine/actor/actor-intercepting.js +32 -0
- package/project/server/engine/actor/actor-local.js +24 -0
- package/project/server/engine/actor/actor-mixins/asynch-mixin.js +103 -0
- package/project/server/engine/actor/actor-mixins/content-mixin.js +22 -0
- package/project/server/engine/actor/actor-mixins/logger-mixin.js +603 -0
- package/project/server/engine/actor/actor-mixins/process-mixin.js +35 -0
- package/project/server/engine/actor/actor-mixins/shared-data-mixin.js +109 -0
- package/project/server/engine/actor/actor-mixins/shared-execution-data-mixin.js +57 -0
- package/project/server/engine/actor/actor-mixins/stack-mixin-client.js +157 -0
- package/project/server/engine/actor/actor-mixins/stack-mixin-server.js +123 -0
- package/project/server/engine/actor/actor-mixins/stack-mixin.js +128 -0
- package/project/server/engine/actor/actor-mixins/test-data-mixin.js +402 -0
- package/project/server/engine/actor/actor-mixins/timer-mixin.js +44 -0
- package/project/server/engine/actor/actor-mixins/verify-mixin-base.js +668 -0
- package/project/server/engine/actor/actor-mixins/verify-mixin-mandatory.js +46 -0
- package/project/server/engine/actor/actor-mixins/verify-mixin-optional.js +44 -0
- package/project/server/engine/actor/actor-mixins/verify-mixin-value.js +71 -0
- package/project/server/engine/actor/actor-originating.js +32 -0
- package/project/server/engine/actor/actor-part-mixins/part-asynch-mixin.js +24 -0
- package/project/server/engine/actor/actor-part-mixins/part-logger-mixin.js +39 -0
- package/project/server/engine/actor/actor-part-mixins/part-shared-runtime-data-mixin.js +33 -0
- package/project/server/engine/actor/actor-part-mixins/part-timer-mixin.js +12 -0
- package/project/server/engine/actor/actor-part-mixins/part-verify-mixin-mandatory.js +15 -0
- package/project/server/engine/actor/actor-part-mixins/part-verify-mixin-optional.js +15 -0
- package/project/server/engine/actor/actor-part-mixins/part-verify-mixin-value.js +15 -0
- package/project/server/engine/actor/actor-part-post.js +37 -0
- package/project/server/engine/actor/actor-part-pre.js +37 -0
- package/project/server/engine/actor/actor-pending.js +79 -0
- package/project/server/engine/actor/actor-proxy.js +38 -0
- package/project/server/engine/actor/actor-results.js +36 -0
- package/project/server/engine/actor/actor-state-timeout.js +35 -0
- package/project/server/engine/actor/actor-sut.js +38 -0
- package/project/server/engine/actor/actor-terminating.js +32 -0
- package/project/server/engine/actor/actor.js +553 -0
- package/project/server/engine/actor-phase.js +26 -0
- package/project/server/engine/actor-state-machine-base.js +298 -0
- package/project/server/engine/actor-state-machine-data.js +383 -0
- package/project/server/engine/actor-state-machine-exec.js +137 -0
- package/project/server/engine/actor-state-machine-post.js +177 -0
- package/project/server/engine/actor-state-machine-pre.js +142 -0
- package/project/server/engine/actor-state-machine-process.js +88 -0
- package/project/server/engine/actor-state-machine-state.js +52 -0
- package/project/server/engine/actor-state-machine.js +185 -0
- package/project/server/engine/actor-state.js +35 -0
- package/project/server/engine/actor-worker.js +68 -0
- package/project/server/engine/actors-phase.js +49 -0
- package/project/server/engine/actors.js +317 -0
- package/project/server/engine/data/content-audio.js +18 -0
- package/project/server/engine/data/content-base.js +91 -0
- package/project/server/engine/data/content-binary.js +15 -0
- package/project/server/engine/data/content-cache.js +67 -0
- package/project/server/engine/data/content-data.js +254 -0
- package/project/server/engine/data/content-documents.js +18 -0
- package/project/server/engine/data/content-image.js +20 -0
- package/project/server/engine/data/content-other.js +19 -0
- package/project/server/engine/data/content-text.js +19 -0
- package/project/server/engine/data/content-undefined.js +14 -0
- package/project/server/engine/data/content-video.js +20 -0
- package/project/server/engine/data/content.js +60 -0
- package/project/server/engine/data/runtime-data-shared.js +75 -0
- package/project/server/engine/data/test-data.js +239 -0
- package/project/server/engine/execution-context-test-case.js +48 -0
- package/project/server/engine/execution-context-test-suite.js +66 -0
- package/project/server/engine/execution-context.js +93 -0
- package/project/server/engine/stage-setter.js +132 -0
- package/project/server/engine/stage.js +83 -0
- package/project/server/engine/test-case-load.js +25 -0
- package/project/server/engine/test-case-loader.js +125 -0
- package/project/server/engine/test-case-not-found.js +29 -0
- package/project/server/engine/test-case-result-type.js +42 -0
- package/project/server/engine/test-case.js +417 -0
- package/project/server/engine/test-output.js +116 -0
- package/project/server/engine/test-statistics-test-case.js +59 -0
- package/project/server/engine/test-statistics-test-suite.js +63 -0
- package/project/server/engine/test-suite.js +276 -0
- package/project/server/stack/api/base-64.js +16 -0
- package/project/server/stack/api/const-commands-decoder.js +15 -0
- package/project/server/stack/api/const-commands-encoder.js +15 -0
- package/project/server/stack/api/hmacSha1.js +14 -0
- package/project/server/stack/api/json-web-token.js +38 -0
- package/project/server/stack/api/sdp/sdp-decoder.js +70 -0
- package/project/server/stack/api/sdp/sdp-encoder.js +40 -0
- package/project/server/stack/api/sdp/sdp-media-attribute.js +13 -0
- package/project/server/stack/api/sdp/sdp-media-session.js +16 -0
- package/project/server/stack/api/sdp/sdp-message.js +17 -0
- package/project/server/stack/api/sdp/sdp-origin.js +17 -0
- package/project/server/stack/api/sdp/sdp-session-attribute.js +13 -0
- package/project/server/stack/api/sdp/sdp-timing.js +15 -0
- package/project/server/stack/api/text-protocol-header.js +35 -0
- package/project/server/stack/factory/stack-components-helpers.js +22 -0
- package/project/server/stack/factory/stack-components-template-base-actors.js +124 -0
- package/project/server/stack/factory/stack-components-template-base-test-cases.js +22 -0
- package/project/server/stack/factory/stack-components-templates-actors.js +15 -0
- package/project/server/stack/factory/stack-components-templates-test-cases.js +20 -0
- package/project/server/stack/managers/client-manager/client-manager.js +193 -0
- package/project/server/stack/managers/connection-manager/connection-data.js +82 -0
- package/project/server/stack/managers/connection-manager/connection-manager.js +177 -0
- package/project/server/stack/managers/connection-manager/connection-object.js +148 -0
- package/project/server/stack/managers/connection-manager/shared-data.js +14 -0
- package/project/server/stack/managers/manager.js +95 -0
- package/project/server/stack/managers/server-manager/server-manager.js +76 -0
- package/project/server/stack/managers/server-manager/server.js +384 -0
- package/project/server/stack/managers/shared-manager.js +117 -0
- package/project/server/stack/network/buffer-manager.js +190 -0
- package/project/server/stack/network/mc/mc-connection-client-shared.js +51 -0
- package/project/server/stack/network/mc/mc-connection-client.js +117 -0
- package/project/server/stack/network/mc/mc-connection-server-shared.js +51 -0
- package/project/server/stack/network/mc/mc-connection-server.js +58 -0
- package/project/server/stack/network/mc/mc-connection-shared.js +26 -0
- package/project/server/stack/network/mc/mc-connection.js +33 -0
- package/project/server/stack/network/mc/mc-server.js +90 -0
- package/project/server/stack/network/network-connection-shared.js +177 -0
- package/project/server/stack/network/network-connection.js +134 -0
- package/project/server/stack/network/network-helper.js +12 -0
- package/project/server/stack/network/network-server.js +36 -0
- package/project/server/stack/network/network-type.js +46 -0
- package/project/server/stack/network/tcp/tcp-connection-client-shared.js +18 -0
- package/project/server/stack/network/tcp/tcp-connection-client.js +71 -0
- package/project/server/stack/network/tcp/tcp-connection-server-shared.js +14 -0
- package/project/server/stack/network/tcp/tcp-connection-server.js +16 -0
- package/project/server/stack/network/tcp/tcp-connection-shared.js +55 -0
- package/project/server/stack/network/tcp/tcp-connection.js +167 -0
- package/project/server/stack/network/tcp/tcp-server.js +35 -0
- package/project/server/stack/network/tls/tls-connection-client-shared.js +18 -0
- package/project/server/stack/network/tls/tls-connection-client.js +76 -0
- package/project/server/stack/network/tls/tls-connection-server-shared.js +14 -0
- package/project/server/stack/network/tls/tls-connection-server.js +16 -0
- package/project/server/stack/network/tls/tls-connection-shared.js +63 -0
- package/project/server/stack/network/tls/tls-connection.js +176 -0
- package/project/server/stack/network/tls/tls-server.js +45 -0
- package/project/server/stack/network/transport.js +19 -0
- package/project/server/stack/network/udp/udp-connection-client-shared.js +47 -0
- package/project/server/stack/network/udp/udp-connection-client.js +93 -0
- package/project/server/stack/network/udp/udp-connection-server-shared.js +51 -0
- package/project/server/stack/network/udp/udp-connection-server.js +58 -0
- package/project/server/stack/network/udp/udp-connection-shared.js +26 -0
- package/project/server/stack/network/udp/udp-connection.js +33 -0
- package/project/server/stack/network/udp/udp-server.js +74 -0
- package/project/server/stack/pending/pending-const.js +22 -0
- package/project/server/stack/pending/pending-context-receive.js +18 -0
- package/project/server/stack/pending/pending-context-send.js +18 -0
- package/project/server/stack/pending/pending-context.js +18 -0
- package/project/server/stack/pending/pending-inner.js +107 -0
- package/project/server/stack/pending/pending-switch.js +146 -0
- package/project/server/stack/stacks/ascii-dictionary.js +289 -0
- package/project/server/stack/stacks/binary-log.js +88 -0
- package/project/server/stack/stacks/bit-byte.js +51 -0
- package/project/server/stack/stacks/browser-data.js +25 -0
- package/project/server/stack/stacks/cancel-object.js +16 -0
- package/project/server/stack/stacks/connection-client.js +228 -0
- package/project/server/stack/stacks/connection-instance.js +69 -0
- package/project/server/stack/stacks/connection-ip.js +374 -0
- package/project/server/stack/stacks/connection-server.js +169 -0
- package/project/server/stack/stacks/connection-web.js +113 -0
- package/project/server/stack/stacks/connection-worker-client.js +29 -0
- package/project/server/stack/stacks/connection-worker-connection.js +41 -0
- package/project/server/stack/stacks/connection-worker-server.js +29 -0
- package/project/server/stack/stacks/connection-worker.js +99 -0
- package/project/server/stack/stacks/connection.js +132 -0
- package/project/server/stack/stacks/decoder.js +83 -0
- package/project/server/stack/stacks/encoder.js +82 -0
- package/project/server/stack/stacks/ip-log.js +24 -0
- package/project/server/stack/stacks/message-selector.js +22 -0
- package/project/server/stack/stacks/msg-ip.js +18 -0
- package/project/server/stack/stacks/stack-content-cache.js +27 -0
- 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;
|