jspurefix 2.0.2 → 2.0.3

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 (272) hide show
  1. package/appveyor.yml +1 -0
  2. package/dist/runtime/session-launcher.js +2 -2
  3. package/dist/runtime/session-launcher.js.map +1 -1
  4. package/package.json +7 -7
  5. package/src/runtime/session-launcher.ts +2 -2
  6. package/dist/a-session-msg-factory.d.ts +0 -0
  7. package/dist/a-session-msg-factory.js +0 -1
  8. package/dist/a-session-msg-factory.js.map +0 -1
  9. package/dist/ascii-encoder.test.d.ts +0 -0
  10. package/dist/ascii-encoder.test.js +0 -1
  11. package/dist/ascii-encoder.test.js.map +0 -1
  12. package/dist/ascii-parser.test.d.ts +0 -0
  13. package/dist/ascii-parser.test.js +0 -1
  14. package/dist/ascii-parser.test.js.map +0 -1
  15. package/dist/ascii-segment.test.d.ts +0 -0
  16. package/dist/ascii-segment.test.js +0 -1
  17. package/dist/ascii-segment.test.js.map +0 -1
  18. package/dist/ascii-store-replay.test.d.ts +0 -0
  19. package/dist/ascii-store-replay.test.js +0 -1
  20. package/dist/ascii-store-replay.test.js.map +0 -1
  21. package/dist/ascii-tag-pos.test.d.ts +0 -0
  22. package/dist/ascii-tag-pos.test.js +0 -1
  23. package/dist/ascii-tag-pos.test.js.map +0 -1
  24. package/dist/buffer/segment-description.d.ts +0 -26
  25. package/dist/buffer/segment-description.js +0 -72
  26. package/dist/buffer/segment-description.js.map +0 -1
  27. package/dist/buffer/segment-summary.d.ts +0 -13
  28. package/dist/buffer/segment-summary.js +0 -20
  29. package/dist/buffer/segment-summary.js.map +0 -1
  30. package/dist/buffer/segment-type.d.ts +0 -8
  31. package/dist/buffer/segment-type.js +0 -13
  32. package/dist/buffer/segment-type.js.map +0 -1
  33. package/dist/buffer/tag-pos.d.ts +0 -12
  34. package/dist/buffer/tag-pos.js +0 -55
  35. package/dist/buffer/tag-pos.js.map +0 -1
  36. package/dist/buffer/tag-type.d.ts +0 -13
  37. package/dist/buffer/tag-type.js +0 -18
  38. package/dist/buffer/tag-type.js.map +0 -1
  39. package/dist/buffer/tags.d.ts +0 -21
  40. package/dist/buffer/tags.js +0 -122
  41. package/dist/buffer/tags.js.map +0 -1
  42. package/dist/dictionary/parser/fix-repository/repository-msg.d.ts +0 -0
  43. package/dist/dictionary/parser/fix-repository/repository-msg.js +0 -1
  44. package/dist/dictionary/parser/fix-repository/repository-msg.js.map +0 -1
  45. package/dist/execution-report.test.d.ts +0 -0
  46. package/dist/execution-report.test.js +0 -1
  47. package/dist/execution-report.test.js.map +0 -1
  48. package/dist/experiment.d.ts +0 -0
  49. package/dist/experiment.js +0 -1
  50. package/dist/experiment.js.map +0 -1
  51. package/dist/fix-repo-dict.test.d.ts +0 -0
  52. package/dist/fix-repo-dict.test.js +0 -1
  53. package/dist/fix-repo-dict.test.js.map +0 -1
  54. package/dist/fix-session-state-args.d.ts +0 -0
  55. package/dist/fix-session-state-args.js +0 -1
  56. package/dist/fix-session-state-args.js.map +0 -1
  57. package/dist/fix-session-state.d.ts +0 -0
  58. package/dist/fix-session-state.js +0 -1
  59. package/dist/fix-session-state.js.map +0 -1
  60. package/dist/fix-session.d.ts +0 -0
  61. package/dist/fix-session.js +0 -1
  62. package/dist/fix-session.js.map +0 -1
  63. package/dist/fix.txt +0 -1
  64. package/dist/fixml-alloc-parse.test.d.ts +0 -0
  65. package/dist/fixml-alloc-parse.test.js +0 -1
  66. package/dist/fixml-alloc-parse.test.js.map +0 -1
  67. package/dist/fixml-mkt-data-fut-parse.test.d.ts +0 -0
  68. package/dist/fixml-mkt-data-fut-parse.test.js +0 -1
  69. package/dist/fixml-mkt-data-fut-parse.test.js.map +0 -1
  70. package/dist/fixml-mkt-data-settle-parse.test.d.ts +0 -0
  71. package/dist/fixml-mkt-data-settle-parse.test.js +0 -1
  72. package/dist/fixml-mkt-data-settle-parse.test.js.map +0 -1
  73. package/dist/fixml-tc-bi-lateral-parse.test.d.ts +0 -0
  74. package/dist/fixml-tc-bi-lateral-parse.test.js +0 -1
  75. package/dist/fixml-tc-bi-lateral-parse.test.js.map +0 -1
  76. package/dist/includes.test.d.ts +0 -0
  77. package/dist/includes.test.js +0 -1
  78. package/dist/includes.test.js.map +0 -1
  79. package/dist/launcher.d.ts +0 -0
  80. package/dist/launcher.js +0 -1
  81. package/dist/launcher.js.map +0 -1
  82. package/dist/logon.test.d.ts +0 -0
  83. package/dist/logon.test.js +0 -1
  84. package/dist/logon.test.js.map +0 -1
  85. package/dist/make-fix-session.d.ts +0 -0
  86. package/dist/make-fix-session.js +0 -1
  87. package/dist/make-fix-session.js.map +0 -1
  88. package/dist/memory-store.test.d.ts +0 -0
  89. package/dist/memory-store.test.js +0 -1
  90. package/dist/memory-store.test.js.map +0 -1
  91. package/dist/object.json +0 -691
  92. package/dist/qf-full-msg.test.d.ts +0 -0
  93. package/dist/qf-full-msg.test.js +0 -1
  94. package/dist/qf-full-msg.test.js.map +0 -1
  95. package/dist/repo-full-ascii-msg.test.d.ts +0 -0
  96. package/dist/repo-full-ascii-msg.test.js +0 -1
  97. package/dist/repo-full-ascii-msg.test.js.map +0 -1
  98. package/dist/runtime/DITokens.d.ts +0 -20
  99. package/dist/runtime/DITokens.js +0 -25
  100. package/dist/runtime/DITokens.js.map +0 -1
  101. package/dist/runtime/app-launcher.d.ts +0 -27
  102. package/dist/runtime/app-launcher.js +0 -131
  103. package/dist/runtime/app-launcher.js.map +0 -1
  104. package/dist/runtime/launcher.d.ts +0 -29
  105. package/dist/runtime/launcher.js +0 -131
  106. package/dist/runtime/launcher.js.map +0 -1
  107. package/dist/sample/launcher.d.ts +0 -29
  108. package/dist/sample/launcher.js +0 -131
  109. package/dist/sample/launcher.js.map +0 -1
  110. package/dist/sample/tcp/trade-capture/app-launher.d.ts +0 -0
  111. package/dist/sample/tcp/trade-capture/app-launher.js +0 -1
  112. package/dist/sample/tcp/trade-capture/app-launher.js.map +0 -1
  113. package/dist/sample/tcp/trade-capture/jsfix.test_client.txt +0 -11
  114. package/dist/sample/tcp/trade-capture/jsfix.test_server.txt +0 -10
  115. package/dist/segment-description.d.ts +0 -0
  116. package/dist/segment-description.js +0 -1
  117. package/dist/segment-description.js.map +0 -1
  118. package/dist/segment-summary.d.ts +0 -0
  119. package/dist/segment-summary.js +0 -1
  120. package/dist/segment-summary.js.map +0 -1
  121. package/dist/segment-type.d.ts +0 -0
  122. package/dist/segment-type.js +0 -1
  123. package/dist/segment-type.js.map +0 -1
  124. package/dist/session-description.d.ts +0 -0
  125. package/dist/session-description.js +0 -1
  126. package/dist/session-description.js.map +0 -1
  127. package/dist/session-msg-factory.d.ts +0 -0
  128. package/dist/session-msg-factory.js +0 -1
  129. package/dist/session-msg-factory.js.map +0 -1
  130. package/dist/session-state.d.ts +0 -0
  131. package/dist/session-state.js +0 -1
  132. package/dist/session-state.js.map +0 -1
  133. package/dist/session-state.test.d.ts +0 -0
  134. package/dist/session-state.test.js +0 -1
  135. package/dist/session-state.test.js.map +0 -1
  136. package/dist/session.test.d.ts +0 -0
  137. package/dist/session.test.js +0 -1
  138. package/dist/session.test.js.map +0 -1
  139. package/dist/setup.d.ts +0 -0
  140. package/dist/setup.js +0 -1
  141. package/dist/setup.js.map +0 -1
  142. package/dist/skeleton-runner.d.ts +0 -0
  143. package/dist/skeleton-runner.js +0 -1
  144. package/dist/skeleton-runner.js.map +0 -1
  145. package/dist/structure.json +0 -631
  146. package/dist/tag-pos.d.ts +0 -0
  147. package/dist/tag-pos.js +0 -1
  148. package/dist/tag-pos.js.map +0 -1
  149. package/dist/tag-type.d.ts +0 -0
  150. package/dist/tag-type.js +0 -1
  151. package/dist/tag-type.js.map +0 -1
  152. package/dist/tags.d.ts +0 -0
  153. package/dist/tags.js +0 -1
  154. package/dist/tags.js.map +0 -1
  155. package/dist/test/ascii-encoder.test.d.ts +0 -1
  156. package/dist/test/ascii-encoder.test.js +0 -508
  157. package/dist/test/ascii-encoder.test.js.map +0 -1
  158. package/dist/test/ascii-parser.test.d.ts +0 -1
  159. package/dist/test/ascii-parser.test.js +0 -123
  160. package/dist/test/ascii-parser.test.js.map +0 -1
  161. package/dist/test/ascii-segment.test.d.ts +0 -1
  162. package/dist/test/ascii-segment.test.js +0 -86
  163. package/dist/test/ascii-segment.test.js.map +0 -1
  164. package/dist/test/ascii-store-replay.test.d.ts +0 -1
  165. package/dist/test/ascii-store-replay.test.js +0 -92
  166. package/dist/test/ascii-store-replay.test.js.map +0 -1
  167. package/dist/test/ascii-tag-pos.test.d.ts +0 -1
  168. package/dist/test/ascii-tag-pos.test.js +0 -105
  169. package/dist/test/ascii-tag-pos.test.js.map +0 -1
  170. package/dist/test/execution-report.test.d.ts +0 -1
  171. package/dist/test/execution-report.test.js +0 -494
  172. package/dist/test/execution-report.test.js.map +0 -1
  173. package/dist/test/experiment.d.ts +0 -23
  174. package/dist/test/experiment.js +0 -33
  175. package/dist/test/experiment.js.map +0 -1
  176. package/dist/test/expieriment.d.ts +0 -23
  177. package/dist/test/expieriment.js +0 -33
  178. package/dist/test/expieriment.js.map +0 -1
  179. package/dist/test/fix-log-replay.test.d.ts +0 -1
  180. package/dist/test/fix-log-replay.test.js +0 -47
  181. package/dist/test/fix-log-replay.test.js.map +0 -1
  182. package/dist/test/fix-repo-dict.test.d.ts +0 -1
  183. package/dist/test/fix-repo-dict.test.js +0 -128
  184. package/dist/test/fix-repo-dict.test.js.map +0 -1
  185. package/dist/test/fixml-alloc-parse.test.d.ts +0 -1
  186. package/dist/test/fixml-alloc-parse.test.js +0 -161
  187. package/dist/test/fixml-alloc-parse.test.js.map +0 -1
  188. package/dist/test/fixml-mkt-data-fut-parse.test.d.ts +0 -1
  189. package/dist/test/fixml-mkt-data-fut-parse.test.js +0 -61
  190. package/dist/test/fixml-mkt-data-fut-parse.test.js.map +0 -1
  191. package/dist/test/fixml-mkt-data-settle-parse.test.d.ts +0 -1
  192. package/dist/test/fixml-mkt-data-settle-parse.test.js +0 -34
  193. package/dist/test/fixml-mkt-data-settle-parse.test.js.map +0 -1
  194. package/dist/test/fixml-tc-bi-lateral-parse.test.d.ts +0 -1
  195. package/dist/test/fixml-tc-bi-lateral-parse.test.js +0 -97
  196. package/dist/test/fixml-tc-bi-lateral-parse.test.js.map +0 -1
  197. package/dist/test/includes.test.d.ts +0 -1
  198. package/dist/test/includes.test.js +0 -43
  199. package/dist/test/includes.test.js.map +0 -1
  200. package/dist/test/logon.test.d.ts +0 -1
  201. package/dist/test/logon.test.js +0 -93
  202. package/dist/test/logon.test.js.map +0 -1
  203. package/dist/test/memory-store.test.d.ts +0 -1
  204. package/dist/test/memory-store.test.js +0 -78
  205. package/dist/test/memory-store.test.js.map +0 -1
  206. package/dist/test/qf-full-msg.test.d.ts +0 -1
  207. package/dist/test/qf-full-msg.test.js +0 -81
  208. package/dist/test/qf-full-msg.test.js.map +0 -1
  209. package/dist/test/repo-full-ascii-msg.test.d.ts +0 -1
  210. package/dist/test/repo-full-ascii-msg.test.js +0 -87
  211. package/dist/test/repo-full-ascii-msg.test.js.map +0 -1
  212. package/dist/test/repo-full-fixml-msg.test.d.ts +0 -1
  213. package/dist/test/repo-full-fixml-msg.test.js +0 -139
  214. package/dist/test/repo-full-fixml-msg.test.js.map +0 -1
  215. package/dist/test/session-state.test.d.ts +0 -1
  216. package/dist/test/session-state.test.js +0 -73
  217. package/dist/test/session-state.test.js.map +0 -1
  218. package/dist/test/session.test.d.ts +0 -1
  219. package/dist/test/session.test.js +0 -280
  220. package/dist/test/session.test.js.map +0 -1
  221. package/dist/test/setup.d.ts +0 -45
  222. package/dist/test/setup.js +0 -102
  223. package/dist/test/setup.js.map +0 -1
  224. package/dist/test/skeleton-runner.d.ts +0 -15
  225. package/dist/test/skeleton-runner.js +0 -108
  226. package/dist/test/skeleton-runner.js.map +0 -1
  227. package/dist/test/time-formatter.test.d.ts +0 -1
  228. package/dist/test/time-formatter.test.js +0 -80
  229. package/dist/test/time-formatter.test.js.map +0 -1
  230. package/dist/test/to-views.d.ts +0 -11
  231. package/dist/test/to-views.js +0 -56
  232. package/dist/test/to-views.js.map +0 -1
  233. package/dist/test/view-decode.test.d.ts +0 -1
  234. package/dist/test/view-decode.test.js +0 -183
  235. package/dist/test/view-decode.test.js.map +0 -1
  236. package/dist/time-formatter.test.d.ts +0 -0
  237. package/dist/time-formatter.test.js +0 -1
  238. package/dist/time-formatter.test.js.map +0 -1
  239. package/dist/to-views.d.ts +0 -0
  240. package/dist/to-views.js +0 -1
  241. package/dist/to-views.js.map +0 -1
  242. package/dist/token.txt +0 -248
  243. package/dist/transport/FixEntity.d.ts +0 -8
  244. package/dist/transport/FixEntity.js +0 -12
  245. package/dist/transport/FixEntity.js.map +0 -1
  246. package/dist/transport/a-session-msg-factory.d.ts +0 -23
  247. package/dist/transport/a-session-msg-factory.js +0 -58
  248. package/dist/transport/a-session-msg-factory.js.map +0 -1
  249. package/dist/transport/fix-msg-factory.d.ts +0 -15
  250. package/dist/transport/fix-msg-factory.js +0 -3
  251. package/dist/transport/fix-msg-factory.js.map +0 -1
  252. package/dist/transport/fix-session-state-args.d.ts +0 -8
  253. package/dist/transport/fix-session-state-args.js +0 -3
  254. package/dist/transport/fix-session-state-args.js.map +0 -1
  255. package/dist/transport/fix-session-state.d.ts +0 -32
  256. package/dist/transport/fix-session-state.js +0 -133
  257. package/dist/transport/fix-session-state.js.map +0 -1
  258. package/dist/transport/fix-session.d.ts +0 -50
  259. package/dist/transport/fix-session.js +0 -291
  260. package/dist/transport/fix-session.js.map +0 -1
  261. package/dist/transport/make-fix-session.d.ts +0 -5
  262. package/dist/transport/make-fix-session.js +0 -3
  263. package/dist/transport/make-fix-session.js.map +0 -1
  264. package/dist/transport/session-description.d.ts +0 -17
  265. package/dist/transport/session-description.js +0 -3
  266. package/dist/transport/session-description.js.map +0 -1
  267. package/dist/transport/session-msg-factory.d.ts +0 -15
  268. package/dist/transport/session-msg-factory.js +0 -3
  269. package/dist/transport/session-msg-factory.js.map +0 -1
  270. package/dist/transport/session-state.d.ts +0 -25
  271. package/dist/transport/session-state.js +0 -30
  272. package/dist/transport/session-state.js.map +0 -1
