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.
Files changed (182) hide show
  1. package/README.md +5 -2
  2. package/data/session/genkey.ps1 +179 -0
  3. package/dist/buffer/ascii/ascii-encoder.d.ts +1 -1
  4. package/dist/buffer/ascii/ascii-encoder.js +42 -30
  5. package/dist/buffer/ascii/ascii-encoder.js.map +1 -1
  6. package/dist/buffer/ascii/ascii-view.d.ts +2 -2
  7. package/dist/buffer/ascii/ascii-view.js.map +1 -1
  8. package/dist/buffer/ascii/time-formatter.js.map +1 -1
  9. package/dist/buffer/elastic-buffer.js +1 -1
  10. package/dist/buffer/elastic-buffer.js.map +1 -1
  11. package/dist/buffer/encode-proxy.js.map +1 -1
  12. package/dist/buffer/fixml/fixml-encoder.js +1 -1
  13. package/dist/buffer/fixml/fixml-encoder.js.map +1 -1
  14. package/dist/buffer/fixml/fixml-view.d.ts +2 -0
  15. package/dist/buffer/fixml/fixml-view.js +3 -0
  16. package/dist/buffer/fixml/fixml-view.js.map +1 -1
  17. package/dist/buffer/msg-view.d.ts +2 -0
  18. package/dist/buffer/msg-view.js +2 -2
  19. package/dist/buffer/msg-view.js.map +1 -1
  20. package/dist/dict-parser.js +9 -9
  21. package/dist/dict-parser.js.map +1 -1
  22. package/dist/dictionary/compiler/msg-compiler.js +2 -2
  23. package/dist/dictionary/compiler/msg-compiler.js.map +1 -1
  24. package/dist/dictionary/parser/fix-repository/repository-xml-parser.js +1 -1
  25. package/dist/dictionary/parser/fix-repository/repository-xml-parser.js.map +1 -1
  26. package/dist/dictionary/parser/quickfix/quick-fix-xml-file-parser.js +1 -1
  27. package/dist/dictionary/parser/quickfix/quick-fix-xml-file-parser.js.map +1 -1
  28. package/dist/jsfix-cmd.js +3 -3
  29. package/dist/jsfix-cmd.js.map +1 -1
  30. package/dist/sample/http/oms/app.js +2 -2
  31. package/dist/sample/http/oms/app.js.map +1 -1
  32. package/dist/sample/launcher.js +2 -2
  33. package/dist/sample/launcher.js.map +1 -1
  34. package/dist/sample/tcp/qf-md/app.js +2 -2
  35. package/dist/sample/tcp/qf-md/app.js.map +1 -1
  36. package/dist/sample/tcp/recovering-skeleton/respawn-2.d.ts +2 -0
  37. package/dist/sample/tcp/recovering-skeleton/respawn-2.js +3 -0
  38. package/dist/sample/tcp/recovering-skeleton/respawn-2.js.map +1 -0
  39. package/dist/sample/tcp/recovering-skeleton/respawn-acceptor.js +1 -1
  40. package/dist/sample/tcp/recovering-skeleton/respawn-acceptor.js.map +1 -1
  41. package/dist/sample/tcp/skeleton/app.js +2 -2
  42. package/dist/sample/tcp/skeleton/app.js.map +1 -1
  43. package/dist/sample/tcp/skeleton/skeleton-session.d.ts +5 -1
  44. package/dist/sample/tcp/skeleton/skeleton-session.js +21 -2
  45. package/dist/sample/tcp/skeleton/skeleton-session.js.map +1 -1
  46. package/dist/sample/tcp/tls-trade-capture/app.js +2 -2
  47. package/dist/sample/tcp/tls-trade-capture/app.js.map +1 -1
  48. package/dist/sample/tcp/trade-capture/app.js +2 -2
  49. package/dist/sample/tcp/trade-capture/app.js.map +1 -1
  50. package/dist/sample/tcp/trade-capture/trade-capture-client.d.ts +1 -0
  51. package/dist/sample/tcp/trade-capture/trade-capture-client.js +7 -3
  52. package/dist/sample/tcp/trade-capture/trade-capture-client.js.map +1 -1
  53. package/dist/store/fix-msg-ascii-store-recovery.d.ts +12 -0
  54. package/dist/store/fix-msg-ascii-store-recovery.js +60 -0
  55. package/dist/store/fix-msg-ascii-store-recovery.js.map +1 -0
  56. package/dist/store/fix-msg-ascii-store-replay.d.ts +13 -0
  57. package/dist/store/fix-msg-ascii-store-replay.js +60 -0
  58. package/dist/store/fix-msg-ascii-store-replay.js.map +1 -0
  59. package/dist/store/fix-msg-ascii-store-resend.js +3 -2
  60. package/dist/store/fix-msg-ascii-store-resend.js.map +1 -1
  61. package/dist/store/fix-msg-store-record.js.map +1 -1
  62. package/dist/store/fix-replay-record.d.ts +12 -0
  63. package/dist/store/fix-replay-record.js +12 -0
  64. package/dist/store/fix-replay-record.js.map +1 -0
  65. package/dist/store/fix-resend-record.d.ts +12 -0
  66. package/dist/store/fix-resend-record.js +12 -0
  67. package/dist/store/fix-resend-record.js.map +1 -0
  68. package/dist/store/replay-record.d.ts +6 -0
  69. package/dist/store/replay-record.js +3 -0
  70. package/dist/store/replay-record.js.map +1 -0
  71. package/dist/store/store-replay-record.d.ts +12 -0
  72. package/dist/store/store-replay-record.js +12 -0
  73. package/dist/store/store-replay-record.js.map +1 -0
  74. package/dist/tcp/tls-options.d.ts +5 -0
  75. package/dist/tcp/tls-options.js +45 -0
  76. package/dist/tcp/tls-options.js.map +1 -0
  77. package/dist/test/ascii-encode.test.d.ts +1 -0
  78. package/dist/test/ascii-encode.test.js +416 -0
  79. package/dist/test/ascii-encode.test.js.map +1 -0
  80. package/dist/test/ascii-encoder.test.js +2 -2
  81. package/dist/test/ascii-encoder.test.js.map +1 -1
  82. package/dist/test/ascii-parser.test.js +9 -7
  83. package/dist/test/ascii-parser.test.js.map +1 -1
  84. package/dist/test/ascii-segment.test.js +7 -6
  85. package/dist/test/ascii-segment.test.js.map +1 -1
  86. package/dist/test/ascii-store-recovery.test.d.ts +1 -0
  87. package/dist/test/ascii-store-recovery.test.js +50 -0
  88. package/dist/test/ascii-store-recovery.test.js.map +1 -0
  89. package/dist/test/ascii-store-replay.test.js +2 -2
  90. package/dist/test/ascii-store-replay.test.js.map +1 -1
  91. package/dist/test/ascii-tag-pos.test.js +2 -2
  92. package/dist/test/ascii-tag-pos.test.js.map +1 -1
  93. package/dist/test/encode-proxy.test.js +1 -1
  94. package/dist/test/encode-proxy.test.js.map +1 -1
  95. package/dist/test/execution-report.test.js +2 -2
  96. package/dist/test/execution-report.test.js.map +1 -1
  97. package/dist/test/fix-log-replay.test.js +2 -2
  98. package/dist/test/fix-log-replay.test.js.map +1 -1
  99. package/dist/test/fix-repo-dict.test.js +1 -1
  100. package/dist/test/fix-repo-dict.test.js.map +1 -1
  101. package/dist/test/logon.test.js +2 -2
  102. package/dist/test/logon.test.js.map +1 -1
  103. package/dist/test/memory-store.test.js +2 -2
  104. package/dist/test/memory-store.test.js.map +1 -1
  105. package/dist/test/qf-full-msg.test.js +14 -13
  106. package/dist/test/qf-full-msg.test.js.map +1 -1
  107. package/dist/test/repo-full-ascii-msg.test.js +10 -9
  108. package/dist/test/repo-full-ascii-msg.test.js.map +1 -1
  109. package/dist/test/repo-full-fixml-msg.test.js +15 -15
  110. package/dist/test/repo-full-fixml-msg.test.js.map +1 -1
  111. package/dist/test/session.test.js +262 -143
  112. package/dist/test/session.test.js.map +1 -1
  113. package/dist/test/to-views.js +1 -1
  114. package/dist/test/to-views.js.map +1 -1
  115. package/dist/test/view-decode.test.js +2 -2
  116. package/dist/test/view-decode.test.js.map +1 -1
  117. package/dist/transport/ascii/ascii-msg-transmitter.js +6 -3
  118. package/dist/transport/ascii/ascii-msg-transmitter.js.map +1 -1
  119. package/dist/transport/ascii/ascii-session.d.ts +8 -0
  120. package/dist/transport/ascii/ascii-session.js +67 -19
  121. package/dist/transport/ascii/ascii-session.js.map +1 -1
  122. package/dist/transport/duplex/http-duplex.js +2 -2
  123. package/dist/transport/duplex/http-duplex.js.map +1 -1
  124. package/dist/transport/fix-session-state.js +4 -1
  125. package/dist/transport/fix-session-state.js.map +1 -1
  126. package/dist/transport/fix-session.d.ts +6 -0
  127. package/dist/transport/fix-session.js +91 -38
  128. package/dist/transport/fix-session.js.map +1 -1
  129. package/dist/transport/http/http-acceptor.js +8 -7
  130. package/dist/transport/http/http-acceptor.js.map +1 -1
  131. package/dist/transport/make-config.js +1 -1
  132. package/dist/transport/make-config.js.map +1 -1
  133. package/dist/transport/session-msg-factory.d.ts +24 -2
  134. package/dist/transport/session-msg-factory.js +143 -3
  135. package/dist/transport/session-msg-factory.js.map +1 -1
  136. package/dist/transport/tcp/recovering-initiator.d.ts +17 -0
  137. package/dist/transport/tcp/recovering-initiator.js +30 -0
  138. package/dist/transport/tcp/recovering-initiator.js.map +1 -0
  139. package/dist/transport/tcp/recovering_initiator.d.ts +12 -0
  140. package/dist/transport/tcp/recovering_initiator.js +25 -0
  141. package/dist/transport/tcp/recovering_initiator.js.map +1 -0
  142. package/dist/transport/tcp/resilient-initiator.d.ts +12 -0
  143. package/dist/transport/tcp/resilient-initiator.js +41 -0
  144. package/dist/transport/tcp/resilient-initiator.js.map +1 -0
  145. package/dist/transport/tcp/tcp-acceptor.d.ts +7 -0
  146. package/dist/transport/tcp/tcp-acceptor.js +57 -38
  147. package/dist/transport/tcp/tcp-acceptor.js.map +1 -1
  148. package/dist/transport/tcp/tcp-initiator.d.ts +2 -0
  149. package/dist/transport/tcp/tcp-initiator.js +59 -32
  150. package/dist/transport/tcp/tcp-initiator.js.map +1 -1
  151. package/dist/types/FIX4.4/quickfix/set/header.d.ts +31 -0
  152. package/dist/types/FIX4.4/quickfix/set/header.js +3 -0
  153. package/dist/types/FIX4.4/quickfix/set/header.js.map +1 -0
  154. package/dist/types/FIX4.4/quickfix/set/trailer.d.ts +6 -0
  155. package/dist/types/FIX4.4/quickfix/set/trailer.js +3 -0
  156. package/dist/types/FIX4.4/quickfix/set/trailer.js.map +1 -0
  157. package/dist/util/buffer-helper.js +1 -1
  158. package/dist/util/buffer-helper.js.map +1 -1
  159. package/dist/util/json-helper.js +2 -2
  160. package/dist/util/json-helper.js.map +1 -1
  161. package/dist/util/message-generator.js +1 -1
  162. package/dist/util/message-generator.js.map +1 -1
  163. package/package.json +16 -15
  164. package/script/genkey.ps1 +179 -179
  165. package/src/buffer/ascii/ascii-encoder.ts +71 -33
  166. package/src/buffer/ascii/ascii-view.ts +2 -2
  167. package/src/buffer/ascii/time-formatter.ts +2 -2
  168. package/src/buffer/encode-proxy.ts +2 -2
  169. package/src/buffer/fixml/fixml-view.ts +5 -0
  170. package/src/buffer/msg-view.ts +3 -0
  171. package/src/sample/tcp/skeleton/skeleton-session.ts +24 -2
  172. package/src/sample/tcp/trade-capture/trade-capture-client.ts +8 -3
  173. package/src/store/fix-msg-ascii-store-resend.ts +3 -2
  174. package/src/store/fix-msg-store-record.ts +1 -0
  175. package/src/transport/ascii/ascii-msg-transmitter.ts +6 -3
  176. package/src/transport/ascii/ascii-session.ts +75 -19
  177. package/src/transport/duplex/http-duplex.ts +2 -2
  178. package/src/transport/fix-session-state.ts +4 -1
  179. package/src/transport/fix-session.ts +98 -37
  180. package/src/transport/http/http-acceptor.ts +7 -6
  181. package/src/transport/tcp/tcp-acceptor.ts +59 -35
  182. 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
