jspurefix 1.3.0 → 1.4.1
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/README.md +5 -2
- package/data/session/genkey.ps1 +179 -0
- package/dist/buffer/ascii/ascii-encoder.d.ts +1 -1
- package/dist/buffer/ascii/ascii-encoder.js +42 -30
- package/dist/buffer/ascii/ascii-encoder.js.map +1 -1
- package/dist/buffer/ascii/ascii-view.d.ts +2 -2
- package/dist/buffer/ascii/ascii-view.js.map +1 -1
- package/dist/buffer/ascii/time-formatter.js.map +1 -1
- package/dist/buffer/elastic-buffer.js +1 -1
- package/dist/buffer/elastic-buffer.js.map +1 -1
- package/dist/buffer/encode-proxy.js.map +1 -1
- package/dist/buffer/fixml/fixml-encoder.js +1 -1
- package/dist/buffer/fixml/fixml-encoder.js.map +1 -1
- package/dist/buffer/fixml/fixml-view.d.ts +2 -0
- package/dist/buffer/fixml/fixml-view.js +3 -0
- package/dist/buffer/fixml/fixml-view.js.map +1 -1
- package/dist/buffer/msg-view.d.ts +2 -0
- package/dist/buffer/msg-view.js +2 -2
- package/dist/buffer/msg-view.js.map +1 -1
- package/dist/dict-parser.js +9 -9
- package/dist/dict-parser.js.map +1 -1
- package/dist/dictionary/compiler/msg-compiler.js +2 -2
- package/dist/dictionary/compiler/msg-compiler.js.map +1 -1
- package/dist/dictionary/parser/fix-repository/repository-xml-parser.js +1 -1
- package/dist/dictionary/parser/fix-repository/repository-xml-parser.js.map +1 -1
- package/dist/dictionary/parser/quickfix/quick-fix-xml-file-parser.js +1 -1
- package/dist/dictionary/parser/quickfix/quick-fix-xml-file-parser.js.map +1 -1
- package/dist/jsfix-cmd.js +3 -3
- package/dist/jsfix-cmd.js.map +1 -1
- package/dist/sample/http/oms/app.js +2 -2
- package/dist/sample/http/oms/app.js.map +1 -1
- package/dist/sample/launcher.js +2 -2
- package/dist/sample/launcher.js.map +1 -1
- package/dist/sample/tcp/qf-md/app.js +2 -2
- package/dist/sample/tcp/qf-md/app.js.map +1 -1
- package/dist/sample/tcp/recovering-skeleton/respawn-2.d.ts +2 -0
- package/dist/sample/tcp/recovering-skeleton/respawn-2.js +3 -0
- package/dist/sample/tcp/recovering-skeleton/respawn-2.js.map +1 -0
- package/dist/sample/tcp/recovering-skeleton/respawn-acceptor.js +1 -1
- package/dist/sample/tcp/recovering-skeleton/respawn-acceptor.js.map +1 -1
- package/dist/sample/tcp/skeleton/app.js +2 -2
- package/dist/sample/tcp/skeleton/app.js.map +1 -1
- package/dist/sample/tcp/skeleton/skeleton-session.d.ts +5 -1
- package/dist/sample/tcp/skeleton/skeleton-session.js +21 -2
- package/dist/sample/tcp/skeleton/skeleton-session.js.map +1 -1
- package/dist/sample/tcp/tls-trade-capture/app.js +2 -2
- package/dist/sample/tcp/tls-trade-capture/app.js.map +1 -1
- package/dist/sample/tcp/trade-capture/app.js +2 -2
- package/dist/sample/tcp/trade-capture/app.js.map +1 -1
- package/dist/sample/tcp/trade-capture/trade-capture-client.d.ts +1 -0
- package/dist/sample/tcp/trade-capture/trade-capture-client.js +7 -3
- package/dist/sample/tcp/trade-capture/trade-capture-client.js.map +1 -1
- package/dist/store/fix-msg-ascii-store-recovery.d.ts +12 -0
- package/dist/store/fix-msg-ascii-store-recovery.js +60 -0
- package/dist/store/fix-msg-ascii-store-recovery.js.map +1 -0
- package/dist/store/fix-msg-ascii-store-replay.d.ts +13 -0
- package/dist/store/fix-msg-ascii-store-replay.js +60 -0
- package/dist/store/fix-msg-ascii-store-replay.js.map +1 -0
- package/dist/store/fix-msg-ascii-store-resend.js +3 -2
- package/dist/store/fix-msg-ascii-store-resend.js.map +1 -1
- package/dist/store/fix-msg-store-record.js.map +1 -1
- package/dist/store/fix-replay-record.d.ts +12 -0
- package/dist/store/fix-replay-record.js +12 -0
- package/dist/store/fix-replay-record.js.map +1 -0
- package/dist/store/fix-resend-record.d.ts +12 -0
- package/dist/store/fix-resend-record.js +12 -0
- package/dist/store/fix-resend-record.js.map +1 -0
- package/dist/store/replay-record.d.ts +6 -0
- package/dist/store/replay-record.js +3 -0
- package/dist/store/replay-record.js.map +1 -0
- package/dist/store/store-replay-record.d.ts +12 -0
- package/dist/store/store-replay-record.js +12 -0
- package/dist/store/store-replay-record.js.map +1 -0
- package/dist/tcp/tls-options.d.ts +5 -0
- package/dist/tcp/tls-options.js +45 -0
- package/dist/tcp/tls-options.js.map +1 -0
- package/dist/test/ascii-encode.test.d.ts +1 -0
- package/dist/test/ascii-encode.test.js +416 -0
- package/dist/test/ascii-encode.test.js.map +1 -0
- package/dist/test/ascii-encoder.test.js +2 -2
- package/dist/test/ascii-encoder.test.js.map +1 -1
- package/dist/test/ascii-parser.test.js +9 -7
- package/dist/test/ascii-parser.test.js.map +1 -1
- package/dist/test/ascii-segment.test.js +7 -6
- package/dist/test/ascii-segment.test.js.map +1 -1
- package/dist/test/ascii-store-recovery.test.d.ts +1 -0
- package/dist/test/ascii-store-recovery.test.js +50 -0
- package/dist/test/ascii-store-recovery.test.js.map +1 -0
- package/dist/test/ascii-store-replay.test.js +2 -2
- package/dist/test/ascii-store-replay.test.js.map +1 -1
- package/dist/test/ascii-tag-pos.test.js +2 -2
- package/dist/test/ascii-tag-pos.test.js.map +1 -1
- package/dist/test/encode-proxy.test.js +1 -1
- package/dist/test/encode-proxy.test.js.map +1 -1
- package/dist/test/execution-report.test.js +2 -2
- package/dist/test/execution-report.test.js.map +1 -1
- package/dist/test/fix-log-replay.test.js +2 -2
- package/dist/test/fix-log-replay.test.js.map +1 -1
- package/dist/test/fix-repo-dict.test.js +1 -1
- package/dist/test/fix-repo-dict.test.js.map +1 -1
- package/dist/test/logon.test.js +2 -2
- package/dist/test/logon.test.js.map +1 -1
- package/dist/test/memory-store.test.js +2 -2
- package/dist/test/memory-store.test.js.map +1 -1
- package/dist/test/qf-full-msg.test.js +14 -13
- package/dist/test/qf-full-msg.test.js.map +1 -1
- package/dist/test/repo-full-ascii-msg.test.js +10 -9
- package/dist/test/repo-full-ascii-msg.test.js.map +1 -1
- package/dist/test/repo-full-fixml-msg.test.js +15 -15
- package/dist/test/repo-full-fixml-msg.test.js.map +1 -1
- package/dist/test/session.test.js +262 -143
- package/dist/test/session.test.js.map +1 -1
- package/dist/test/to-views.js +1 -1
- package/dist/test/to-views.js.map +1 -1
- package/dist/test/view-decode.test.js +2 -2
- package/dist/test/view-decode.test.js.map +1 -1
- package/dist/transport/ascii/ascii-msg-transmitter.js +6 -3
- package/dist/transport/ascii/ascii-msg-transmitter.js.map +1 -1
- package/dist/transport/ascii/ascii-session.d.ts +8 -0
- package/dist/transport/ascii/ascii-session.js +67 -19
- package/dist/transport/ascii/ascii-session.js.map +1 -1
- package/dist/transport/duplex/http-duplex.js +2 -2
- package/dist/transport/duplex/http-duplex.js.map +1 -1
- package/dist/transport/fix-session-state.js +4 -1
- package/dist/transport/fix-session-state.js.map +1 -1
- package/dist/transport/fix-session.d.ts +6 -0
- package/dist/transport/fix-session.js +91 -38
- package/dist/transport/fix-session.js.map +1 -1
- package/dist/transport/http/http-acceptor.js +8 -7
- package/dist/transport/http/http-acceptor.js.map +1 -1
- package/dist/transport/make-config.js +1 -1
- package/dist/transport/make-config.js.map +1 -1
- package/dist/transport/session-msg-factory.d.ts +24 -2
- package/dist/transport/session-msg-factory.js +143 -3
- package/dist/transport/session-msg-factory.js.map +1 -1
- package/dist/transport/tcp/recovering-initiator.d.ts +17 -0
- package/dist/transport/tcp/recovering-initiator.js +30 -0
- package/dist/transport/tcp/recovering-initiator.js.map +1 -0
- package/dist/transport/tcp/recovering_initiator.d.ts +12 -0
- package/dist/transport/tcp/recovering_initiator.js +25 -0
- package/dist/transport/tcp/recovering_initiator.js.map +1 -0
- package/dist/transport/tcp/resilient-initiator.d.ts +12 -0
- package/dist/transport/tcp/resilient-initiator.js +41 -0
- package/dist/transport/tcp/resilient-initiator.js.map +1 -0
- package/dist/transport/tcp/tcp-acceptor.d.ts +7 -0
- package/dist/transport/tcp/tcp-acceptor.js +57 -38
- package/dist/transport/tcp/tcp-acceptor.js.map +1 -1
- package/dist/transport/tcp/tcp-initiator.d.ts +2 -0
- package/dist/transport/tcp/tcp-initiator.js +59 -32
- package/dist/transport/tcp/tcp-initiator.js.map +1 -1
- package/dist/types/FIX4.4/quickfix/set/header.d.ts +31 -0
- package/dist/types/FIX4.4/quickfix/set/header.js +3 -0
- package/dist/types/FIX4.4/quickfix/set/header.js.map +1 -0
- package/dist/types/FIX4.4/quickfix/set/trailer.d.ts +6 -0
- package/dist/types/FIX4.4/quickfix/set/trailer.js +3 -0
- package/dist/types/FIX4.4/quickfix/set/trailer.js.map +1 -0
- package/dist/util/buffer-helper.js +1 -1
- package/dist/util/buffer-helper.js.map +1 -1
- package/dist/util/json-helper.js +2 -2
- package/dist/util/json-helper.js.map +1 -1
- package/dist/util/message-generator.js +1 -1
- package/dist/util/message-generator.js.map +1 -1
- package/package.json +16 -15
- package/script/genkey.ps1 +179 -179
- package/src/buffer/ascii/ascii-encoder.ts +71 -33
- package/src/buffer/ascii/ascii-view.ts +2 -2
- package/src/buffer/ascii/time-formatter.ts +2 -2
- package/src/buffer/encode-proxy.ts +2 -2
- package/src/buffer/fixml/fixml-view.ts +5 -0
- package/src/buffer/msg-view.ts +3 -0
- package/src/sample/tcp/skeleton/skeleton-session.ts +24 -2
- package/src/sample/tcp/trade-capture/trade-capture-client.ts +8 -3
- package/src/store/fix-msg-ascii-store-resend.ts +3 -2
- package/src/store/fix-msg-store-record.ts +1 -0
- package/src/transport/ascii/ascii-msg-transmitter.ts +6 -3
- package/src/transport/ascii/ascii-session.ts +75 -19
- package/src/transport/duplex/http-duplex.ts +2 -2
- package/src/transport/fix-session-state.ts +4 -1
- package/src/transport/fix-session.ts +98 -37
- package/src/transport/http/http-acceptor.ts +7 -6
- package/src/transport/tcp/tcp-acceptor.ts +59 -35
- package/src/transport/tcp/tcp-initiator.ts +63 -38
|
@@ -26,35 +26,46 @@ class FixEntity {
|
|
|
26
26
|
this.duplex = duplex;
|
|
27
27
|
this.transport = transport;
|
|
28
28
|
this.views = [];
|
|
29
|
+
this.errors = [];
|
|
29
30
|
}
|
|
30
31
|
}
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
32
|
+
class Setup {
|
|
33
|
+
constructor() {
|
|
34
|
+
this.clientDescription = require(path.join(root, 'session/test-initiator.json'));
|
|
35
|
+
this.serverDescription = require(path.join(root, 'session/test-acceptor.json'));
|
|
36
|
+
}
|
|
37
|
+
init() {
|
|
38
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
39
|
+
this.definitions = yield util_1.getDefinitions(this.clientDescription.application.dictionary);
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
let setup = null;
|
|
44
|
+
let experiment = null;
|
|
45
|
+
class Experiment {
|
|
46
|
+
constructor() {
|
|
47
|
+
this.clientFactory = new ascii_1.AsciiSessionMsgFactory(setup.clientDescription);
|
|
48
|
+
this.serverFactory = new ascii_1.AsciiSessionMsgFactory(setup.serverDescription);
|
|
49
|
+
const clientConfig = new config_1.JsFixConfig(this.clientFactory, setup.definitions, setup.clientDescription, buffer_1.AsciiChars.Pipe);
|
|
50
|
+
const serverConfig = new config_1.JsFixConfig(this.serverFactory, setup.definitions, setup.serverDescription, buffer_1.AsciiChars.Pipe);
|
|
51
|
+
this.client = new FixEntity(clientConfig);
|
|
52
|
+
this.server = new FixEntity(serverConfig);
|
|
53
|
+
this.loopBack(this.client.duplex, this.server.duplex);
|
|
54
|
+
this.loopBack(this.server.duplex, this.client.duplex);
|
|
55
|
+
}
|
|
56
|
+
loopBack(lhs, rhs) {
|
|
57
|
+
lhs.writable.on('data', (data) => {
|
|
58
|
+
rhs.readable.push(data);
|
|
59
|
+
});
|
|
60
|
+
}
|
|
42
61
|
}
|
|
43
62
|
beforeAll(() => __awaiter(void 0, void 0, void 0, function* () {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
definitions = yield (0, util_1.getDefinitions)(clientDescription.application.dictionary);
|
|
63
|
+
setup = new Setup();
|
|
64
|
+
yield setup.init();
|
|
47
65
|
}), 45000);
|
|
48
|
-
beforeEach(() =>
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
const clientConfig = new config_1.JsFixConfig(clientFactory, definitions, clientDescription, buffer_1.AsciiChars.Pipe);
|
|
52
|
-
const serverConfig = new config_1.JsFixConfig(serverFactory, definitions, serverDescription, buffer_1.AsciiChars.Pipe);
|
|
53
|
-
client = new FixEntity(clientConfig);
|
|
54
|
-
server = new FixEntity(serverConfig);
|
|
55
|
-
loopBack(client.duplex, server.duplex);
|
|
56
|
-
loopBack(server.duplex, client.duplex);
|
|
57
|
-
}));
|
|
66
|
+
beforeEach(() => {
|
|
67
|
+
experiment = new Experiment();
|
|
68
|
+
});
|
|
58
69
|
class ParsingResult {
|
|
59
70
|
constructor(event, msgType, view) {
|
|
60
71
|
this.event = event;
|
|
@@ -64,8 +75,8 @@ class ParsingResult {
|
|
|
64
75
|
}
|
|
65
76
|
function clientToServerWaitFirstMessage(type, obj) {
|
|
66
77
|
return new Promise((resolve, reject) => {
|
|
67
|
-
const clt = client.transport;
|
|
68
|
-
const svt = server.transport;
|
|
78
|
+
const clt = experiment.client.transport;
|
|
79
|
+
const svt = experiment.server.transport;
|
|
69
80
|
clt.transmitter.on('error', (e) => {
|
|
70
81
|
reject(e);
|
|
71
82
|
});
|
|
@@ -76,66 +87,152 @@ function clientToServerWaitFirstMessage(type, obj) {
|
|
|
76
87
|
reject(e);
|
|
77
88
|
});
|
|
78
89
|
clt.transmitter.send(type, obj);
|
|
79
|
-
client.transport.end();
|
|
90
|
+
experiment.client.transport.end();
|
|
80
91
|
});
|
|
81
92
|
}
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
})
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
s2.done();
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
client.transport.receiver.on('msg', (type, view) => {
|
|
106
|
-
client.views.push(view.clone());
|
|
107
|
-
watchdog();
|
|
93
|
+
class SkeletonRunner {
|
|
94
|
+
constructor(logoutSeconds = 1) {
|
|
95
|
+
this.logoutSeconds = logoutSeconds;
|
|
96
|
+
this.clientSkeleton = new skeleton_session_1.SkeletonSession(experiment.client.config, logoutSeconds);
|
|
97
|
+
this.serverSkeleton = new skeleton_session_1.SkeletonSession(experiment.server.config, logoutSeconds);
|
|
98
|
+
this.clientSkeleton.checkMsgIntegrity = true;
|
|
99
|
+
this.serverSkeleton.checkMsgIntegrity = true;
|
|
100
|
+
experiment.client.transport.receiver.on('msg', (type, view) => {
|
|
101
|
+
experiment.client.views.push(view.clone());
|
|
102
|
+
this.watchdog();
|
|
103
|
+
});
|
|
104
|
+
experiment.server.transport.receiver.on('msg', (type, view) => {
|
|
105
|
+
experiment.server.views.push(view.clone());
|
|
106
|
+
this.watchdog();
|
|
107
|
+
});
|
|
108
|
+
this.clientSkeleton.on('error', e => {
|
|
109
|
+
experiment.client.errors.push(e);
|
|
110
|
+
});
|
|
111
|
+
this.serverSkeleton.on('error', e => {
|
|
112
|
+
experiment.server.errors.push(e);
|
|
108
113
|
});
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
114
|
+
}
|
|
115
|
+
watchdog() {
|
|
116
|
+
const cviews = experiment.client.views;
|
|
117
|
+
const sviews = experiment.server.views;
|
|
118
|
+
const cerrors = experiment.client.errors;
|
|
119
|
+
const serrors = experiment.server.errors;
|
|
120
|
+
const clientStop = cviews.length > 20 || cerrors.length > 0;
|
|
121
|
+
const serverStop = sviews.length > 20 || serrors.length > 0;
|
|
122
|
+
const stop = clientStop || serverStop;
|
|
123
|
+
if (stop) {
|
|
124
|
+
this.clientSkeleton.done();
|
|
125
|
+
this.serverSkeleton.done();
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
sendMsg(msgType, o) {
|
|
129
|
+
let count = 0;
|
|
130
|
+
experiment.client.transport.receiver.on('msg', m => {
|
|
131
|
+
if (count === 0) {
|
|
132
|
+
count++;
|
|
133
|
+
this.clientSkeleton.sendMessage(msgType, o);
|
|
134
|
+
}
|
|
112
135
|
});
|
|
136
|
+
}
|
|
137
|
+
sendText(followOn) {
|
|
113
138
|
if (followOn) {
|
|
114
139
|
let sent = false;
|
|
115
|
-
client.transport.transmitter.on('encoded', () => {
|
|
140
|
+
experiment.client.transport.transmitter.on('encoded', () => {
|
|
116
141
|
const b1 = new buffer_1.ElasticBuffer();
|
|
117
142
|
b1.writeString(followOn);
|
|
118
143
|
if (!sent) {
|
|
119
|
-
client.transport.duplex.writable.write(b1.slice());
|
|
120
|
-
const at = client.transport.transmitter;
|
|
144
|
+
experiment.client.transport.duplex.writable.write(b1.slice());
|
|
145
|
+
const at = experiment.client.transport.transmitter;
|
|
121
146
|
at.msgSeqNum++;
|
|
122
147
|
sent = true;
|
|
123
148
|
}
|
|
124
149
|
});
|
|
125
150
|
}
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
151
|
+
}
|
|
152
|
+
done() {
|
|
153
|
+
this.clientSkeleton.done();
|
|
154
|
+
this.serverSkeleton.done();
|
|
155
|
+
}
|
|
156
|
+
wait() {
|
|
157
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
158
|
+
yield Promise.all([
|
|
159
|
+
this.clientSkeleton.run(experiment.client.transport),
|
|
160
|
+
this.serverSkeleton.run(experiment.server.transport),
|
|
161
|
+
new Promise((accept, reject) => {
|
|
162
|
+
let handle = null;
|
|
163
|
+
try {
|
|
164
|
+
handle = setTimeout(() => {
|
|
165
|
+
this.done();
|
|
166
|
+
accept(true);
|
|
167
|
+
}, (this.logoutSeconds + 2) * 1000);
|
|
168
|
+
}
|
|
169
|
+
catch (e) {
|
|
170
|
+
if (handle) {
|
|
171
|
+
clearTimeout(handle);
|
|
172
|
+
}
|
|
173
|
+
this.done();
|
|
174
|
+
reject(e);
|
|
175
|
+
}
|
|
176
|
+
})
|
|
177
|
+
]);
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
function runSkeletons(logoutSeconds = 1, followOn = null) {
|
|
182
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
183
|
+
const runner = new SkeletonRunner(logoutSeconds);
|
|
184
|
+
runner.sendText(followOn);
|
|
185
|
+
yield runner.wait();
|
|
133
186
|
});
|
|
134
187
|
}
|
|
188
|
+
test('end to end logon', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
189
|
+
const lo = experiment.client.config.factory.logon();
|
|
190
|
+
const res = yield clientToServerWaitFirstMessage(types_1.MsgType.Logon, lo);
|
|
191
|
+
expect(res.event).toEqual('msg');
|
|
192
|
+
expect(res.msgType).toEqual('A');
|
|
193
|
+
const received = res.view.toObject();
|
|
194
|
+
expect(received).toBeTruthy();
|
|
195
|
+
delete received['StandardHeader'];
|
|
196
|
+
delete received['StandardTrailer'];
|
|
197
|
+
expect(received).toEqual(lo);
|
|
198
|
+
}));
|
|
199
|
+
test('session send resendRequest when logged on', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
200
|
+
const runner = new SkeletonRunner(2);
|
|
201
|
+
const factory = experiment.client.config.factory;
|
|
202
|
+
const resend = factory.resendRequest(1, 2);
|
|
203
|
+
runner.sendMsg(types_1.MsgType.ResendRequest, resend);
|
|
204
|
+
try {
|
|
205
|
+
const cViews = experiment.client.views;
|
|
206
|
+
const sViews = experiment.server.views;
|
|
207
|
+
yield runner.wait();
|
|
208
|
+
const last = experiment.client.views[experiment.client.views.length - 1];
|
|
209
|
+
expect(last).toBeTruthy();
|
|
210
|
+
const clientResets = countOfType('SequenceReset', cViews);
|
|
211
|
+
const serverResets = countOfType('SequenceReset', sViews);
|
|
212
|
+
expect(clientResets).toEqual(1);
|
|
213
|
+
expect(serverResets).toEqual(0);
|
|
214
|
+
}
|
|
215
|
+
catch (e) {
|
|
216
|
+
expect(true).toEqual(false);
|
|
217
|
+
}
|
|
218
|
+
}));
|
|
219
|
+
test('session send logon when logged on', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
220
|
+
const runner = new SkeletonRunner(2);
|
|
221
|
+
const logon = experiment.client.config.factory.logon();
|
|
222
|
+
runner.sendMsg(types_1.MsgType.Logon, logon);
|
|
223
|
+
try {
|
|
224
|
+
yield runner.wait();
|
|
225
|
+
}
|
|
226
|
+
catch (e) {
|
|
227
|
+
expect(experiment.server.errors.length).toEqual(1);
|
|
228
|
+
}
|
|
229
|
+
}));
|
|
135
230
|
test('session logon / logout', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
136
231
|
yield runSkeletons();
|
|
137
|
-
const cViews = client.views;
|
|
138
|
-
const sViews = server.views;
|
|
232
|
+
const cViews = experiment.client.views;
|
|
233
|
+
const sViews = experiment.server.views;
|
|
234
|
+
expect(experiment.client.errors.length).toEqual(0);
|
|
235
|
+
expect(experiment.server.errors.length).toEqual(0);
|
|
139
236
|
expect(cViews.length).toEqual(2);
|
|
140
237
|
expect(sViews.length).toEqual(2);
|
|
141
238
|
expect(cViews[0].segment.name).toEqual('Logon');
|
|
@@ -153,10 +250,12 @@ function checkSeqNos(views) {
|
|
|
153
250
|
}
|
|
154
251
|
test('seq No OK', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
155
252
|
yield runSkeletons();
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
253
|
+
const cviews = experiment.client.views;
|
|
254
|
+
const sviews = experiment.server.views;
|
|
255
|
+
expect(cviews.length >= 2).toEqual(true);
|
|
256
|
+
expect(sviews.length >= 2).toEqual(true);
|
|
257
|
+
checkSeqNos(cviews);
|
|
258
|
+
checkSeqNos(sviews);
|
|
160
259
|
}));
|
|
161
260
|
function mutateSeqNo(description, type, o) {
|
|
162
261
|
switch (type) {
|
|
@@ -171,13 +270,15 @@ function mutateSeqNo(description, type, o) {
|
|
|
171
270
|
return o;
|
|
172
271
|
}
|
|
173
272
|
test('out of seq logout', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
174
|
-
clientFactory.mutator = mutateSeqNo;
|
|
273
|
+
experiment.clientFactory.mutator = mutateSeqNo;
|
|
175
274
|
yield runSkeletons();
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
expect(
|
|
179
|
-
expect(
|
|
180
|
-
expect(
|
|
275
|
+
const cviews = experiment.client.views;
|
|
276
|
+
const sviews = experiment.server.views;
|
|
277
|
+
expect(cviews.length).toEqual(1);
|
|
278
|
+
expect(cviews[0].segment.name).toEqual('Logon');
|
|
279
|
+
expect(sviews.length).toEqual(2);
|
|
280
|
+
expect(sviews[0].segment.name).toEqual('Logon');
|
|
281
|
+
expect(sviews[1].segment.name).toEqual('Logout');
|
|
181
282
|
}));
|
|
182
283
|
function countOfType(type, views) {
|
|
183
284
|
return views.reduce((c, v) => {
|
|
@@ -195,98 +296,116 @@ function mutateRemoveRequiredHeartBtInt(description, type, o) {
|
|
|
195
296
|
return o;
|
|
196
297
|
}
|
|
197
298
|
test('client logon reject missing 108', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
198
|
-
clientFactory.mutator = mutateRemoveRequiredHeartBtInt;
|
|
299
|
+
experiment.clientFactory.mutator = mutateRemoveRequiredHeartBtInt;
|
|
199
300
|
yield runSkeletons(2);
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
expect(
|
|
203
|
-
expect(
|
|
204
|
-
|
|
301
|
+
const cviews = experiment.client.views;
|
|
302
|
+
const sviews = experiment.server.views;
|
|
303
|
+
expect(cviews.length === 1).toEqual(true);
|
|
304
|
+
expect(sviews.length === 1).toEqual(true);
|
|
305
|
+
expect(cviews[0].segment.name).toEqual('Reject');
|
|
306
|
+
expect(sviews[0].segment.name).toEqual('Logon');
|
|
307
|
+
const reject = cviews[0].toObject();
|
|
205
308
|
expect(reject.SessionRejectReason === types_1.SessionRejectReason.RequiredTagMissing);
|
|
206
309
|
expect(reject.Text).toEqual('msgType A missing required tag 108');
|
|
207
310
|
}), 10000);
|
|
208
311
|
test('client unknown msg type', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
209
|
-
const at = client.transport.transmitter;
|
|
312
|
+
const at = experiment.client.transport.transmitter;
|
|
210
313
|
const changed = logonMsg.replace('35=A', '35=ZZ').replace('34=1', `34=${at.msgSeqNum + 1}`);
|
|
211
314
|
yield runSkeletons(2, changed);
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
expect(
|
|
215
|
-
expect(
|
|
216
|
-
expect(
|
|
217
|
-
expect(
|
|
218
|
-
|
|
315
|
+
const cviews = experiment.client.views;
|
|
316
|
+
const sviews = experiment.server.views;
|
|
317
|
+
expect(cviews.length === 3).toEqual(true);
|
|
318
|
+
expect(sviews.length === 3).toEqual(true);
|
|
319
|
+
expect(cviews[0].segment.name).toEqual('Logon');
|
|
320
|
+
expect(cviews[1].segment.name).toEqual('Reject');
|
|
321
|
+
expect(sviews[0].segment.name).toEqual('Logon');
|
|
322
|
+
expect(sviews[1].segment.name).toEqual('unknown');
|
|
323
|
+
const reject = cviews[1].toObject();
|
|
219
324
|
expect(reject.SessionRejectReason === types_1.SessionRejectReason.InvalidMsgType);
|
|
220
325
|
expect(reject.Text).toEqual('msgType ZZ unknown');
|
|
221
326
|
}), 10000);
|
|
222
327
|
test('heartbeat invalid tag', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
223
|
-
const at = client.transport.transmitter;
|
|
328
|
+
const at = experiment.client.transport.transmitter;
|
|
224
329
|
const changed = heartbeat.replace('112=', '999=').replace('34=1', `34=${at.msgSeqNum + 1}`);
|
|
225
330
|
yield runSkeletons(2, changed);
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
expect(
|
|
229
|
-
expect(
|
|
230
|
-
expect(
|
|
231
|
-
expect(
|
|
232
|
-
|
|
331
|
+
const cviews = experiment.client.views;
|
|
332
|
+
const sviews = experiment.server.views;
|
|
333
|
+
expect(cviews.length === 3).toEqual(true);
|
|
334
|
+
expect(sviews.length === 3).toEqual(true);
|
|
335
|
+
expect(cviews[0].segment.name).toEqual('Logon');
|
|
336
|
+
expect(cviews[1].segment.name).toEqual('Reject');
|
|
337
|
+
expect(sviews[0].segment.name).toEqual('Logon');
|
|
338
|
+
expect(sviews[1].segment.name).toEqual('Heartbeat');
|
|
339
|
+
const reject = experiment.client.views[1].toObject();
|
|
233
340
|
expect(reject.SessionRejectReason === types_1.SessionRejectReason.InvalidTagNumber);
|
|
234
|
-
checkSeqNos(
|
|
235
|
-
checkSeqNos(
|
|
341
|
+
checkSeqNos(cviews);
|
|
342
|
+
checkSeqNos(sviews);
|
|
236
343
|
}), 10000);
|
|
237
344
|
test('heartbeat invalid sender comp', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
238
|
-
const at = client.transport.transmitter;
|
|
345
|
+
const at = experiment.client.transport.transmitter;
|
|
239
346
|
const changed = heartbeat.replace('49=init-comp', '49=init-not!').replace('34=1', `34=${at.msgSeqNum + 1}`);
|
|
240
347
|
yield runSkeletons(2, changed);
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
expect(
|
|
244
|
-
expect(
|
|
245
|
-
expect(
|
|
246
|
-
expect(
|
|
247
|
-
|
|
348
|
+
const cviews = experiment.client.views;
|
|
349
|
+
const sviews = experiment.server.views;
|
|
350
|
+
expect(cviews.length === 3).toEqual(true);
|
|
351
|
+
expect(sviews.length === 3).toEqual(true);
|
|
352
|
+
expect(cviews[0].segment.name).toEqual('Logon');
|
|
353
|
+
expect(cviews[1].segment.name).toEqual('Reject');
|
|
354
|
+
expect(sviews[0].segment.name).toEqual('Logon');
|
|
355
|
+
expect(sviews[1].segment.name).toEqual('Heartbeat');
|
|
356
|
+
const reject = cviews[1].toObject();
|
|
248
357
|
expect(reject.SessionRejectReason === types_1.SessionRejectReason.CompIDProblem);
|
|
249
|
-
checkSeqNos(
|
|
250
|
-
checkSeqNos(
|
|
358
|
+
checkSeqNos(cviews);
|
|
359
|
+
checkSeqNos(sviews);
|
|
251
360
|
}), 10000);
|
|
252
361
|
test('client heartbeats to server', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
253
|
-
const preset = client.config.description.HeartBtInt;
|
|
254
|
-
client.config.description.HeartBtInt = 2;
|
|
362
|
+
const preset = experiment.client.config.description.HeartBtInt;
|
|
363
|
+
experiment.client.config.description.HeartBtInt = 2;
|
|
255
364
|
yield runSkeletons(6);
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
365
|
+
const cviews = experiment.client.views;
|
|
366
|
+
const sviews = experiment.server.views;
|
|
367
|
+
expect(cviews.length === 2).toEqual(true);
|
|
368
|
+
expect(sviews.length > 2).toEqual(true);
|
|
369
|
+
const serverReceivesHeartbeats = countOfType('Heartbeat', sviews);
|
|
259
370
|
expect(serverReceivesHeartbeats >= 2 && serverReceivesHeartbeats <= 4).toEqual(true);
|
|
260
|
-
checkSeqNos(
|
|
261
|
-
checkSeqNos(
|
|
262
|
-
client.config.description.HeartBtInt = preset;
|
|
371
|
+
checkSeqNos(cviews);
|
|
372
|
+
checkSeqNos(sviews);
|
|
373
|
+
experiment.client.config.description.HeartBtInt = preset;
|
|
263
374
|
}), 10000);
|
|
264
375
|
test('server heartbeats to client', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
265
|
-
const preset = server.config.description.HeartBtInt;
|
|
266
|
-
server.config.description.HeartBtInt = 2;
|
|
376
|
+
const preset = experiment.server.config.description.HeartBtInt;
|
|
377
|
+
experiment.server.config.description.HeartBtInt = 2;
|
|
267
378
|
yield runSkeletons(6);
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
379
|
+
const cviews = experiment.client.views;
|
|
380
|
+
const sviews = experiment.server.views;
|
|
381
|
+
expect(sviews.length === 2).toEqual(true);
|
|
382
|
+
expect(cviews.length > 2).toEqual(true);
|
|
383
|
+
const clientReceivesHeartbeats = countOfType('Heartbeat', cviews);
|
|
271
384
|
expect(clientReceivesHeartbeats >= 2 && clientReceivesHeartbeats <= 4).toEqual(true);
|
|
272
|
-
checkSeqNos(
|
|
273
|
-
checkSeqNos(
|
|
274
|
-
server.config.description.HeartBtInt = preset;
|
|
385
|
+
checkSeqNos(cviews);
|
|
386
|
+
checkSeqNos(sviews);
|
|
387
|
+
experiment.server.config.description.HeartBtInt = preset;
|
|
275
388
|
}), 10000);
|
|
276
389
|
test('client server heartbeat', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
277
|
-
const preset = server.config.description.HeartBtInt;
|
|
278
|
-
server.config.description.HeartBtInt =
|
|
279
|
-
client.config.description.HeartBtInt = 2;
|
|
280
|
-
yield runSkeletons(
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
390
|
+
const preset = experiment.server.config.description.HeartBtInt;
|
|
391
|
+
experiment.server.config.description.HeartBtInt = 5;
|
|
392
|
+
experiment.client.config.description.HeartBtInt = 2;
|
|
393
|
+
yield runSkeletons(8);
|
|
394
|
+
const cviews = experiment.client.views;
|
|
395
|
+
const sviews = experiment.server.views;
|
|
396
|
+
expect(sviews.length > 2).toEqual(true);
|
|
397
|
+
expect(cviews.length > 2).toEqual(true);
|
|
398
|
+
const clientReceivesHeartbeats = countOfType('Heartbeat', cviews);
|
|
399
|
+
const clientReceivesTestRequest = countOfType('TestRequest', cviews);
|
|
400
|
+
const clientTotal = clientReceivesHeartbeats + clientReceivesTestRequest;
|
|
401
|
+
const serverReceivesHeartbeats = countOfType('Heartbeat', sviews);
|
|
402
|
+
const serverReceivesTestRequest = countOfType('TestRequest', sviews);
|
|
403
|
+
const serverTotal = serverReceivesHeartbeats + serverReceivesTestRequest;
|
|
404
|
+
expect(clientTotal >= 1 && clientReceivesHeartbeats <= 4).toEqual(true);
|
|
405
|
+
expect(serverTotal >= 3 && serverReceivesHeartbeats <= 4).toEqual(true);
|
|
406
|
+
checkSeqNos(cviews);
|
|
407
|
+
checkSeqNos(sviews);
|
|
408
|
+
experiment.server.config.description.HeartBtInt = preset;
|
|
409
|
+
experiment.client.config.description.HeartBtInt = preset;
|
|
410
|
+
}), 15000);
|
|
292
411
|
//# sourceMappingURL=session.test.js.map
|