@@ -1,280 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- require("reflect-metadata");
13
- const types_1 = require("../types");
14
- const setup_1 = require("./env/setup");
15
- const experiment_1 = require("./env/experiment");
16
- const skeleton_runner_1 = require("./env/skeleton-runner");
17
- const logonMsg = '8=FIX4.4|9=0000136|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20180902-12:25:28.980|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=177|';
18
- const heartbeat = '8=FIX4.4|9=0000123|35=0|49=init-comp|56=accept-comp|34=1|57=fix|52=20180902-12:25:59.161|112=Sun, 02 Sep 2018 12:25:59 GMT|10=95|';
19
- let setup = null;
20
- let experiment = null;
21
- beforeEach(() => __awaiter(void 0, void 0, void 0, function* () {
22
- setup = new setup_1.Setup();
23
- yield setup.init();
24
- experiment = new experiment_1.Experiment(setup);
25
- }));
26
- class ParsingResult {
27
- constructor(event, msgType, view) {
28
- this.event = event;
29
- this.msgType = msgType;
30
- this.view = view;
31
- }
32
- }
33
- function clientToServerWaitFirstMessage(type, obj) {
34
- return new Promise((resolve, reject) => {
35
- const clt = experiment.client.transport;
36
- const svt = experiment.server.transport;
37
- clt.transmitter.on('error', (e) => {
38
- reject(e);
39
- });
40
- svt.receiver.on('msg', (msgType, view) => {
41
- resolve(new ParsingResult('msg', msgType, view.clone()));
42
- });
43
- clt.receiver.on('error', (e) => {
44
- reject(e);
45
- });
46
- clt.transmitter.send(type, obj);
47
- experiment.client.transport.end();
48
- });
49
- }
50
- function runSkeletons(logoutSeconds = 1, followOn = null) {
51
- return __awaiter(this, void 0, void 0, function* () {
52
- const runner = new skeleton_runner_1.SkeletonRunner(experiment, logoutSeconds);
53
- runner.sendText(followOn);
54
- yield runner.wait();
55
- });
56
- }
57
- test('end to end logon', () => __awaiter(void 0, void 0, void 0, function* () {
58
- const lo = experiment.client.config.factory.logon();
59
- const res = yield clientToServerWaitFirstMessage(types_1.MsgType.Logon, lo);
60
- expect(res.event).toEqual('msg');
61
- expect(res.msgType).toEqual('A');
62
- const received = res.view.toObject();
63
- expect(received).toBeTruthy();
64
- delete received['StandardHeader'];
65
- delete received['StandardTrailer'];
66
- expect(received).toEqual(lo);
67
- }));
68
- test('session send resendRequest when logged on', () => __awaiter(void 0, void 0, void 0, function* () {
69
- const runner = new skeleton_runner_1.SkeletonRunner(experiment, 2);
70
- const factory = experiment.client.config.factory;
71
- const resend = factory.resendRequest(1, 2);
72
- runner.sendMsg(types_1.MsgType.ResendRequest, resend);
73
- try {
74
- const cViews = experiment.client.views;
75
- const sViews = experiment.server.views;
76
- yield runner.wait();
77
- const last = experiment.client.views[experiment.client.views.length - 1];
78
- expect(last).toBeTruthy();
79
- const clientResets = countOfType('SequenceReset', cViews);
80
- const serverResets = countOfType('SequenceReset', sViews);
81
- expect(clientResets).toEqual(1);
82
- expect(serverResets).toEqual(0);
83
- }
84
- catch (e) {
85
- expect(true).toEqual(false);
86
- }
87
- }));
88
- test('session send logon when logged on', () => __awaiter(void 0, void 0, void 0, function* () {
89
- const runner = new skeleton_runner_1.SkeletonRunner(experiment, 2);
90
- const logon = experiment.client.config.factory.logon();
91
- runner.sendMsg(types_1.MsgType.Logon, logon);
92
- try {
93
- yield runner.wait();
94
- }
95
- catch (e) {
96
- expect(experiment.server.errors.length).toEqual(1);
97
- }
98
- }));
99
- test('session logon / logout', () => __awaiter(void 0, void 0, void 0, function* () {
100
- yield runSkeletons();
101
- const cViews = experiment.client.views;
102
- const sViews = experiment.server.views;
103
- expect(experiment.client.errors.length).toEqual(0);
104
- expect(experiment.server.errors.length).toEqual(0);
105
- expect(cViews.length).toEqual(2);
106
- expect(sViews.length).toEqual(2);
107
- expect(cViews[0].segment.name).toEqual('Logon');
108
- expect(cViews[1].segment.name).toEqual('Logout');
109
- expect(sViews[0].segment.name).toEqual('Logon');
110
- expect(sViews[1].segment.name).toEqual('Logout');
111
- }));
112
- function checkSeqNos(views) {
113
- const seqNo = views.map((v) => v.getView('StandardHeader').toObject().MsgSeqNum);
114
- expect(seqNo).toBeTruthy();
115
- const delta = seqNo.reduce((c, latest) => {
116
- return latest - c === 1 ? c + 1 : c - 1;
117
- }, 0);
118
- expect(delta).toEqual(seqNo.length);
119
- }
120
- test('seq No OK', () => __awaiter(void 0, void 0, void 0, function* () {
121
- yield runSkeletons();
122
- const cviews = experiment.client.views;
123
- const sviews = experiment.server.views;
124
- expect(cviews.length >= 2).toEqual(true);
125
- expect(sviews.length >= 2).toEqual(true);
126
- checkSeqNos(cviews);
127
- checkSeqNos(sviews);
128
- }));
129
- function mutateSeqNo(description, type, o) {
130
- switch (type) {
131
- case 'StandardHeader': {
132
- const hdr = o;
133
- if (hdr.MsgSeqNum === 2) {
134
- hdr.MsgSeqNum = 0;
135
- }
136
- break;
137
- }
138
- }
139
- return o;
140
- }
141
- test('out of seq logout', () => __awaiter(void 0, void 0, void 0, function* () {
142
- experiment.clientFactory.mutator = mutateSeqNo;
143
- yield runSkeletons();
144
- const cviews = experiment.client.views;
145
- const sviews = experiment.server.views;
146
- expect(cviews.length).toEqual(1);
147
- expect(cviews[0].segment.name).toEqual('Logon');
148
- expect(sviews.length).toEqual(2);
149
- expect(sviews[0].segment.name).toEqual('Logon');
150
- expect(sviews[1].segment.name).toEqual('Logout');
151
- }));
152
- function countOfType(type, views) {
153
- return views.reduce((c, v) => {
154
- return v.segment.name === type ? c + 1 : c;
155
- }, 0);
156
- }
157
- function mutateRemoveRequiredHeartBtInt(description, type, o) {
158
- switch (type) {
159
- case 'A': {
160
- const logon = o;
161
- delete logon['HeartBtInt'];
162
- break;
163
- }
164
- }
165
- return o;
166
- }
167
- test('client logon reject missing 108', () => __awaiter(void 0, void 0, void 0, function* () {
168
- experiment.clientFactory.mutator = mutateRemoveRequiredHeartBtInt;
169
- yield runSkeletons(2);
170
- const cviews = experiment.client.views;
171
- const sviews = experiment.server.views;
172
- expect(cviews.length === 1).toEqual(true);
173
- expect(sviews.length === 1).toEqual(true);
174
- expect(cviews[0].segment.name).toEqual('Reject');
175
- expect(sviews[0].segment.name).toEqual('Logon');
176
- const reject = cviews[0].toObject();
177
- expect(reject.SessionRejectReason === types_1.SessionRejectReason.RequiredTagMissing);
178
- expect(reject.Text).toEqual('msgType A missing required tag 108');
179
- }), 10000);
180
- test('client unknown msg type', () => __awaiter(void 0, void 0, void 0, function* () {
181
- const at = experiment.client.transport.transmitter;
182
- const changed = logonMsg.replace('35=A', '35=ZZ').replace('34=1', `34=${at.msgSeqNum + 1}`);
183
- yield runSkeletons(2, changed);
184
- const cviews = experiment.client.views;
185
- const sviews = experiment.server.views;
186
- expect(cviews.length).toEqual(3);
187
- expect(sviews.length).toEqual(3);
188
- expect(cviews[0].segment.name).toEqual('Logon');
189
- expect(cviews[1].segment.name).toEqual('Reject');
190
- expect(sviews[0].segment.name).toEqual('Logon');
191
- expect(sviews[1].segment.name).toEqual('unknown');
192
- const reject = cviews[1].toObject();
193
- expect(reject.SessionRejectReason === types_1.SessionRejectReason.InvalidMsgType);
194
- expect(reject.Text).toEqual('msgType ZZ unknown');
195
- }), 10000);
196
- test('heartbeat invalid tag', () => __awaiter(void 0, void 0, void 0, function* () {
197
- const at = experiment.client.transport.transmitter;
198
- const changed = heartbeat.replace('112=', '999=').replace('34=1', `34=${at.msgSeqNum + 1}`);
199
- yield runSkeletons(2, changed);
200
- const cviews = experiment.client.views;
201
- const sviews = experiment.server.views;
202
- expect(cviews.length === 3).toEqual(true);
203
- expect(sviews.length === 3).toEqual(true);
204
- expect(cviews[0].segment.name).toEqual('Logon');
205
- expect(cviews[1].segment.name).toEqual('Reject');
206
- expect(sviews[0].segment.name).toEqual('Logon');
207
- expect(sviews[1].segment.name).toEqual('Heartbeat');
208
- const reject = experiment.client.views[1].toObject();
209
- expect(reject.SessionRejectReason === types_1.SessionRejectReason.InvalidTagNumber);
210
- checkSeqNos(cviews);
211
- checkSeqNos(sviews);
212
- }), 10000);
213
- test('heartbeat invalid sender comp', () => __awaiter(void 0, void 0, void 0, function* () {
214
- const at = experiment.client.transport.transmitter;
215
- const changed = heartbeat.replace('49=init-comp', '49=init-not!').replace('34=1', `34=${at.msgSeqNum + 1}`);
216
- yield runSkeletons(2, changed);
217
- const cviews = experiment.client.views;
218
- const sviews = experiment.server.views;
219
- expect(cviews.length === 3).toEqual(true);
220
- expect(sviews.length === 3).toEqual(true);
221
- expect(cviews[0].segment.name).toEqual('Logon');
222
- expect(cviews[1].segment.name).toEqual('Reject');
223
- expect(sviews[0].segment.name).toEqual('Logon');
224
- expect(sviews[1].segment.name).toEqual('Heartbeat');
225
- const reject = cviews[1].toObject();
226
- expect(reject.SessionRejectReason === types_1.SessionRejectReason.CompIDProblem);
227
- checkSeqNos(cviews);
228
- checkSeqNos(sviews);
229
- }), 10000);
230
- test('client heartbeats to server', () => __awaiter(void 0, void 0, void 0, function* () {
231
- const preset = experiment.client.config.description.HeartBtInt;
232
- experiment.client.config.description.HeartBtInt = 2;
233
- yield runSkeletons(6);
234
- const cviews = experiment.client.views;
235
- const sviews = experiment.server.views;
236
- expect(cviews.length === 2).toEqual(true);
237
- expect(sviews.length > 2).toEqual(true);
238
- const serverReceivesHeartbeats = countOfType('Heartbeat', sviews);
239
- expect(serverReceivesHeartbeats >= 2 && serverReceivesHeartbeats <= 4).toEqual(true);
240
- checkSeqNos(cviews);
241
- checkSeqNos(sviews);
242
- experiment.client.config.description.HeartBtInt = preset;
243
- }), 10000);
244
- test('server heartbeats to client', () => __awaiter(void 0, void 0, void 0, function* () {
245
- const preset = experiment.server.config.description.HeartBtInt;
246
- experiment.server.config.description.HeartBtInt = 2;
247
- yield runSkeletons(6);
248
- const cviews = experiment.client.views;
249
- const sviews = experiment.server.views;
250
- expect(sviews.length === 2).toEqual(true);
251
- expect(cviews.length > 2).toEqual(true);
252
- const clientReceivesHeartbeats = countOfType('Heartbeat', cviews);
253
- expect(clientReceivesHeartbeats >= 2 && clientReceivesHeartbeats <= 4).toEqual(true);
254
- checkSeqNos(cviews);
255
- checkSeqNos(sviews);
256
- experiment.server.config.description.HeartBtInt = preset;
257
- }), 10000);
258
- test('client server heartbeat', () => __awaiter(void 0, void 0, void 0, function* () {
259
- const preset = experiment.server.config.description.HeartBtInt;
260
- experiment.server.config.description.HeartBtInt = 5;
261
- experiment.client.config.description.HeartBtInt = 2;
262
- yield runSkeletons(8);
263
- const cviews = experiment.client.views;
264
- const sviews = experiment.server.views;
265
- expect(sviews.length > 2).toEqual(true);
266
- expect(cviews.length > 2).toEqual(true);
267
- const clientReceivesHeartbeats = countOfType('Heartbeat', cviews);
268
- const clientReceivesTestRequest = countOfType('TestRequest', cviews);
269
- const clientTotal = clientReceivesHeartbeats + clientReceivesTestRequest;
270
- const serverReceivesHeartbeats = countOfType('Heartbeat', sviews);
271
- const serverReceivesTestRequest = countOfType('TestRequest', sviews);
272
- const serverTotal = serverReceivesHeartbeats + serverReceivesTestRequest;
273
- expect(clientTotal >= 1 && clientReceivesHeartbeats <= 4).toEqual(true);
274
- expect(serverTotal >= 3 && serverReceivesHeartbeats <= 4).toEqual(true);
275
- checkSeqNos(cviews);
276
- checkSeqNos(sviews);
277
- experiment.server.config.description.HeartBtInt = preset;
278
- experiment.client.config.description.HeartBtInt = preset;
279
- }), 15000);
280
- //# sourceMappingURL=session.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"session.test.js","sourceRoot":"","sources":["../../src/test/session.test.ts"],"names":[],"mappings":"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","sourcesContent":["import 'reflect-metadata'\r\n\r\nimport { MsgView } from '../buffer'\r\nimport { ISessionDescription } from '../transport'\r\nimport { MsgType, SessionRejectReason } from '../types'\r\nimport { ILooseObject } from '../collections/collection'\r\nimport { IStandardHeader, IReject, ILogon } from '../types/FIX4.4/repo'\r\n\r\nimport { AsciiMsgTransmitter } from '../transport/ascii/ascii-msg-transmitter'\r\nimport { Setup } from './env/setup'\r\nimport { Experiment } from './env/experiment'\r\nimport { SkeletonRunner } from './env/skeleton-runner'\r\n\r\nconst logonMsg: string = '8=FIX4.4|9=0000136|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20180902-12:25:28.980|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=177|'\r\nconst heartbeat: string = '8=FIX4.4|9=0000123|35=0|49=init-comp|56=accept-comp|34=1|57=fix|52=20180902-12:25:59.161|112=Sun, 02 Sep 2018 12:25:59 GMT|10=95|'\r\n\r\nlet setup: Setup = null\r\nlet experiment: Experiment = null\r\n\r\nbeforeEach(async () => {\r\n setup = new Setup()\r\n await setup.init()\r\n experiment = new Experiment(setup)\r\n})\r\n\r\nclass ParsingResult {\r\n constructor (\r\n public readonly event: string,\r\n public readonly msgType: string,\r\n public readonly view: MsgView) {\r\n }\r\n}\r\n\r\nfunction clientToServerWaitFirstMessage (type: string, obj: ILooseObject): Promise<ParsingResult> {\r\n return new Promise<any>((resolve, reject) => {\r\n const clt = experiment.client.transport\r\n const svt = experiment.server.transport\r\n clt.transmitter.on('error', (e: Error) => {\r\n reject(e)\r\n })\r\n svt.receiver.on('msg', (msgType: string, view: MsgView) => {\r\n resolve(new ParsingResult('msg', msgType, view.clone()))\r\n })\r\n clt.receiver.on('error', (e: Error) => {\r\n reject(e)\r\n })\r\n clt.transmitter.send(type, obj)\r\n experiment.client.transport.end()\r\n })\r\n}\r\n\r\nasync function runSkeletons (logoutSeconds: number = 1, followOn: string = null) {\r\n const runner: SkeletonRunner = new SkeletonRunner(experiment, logoutSeconds)\r\n runner.sendText(followOn)\r\n await runner.wait()\r\n}\r\n\r\ntest('end to end logon', async () => {\r\n const lo = experiment.client.config.factory.logon()\r\n const res: ParsingResult = await clientToServerWaitFirstMessage(MsgType.Logon, lo)\r\n expect(res.event).toEqual('msg')\r\n expect(res.msgType).toEqual('A')\r\n const received = res.view.toObject()\r\n expect(received).toBeTruthy()\r\n delete received['StandardHeader']\r\n delete received['StandardTrailer']\r\n expect(received).toEqual(lo)\r\n})\r\n\r\ntest('session send resendRequest when logged on', async () => {\r\n const runner: SkeletonRunner = new SkeletonRunner(experiment, 2)\r\n const factory = experiment.client.config.factory\r\n const resend = factory.resendRequest(1, 2)\r\n runner.sendMsg(MsgType.ResendRequest, resend)\r\n try {\r\n const cViews = experiment.client.views\r\n const sViews = experiment.server.views\r\n await runner.wait()\r\n const last = experiment.client.views[experiment.client.views.length - 1]\r\n expect(last).toBeTruthy()\r\n const clientResets = countOfType('SequenceReset', cViews)\r\n const serverResets = countOfType('SequenceReset', sViews)\r\n expect(clientResets).toEqual(1)\r\n expect(serverResets).toEqual(0)\r\n } catch (e) {\r\n expect(true).toEqual(false)\r\n }\r\n})\r\n\r\ntest('session send logon when logged on', async () => {\r\n const runner: SkeletonRunner = new SkeletonRunner(experiment, 2)\r\n const logon = experiment.client.config.factory.logon()\r\n runner.sendMsg(MsgType.Logon, logon)\r\n try {\r\n await runner.wait()\r\n } catch (e) {\r\n expect(experiment.server.errors.length).toEqual(1)\r\n }\r\n})\r\n\r\ntest('session logon / logout', async () => {\r\n await runSkeletons()\r\n const cViews = experiment.client.views\r\n const sViews = experiment.server.views\r\n\r\n expect(experiment.client.errors.length).toEqual(0)\r\n expect(experiment.server.errors.length).toEqual(0)\r\n\r\n // both sides should now have logged on and logged off\r\n expect(cViews.length).toEqual(2)\r\n expect(sViews.length).toEqual(2)\r\n\r\n expect(cViews[0].segment.name).toEqual('Logon')\r\n expect(cViews[1].segment.name).toEqual('Logout')\r\n\r\n expect(sViews[0].segment.name).toEqual('Logon')\r\n expect(sViews[1].segment.name).toEqual('Logout')\r\n})\r\n\r\nfunction checkSeqNos (views: MsgView[]) {\r\n const seqNo: number[] = views.map((v: MsgView) => (v.getView('StandardHeader').toObject() as IStandardHeader).MsgSeqNum)\r\n expect(seqNo).toBeTruthy()\r\n const delta = seqNo.reduce((c: number, latest: number) => {\r\n return latest - c === 1 ? c + 1 : c - 1\r\n }, 0)\r\n expect(delta).toEqual(seqNo.length)\r\n}\r\n\r\ntest('seq No OK', async () => {\r\n await runSkeletons()\r\n const cviews = experiment.client.views\r\n const sviews = experiment.server.views\r\n // both sides should now have logged on and logged off\r\n expect(cviews.length >= 2).toEqual(true)\r\n expect(sviews.length >= 2).toEqual(true)\r\n checkSeqNos(cviews)\r\n checkSeqNos(sviews)\r\n})\r\n\r\nfunction mutateSeqNo (description: ISessionDescription, type: string, o: ILooseObject): ILooseObject {\r\n switch (type) {\r\n case 'StandardHeader': {\r\n const hdr = o as IStandardHeader\r\n if (hdr.MsgSeqNum === 2) {\r\n hdr.MsgSeqNum = 0\r\n }\r\n break\r\n }\r\n }\r\n return o\r\n}\r\n\r\ntest('out of seq logout', async () => {\r\n experiment.clientFactory.mutator = mutateSeqNo\r\n await runSkeletons()\r\n const cviews = experiment.client.views\r\n const sviews = experiment.server.views\r\n // both sides should now have logged on but out of seq logout will terminate sessions so no logout returned\r\n expect(cviews.length).toEqual(1)\r\n expect(cviews[0].segment.name).toEqual('Logon')\r\n expect(sviews.length).toEqual(2)\r\n expect(sviews[0].segment.name).toEqual('Logon')\r\n expect(sviews[1].segment.name).toEqual('Logout')\r\n})\r\n\r\nfunction countOfType (type: string, views: MsgView[]): number {\r\n return views.reduce((c: number, v: MsgView) => {\r\n return v.segment.name === type ? c + 1 : c\r\n }, 0)\r\n}\r\n\r\nfunction mutateRemoveRequiredHeartBtInt (description: ISessionDescription, type: string, o: ILooseObject): ILooseObject {\r\n switch (type) {\r\n case 'A': {\r\n const logon = o as ILogon\r\n delete logon['HeartBtInt']\r\n break\r\n }\r\n }\r\n return o\r\n}\r\n\r\ntest('client logon reject missing 108', async () => {\r\n experiment.clientFactory.mutator = mutateRemoveRequiredHeartBtInt\r\n await runSkeletons(2)\r\n // client sends logon, server rejects\r\n const cviews = experiment.client.views\r\n const sviews = experiment.server.views\r\n expect(cviews.length === 1).toEqual(true)\r\n expect(sviews.length === 1).toEqual(true)\r\n expect(cviews[0].segment.name).toEqual('Reject')\r\n expect(sviews[0].segment.name).toEqual('Logon')\r\n const reject: IReject = cviews[0].toObject()\r\n expect(reject.SessionRejectReason === SessionRejectReason.RequiredTagMissing)\r\n expect(reject.Text).toEqual('msgType A missing required tag 108')\r\n}, 10000)\r\n\r\n// transport.transmitter\r\n\r\ntest('client unknown msg type', async () => {\r\n const at = experiment.client.transport.transmitter as AsciiMsgTransmitter\r\n const changed = logonMsg.replace('35=A', '35=ZZ').replace('34=1', `34=${at.msgSeqNum + 1}`)\r\n await runSkeletons(2, changed)\r\n const cviews = experiment.client.views\r\n const sviews = experiment.server.views\r\n // client sends logon, server rejects\r\n expect(cviews.length).toEqual(3)\r\n expect(sviews.length).toEqual(3)\r\n expect(cviews[0].segment.name).toEqual('Logon')\r\n expect(cviews[1].segment.name).toEqual('Reject')\r\n expect(sviews[0].segment.name).toEqual('Logon')\r\n expect(sviews[1].segment.name).toEqual('unknown')\r\n const reject: IReject = cviews[1].toObject()\r\n expect(reject.SessionRejectReason === SessionRejectReason.InvalidMsgType)\r\n expect(reject.Text).toEqual('msgType ZZ unknown')\r\n}, 10000)\r\n\r\ntest('heartbeat invalid tag', async () => {\r\n const at = experiment.client.transport.transmitter as AsciiMsgTransmitter\r\n const changed = heartbeat.replace('112=', '999=').replace('34=1', `34=${at.msgSeqNum + 1}`)\r\n await runSkeletons(2, changed)\r\n const cviews = experiment.client.views\r\n const sviews = experiment.server.views\r\n expect(cviews.length === 3).toEqual(true)\r\n expect(sviews.length === 3).toEqual(true)\r\n expect(cviews[0].segment.name).toEqual('Logon')\r\n expect(cviews[1].segment.name).toEqual('Reject')\r\n expect(sviews[0].segment.name).toEqual('Logon')\r\n expect(sviews[1].segment.name).toEqual('Heartbeat')\r\n const reject: IReject = experiment.client.views[1].toObject()\r\n expect(reject.SessionRejectReason === SessionRejectReason.InvalidTagNumber)\r\n checkSeqNos(cviews)\r\n checkSeqNos(sviews)\r\n}, 10000)\r\n\r\ntest('heartbeat invalid sender comp', async () => {\r\n const at = experiment.client.transport.transmitter as AsciiMsgTransmitter\r\n const changed = heartbeat.replace('49=init-comp', '49=init-not!').replace('34=1', `34=${at.msgSeqNum + 1}`)\r\n await runSkeletons(2, changed)\r\n const cviews = experiment.client.views\r\n const sviews = experiment.server.views\r\n expect(cviews.length === 3).toEqual(true)\r\n expect(sviews.length === 3).toEqual(true)\r\n expect(cviews[0].segment.name).toEqual('Logon')\r\n expect(cviews[1].segment.name).toEqual('Reject')\r\n expect(sviews[0].segment.name).toEqual('Logon')\r\n expect(sviews[1].segment.name).toEqual('Heartbeat')\r\n const reject: IReject = cviews[1].toObject()\r\n expect(reject.SessionRejectReason === SessionRejectReason.CompIDProblem)\r\n checkSeqNos(cviews)\r\n checkSeqNos(sviews)\r\n}, 10000)\r\n\r\n// client will send heartbeats to server, server with 30 second heartbeat will not heartbeat\r\ntest('client heartbeats to server', async () => {\r\n const preset = experiment.client.config.description.HeartBtInt\r\n experiment.client.config.description.HeartBtInt = 2\r\n await runSkeletons(6)\r\n const cviews = experiment.client.views\r\n const sviews = experiment.server.views\r\n // both sides should now have logged on and logged off\r\n expect(cviews.length === 2).toEqual(true)\r\n expect(sviews.length > 2).toEqual(true)\r\n const serverReceivesHeartbeats = countOfType('Heartbeat', sviews)\r\n expect(serverReceivesHeartbeats >= 2 && serverReceivesHeartbeats <= 4).toEqual(true)\r\n checkSeqNos(cviews)\r\n checkSeqNos(sviews)\r\n experiment.client.config.description.HeartBtInt = preset\r\n}, 10000)\r\n\r\ntest('server heartbeats to client', async () => {\r\n const preset = experiment.server.config.description.HeartBtInt\r\n experiment.server.config.description.HeartBtInt = 2\r\n await runSkeletons(6)\r\n // both sides should now have logged on and logged off\r\n const cviews = experiment.client.views\r\n const sviews = experiment.server.views\r\n expect(sviews.length === 2).toEqual(true)\r\n expect(cviews.length > 2).toEqual(true)\r\n const clientReceivesHeartbeats = countOfType('Heartbeat', cviews)\r\n expect(clientReceivesHeartbeats >= 2 && clientReceivesHeartbeats <= 4).toEqual(true)\r\n checkSeqNos(cviews)\r\n checkSeqNos(sviews)\r\n experiment.server.config.description.HeartBtInt = preset\r\n}, 10000)\r\n\r\ntest('client server heartbeat', async () => {\r\n const preset = experiment.server.config.description.HeartBtInt\r\n experiment.server.config.description.HeartBtInt = 5\r\n experiment.client.config.description.HeartBtInt = 2\r\n await runSkeletons(8)\r\n const cviews = experiment.client.views\r\n const sviews = experiment.server.views\r\n // both sides should now have logged on and logged off\r\n expect(sviews.length > 2).toEqual(true)\r\n expect(cviews.length > 2).toEqual(true)\r\n const clientReceivesHeartbeats = countOfType('Heartbeat', cviews)\r\n const clientReceivesTestRequest = countOfType('TestRequest', cviews)\r\n const clientTotal = clientReceivesHeartbeats + clientReceivesTestRequest\r\n const serverReceivesHeartbeats = countOfType('Heartbeat', sviews)\r\n const serverReceivesTestRequest = countOfType('TestRequest', sviews)\r\n const serverTotal = serverReceivesHeartbeats + serverReceivesTestRequest\r\n expect(clientTotal >= 1 && clientReceivesHeartbeats <= 4).toEqual(true)\r\n expect(serverTotal >= 3 && serverReceivesHeartbeats <= 4).toEqual(true)\r\n checkSeqNos(cviews)\r\n checkSeqNos(sviews)\r\n experiment.server.config.description.HeartBtInt = preset\r\n experiment.client.config.description.HeartBtInt = preset\r\n}, 15000)\r\n"]}
@@ -1,45 +0,0 @@
1
- import { FixDefinitions } from '../dictionary/definition';
2
- import { SessionContainer } from '../runtime/';
3
- import { ISessionDescription, ISessionMsgFactory, MsgTransmitter } from '../transport';
4
- import { DependencyContainer } from 'tsyringe';
5
- import { IJsFixConfig } from '../config';
6
- import { FileReplayer } from '../util';
7
- import { ElasticBuffer, MsgView } from '../buffer';
8
- import { AsciiParser } from '../buffer/ascii';
9
- export declare class ParsingResult {
10
- readonly event: string;
11
- readonly msgType: string;
12
- readonly view: MsgView;
13
- readonly contents: string;
14
- readonly parser: AsciiParser;
15
- constructor(event: string, msgType: string, view: MsgView, contents: string, parser: AsciiParser);
16
- }
17
- export declare class TestEntity {
18
- readonly sessionPath: string;
19
- readonly fixContainer: SessionContainer;
20
- readonly description: ISessionDescription;
21
- sessionContainer: DependencyContainer;
22
- config: IJsFixConfig;
23
- replayer: FileReplayer;
24
- rxBuffer: ElasticBuffer;
25
- txBuffer: ElasticBuffer;
26
- transmitter: MsgTransmitter;
27
- sessionMsgFactory: ISessionMsgFactory;
28
- constructor(sessionPath: string);
29
- getAsciiParser(text: string, chunks?: boolean): AsciiParser;
30
- parseText(text: string, chunks?: boolean): Promise<ParsingResult>;
31
- make(): Promise<void>;
32
- }
33
- export declare class Setup {
34
- readonly clientPath: string;
35
- readonly serverPath: string;
36
- definitions: FixDefinitions;
37
- client: TestEntity;
38
- server: TestEntity;
39
- clientConfig: IJsFixConfig;
40
- serverConfig: IJsFixConfig;
41
- clientDescription: ISessionDescription;
42
- clientSessionContainer: DependencyContainer;
43
- constructor(clientPath?: string, serverPath?: string);
44
- init(): Promise<void>;
45
- }
@@ -1,102 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.Setup = exports.TestEntity = exports.ParsingResult = void 0;
13
- const di_tokens_1 = require("../runtime/di-tokens");
14
- const runtime_1 = require("../runtime/");
15
- const transport_1 = require("../transport");
16
- const path = require("path");
17
- const util_1 = require("../util");
18
- const ascii_1 = require("../buffer/ascii");
19
- const root = path.join(__dirname, '../../data');
20
- class ParsingResult {
21
- constructor(event, msgType, view, contents, parser) {
22
- this.event = event;
23
- this.msgType = msgType;
24
- this.view = view;
25
- this.contents = contents;
26
- this.parser = parser;
27
- }
28
- }
29
- exports.ParsingResult = ParsingResult;
30
- class TestEntity {
31
- constructor(sessionPath) {
32
- this.sessionPath = sessionPath;
33
- this.fixContainer = new runtime_1.SessionContainer();
34
- this.description = require(path.join(root, this.sessionPath));
35
- }
36
- getAsciiParser(text, chunks = false) {
37
- return new ascii_1.AsciiParser(this.config, new transport_1.StringDuplex(text, chunks).readable, this.rxBuffer);
38
- }
39
- parseText(text, chunks = false) {
40
- return new Promise((resolve, reject) => {
41
- const parser = this.getAsciiParser(text, chunks);
42
- parser.on('error', (e) => {
43
- reject(e);
44
- });
45
- parser.on('msg', (msgType, view) => {
46
- resolve(new ParsingResult('msg', msgType, view.clone(), parser.state.elasticBuffer.toString(), parser));
47
- });
48
- parser.on('done', () => {
49
- resolve(new ParsingResult('done', null, null, parser.state.elasticBuffer.toString(), parser));
50
- });
51
- });
52
- }
53
- make() {
54
- return __awaiter(this, void 0, void 0, function* () {
55
- this.fixContainer.reset();
56
- this.fixContainer.registerGlobal();
57
- this.sessionContainer = yield this.fixContainer.makeSystem(this.description);
58
- const container = this.sessionContainer;
59
- this.config = container.resolve(di_tokens_1.DITokens.IJsFixConfig);
60
- this.config.delimiter = this.config.logDelimiter;
61
- this.replayer = new util_1.FileReplayer(this.config);
62
- this.sessionMsgFactory = container.resolve(di_tokens_1.DITokens.ISessionMsgFactory);
63
- if (container.isRegistered(di_tokens_1.DITokens.ParseBuffer)) {
64
- this.rxBuffer = container.resolve(di_tokens_1.DITokens.ParseBuffer);
65
- }
66
- if (container.isRegistered(di_tokens_1.DITokens.TransmitBuffer)) {
67
- this.txBuffer = container.resolve(di_tokens_1.DITokens.TransmitBuffer);
68
- }
69
- if (container.isRegistered(di_tokens_1.DITokens.MsgTransmitter)) {
70
- this.transmitter = container.resolve(di_tokens_1.DITokens.MsgTransmitter);
71
- }
72
- });
73
- }
74
- }
75
- exports.TestEntity = TestEntity;
76
- class Setup {
77
- constructor(clientPath = 'session/test-initiator.json', serverPath = 'session/test-acceptor.json') {
78
- this.clientPath = clientPath;
79
- this.serverPath = serverPath;
80
- this.client = new TestEntity(clientPath);
81
- if (serverPath) {
82
- this.server = new TestEntity(serverPath);
83
- }
84
- }
85
- init() {
86
- return __awaiter(this, void 0, void 0, function* () {
87
- if (this.client) {
88
- yield this.client.make();
89
- this.definitions = this.client.config.definitions;
90
- this.clientConfig = this.client.config;
91
- this.clientSessionContainer = this.client.sessionContainer;
92
- this.clientDescription = this.client.description;
93
- }
94
- if (this.server) {
95
- yield this.server.make();
96
- this.serverConfig = this.server.config;
97
- }
98
- });
99
- }
100
- }
101
- exports.Setup = Setup;
102
- //# sourceMappingURL=setup.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/test/setup.ts"],"names":[],"mappings":"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","sourcesContent":["import { FixDefinitions } from '../dictionary/definition'\r\nimport { DITokens } from '../runtime/di-tokens'\r\nimport { SessionContainer } from '../runtime/'\r\nimport { ISessionDescription, ISessionMsgFactory, MsgTransmitter, StringDuplex } from '../transport'\r\nimport { DependencyContainer } from 'tsyringe'\r\nimport { IJsFixConfig } from '../config'\r\nimport * as path from 'path'\r\nimport { FileReplayer } from '../util'\r\nimport { ElasticBuffer, MsgView } from '../buffer'\r\nimport { AsciiParser } from '../buffer/ascii'\r\nconst root: string = path.join(__dirname, '../../data')\r\n\r\nexport class ParsingResult {\r\n constructor (public readonly event: string,\r\n public readonly msgType: string,\r\n public readonly view: MsgView,\r\n public readonly contents: string,\r\n public readonly parser: AsciiParser) {\r\n }\r\n}\r\n\r\nexport class TestEntity {\r\n public readonly fixContainer: SessionContainer = new SessionContainer()\r\n public readonly description: ISessionDescription\r\n public sessionContainer: DependencyContainer\r\n public config: IJsFixConfig\r\n public replayer: FileReplayer\r\n public rxBuffer: ElasticBuffer\r\n public txBuffer: ElasticBuffer\r\n public transmitter: MsgTransmitter\r\n\r\n public sessionMsgFactory: ISessionMsgFactory\r\n\r\n constructor (public readonly sessionPath: string) {\r\n this.description = require(path.join(root, this.sessionPath))\r\n }\r\n\r\n getAsciiParser (text: string, chunks: boolean = false): AsciiParser {\r\n return new AsciiParser(this.config, new StringDuplex(text, chunks).readable, this.rxBuffer)\r\n }\r\n\r\n parseText (text: string, chunks: boolean = false): Promise<ParsingResult> {\r\n return new Promise<any>((resolve, reject) => {\r\n const parser = this.getAsciiParser(text, chunks)\r\n parser.on('error', (e: Error) => {\r\n reject(e)\r\n })\r\n parser.on('msg', (msgType: string, view: MsgView) => {\r\n resolve(new ParsingResult('msg', msgType, view.clone(), parser.state.elasticBuffer.toString(), parser))\r\n })\r\n parser.on('done', () => {\r\n resolve(new ParsingResult('done', null,null, parser.state.elasticBuffer.toString(), parser))\r\n })\r\n })\r\n }\r\n\r\n async make () {\r\n this.fixContainer.reset()\r\n this.fixContainer.registerGlobal()\r\n this.sessionContainer = await this.fixContainer.makeSystem(this.description)\r\n const container = this.sessionContainer\r\n this.config = container.resolve<IJsFixConfig>(DITokens.IJsFixConfig)\r\n this.config.delimiter = this.config.logDelimiter\r\n this.replayer = new FileReplayer(this.config)\r\n\r\n this.sessionMsgFactory = container.resolve<ISessionMsgFactory>(DITokens.ISessionMsgFactory)\r\n if (container.isRegistered(DITokens.ParseBuffer)) {\r\n this.rxBuffer = container.resolve<ElasticBuffer>(DITokens.ParseBuffer)\r\n }\r\n if (container.isRegistered(DITokens.TransmitBuffer)) {\r\n this.txBuffer = container.resolve<ElasticBuffer>(DITokens.TransmitBuffer)\r\n }\r\n if (container.isRegistered(DITokens.MsgTransmitter)) {\r\n this.transmitter = container.resolve<MsgTransmitter>(DITokens.MsgTransmitter)\r\n }\r\n }\r\n}\r\n\r\nexport class Setup {\r\n public definitions: FixDefinitions\r\n client: TestEntity\r\n server: TestEntity\r\n clientConfig: IJsFixConfig\r\n serverConfig: IJsFixConfig\r\n clientDescription: ISessionDescription\r\n clientSessionContainer: DependencyContainer\r\n\r\n constructor (public readonly clientPath: string = 'session/test-initiator.json',\r\n public readonly serverPath: string = 'session/test-acceptor.json') {\r\n\r\n this.client = new TestEntity(clientPath)\r\n if (serverPath) {\r\n this.server = new TestEntity(serverPath)\r\n }\r\n }\r\n\r\n async init () {\r\n if (this.client) {\r\n await this.client.make()\r\n this.definitions = this.client.config.definitions\r\n this.clientConfig = this.client.config\r\n this.clientSessionContainer = this.client.sessionContainer\r\n this.clientDescription = this.client.description\r\n }\r\n if (this.server) {\r\n await this.server.make()\r\n this.serverConfig = this.server.config\r\n }\r\n }\r\n}\r\n"]}
@@ -1,15 +0,0 @@
1
- import { SkeletonSession } from '../sample/tcp/skeleton/skeleton-session';
2
- import { ILooseObject } from '../collections/collection';
3
- import { Experiment } from './experiment';
4
- export declare class SkeletonRunner {
5
- readonly experiment: Experiment;
6
- readonly logoutSeconds: number;
7
- clientSkeleton: SkeletonSession;
8
- serverSkeleton: SkeletonSession;
9
- constructor(experiment: Experiment, logoutSeconds?: number);
10
- watchdog(): void;
11
- sendMsg(msgType: string, o: ILooseObject): void;
12
- sendText(followOn: string): void;
13
- done(): void;
14
- wait(): Promise<void>;
15
- }
@@ -1,108 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.SkeletonRunner = void 0;
13
- const skeleton_session_1 = require("../sample/tcp/skeleton/skeleton-session");
14
- const buffer_1 = require("../buffer");
15
- class SkeletonRunner {
16
- constructor(experiment, logoutSeconds = 1) {
17
- this.experiment = experiment;
18
- this.logoutSeconds = logoutSeconds;
19
- this.clientSkeleton = new skeleton_session_1.SkeletonSession(experiment.client.config, logoutSeconds, false);
20
- this.serverSkeleton = new skeleton_session_1.SkeletonSession(experiment.server.config, logoutSeconds, false);
21
- this.clientSkeleton.checkMsgIntegrity = true;
22
- this.serverSkeleton.checkMsgIntegrity = true;
23
- experiment.client.transport.receiver.on('msg', (type, view) => {
24
- experiment.client.views.push(view.clone());
25
- this.watchdog();
26
- });
27
- experiment.server.transport.receiver.on('msg', (type, view) => {
28
- experiment.server.views.push(view.clone());
29
- this.watchdog();
30
- });
31
- this.clientSkeleton.on('error', e => {
32
- experiment.client.errors.push(e);
33
- });
34
- this.serverSkeleton.on('error', e => {
35
- experiment.server.errors.push(e);
36
- });
37
- }
38
- watchdog() {
39
- const experiment = this.experiment;
40
- const cviews = experiment.client.views;
41
- const sviews = experiment.server.views;
42
- const cerrors = experiment.client.errors;
43
- const serrors = experiment.server.errors;
44
- const clientStop = cviews.length > 20 || cerrors.length > 0;
45
- const serverStop = sviews.length > 20 || serrors.length > 0;
46
- const stop = clientStop || serverStop;
47
- if (stop) {
48
- this.clientSkeleton.done();
49
- this.serverSkeleton.done();
50
- }
51
- }
52
- sendMsg(msgType, o) {
53
- let count = 0;
54
- this.experiment.client.transport.receiver.on('msg', m => {
55
- if (count === 0) {
56
- count++;
57
- this.clientSkeleton.sendMessage(msgType, o);
58
- }
59
- });
60
- }
61
- sendText(followOn) {
62
- const experiment = this.experiment;
63
- if (followOn) {
64
- let sent = false;
65
- experiment.client.transport.transmitter.on('encoded', () => {
66
- const b1 = new buffer_1.ElasticBuffer();
67
- b1.writeString(followOn);
68
- if (!sent) {
69
- experiment.client.transport.duplex.writable.write(b1.slice());
70
- const at = experiment.client.transport.transmitter;
71
- at.msgSeqNum++;
72
- sent = true;
73
- }
74
- });
75
- }
76
- }
77
- done() {
78
- this.clientSkeleton.done();
79
- this.serverSkeleton.done();
80
- }
81
- wait() {
82
- return __awaiter(this, void 0, void 0, function* () {
83
- const experiment = this.experiment;
84
- yield Promise.all([
85
- this.clientSkeleton.run(experiment.client.transport),
86
- this.serverSkeleton.run(experiment.server.transport),
87
- new Promise((accept, reject) => {
88
- let handle = null;
89
- try {
90
- handle = setTimeout(() => {
91
- this.done();
92
- accept(true);
93
- }, (this.logoutSeconds + 2) * 1000);
94
- }
95
- catch (e) {
96
- if (handle) {
97
- clearTimeout(handle);
98
- }
99
- this.done();
100
- reject(e);
101
- }
102
- })
103
- ]);
104
- });
105
- }
106
- }
107
- exports.SkeletonRunner = SkeletonRunner;
108
- //# sourceMappingURL=skeleton-runner.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"skeleton-runner.js","sourceRoot":"","sources":["../../src/test/skeleton-runner.ts"],"names":[],"mappings":"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","sourcesContent":["import { SkeletonSession } from '../sample/tcp/skeleton/skeleton-session'\r\nimport { ElasticBuffer, MsgView } from '../buffer'\r\nimport { ILooseObject } from '../collections/collection'\r\nimport { AsciiMsgTransmitter } from '../transport/ascii/ascii-msg-transmitter'\r\nimport { Experiment } from './experiment'\r\n\r\nexport class SkeletonRunner {\r\n clientSkeleton: SkeletonSession\r\n serverSkeleton: SkeletonSession\r\n\r\n constructor (public readonly experiment: Experiment, public readonly logoutSeconds: number = 1) {\r\n this.clientSkeleton = new SkeletonSession(experiment.client.config, logoutSeconds, false)\r\n this.serverSkeleton = new SkeletonSession(experiment.server.config, logoutSeconds, false)\r\n this.clientSkeleton.checkMsgIntegrity = true\r\n this.serverSkeleton.checkMsgIntegrity = true\r\n\r\n experiment.client.transport.receiver.on('msg', (type: string, view: MsgView) => {\r\n experiment.client.views.push(view.clone())\r\n this.watchdog()\r\n })\r\n\r\n experiment.server.transport.receiver.on('msg', (type: string, view: MsgView) => {\r\n experiment.server.views.push(view.clone())\r\n this.watchdog()\r\n })\r\n\r\n this.clientSkeleton.on('error', e => {\r\n experiment.client.errors.push(e)\r\n })\r\n\r\n this.serverSkeleton.on('error', e => {\r\n experiment.server.errors.push(e)\r\n })\r\n }\r\n\r\n watchdog () {\r\n const experiment = this.experiment\r\n const cviews = experiment.client.views\r\n const sviews = experiment.server.views\r\n\r\n const cerrors = experiment.client.errors\r\n const serrors = experiment.server.errors\r\n\r\n const clientStop = cviews.length > 20 || cerrors.length > 0\r\n const serverStop = sviews.length > 20 || serrors.length > 0\r\n const stop = clientStop || serverStop\r\n if (stop) {\r\n this.clientSkeleton.done()\r\n this.serverSkeleton.done()\r\n }\r\n }\r\n\r\n sendMsg (msgType: string, o: ILooseObject): void {\r\n let count = 0\r\n this.experiment.client.transport.receiver.on('msg', m => {\r\n if (count === 0) {\r\n count++\r\n this.clientSkeleton.sendMessage(msgType, o)\r\n }\r\n })\r\n }\r\n\r\n sendText (followOn: string): void {\r\n const experiment = this.experiment\r\n if (followOn) {\r\n let sent: boolean = false\r\n experiment.client.transport.transmitter.on('encoded', () => {\r\n const b1 = new ElasticBuffer()\r\n b1.writeString(followOn)\r\n if (!sent) {\r\n experiment.client.transport.duplex.writable.write(b1.slice())\r\n const at = experiment.client.transport.transmitter as AsciiMsgTransmitter\r\n at.msgSeqNum++\r\n sent = true\r\n }\r\n })\r\n }\r\n }\r\n\r\n done () {\r\n this.clientSkeleton.done()\r\n this.serverSkeleton.done()\r\n }\r\n\r\n async wait () {\r\n const experiment = this.experiment\r\n await Promise.all([\r\n this.clientSkeleton.run(experiment.client.transport),\r\n this.serverSkeleton.run(experiment.server.transport),\r\n new Promise((accept, reject) => {\r\n let handle = null\r\n try {\r\n handle = setTimeout(() => {\r\n this.done()\r\n accept(true)\r\n }, (this.logoutSeconds + 2) * 1000)\r\n } catch (e) {\r\n if (handle) {\r\n clearTimeout(handle)\r\n }\r\n this.done()\r\n reject(e)\r\n }\r\n })])\r\n }\r\n}\r\n"]}
@@ -1 +0,0 @@
1
- import 'reflect-metadata';