- let definitions;
32
- let clientDescription;
33
- let serverDescription;
34
- let client;
35
- let clientFactory;
36
- let serverFactory;
37
- let server;
38
- function loopBack(lhs, rhs) {
39
- lhs.writable.on('data', (data) => {
40
- rhs.readable.push(data);
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
- clientDescription = require(path.join(root, 'session/test-initiator.json'));
45
- serverDescription = require(path.join(root, 'session/test-acceptor.json'));
46
- definitions = yield (0, util_1.getDefinitions)(clientDescription.application.dictionary);
63
+ setup = new Setup();
64
+ yield setup.init();
47
65
  }), 45000);
48
- beforeEach(() => __awaiter(void 0, void 0, void 0, function* () {
49
- clientFactory = new ascii_1.AsciiSessionMsgFactory(clientDescription);
50
- serverFactory = new ascii_1.AsciiSessionMsgFactory(serverDescription);
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
- test('end to end logon', () => __awaiter(void 0, void 0, void 0, function* () {
83
- const lo = client.config.factory.logon();
84
- const res = yield clientToServerWaitFirstMessage(types_1.MsgType.Logon, lo);
85
- expect(res.event).toEqual('msg');
86
- expect(res.msgType).toEqual('A');
87
- const received = res.view.toObject();
88
- expect(received).toBeTruthy();
89
- delete received['StandardHeader'];
90
- delete received['StandardTrailer'];
91
- expect(received).toEqual(lo);
92
- }));
93
- function runSkeletons(logoutSeconds = 1, followOn = null) {
94
- return __awaiter(this, void 0, void 0, function* () {
95
- const s1 = new skeleton_session_1.SkeletonSession(client.config, logoutSeconds);
96
- const s2 = new skeleton_session_1.SkeletonSession(server.config, logoutSeconds);
97
- s1.checkMsgIntegrity = true;
98
- s2.checkMsgIntegrity = true;
99
- function watchdog() {
100
- if (client.views.length > 20 || server.views.length > 20) {
101
- s1.done();
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
- server.transport.receiver.on('msg', (type, view) => {
110
- server.views.push(view.clone());
111
- watchdog();
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
- yield Promise.all([s1.run(client.transport), s2.run(server.transport), new Promise((accept) => {
127
- setTimeout(() => {
128
- s1.done();
129
- s2.done();
130
- accept(true);
131
- }, (logoutSeconds + 2) * 1000);
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
- expect(client.views.length >= 2).toEqual(true);
157
- expect(server.views.length >= 2).toEqual(true);
158
- checkSeqNos(client.views);
159
- checkSeqNos(server.views);
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
- expect(client.views.length).toEqual(1);
177
- expect(client.views[0].segment.name).toEqual('Logon');
178
- expect(server.views.length).toEqual(2);
179
- expect(server.views[0].segment.name).toEqual('Logon');
180
- expect(server.views[1].segment.name).toEqual('Logout');
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
- expect(client.views.length === 1).toEqual(true);
201
- expect(server.views.length === 1).toEqual(true);
202
- expect(client.views[0].segment.name).toEqual('Reject');
203
- expect(server.views[0].segment.name).toEqual('Logon');
204
- const reject = client.views[0].toObject();
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
- expect(client.views.length === 3).toEqual(true);
213
- expect(server.views.length === 3).toEqual(true);
214
- expect(client.views[0].segment.name).toEqual('Logon');
215
- expect(client.views[1].segment.name).toEqual('Reject');
216
- expect(server.views[0].segment.name).toEqual('Logon');
217
- expect(server.views[1].segment.name).toEqual('unknown');
218
- const reject = client.views[1].toObject();
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
- expect(client.views.length === 3).toEqual(true);
227
- expect(server.views.length === 3).toEqual(true);
228
- expect(client.views[0].segment.name).toEqual('Logon');
229
- expect(client.views[1].segment.name).toEqual('Reject');
230
- expect(server.views[0].segment.name).toEqual('Logon');
231
- expect(server.views[1].segment.name).toEqual('Heartbeat');
232
- const reject = client.views[1].toObject();
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(client.views);
235
- checkSeqNos(server.views);
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
- expect(client.views.length === 3).toEqual(true);
242
- expect(server.views.length === 3).toEqual(true);
243
- expect(client.views[0].segment.name).toEqual('Logon');
244
- expect(client.views[1].segment.name).toEqual('Reject');
245
- expect(server.views[0].segment.name).toEqual('Logon');
246
- expect(server.views[1].segment.name).toEqual('Heartbeat');
247
- const reject = client.views[1].toObject();
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(client.views);
250
- checkSeqNos(server.views);
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
- expect(client.views.length === 2).toEqual(true);
257
- expect(server.views.length > 2).toEqual(true);
258
- const serverReceivesHeartbeats = countOfType('Heartbeat', server.views);
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(client.views);
261
- checkSeqNos(server.views);
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
- expect(server.views.length === 2).toEqual(true);
269
- expect(client.views.length > 2).toEqual(true);
270
- const clientReceivesHeartbeats = countOfType('Heartbeat', client.views);
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(client.views);
273
- checkSeqNos(server.views);
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 = 2;
279
- client.config.description.HeartBtInt = 2;
280
- yield runSkeletons(6);
281
- expect(server.views.length > 2).toEqual(true);
282
- expect(client.views.length > 2).toEqual(true);
283
- const clientReceivesHeartbeats = countOfType('Heartbeat', client.views);
284
- const serverReceivesHeartbeats = countOfType('Heartbeat', server.views);
285
- expect(clientReceivesHeartbeats >= 2 && clientReceivesHeartbeats <= 4).toEqual(true);
286
- expect(serverReceivesHeartbeats >= 2 && serverReceivesHeartbeats <= 4).toEqual(true);
287
- checkSeqNos(client.views);
288
- checkSeqNos(server.views);
289
- server.config.description.HeartBtInt = preset;
290
- client.config.description.HeartBtInt = preset;
291
- }), 10000);
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