jspurefix 3.4.0 → 4.0.0

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 (243) hide show
  1. package/appveyor.yml +1 -1
  2. package/dist/buffer/ascii/ascii-encoder.d.ts +2 -2
  3. package/dist/buffer/ascii/ascii-encoder.js +1 -1
  4. package/dist/buffer/ascii/ascii-encoder.js.map +1 -1
  5. package/dist/buffer/ascii/ascii-parser-state.d.ts +3 -2
  6. package/dist/buffer/ascii/ascii-parser-state.js +1 -2
  7. package/dist/buffer/ascii/ascii-parser-state.js.map +1 -1
  8. package/dist/buffer/ascii/ascii-parser.d.ts +1 -1
  9. package/dist/buffer/ascii/ascii-parser.js +5 -4
  10. package/dist/buffer/ascii/ascii-parser.js.map +1 -1
  11. package/dist/buffer/ascii/ascii-segment-parser.js.map +1 -1
  12. package/dist/buffer/ascii/ascii-view.d.ts +4 -3
  13. package/dist/buffer/ascii/ascii-view.js +8 -5
  14. package/dist/buffer/ascii/ascii-view.js.map +1 -1
  15. package/dist/buffer/encode-proxy.js +1 -1
  16. package/dist/buffer/encode-proxy.js.map +1 -1
  17. package/dist/buffer/fixml/fixml-encoder.d.ts +2 -2
  18. package/dist/buffer/fixml/fixml-encoder.js +1 -1
  19. package/dist/buffer/fixml/fixml-encoder.js.map +1 -1
  20. package/dist/buffer/fixml/fixml-parser.js +2 -2
  21. package/dist/buffer/fixml/fixml-parser.js.map +1 -1
  22. package/dist/buffer/fixml/fixml-view.d.ts +3 -2
  23. package/dist/buffer/fixml/fixml-view.js +5 -4
  24. package/dist/buffer/fixml/fixml-view.js.map +1 -1
  25. package/dist/buffer/msg-encoder.d.ts +2 -2
  26. package/dist/buffer/msg-encoder.js.map +1 -1
  27. package/dist/buffer/msg-view.d.ts +8 -6
  28. package/dist/buffer/msg-view.js +10 -8
  29. package/dist/buffer/msg-view.js.map +1 -1
  30. package/dist/buffer/segment/segment-description.d.ts +3 -3
  31. package/dist/buffer/segment/segment-description.js.map +1 -1
  32. package/dist/buffer/tag/tags.d.ts +2 -5
  33. package/dist/buffer/tag/tags.js +4 -5
  34. package/dist/buffer/tag/tags.js.map +1 -1
  35. package/dist/collections/collection.d.ts +0 -1
  36. package/dist/collections/collection.js.map +1 -1
  37. package/dist/collections/index.d.ts +0 -1
  38. package/dist/collections/index.js +0 -17
  39. package/dist/collections/index.js.map +1 -1
  40. package/dist/config/js-fix-config.d.ts +2 -1
  41. package/dist/config/js-fix-config.js +3 -3
  42. package/dist/config/js-fix-config.js.map +1 -1
  43. package/dist/dictionary/compiler/compiler-type.d.ts +3 -3
  44. package/dist/dictionary/compiler/compiler-type.js.map +1 -1
  45. package/dist/dictionary/compiler/enum-compiler.js +2 -2
  46. package/dist/dictionary/compiler/enum-compiler.js.map +1 -1
  47. package/dist/dictionary/compiler/msg-compiler.d.ts +1 -2
  48. package/dist/dictionary/compiler/msg-compiler.js +6 -7
  49. package/dist/dictionary/compiler/msg-compiler.js.map +1 -1
  50. package/dist/dictionary/contained/contained-component-field.d.ts +1 -1
  51. package/dist/dictionary/contained/contained-component-field.js.map +1 -1
  52. package/dist/dictionary/contained/contained-field-set.d.ts +9 -20
  53. package/dist/dictionary/contained/contained-field-set.js +16 -149
  54. package/dist/dictionary/contained/contained-field-set.js.map +1 -1
  55. package/dist/dictionary/contained/contained-group-field.d.ts +1 -1
  56. package/dist/dictionary/contained/contained-group-field.js.map +1 -1
  57. package/dist/dictionary/contained/contained-set-builder.d.ts +15 -0
  58. package/dist/dictionary/contained/contained-set-builder.js +142 -0
  59. package/dist/dictionary/contained/contained-set-builder.js.map +1 -0
  60. package/dist/dictionary/contained/contained-set.d.ts +32 -0
  61. package/dist/{types/FIX.5.0SP2/quickfix/xm_lnon_fix.js → dictionary/contained/contained-set.js} +1 -1
  62. package/dist/dictionary/contained/contained-set.js.map +1 -0
  63. package/dist/dictionary/contained/contained-simple-field.d.ts +1 -1
  64. package/dist/dictionary/contained/contained-simple-field.js.map +1 -1
  65. package/dist/dictionary/contained/index.d.ts +4 -1
  66. package/dist/dictionary/contained/index.js +4 -1
  67. package/dist/dictionary/contained/index.js.map +1 -1
  68. package/dist/dictionary/definition/category-simple-set.d.ts +1 -2
  69. package/dist/dictionary/definition/category-simple-set.js +1 -2
  70. package/dist/dictionary/definition/category-simple-set.js.map +1 -1
  71. package/dist/dictionary/definition/component-field-definition.d.ts +1 -1
  72. package/dist/dictionary/definition/component-field-definition.js +2 -2
  73. package/dist/dictionary/definition/component-field-definition.js.map +1 -1
  74. package/dist/dictionary/definition/fix-definitions.d.ts +8 -9
  75. package/dist/dictionary/definition/fix-definitions.js +22 -20
  76. package/dist/dictionary/definition/fix-definitions.js.map +1 -1
  77. package/dist/dictionary/definition/group-field-definition.d.ts +1 -1
  78. package/dist/dictionary/definition/group-field-definition.js +2 -2
  79. package/dist/dictionary/definition/group-field-definition.js.map +1 -1
  80. package/dist/dictionary/definition/message-definition.d.ts +1 -1
  81. package/dist/dictionary/definition/message-definition.js +2 -2
  82. package/dist/dictionary/definition/message-definition.js.map +1 -1
  83. package/dist/dictionary/definition/simple-field-definition.d.ts +2 -3
  84. package/dist/dictionary/definition/simple-field-definition.js +6 -7
  85. package/dist/dictionary/definition/simple-field-definition.js.map +1 -1
  86. package/dist/dictionary/parser/fix-repository/repository.js +20 -20
  87. package/dist/dictionary/parser/fix-repository/repository.js.map +1 -1
  88. package/dist/dictionary/parser/fixml/components-parser.js +18 -16
  89. package/dist/dictionary/parser/fixml/components-parser.js.map +1 -1
  90. package/dist/dictionary/parser/fixml/fields-parser.js +2 -3
  91. package/dist/dictionary/parser/fixml/fields-parser.js.map +1 -1
  92. package/dist/dictionary/parser/fixml/include-graph.js +8 -9
  93. package/dist/dictionary/parser/fixml/include-graph.js.map +1 -1
  94. package/dist/dictionary/parser/quickfix/field-definition-parser.js.map +1 -1
  95. package/dist/dictionary/parser/quickfix/message-parser.js +2 -1
  96. package/dist/dictionary/parser/quickfix/message-parser.js.map +1 -1
  97. package/dist/dictionary/parser/quickfix/node-parser.js +3 -2
  98. package/dist/dictionary/parser/quickfix/node-parser.js.map +1 -1
  99. package/dist/dictionary/parser/quickfix/parse-context.d.ts +3 -3
  100. package/dist/dictionary/parser/quickfix/parse-context.js.map +1 -1
  101. package/dist/dictionary/parser/quickfix/parse-progress.d.ts +1 -2
  102. package/dist/dictionary/parser/quickfix/parse-progress.js +2 -3
  103. package/dist/dictionary/parser/quickfix/parse-progress.js.map +1 -1
  104. package/dist/dictionary/parser/quickfix/quick-fix-xml-file-builder.js +4 -5
  105. package/dist/dictionary/parser/quickfix/quick-fix-xml-file-builder.js.map +1 -1
  106. package/dist/dictionary/parser/quickfix/quick-fix-xml-file-parser.js +6 -6
  107. package/dist/dictionary/parser/quickfix/quick-fix-xml-file-parser.js.map +1 -1
  108. package/dist/dictionary/parser/quickfix/quick-fix-xml-formatter.d.ts +1 -1
  109. package/dist/dictionary/parser/quickfix/quick-fix-xml-formatter.js.map +1 -1
  110. package/dist/dictionary/set-reduce.d.ts +2 -2
  111. package/dist/dictionary/set-reduce.js.map +1 -1
  112. package/dist/index.d.ts +0 -1
  113. package/dist/index.js +0 -1
  114. package/dist/index.js.map +1 -1
  115. package/dist/jsfix-cmd.js +4 -5
  116. package/dist/jsfix-cmd.js.map +1 -1
  117. package/dist/sample/tcp/recovering-skeleton/respawn-acceptor.js +7 -8
  118. package/dist/sample/tcp/recovering-skeleton/respawn-acceptor.js.map +1 -1
  119. package/dist/sample/tcp/trade-capture/trade-capture-client.js +3 -4
  120. package/dist/sample/tcp/trade-capture/trade-capture-client.js.map +1 -1
  121. package/dist/sample/tcp/trade-capture/trade-capture-server.js.map +1 -1
  122. package/dist/store/fix-msg-ascii-store-resend.d.ts +4 -3
  123. package/dist/store/fix-msg-ascii-store-resend.js +21 -5
  124. package/dist/store/fix-msg-ascii-store-resend.js.map +1 -1
  125. package/dist/store/fix-msg-memory-store.js +3 -4
  126. package/dist/store/fix-msg-memory-store.js.map +1 -1
  127. package/dist/store/fix-msg-store-record.js.map +1 -1
  128. package/dist/test/ascii/ascii-encoder.test.js.map +1 -1
  129. package/dist/test/ascii/ascii-store-replay.test.js +14 -1
  130. package/dist/test/ascii/ascii-store-replay.test.js.map +1 -1
  131. package/dist/test/ascii/fix-log-replay.test.js.map +1 -1
  132. package/dist/test/ascii/fix-repo-dict.test.js.map +1 -1
  133. package/dist/test/ascii/qf-50sp0-dict.test.js +7 -7
  134. package/dist/test/ascii/qf-50sp0-dict.test.js.map +1 -1
  135. package/dist/test/ascii/qf-50sp2-dict.test.js +5 -2
  136. package/dist/test/ascii/qf-50sp2-dict.test.js.map +1 -1
  137. package/dist/test/ascii/session.test.js +64 -15
  138. package/dist/test/ascii/session.test.js.map +1 -1
  139. package/dist/test/env/encoder-test.d.ts +3 -3
  140. package/dist/test/env/encoder-test.js.map +1 -1
  141. package/dist/test/env/set-constraint-helper.d.ts +4 -4
  142. package/dist/test/env/set-constraint-helper.js.map +1 -1
  143. package/dist/transport/ascii/ascii-msg-transmitter.js.map +1 -1
  144. package/dist/transport/ascii/ascii-session.js +5 -2
  145. package/dist/transport/ascii/ascii-session.js.map +1 -1
  146. package/dist/transport/fixml/fixml-session.js.map +1 -1
  147. package/dist/transport/http/http-acceptor.js +3 -4
  148. package/dist/transport/http/http-acceptor.js.map +1 -1
  149. package/dist/transport/http/http-json-sample-adapter.js +3 -4
  150. package/dist/transport/http/http-json-sample-adapter.js.map +1 -1
  151. package/dist/transport/session/dynamic-session-manager.d.ts +8 -0
  152. package/dist/transport/session/dynamic-session-manager.js +15 -0
  153. package/dist/transport/session/dynamic-session-manager.js.map +1 -0
  154. package/dist/transport/session/session-description.d.ts +9 -7
  155. package/dist/transport/session/session-description.js.map +1 -1
  156. package/dist/util/json-helper.d.ts +2 -2
  157. package/dist/util/json-helper.js.map +1 -1
  158. package/dist/util/message-generator.js +1 -1
  159. package/dist/util/message-generator.js.map +1 -1
  160. package/package.json +21 -21
  161. package/src/buffer/ascii/ascii-encoder.ts +7 -7
  162. package/src/buffer/ascii/ascii-parser-state.ts +4 -4
  163. package/src/buffer/ascii/ascii-parser.ts +6 -5
  164. package/src/buffer/ascii/ascii-segment-parser.ts +2 -2
  165. package/src/buffer/ascii/ascii-view.ts +9 -7
  166. package/src/buffer/encode-proxy.ts +9 -9
  167. package/src/buffer/fixml/fixml-encoder.ts +14 -10
  168. package/src/buffer/fixml/fixml-parser.ts +5 -5
  169. package/src/buffer/fixml/fixml-view.ts +5 -5
  170. package/src/buffer/msg-encoder.ts +3 -3
  171. package/src/buffer/msg-view.ts +18 -18
  172. package/src/buffer/segment/segment-description.ts +2 -2
  173. package/src/buffer/tag/tags.ts +4 -6
  174. package/src/collections/collection.ts +0 -1
  175. package/src/collections/index.ts +1 -1
  176. package/src/config/js-fix-config.ts +3 -2
  177. package/src/dictionary/compiler/compiler-type.ts +8 -2
  178. package/src/dictionary/compiler/enum-compiler.ts +2 -2
  179. package/src/dictionary/compiler/msg-compiler.ts +11 -12
  180. package/src/dictionary/contained/contained-component-field.ts +1 -1
  181. package/src/dictionary/contained/contained-field-set.ts +21 -176
  182. package/src/dictionary/contained/contained-group-field.ts +1 -1
  183. package/src/dictionary/contained/contained-set-builder.ts +164 -0
  184. package/src/dictionary/contained/contained-set.ts +83 -0
  185. package/src/dictionary/contained/contained-simple-field.ts +1 -1
  186. package/src/dictionary/contained/index.ts +4 -1
  187. package/src/dictionary/definition/category-simple-set.ts +1 -2
  188. package/src/dictionary/definition/component-field-definition.ts +1 -1
  189. package/src/dictionary/definition/fix-definitions.ts +28 -26
  190. package/src/dictionary/definition/group-field-definition.ts +1 -1
  191. package/src/dictionary/definition/message-definition.ts +6 -6
  192. package/src/dictionary/definition/simple-field-definition.ts +9 -10
  193. package/src/dictionary/parser/fix-repository/repository.ts +47 -40
  194. package/src/dictionary/parser/fixml/components-parser.ts +41 -38
  195. package/src/dictionary/parser/fixml/fields-parser.ts +3 -4
  196. package/src/dictionary/parser/fixml/include-graph.ts +13 -14
  197. package/src/dictionary/parser/quickfix/field-definition-parser.ts +5 -5
  198. package/src/dictionary/parser/quickfix/message-parser.ts +7 -5
  199. package/src/dictionary/parser/quickfix/node-parser.ts +13 -6
  200. package/src/dictionary/parser/quickfix/parse-context.ts +2 -2
  201. package/src/dictionary/parser/quickfix/parse-progress.ts +2 -3
  202. package/src/dictionary/parser/quickfix/quick-fix-xml-file-builder.ts +4 -5
  203. package/src/dictionary/parser/quickfix/quick-fix-xml-file-parser.ts +10 -12
  204. package/src/dictionary/parser/quickfix/quick-fix-xml-formatter.ts +1 -1
  205. package/src/dictionary/set-reduce.ts +3 -3
  206. package/src/index.ts +0 -1
  207. package/src/jsfix-cmd.ts +5 -6
  208. package/src/sample/tcp/recovering-skeleton/respawn-acceptor.ts +7 -8
  209. package/src/sample/tcp/trade-capture/trade-capture-client.ts +4 -5
  210. package/src/sample/tcp/trade-capture/trade-capture-server.ts +1 -1
  211. package/src/store/fix-msg-ascii-store-resend.ts +64 -8
  212. package/src/store/fix-msg-memory-store.ts +3 -4
  213. package/src/store/fix-msg-store-record.ts +1 -1
  214. package/src/transport/ascii/ascii-msg-transmitter.ts +6 -6
  215. package/src/transport/ascii/ascii-session.ts +11 -7
  216. package/src/transport/fixml/fixml-session.ts +3 -3
  217. package/src/transport/http/http-acceptor.ts +4 -5
  218. package/src/transport/http/http-json-sample-adapter.ts +3 -4
  219. package/src/transport/session/dynamic-session-manager.ts +16 -0
  220. package/src/transport/session/session-description.ts +10 -7
  221. package/src/util/json-helper.ts +3 -3
  222. package/src/util/message-generator.ts +4 -4
  223. package/dist/collections/dictionary.d.ts +0 -15
  224. package/dist/collections/dictionary.js +0 -57
  225. package/dist/collections/dictionary.js.map +0 -1
  226. package/dist/types/FIX.5.0SP2/quickfix/execution_acknowledgement.d.ts +0 -31
  227. package/dist/types/FIX.5.0SP2/quickfix/execution_acknowledgement.js +0 -3
  228. package/dist/types/FIX.5.0SP2/quickfix/execution_acknowledgement.js.map +0 -1
  229. package/dist/types/FIX.5.0SP2/quickfix/mass_quote_acknowledgement.d.ts +0 -26
  230. package/dist/types/FIX.5.0SP2/quickfix/mass_quote_acknowledgement.js +0 -3
  231. package/dist/types/FIX.5.0SP2/quickfix/mass_quote_acknowledgement.js.map +0 -1
  232. package/dist/types/FIX.5.0SP2/quickfix/set/hop_grp.d.ts +0 -5
  233. package/dist/types/FIX.5.0SP2/quickfix/set/hop_grp.js +0 -3
  234. package/dist/types/FIX.5.0SP2/quickfix/set/hop_grp.js.map +0 -1
  235. package/dist/types/FIX.5.0SP2/quickfix/set/msg_type_grp.d.ts +0 -8
  236. package/dist/types/FIX.5.0SP2/quickfix/set/msg_type_grp.js +0 -3
  237. package/dist/types/FIX.5.0SP2/quickfix/set/msg_type_grp.js.map +0 -1
  238. package/dist/types/FIX.5.0SP2/quickfix/set/not_affected_orders_grp.d.ts +0 -4
  239. package/dist/types/FIX.5.0SP2/quickfix/set/not_affected_orders_grp.js +0 -3
  240. package/dist/types/FIX.5.0SP2/quickfix/set/not_affected_orders_grp.js.map +0 -1
  241. package/dist/types/FIX.5.0SP2/quickfix/xm_lnon_fix.d.ts +0 -6
  242. package/dist/types/FIX.5.0SP2/quickfix/xm_lnon_fix.js.map +0 -1
  243. package/src/collections/dictionary.ts +0 -62
@@ -1 +1 @@
1
- {"version":3,"file":"qf-50sp0-dict.test.js","sourceRoot":"","sources":["../../../src/test/ascii/qf-50sp0-dict.test.ts"],"names":[],"mappings":"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","sourcesContent":["import 'reflect-metadata'\r\n\r\nimport * as path from 'path'\r\nimport { FixDefinitions } from '../../dictionary/definition'\r\nimport { DefinitionFactory } from '../../util'\r\nimport { ContainedFieldSet } from '../../dictionary/contained'\r\nimport { SetConstraintHelper } from '../env/set-constraint-helper'\r\n\r\nconst root: string = path.join(__dirname, '../env/data')\r\n\r\nlet definitions: FixDefinitions\r\nlet secHelper: SecDefHelper\r\nlet setHelper: SetConstraintHelper\r\n\r\nbeforeAll(async () => {\r\n definitions = await new DefinitionFactory().getDefinitions(`${root}/fix5-mod.xml` ?? '')\r\n secHelper = new SecDefHelper(definitions)\r\n setHelper = new SetConstraintHelper(definitions)\r\n}, 45000)\r\n\r\n/*\r\n <message name=\"SecurityList\" msgtype=\"y\" msgcat=\"app\">\r\n <field name=\"SecurityReqID\" required=\"N\"/>\r\n <field name=\"SecurityResponseID\" required=\"N\"/>\r\n <field name=\"SecurityRequestResult\" required=\"N\"/>\r\n <field name=\"SecurityListRequestType\" required=\"N\" />\r\n <field name=\"TotNoRelatedSym\" required=\"N\"/>\r\n <field name=\"LastFragment\" required=\"N\"/>\r\n <component name=\"SecListGrp\" required=\"N\"/>\r\n <field name=\"SecurityReportID\" required=\"N\"/>\r\n <field name=\"ClearingBusinessDate\" required=\"N\"/>\r\n <field name=\"MarketID\" required=\"N\" />\r\n <field name=\"MarketSegmentID\" required=\"N\" />\r\n <field name=\"SecurityListID\" required=\"N\" />\r\n <field name=\"SecurityListRefID\" required=\"N\" />\r\n <field name=\"SecurityListDesc\" required=\"N\" />\r\n <field name=\"EncodedSecurityListDescLen\" required=\"N\" />\r\n <field name=\"EncodedSecurityListDesc\" required=\"N\" />\r\n <field name=\"SecurityListType\" required=\"N\" />\r\n <field name=\"SecurityListTypeSource\" required=\"N\" />\r\n <field name=\"TransactTime\" required=\"N\" />\r\n </message>\r\n */\r\n\r\nclass SecDefHelper {\r\n constructor (public definitions: FixDefinitions) {}\r\n public getSecListGrp (): (ContainedFieldSet | null) {\r\n return this.definitions.getSet('SecurityList.SecListGrp')\r\n }\r\n\r\n public getNumRelatedSym (): (ContainedFieldSet | null) {\r\n return this.getSecListGrp()?.getSet('NoRelatedSym') ?? null\r\n }\r\n\r\n public getSecurityTradingRules (): (ContainedFieldSet | null) {\r\n return this.getNumRelatedSym()?.getSet('SecurityTradingRules') ?? null\r\n }\r\n\r\n public getBaseTradingRules (): (ContainedFieldSet | null) {\r\n return this.getSecurityTradingRules()?.getSet('BaseTradingRules') ?? null\r\n }\r\n\r\n public getTickRules (): (ContainedFieldSet | null) {\r\n return this.getBaseTradingRules()?.getSet('TickRules') ?? null\r\n }\r\n\r\n public getNoTickRules (): (ContainedFieldSet | null) {\r\n return this.getTickRules()?.getSet('NoTickRules') ?? null\r\n }\r\n}\r\n\r\ntest('check message SecurityList', () => {\r\n const securityList: (ContainedFieldSet | null) = definitions?.getSet('SecurityList') ?? null\r\n expect(securityList).toBeTruthy()\r\n let index = 0\r\n setHelper.isComponent(securityList, index++, 'StandardHeader', true)\r\n setHelper.isSimple(securityList, index++, 'SecurityReqID', false)\r\n setHelper.isSimple(securityList, index++, 'SecurityResponseID', false)\r\n setHelper.isSimple(securityList, index++, 'SecurityRequestResult', false)\r\n setHelper.isSimple(securityList, index++, 'SecurityListRequestType', false)\r\n setHelper.isSimple(securityList, index++, 'TotNoRelatedSym', false)\r\n setHelper.isSimple(securityList, index++, 'LastFragment', false)\r\n setHelper.isComponent(securityList, index++, 'SecListGrp', false)\r\n setHelper.isSimple(securityList, index++, 'SecurityReportID', false)\r\n setHelper.isSimple(securityList, index++, 'ClearingBusinessDate', false)\r\n setHelper.isSimple(securityList, index++, 'MarketID', false)\r\n setHelper.isSimple(securityList, index++, 'MarketSegmentID', false)\r\n setHelper.isSimple(securityList, index++, 'SecurityListID', false)\r\n setHelper.isSimple(securityList, index++, 'SecurityListRefID', false)\r\n setHelper.isSimple(securityList, index++, 'SecurityListDesc', false)\r\n setHelper.isSimple(securityList, index++, 'EncodedSecurityListDescLen', false)\r\n setHelper.isSimple(securityList, index++, 'EncodedSecurityListDesc', false)\r\n setHelper.isSimple(securityList, index++, 'SecurityListType', false)\r\n setHelper.isSimple(securityList, index++, 'SecurityListTypeSource', false)\r\n setHelper.isSimple(securityList, index++, 'TransactTime', false)\r\n setHelper.isComponent(securityList, index++, 'StandardTrailer', true)\r\n})\r\n\r\n/*\r\n <component name=\"SecListGrp\">\r\n <group name=\"NoRelatedSym\" required=\"N\">\r\n <component name=\"Instrument\"/>\r\n <component name=\"InstrumentExtension\"/>\r\n <component name=\"FinancingDetails\"/>\r\n <component name=\"UndInstrmtGrp\"/>\r\n <field name=\"Currency\" required=\"N\"/>\r\n <field name=\"ContractPositionNumber\" required=\"N\"/>\r\n <component name=\"Stipulations\"/>\r\n <component name=\"InstrmtLegSecListGrp\"/>\r\n <component name=\"SpreadOrBenchmarkCurveData\"/>\r\n <component name=\"YieldData\"/>\r\n <field name=\"Text\" required=\"N\"/>\r\n <field name=\"EncodedTextLen\" required=\"N\"/>\r\n <field name=\"EncodedText\" required=\"N\"/>\r\n <component name=\"SecurityTradingRules\" required=\"N\" />\r\n <component name=\"StrikeRules\" required=\"N\" />\r\n <field name=\"RelSymTransactTime\" required=\"N\" />\r\n </group>\r\n </component>\r\n */\r\n\r\ntest('check SecListGrp', () => {\r\n const secListGrp = secHelper.getSecListGrp()\r\n expect(secListGrp).toBeTruthy()\r\n expect(secListGrp?.fields?.length).toEqual(1)\r\n setHelper.isGroup(secListGrp ?? null, 0, 'NoRelatedSym', false)\r\n})\r\n\r\ntest('check NoRelatedSym', () => {\r\n let index = 0\r\n const noRelatedSym = secHelper.getNumRelatedSym()\r\n setHelper.isComponent(noRelatedSym, index++, 'Instrument', false)\r\n setHelper.isComponent(noRelatedSym, index++, 'InstrumentExtension', false)\r\n setHelper.isComponent(noRelatedSym, index++, 'FinancingDetails', false)\r\n setHelper.isComponent(noRelatedSym, index++, 'UndInstrmtGrp', false)\r\n setHelper.isSimple(noRelatedSym, index++, 'Currency', false)\r\n setHelper.isSimple(noRelatedSym, index++, 'ContractPositionNumber', false)\r\n setHelper.isComponent(noRelatedSym, index++, 'Stipulations', false)\r\n setHelper.isComponent(noRelatedSym, index++, 'InstrmtLegSecListGrp', false)\r\n setHelper.isComponent(noRelatedSym, index++, 'SpreadOrBenchmarkCurveData', false)\r\n setHelper.isComponent(noRelatedSym, index++, 'YieldData', false)\r\n setHelper.isSimple(noRelatedSym, index++, 'Text', false)\r\n setHelper.isSimple(noRelatedSym, index++, 'EncodedTextLen', false)\r\n setHelper.isSimple(noRelatedSym, index++, 'EncodedText', false)\r\n setHelper.isComponent(noRelatedSym, index++, 'SecurityTradingRules', false)\r\n setHelper.isComponent(noRelatedSym, index++, 'StrikeRules', false)\r\n setHelper.isSimple(noRelatedSym, index++, 'RelSymTransactTime', false)\r\n})\r\n\r\n/*\r\n <component name=\"SecurityTradingRules\">\r\n <component name=\"BaseTradingRules\" required=\"N\" />\r\n <component name=\"TradingSessionRulesGrp\" required=\"N\" />\r\n <component name=\"NestedInstrumentAttribute\" required=\"N\" />\r\n </component>\r\n */\r\n\r\ntest('check SecurityTradingRules', () => {\r\n let index = 0\r\n const securityTradingRules = secHelper.getSecurityTradingRules()\r\n setHelper.isComponent(securityTradingRules, index++, 'BaseTradingRules', false)\r\n setHelper.isComponent(securityTradingRules, index++, 'TradingSessionRulesGrp', false)\r\n setHelper.isComponent(securityTradingRules, index++, 'NestedInstrumentAttribute', false)\r\n})\r\n\r\n/*\r\n <component name=\"BaseTradingRules\">\r\n <component name=\"TickRules\" required=\"N\" />\r\n <component name=\"LotTypeRules\" required=\"N\" />\r\n <component name=\"PriceLimits\" required=\"N\" />\r\n <field name=\"ExpirationCycle\" required=\"N\" />\r\n <field name=\"MinTradeVol\" required=\"N\" />\r\n <field name=\"MaxTradeVol\" required=\"N\" />\r\n <field name=\"MaxPriceVariation\" required=\"N\" />\r\n <field name=\"ImpliedMarketIndicator\" required=\"N\" />\r\n <field name=\"TradingCurrency\" required=\"N\" />\r\n <field name=\"RoundLot\" required=\"N\" />\r\n <field name=\"MultilegModel\" required=\"N\" />\r\n <field name=\"MultilegPriceMethod\" required=\"N\" />\r\n <field name=\"PriceType\" required=\"N\" />\r\n </component>\r\n */\r\n\r\ntest('check BaseTradingRules', () => {\r\n let index = 0\r\n const securityTradingRules = secHelper.getBaseTradingRules()\r\n setHelper.isComponent(securityTradingRules, index++, 'TickRules', false)\r\n setHelper.isComponent(securityTradingRules, index++, 'LotTypeRules', false)\r\n setHelper.isComponent(securityTradingRules, index++, 'PriceLimits', false)\r\n setHelper.isSimple(securityTradingRules, index++, 'ExpirationCycle', false)\r\n setHelper.isSimple(securityTradingRules, index++, 'MinTradeVol', false)\r\n setHelper.isSimple(securityTradingRules, index++, 'MaxTradeVol', false)\r\n setHelper.isSimple(securityTradingRules, index++, 'MaxPriceVariation', false)\r\n setHelper.isSimple(securityTradingRules, index++, 'ImpliedMarketIndicator', false)\r\n setHelper.isSimple(securityTradingRules, index++, 'TradingCurrency', false)\r\n setHelper.isSimple(securityTradingRules, index++, 'RoundLot', false)\r\n setHelper.isSimple(securityTradingRules, index++, 'MultilegModel', false)\r\n setHelper.isSimple(securityTradingRules, index++, 'MultilegPriceMethod', false)\r\n setHelper.isSimple(securityTradingRules, index++, 'PriceType', false)\r\n})\r\n\r\n/*\r\n <component name=\"TickRules\">\r\n <group name=\"NoTickRules\" required=\"N\">\r\n <field name=\"StartTickPriceRange\" required=\"N\" />\r\n <field name=\"EndTickPriceRange\" required=\"N\" />\r\n <field name=\"TickIncrement\" required=\"N\" />\r\n <field name=\"TickRuleType\" required=\"N\" />\r\n </group>\r\n </component>\r\n */\r\n\r\ntest('check TickRules', () => {\r\n let index = 0\r\n const tickRules = secHelper.getTickRules()\r\n setHelper.isGroup(tickRules, index++, 'NoTickRules', false)\r\n})\r\n\r\ntest('check NoTickRules', () => {\r\n let index = 0\r\n const noTickRules = secHelper.getNoTickRules()\r\n setHelper.isSimple(noTickRules, index++, 'StartTickPriceRange', false)\r\n setHelper.isSimple(noTickRules, index++, 'EndTickPriceRange', false)\r\n setHelper.isSimple(noTickRules, index++, 'TickIncrement', false)\r\n setHelper.isSimple(noTickRules, index++, 'TickRuleType', false)\r\n})\r\n"]}
1
+ {"version":3,"file":"qf-50sp0-dict.test.js","sourceRoot":"","sources":["../../../src/test/ascii/qf-50sp0-dict.test.ts"],"names":[],"mappings":"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","sourcesContent":["import 'reflect-metadata'\r\n\r\nimport * as path from 'path'\r\nimport { FixDefinitions } from '../../dictionary/definition'\r\nimport { DefinitionFactory } from '../../util'\r\nimport { IContainedSet } from '../../dictionary/contained'\r\nimport { SetConstraintHelper } from '../env/set-constraint-helper'\r\n\r\nconst root: string = path.join(__dirname, '../env/data')\r\n\r\nlet definitions: FixDefinitions\r\nlet secHelper: SecDefHelper\r\nlet setHelper: SetConstraintHelper\r\n\r\nbeforeAll(async () => {\r\n definitions = await new DefinitionFactory().getDefinitions(`${root}/fix5-mod.xml` ?? '')\r\n secHelper = new SecDefHelper(definitions)\r\n setHelper = new SetConstraintHelper(definitions)\r\n}, 45000)\r\n\r\n/*\r\n <message name=\"SecurityList\" msgtype=\"y\" msgcat=\"app\">\r\n <field name=\"SecurityReqID\" required=\"N\"/>\r\n <field name=\"SecurityResponseID\" required=\"N\"/>\r\n <field name=\"SecurityRequestResult\" required=\"N\"/>\r\n <field name=\"SecurityListRequestType\" required=\"N\" />\r\n <field name=\"TotNoRelatedSym\" required=\"N\"/>\r\n <field name=\"LastFragment\" required=\"N\"/>\r\n <component name=\"SecListGrp\" required=\"N\"/>\r\n <field name=\"SecurityReportID\" required=\"N\"/>\r\n <field name=\"ClearingBusinessDate\" required=\"N\"/>\r\n <field name=\"MarketID\" required=\"N\" />\r\n <field name=\"MarketSegmentID\" required=\"N\" />\r\n <field name=\"SecurityListID\" required=\"N\" />\r\n <field name=\"SecurityListRefID\" required=\"N\" />\r\n <field name=\"SecurityListDesc\" required=\"N\" />\r\n <field name=\"EncodedSecurityListDescLen\" required=\"N\" />\r\n <field name=\"EncodedSecurityListDesc\" required=\"N\" />\r\n <field name=\"SecurityListType\" required=\"N\" />\r\n <field name=\"SecurityListTypeSource\" required=\"N\" />\r\n <field name=\"TransactTime\" required=\"N\" />\r\n </message>\r\n */\r\n\r\nclass SecDefHelper {\r\n constructor (public definitions: FixDefinitions) {}\r\n public getSecListGrp (): (IContainedSet | undefined) {\r\n return this.definitions.getSet('SecurityList.SecListGrp')\r\n }\r\n\r\n public getNumRelatedSym (): (IContainedSet | undefined) {\r\n return this.getSecListGrp()?.getSet('NoRelatedSym') ?? undefined\r\n }\r\n\r\n public getSecurityTradingRules (): (IContainedSet | undefined) {\r\n return this.getNumRelatedSym()?.getSet('SecurityTradingRules') ?? undefined\r\n }\r\n\r\n public getBaseTradingRules (): (IContainedSet | undefined) {\r\n return this.getSecurityTradingRules()?.getSet('BaseTradingRules') ?? undefined\r\n }\r\n\r\n public getTickRules (): (IContainedSet | undefined) {\r\n return this.getBaseTradingRules()?.getSet('TickRules') ?? undefined\r\n }\r\n\r\n public getNoTickRules (): (IContainedSet | undefined) {\r\n return this.getTickRules()?.getSet('NoTickRules') ?? undefined\r\n }\r\n}\r\n\r\ntest('check message SecurityList', () => {\r\n const securityList: (IContainedSet | undefined) = definitions?.getSet('SecurityList') ?? undefined\r\n expect(securityList).toBeTruthy()\r\n let index = 0\r\n setHelper.isComponent(securityList, index++, 'StandardHeader', true)\r\n setHelper.isSimple(securityList, index++, 'SecurityReqID', false)\r\n setHelper.isSimple(securityList, index++, 'SecurityResponseID', false)\r\n setHelper.isSimple(securityList, index++, 'SecurityRequestResult', false)\r\n setHelper.isSimple(securityList, index++, 'SecurityListRequestType', false)\r\n setHelper.isSimple(securityList, index++, 'TotNoRelatedSym', false)\r\n setHelper.isSimple(securityList, index++, 'LastFragment', false)\r\n setHelper.isComponent(securityList, index++, 'SecListGrp', false)\r\n setHelper.isSimple(securityList, index++, 'SecurityReportID', false)\r\n setHelper.isSimple(securityList, index++, 'ClearingBusinessDate', false)\r\n setHelper.isSimple(securityList, index++, 'MarketID', false)\r\n setHelper.isSimple(securityList, index++, 'MarketSegmentID', false)\r\n setHelper.isSimple(securityList, index++, 'SecurityListID', false)\r\n setHelper.isSimple(securityList, index++, 'SecurityListRefID', false)\r\n setHelper.isSimple(securityList, index++, 'SecurityListDesc', false)\r\n setHelper.isSimple(securityList, index++, 'EncodedSecurityListDescLen', false)\r\n setHelper.isSimple(securityList, index++, 'EncodedSecurityListDesc', false)\r\n setHelper.isSimple(securityList, index++, 'SecurityListType', false)\r\n setHelper.isSimple(securityList, index++, 'SecurityListTypeSource', false)\r\n setHelper.isSimple(securityList, index++, 'TransactTime', false)\r\n setHelper.isComponent(securityList, index++, 'StandardTrailer', true)\r\n})\r\n\r\n/*\r\n <component name=\"SecListGrp\">\r\n <group name=\"NoRelatedSym\" required=\"N\">\r\n <component name=\"Instrument\"/>\r\n <component name=\"InstrumentExtension\"/>\r\n <component name=\"FinancingDetails\"/>\r\n <component name=\"UndInstrmtGrp\"/>\r\n <field name=\"Currency\" required=\"N\"/>\r\n <field name=\"ContractPositionNumber\" required=\"N\"/>\r\n <component name=\"Stipulations\"/>\r\n <component name=\"InstrmtLegSecListGrp\"/>\r\n <component name=\"SpreadOrBenchmarkCurveData\"/>\r\n <component name=\"YieldData\"/>\r\n <field name=\"Text\" required=\"N\"/>\r\n <field name=\"EncodedTextLen\" required=\"N\"/>\r\n <field name=\"EncodedText\" required=\"N\"/>\r\n <component name=\"SecurityTradingRules\" required=\"N\" />\r\n <component name=\"StrikeRules\" required=\"N\" />\r\n <field name=\"RelSymTransactTime\" required=\"N\" />\r\n </group>\r\n </component>\r\n */\r\n\r\ntest('check SecListGrp', () => {\r\n const secListGrp = secHelper.getSecListGrp()\r\n expect(secListGrp).toBeTruthy()\r\n expect(secListGrp?.fields?.length).toEqual(1)\r\n setHelper.isGroup(secListGrp ?? undefined, 0, 'NoRelatedSym', false)\r\n})\r\n\r\ntest('check NoRelatedSym', () => {\r\n let index = 0\r\n const noRelatedSym = secHelper.getNumRelatedSym()\r\n setHelper.isComponent(noRelatedSym, index++, 'Instrument', false)\r\n setHelper.isComponent(noRelatedSym, index++, 'InstrumentExtension', false)\r\n setHelper.isComponent(noRelatedSym, index++, 'FinancingDetails', false)\r\n setHelper.isComponent(noRelatedSym, index++, 'UndInstrmtGrp', false)\r\n setHelper.isSimple(noRelatedSym, index++, 'Currency', false)\r\n setHelper.isSimple(noRelatedSym, index++, 'ContractPositionNumber', false)\r\n setHelper.isComponent(noRelatedSym, index++, 'Stipulations', false)\r\n setHelper.isComponent(noRelatedSym, index++, 'InstrmtLegSecListGrp', false)\r\n setHelper.isComponent(noRelatedSym, index++, 'SpreadOrBenchmarkCurveData', false)\r\n setHelper.isComponent(noRelatedSym, index++, 'YieldData', false)\r\n setHelper.isSimple(noRelatedSym, index++, 'Text', false)\r\n setHelper.isSimple(noRelatedSym, index++, 'EncodedTextLen', false)\r\n setHelper.isSimple(noRelatedSym, index++, 'EncodedText', false)\r\n setHelper.isComponent(noRelatedSym, index++, 'SecurityTradingRules', false)\r\n setHelper.isComponent(noRelatedSym, index++, 'StrikeRules', false)\r\n setHelper.isSimple(noRelatedSym, index++, 'RelSymTransactTime', false)\r\n})\r\n\r\n/*\r\n <component name=\"SecurityTradingRules\">\r\n <component name=\"BaseTradingRules\" required=\"N\" />\r\n <component name=\"TradingSessionRulesGrp\" required=\"N\" />\r\n <component name=\"NestedInstrumentAttribute\" required=\"N\" />\r\n </component>\r\n */\r\n\r\ntest('check SecurityTradingRules', () => {\r\n let index = 0\r\n const securityTradingRules = secHelper.getSecurityTradingRules()\r\n setHelper.isComponent(securityTradingRules, index++, 'BaseTradingRules', false)\r\n setHelper.isComponent(securityTradingRules, index++, 'TradingSessionRulesGrp', false)\r\n setHelper.isComponent(securityTradingRules, index++, 'NestedInstrumentAttribute', false)\r\n})\r\n\r\n/*\r\n <component name=\"BaseTradingRules\">\r\n <component name=\"TickRules\" required=\"N\" />\r\n <component name=\"LotTypeRules\" required=\"N\" />\r\n <component name=\"PriceLimits\" required=\"N\" />\r\n <field name=\"ExpirationCycle\" required=\"N\" />\r\n <field name=\"MinTradeVol\" required=\"N\" />\r\n <field name=\"MaxTradeVol\" required=\"N\" />\r\n <field name=\"MaxPriceVariation\" required=\"N\" />\r\n <field name=\"ImpliedMarketIndicator\" required=\"N\" />\r\n <field name=\"TradingCurrency\" required=\"N\" />\r\n <field name=\"RoundLot\" required=\"N\" />\r\n <field name=\"MultilegModel\" required=\"N\" />\r\n <field name=\"MultilegPriceMethod\" required=\"N\" />\r\n <field name=\"PriceType\" required=\"N\" />\r\n </component>\r\n */\r\n\r\ntest('check BaseTradingRules', () => {\r\n let index = 0\r\n const securityTradingRules = secHelper.getBaseTradingRules()\r\n setHelper.isComponent(securityTradingRules, index++, 'TickRules', false)\r\n setHelper.isComponent(securityTradingRules, index++, 'LotTypeRules', false)\r\n setHelper.isComponent(securityTradingRules, index++, 'PriceLimits', false)\r\n setHelper.isSimple(securityTradingRules, index++, 'ExpirationCycle', false)\r\n setHelper.isSimple(securityTradingRules, index++, 'MinTradeVol', false)\r\n setHelper.isSimple(securityTradingRules, index++, 'MaxTradeVol', false)\r\n setHelper.isSimple(securityTradingRules, index++, 'MaxPriceVariation', false)\r\n setHelper.isSimple(securityTradingRules, index++, 'ImpliedMarketIndicator', false)\r\n setHelper.isSimple(securityTradingRules, index++, 'TradingCurrency', false)\r\n setHelper.isSimple(securityTradingRules, index++, 'RoundLot', false)\r\n setHelper.isSimple(securityTradingRules, index++, 'MultilegModel', false)\r\n setHelper.isSimple(securityTradingRules, index++, 'MultilegPriceMethod', false)\r\n setHelper.isSimple(securityTradingRules, index++, 'PriceType', false)\r\n})\r\n\r\n/*\r\n <component name=\"TickRules\">\r\n <group name=\"NoTickRules\" required=\"N\">\r\n <field name=\"StartTickPriceRange\" required=\"N\" />\r\n <field name=\"EndTickPriceRange\" required=\"N\" />\r\n <field name=\"TickIncrement\" required=\"N\" />\r\n <field name=\"TickRuleType\" required=\"N\" />\r\n </group>\r\n </component>\r\n */\r\n\r\ntest('check TickRules', () => {\r\n let index = 0\r\n const tickRules = secHelper.getTickRules()\r\n setHelper.isGroup(tickRules, index++, 'NoTickRules', false)\r\n})\r\n\r\ntest('check NoTickRules', () => {\r\n let index = 0\r\n const noTickRules = secHelper.getNoTickRules()\r\n setHelper.isSimple(noTickRules, index++, 'StartTickPriceRange', false)\r\n setHelper.isSimple(noTickRules, index++, 'EndTickPriceRange', false)\r\n setHelper.isSimple(noTickRules, index++, 'TickIncrement', false)\r\n setHelper.isSimple(noTickRules, index++, 'TickRuleType', false)\r\n})\r\n"]}
@@ -273,12 +273,14 @@ function checkSimple(name, tag, type) {
273
273
  expect(def === null || def === void 0 ? void 0 : def.type).toEqual(type);
274
274
  }
275
275
  test('field check AdvSide', () => {
276
+ var _a;
276
277
  const def = definitions.simple.get('AdvSide');
278
+ const keys = Array.from((_a = def === null || def === void 0 ? void 0 : def.enumVals.keys()) !== null && _a !== void 0 ? _a : []);
277
279
  expect(def).toBeTruthy();
278
280
  checkSimple('AdvSide', 4, 'CHAR');
279
281
  expect(def === null || def === void 0 ? void 0 : def.isEnum()).toBeTruthy();
280
282
  expect(def === null || def === void 0 ? void 0 : def.enumVals).toBeTruthy();
281
- expect(def === null || def === void 0 ? void 0 : def.enumVals.keys().length).toEqual(4);
283
+ expect(keys.length).toEqual(4);
282
284
  checkEnum(def === null || def === void 0 ? void 0 : def.enums, 'B', 'Buy', 'BUY');
283
285
  checkEnum(def === null || def === void 0 ? void 0 : def.enums, 'S', 'Sell', 'SELL');
284
286
  checkEnum(def === null || def === void 0 ? void 0 : def.enums, 'X', 'Cross', 'CROSS');
@@ -337,11 +339,12 @@ test('check logon fields', () => {
337
339
  expect(logon === null || logon === void 0 ? void 0 : logon.containsRaw).toBeTruthy();
338
340
  });
339
341
  test('check message existance', () => {
342
+ var _a;
340
343
  const mt = definitions.simple.get('MsgType');
341
344
  expect(mt === null || mt === void 0 ? void 0 : mt.isEnum()).toBeTruthy();
342
345
  expect(mt === null || mt === void 0 ? void 0 : mt.enums.get('0')).toBeTruthy();
343
346
  expect(mt === null || mt === void 0 ? void 0 : mt.enums.get('1')).toBeTruthy();
344
- mt === null || mt === void 0 ? void 0 : mt.enums.keys().forEach(k => {
347
+ Array.from((_a = mt === null || mt === void 0 ? void 0 : mt.enums.keys()) !== null && _a !== void 0 ? _a : []).forEach(k => {
345
348
  if (k === 'n')
346
349
  return;
347
350
  const m = definitions.message.get(k);
@@ -1 +1 @@
1
- {"version":3,"file":"qf-50sp2-dict.test.js","sourceRoot":"","sources":["../../../src/test/ascii/qf-50sp2-dict.test.ts"],"names":[],"mappings":"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","sourcesContent":["import 'reflect-metadata'\r\n\r\nimport { FixDefinitions, MessageDefinition } from '../../dictionary/definition'\r\nimport { DefinitionFactory } from '../../util'\r\nimport { SetConstraintHelper } from '../env/set-constraint-helper'\r\nimport { QuickFixXmlFileBuilder } from '../../dictionary/parser/quickfix/quick-fix-xml-file-builder'\r\nimport { FieldEnum, FixVersion } from '../../dictionary'\r\nimport { Dictionary } from '../../collections'\r\nimport { QuickFixXmlFileParser } from '../../dictionary/parser'\r\nimport { StringDuplex } from '../../transport'\r\nimport { EmptyLogger } from '../../config'\r\n\r\nlet definitions: FixDefinitions\r\nlet setHelper: SetConstraintHelper\r\n\r\nbeforeAll(async () => {\r\n definitions = await new DefinitionFactory().getDefinitions('data/FIX50SP2.xml')\r\n setHelper = new SetConstraintHelper(definitions)\r\n}, 45000)\r\n\r\n/*\r\nuse notepad++ replace with regular expression\r\n.*component name='(.*)' required.*\r\nsetHelper.isComponent\\(tc, index++, '\\1', false\\)\r\n */\r\n\r\nfunction checkTradeCapture (tc: (MessageDefinition | null)): void {\r\n expect(tc).toBeTruthy()\r\n let index = 0\r\n setHelper.isComponent(tc, index++, 'StandardHeader', true)\r\n setHelper.isComponent(tc, index++, 'ApplicationSequenceControl', false)\r\n setHelper.isSimple(tc, index++, 'TradeReportID', false)\r\n setHelper.isSimple(tc, index++, 'TradeID', false)\r\n setHelper.isSimple(tc, index++, 'SecondaryTradeID', false)\r\n setHelper.isSimple(tc, index++, 'FirmTradeID', false)\r\n setHelper.isSimple(tc, index++, 'SecondaryFirmTradeID', false)\r\n setHelper.isSimple(tc, index++, 'PackageID', false)\r\n setHelper.isSimple(tc, index++, 'TradeNumber', false)\r\n setHelper.isSimple(tc, index++, 'TradeReportTransType', false)\r\n setHelper.isSimple(tc, index++, 'TradeReportType', false)\r\n setHelper.isSimple(tc, index++, 'TrdRptStatus', false)\r\n setHelper.isSimple(tc, index++, 'TradeRequestID', false)\r\n setHelper.isSimple(tc, index++, 'TrdType', false)\r\n setHelper.isSimple(tc, index++, 'TrdSubType', false)\r\n setHelper.isSimple(tc, index++, 'SecondaryTrdType', false)\r\n setHelper.isSimple(tc, index++, 'TertiaryTrdType', false)\r\n setHelper.isSimple(tc, index++, 'AnonymousTradeIndicator', false)\r\n setHelper.isSimple(tc, index++, 'AlgorithmicTradeIndicator', false)\r\n setHelper.isSimple(tc, index++, 'OffsetInstruction', false)\r\n setHelper.isComponent(tc, index++, 'TradePriceConditionGrp', false)\r\n setHelper.isSimple(tc, index++, 'TradeHandlingInstr', false)\r\n setHelper.isSimple(tc, index++, 'OrigTradeHandlingInstr', false)\r\n setHelper.isSimple(tc, index++, 'OrigTradeDate', false)\r\n setHelper.isSimple(tc, index++, 'OrigTradeID', false)\r\n setHelper.isSimple(tc, index++, 'OrigSecondaryTradeID', false)\r\n setHelper.isSimple(tc, index++, 'TransferReason', false)\r\n setHelper.isSimple(tc, index++, 'ExecType', false)\r\n setHelper.isSimple(tc, index++, 'TotNumTradeReports', false)\r\n setHelper.isSimple(tc, index++, 'LastRptRequested', false)\r\n setHelper.isSimple(tc, index++, 'ManualOrderIndicator', false)\r\n setHelper.isSimple(tc, index++, 'UnsolicitedIndicator', false)\r\n setHelper.isSimple(tc, index++, 'SubscriptionRequestType', false)\r\n setHelper.isSimple(tc, index++, 'TradeReportRefID', false)\r\n setHelper.isSimple(tc, index++, 'SecondaryTradeReportRefID', false)\r\n setHelper.isSimple(tc, index++, 'SecondaryTradeReportID', false)\r\n setHelper.isSimple(tc, index++, 'TradeLinkID', false)\r\n setHelper.isSimple(tc, index++, 'TrdMatchID', false)\r\n setHelper.isSimple(tc, index++, 'ExecID', false)\r\n setHelper.isSimple(tc, index++, 'ExecRefID', false)\r\n setHelper.isSimple(tc, index++, 'SecondaryExecID', false)\r\n setHelper.isSimple(tc, index++, 'ExecRestatementReason', false)\r\n setHelper.isSimple(tc, index++, 'RegulatoryTransactionType', false)\r\n setHelper.isComponent(tc, index++, 'RegulatoryTradeIDGrp', false)\r\n setHelper.isSimple(tc, index++, 'PreviouslyReported', false)\r\n setHelper.isSimple(tc, index++, 'PriceType', false)\r\n setHelper.isComponent(tc, index++, 'PriceQualifierGrp', false)\r\n setHelper.isSimple(tc, index++, 'CrossType', false)\r\n setHelper.isComponent(tc, index++, 'RootParties', false)\r\n setHelper.isSimple(tc, index++, 'AsOfIndicator', false)\r\n setHelper.isSimple(tc, index++, 'SettlSessID', false)\r\n setHelper.isSimple(tc, index++, 'SettlSessSubID', false)\r\n setHelper.isSimple(tc, index++, 'VenueType', false)\r\n setHelper.isSimple(tc, index++, 'MarketSegmentID', false)\r\n setHelper.isSimple(tc, index++, 'MarketID', false)\r\n setHelper.isSimple(tc, index++, 'TaxonomyType', false)\r\n setHelper.isComponent(tc, index++, 'Instrument', false)\r\n setHelper.isComponent(tc, index++, 'InstrumentExtension', false)\r\n setHelper.isComponent(tc, index++, 'FinancingDetails', false)\r\n setHelper.isComponent(tc, index++, 'PaymentGrp', false)\r\n setHelper.isSimple(tc, index++, 'QtyType', false)\r\n setHelper.isComponent(tc, index++, 'YieldData', false)\r\n setHelper.isComponent(tc, index++, 'UndInstrmtGrp', false)\r\n setHelper.isComponent(tc, index++, 'RelatedInstrumentGrp', false)\r\n setHelper.isComponent(tc, index++, 'CollateralAmountGrp', false)\r\n setHelper.isSimple(tc, index++, 'CollateralizationValueDate', false)\r\n setHelper.isComponent(tc, index++, 'RateSource', false)\r\n setHelper.isComponent(tc, index++, 'TransactionAttributeGrp', false)\r\n setHelper.isSimple(tc, index++, 'UnderlyingTradingSessionID', false)\r\n setHelper.isSimple(tc, index++, 'UnderlyingTradingSessionSubID', false)\r\n setHelper.isSimple(tc, index++, 'LastQty', false)\r\n setHelper.isSimple(tc, index++, 'LastQtyVariance', false)\r\n setHelper.isSimple(tc, index++, 'LastQtyChanged', false)\r\n setHelper.isSimple(tc, index++, 'LastMultipliedQty', false)\r\n setHelper.isSimple(tc, index++, 'TotalTradeQty', false)\r\n setHelper.isSimple(tc, index++, 'TotalTradeMultipliedQty', false)\r\n setHelper.isSimple(tc, index++, 'LastPx', false)\r\n setHelper.isSimple(tc, index++, 'MidPx', false)\r\n setHelper.isSimple(tc, index++, 'DifferentialPrice', false)\r\n setHelper.isSimple(tc, index++, 'CalculatedCcyLastQty', false)\r\n setHelper.isSimple(tc, index++, 'PriceMarkup', false)\r\n setHelper.isComponent(tc, index++, 'AveragePriceDetail', false)\r\n setHelper.isSimple(tc, index++, 'Currency', false)\r\n setHelper.isSimple(tc, index++, 'CurrencyCodeSource', false)\r\n setHelper.isSimple(tc, index++, 'SettlCurrency', false)\r\n setHelper.isSimple(tc, index++, 'SettlCurrencyCodeSource', false)\r\n setHelper.isSimple(tc, index++, 'SettlPriceFxRateCalc', false)\r\n setHelper.isSimple(tc, index++, 'LastParPx', false)\r\n setHelper.isSimple(tc, index++, 'LastSpotRate', false)\r\n setHelper.isSimple(tc, index++, 'LastForwardPoints', false)\r\n setHelper.isSimple(tc, index++, 'LastSwapPoints', false)\r\n setHelper.isSimple(tc, index++, 'PricePrecision', false)\r\n setHelper.isSimple(tc, index++, 'LastMkt', false)\r\n setHelper.isSimple(tc, index++, 'ClearingTradePrice', false)\r\n setHelper.isSimple(tc, index++, 'TradePriceNegotiationMethod', false)\r\n setHelper.isSimple(tc, index++, 'LastUpfrontPrice', false)\r\n setHelper.isSimple(tc, index++, 'UpfrontPriceType', false)\r\n setHelper.isSimple(tc, index++, 'TradeDate', false)\r\n setHelper.isSimple(tc, index++, 'ClearingBusinessDate', false)\r\n setHelper.isSimple(tc, index++, 'ClearingPortfolioID', false)\r\n setHelper.isSimple(tc, index++, 'AvgPx', false)\r\n setHelper.isComponent(tc, index++, 'SpreadOrBenchmarkCurveData', false)\r\n setHelper.isSimple(tc, index++, 'AvgPxGroupID', false)\r\n setHelper.isSimple(tc, index++, 'AvgPxIndicator', false)\r\n setHelper.isSimple(tc, index++, 'ValuationDate', false)\r\n setHelper.isSimple(tc, index++, 'ValuationTime', false)\r\n setHelper.isSimple(tc, index++, 'ValuationBusinessCenter', false)\r\n setHelper.isComponent(tc, index++, 'PositionAmountData', false)\r\n setHelper.isSimple(tc, index++, 'MultiLegReportingType', false)\r\n setHelper.isSimple(tc, index++, 'TradeLegRefID', false)\r\n setHelper.isComponent(tc, index++, 'TrdInstrmtLegGrp', false)\r\n setHelper.isSimple(tc, index++, 'TransactTime', false)\r\n setHelper.isComponent(tc, index++, 'TrdRegTimestamps', false)\r\n setHelper.isSimple(tc, index++, 'SettlType', false)\r\n setHelper.isSimple(tc, index++, 'SettlDate', false)\r\n setHelper.isSimple(tc, index++, 'TerminationDate', false)\r\n setHelper.isSimple(tc, index++, 'UnderlyingSettlementDate', false)\r\n setHelper.isSimple(tc, index++, 'MatchStatus', false)\r\n setHelper.isSimple(tc, index++, 'ExecMethod', false)\r\n setHelper.isSimple(tc, index++, 'MatchType', false)\r\n setHelper.isComponent(tc, index++, 'TradeQtyGrp', false)\r\n setHelper.isComponent(tc, index++, 'TrdCapRptSideGrp', false)\r\n setHelper.isSimple(tc, index++, 'Volatility', false)\r\n setHelper.isSimple(tc, index++, 'TimeToExpiration', false)\r\n setHelper.isSimple(tc, index++, 'DividendYield', false)\r\n setHelper.isSimple(tc, index++, 'RiskFreeRate', false)\r\n setHelper.isSimple(tc, index++, 'PriceDelta', false)\r\n setHelper.isSimple(tc, index++, 'CurrencyRatio', false)\r\n setHelper.isSimple(tc, index++, 'CopyMsgIndicator', false)\r\n setHelper.isComponent(tc, index++, 'TrdRepIndicatorsGrp', false)\r\n setHelper.isSimple(tc, index++, 'TradeReportingIndicator', false)\r\n setHelper.isSimple(tc, index++, 'PublishTrdIndicator', false)\r\n setHelper.isSimple(tc, index++, 'TradePublishIndicator', false)\r\n setHelper.isComponent(tc, index++, 'TrdRegPublicationGrp', false)\r\n setHelper.isSimple(tc, index++, 'ShortSaleReason', false)\r\n setHelper.isSimple(tc, index++, 'TierCode', false)\r\n setHelper.isSimple(tc, index++, 'MessageEventSource', false)\r\n setHelper.isSimple(tc, index++, 'LastUpdateTime', false)\r\n setHelper.isSimple(tc, index++, 'RndPx', false)\r\n setHelper.isSimple(tc, index++, 'TZTransactTime', false)\r\n setHelper.isSimple(tc, index++, 'ReportedPxDiff', false)\r\n setHelper.isSimple(tc, index++, 'GrossTradeAmt', false)\r\n setHelper.isSimple(tc, index++, 'TotalGrossTradeAmt', false)\r\n setHelper.isSimple(tc, index++, 'TradeReportRejectReason', false)\r\n setHelper.isSimple(tc, index++, 'RejectText', false)\r\n setHelper.isSimple(tc, index++, 'EncodedRejectTextLen', false)\r\n setHelper.isSimple(tc, index++, 'EncodedRejectText', false)\r\n setHelper.isSimple(tc, index++, 'FeeMultiplier', false)\r\n setHelper.isSimple(tc, index++, 'ClearedIndicator', false)\r\n setHelper.isSimple(tc, index++, 'ClearingIntention', false)\r\n setHelper.isSimple(tc, index++, 'TradeClearingInstruction', false)\r\n setHelper.isSimple(tc, index++, 'BackloadedTradeIndicator', false)\r\n setHelper.isSimple(tc, index++, 'ConfirmationMethod', false)\r\n setHelper.isSimple(tc, index++, 'MandatoryClearingIndicator', false)\r\n setHelper.isComponent(tc, index++, 'MandatoryClearingJurisdictionGrp', false)\r\n setHelper.isSimple(tc, index++, 'MixedSwapIndicator', false)\r\n setHelper.isSimple(tc, index++, 'MultiAssetSwapIndicator', false)\r\n setHelper.isSimple(tc, index++, 'InternationalSwapIndicator', false)\r\n setHelper.isSimple(tc, index++, 'OffMarketPriceIndicator', false)\r\n setHelper.isSimple(tc, index++, 'VerificationMethod', false)\r\n setHelper.isSimple(tc, index++, 'ClearingRequirementException', false)\r\n setHelper.isSimple(tc, index++, 'IRSDirection', false)\r\n setHelper.isSimple(tc, index++, 'RegulatoryReportType', false)\r\n setHelper.isSimple(tc, index++, 'RegulatoryReportTypeBusinessDate', false)\r\n setHelper.isSimple(tc, index++, 'VoluntaryRegulatoryReport', false)\r\n setHelper.isSimple(tc, index++, 'MultiJurisdictionReportingIndicator', false)\r\n setHelper.isSimple(tc, index++, 'TradeCollateralization', false)\r\n setHelper.isSimple(tc, index++, 'TradeContinuation', false)\r\n setHelper.isSimple(tc, index++, 'TradeContingency', false)\r\n setHelper.isSimple(tc, index++, 'TradeVersion', false)\r\n setHelper.isSimple(tc, index++, 'HistoricalReportIndicator', false)\r\n setHelper.isSimple(tc, index++, 'DeltaCrossed', false)\r\n setHelper.isSimple(tc, index++, 'TradeContinuationText', false)\r\n setHelper.isSimple(tc, index++, 'EncodedTradeContinuationTextLen', false)\r\n setHelper.isSimple(tc, index++, 'EncodedTradeContinuationText', false)\r\n setHelper.isSimple(tc, index++, 'IntraFirmTradeIndicator', false)\r\n setHelper.isSimple(tc, index++, 'AffiliatedFirmsTradeIndicator', false)\r\n setHelper.isComponent(tc, index++, 'AttachmentGrp', false)\r\n setHelper.isSimple(tc, index++, 'RiskLimitCheckStatus', false)\r\n setHelper.isComponent(tc, index++, 'StandardTrailer', true)\r\n}\r\n\r\ntest('check definitions version', () => {\r\n expect(definitions.getMajor()).toEqual(5)\r\n expect(definitions.getMinor()).toEqual(0)\r\n expect(definitions.getServicePack()).toEqual(2)\r\n expect(definitions.version).toEqual(FixVersion.FIX50SP2)\r\n})\r\n\r\ntest('check trade caputure src xml', () => {\r\n checkTradeCapture(definitions.message.get('AE'))\r\n})\r\n\r\nasync function getTrimDefinitions (types: string[]): Promise<FixDefinitions> {\r\n const builder = new QuickFixXmlFileBuilder(definitions)\r\n builder.write(types)\r\n const d = builder.elasticBuffer.toString()\r\n const parser = new QuickFixXmlFileParser(() => new StringDuplex(d), () => new EmptyLogger())\r\n return await parser.parse()\r\n}\r\n\r\ntest('check builder', async () => {\r\n const msgTypes = ['0', '1', '2', '3', '4', '5', 'AE']\r\n const newdDefinitions = await getTrimDefinitions(msgTypes)\r\n expect(newdDefinitions).toBeTruthy()\r\n msgTypes.forEach(mt => {\r\n const m = newdDefinitions.message.get(mt)\r\n expect(m).toBeTruthy()\r\n })\r\n})\r\n\r\ntest('check version on trim definitions', async () => {\r\n const msgTypes = ['0']\r\n const newdDefinitions = await getTrimDefinitions(msgTypes)\r\n expect(newdDefinitions.getMajor()).toEqual(definitions.getMajor())\r\n expect(newdDefinitions.getMinor()).toEqual(definitions.getMinor())\r\n expect(newdDefinitions.getServicePack()).toEqual(definitions.getServicePack())\r\n expect(newdDefinitions.version).toEqual(definitions.version)\r\n})\r\n\r\ntest('check trade capture from trim', async () => {\r\n const msgTypes = ['0', '1', '2', '3', '4', '5', 'AE']\r\n const newdDefinitions = await getTrimDefinitions(msgTypes)\r\n checkTradeCapture(newdDefinitions.message.get('AE'))\r\n})\r\n\r\n/*\r\n <field number='4' name='AdvSide' type='CHAR'>\r\n <value enum='B' description='BUY' />\r\n <value enum='S' description='SELL' />\r\n <value enum='X' description='CROSS' />\r\n <value enum='T' description='TRADE' />\r\n </field>\r\n */\r\ntest('field fetch by name AdvSide', () => {\r\n const def = definitions.simple.get('AdvSide')\r\n expect(def).toBeTruthy()\r\n expect(def?.tag).toEqual(4)\r\n})\r\n\r\ntest('field fetch by name 4', () => {\r\n const def = definitions.tagToSimple[4]\r\n expect(def).toBeTruthy()\r\n expect(def?.name).toEqual('AdvSide')\r\n})\r\n\r\nfunction checkEnum (enums: (Dictionary<FieldEnum> | undefined), key: string, expectedVal: string, expectedDescription: string): void {\r\n expect(enums).toBeTruthy()\r\n const en = enums?.get(key)\r\n expect(en).toBeTruthy()\r\n expect(en?.val).toEqual(expectedVal)\r\n expect(en?.description).toEqual(expectedDescription)\r\n expect(en?.key).toEqual(key)\r\n}\r\n\r\nfunction checkSimple (name: string, tag: number, type: string): void {\r\n const def = definitions.simple.get(name)\r\n expect(def).toBeTruthy()\r\n expect(def?.tag).toEqual(tag)\r\n expect(def?.name).toEqual(name)\r\n expect(def?.type).toEqual(type)\r\n}\r\n\r\ntest('field check AdvSide', () => {\r\n const def = definitions.simple.get('AdvSide')\r\n expect(def).toBeTruthy()\r\n checkSimple('AdvSide', 4, 'CHAR')\r\n expect(def?.isEnum()).toBeTruthy()\r\n expect(def?.enumVals).toBeTruthy()\r\n expect(def?.enumVals.keys().length).toEqual(4)\r\n checkEnum(def?.enums, 'B', 'Buy', 'BUY')\r\n checkEnum(def?.enums, 'S', 'Sell', 'SELL')\r\n checkEnum(def?.enums, 'X', 'Cross', 'CROSS')\r\n checkEnum(def?.enums, 'T', 'Trade', 'TRADE')\r\n})\r\n// <field number='8' name='BeginString' type='STRING' />\r\ntest('field check 8', () => {\r\n checkSimple('BeginString', 8, 'STRING')\r\n})\r\n\r\n// <field number='9' name='BodyLength' type='LENGTH' />\r\ntest('field check 9', () => {\r\n checkSimple('BodyLength', 9, 'LENGTH')\r\n})\r\n\r\n// <field number='12' name='Commission' type='AMT' />\r\ntest('field check 12', () => {\r\n checkSimple('Commission', 12, 'AMT')\r\n})\r\n\r\n// <field number='16' name='EndSeqNo' type='SEQNUM' />\r\ntest('field check 16', () => {\r\n checkSimple('EndSeqNo', 16, 'SEQNUM')\r\n})\r\n\r\n// <field number='38' name='OrderQty' type='QTY' />\r\ntest('field check 38', () => {\r\n checkSimple('OrderQty', 38, 'QTY')\r\n})\r\n\r\n// <field number='212' name='XmlDataLen' type='LENGTH' />\r\ntest('field check 212', () => {\r\n checkSimple('XmlDataLen', 212, 'LENGTH')\r\n})\r\n// <field number='213' name='XmlData' type='DATA' />\r\ntest('field check 213', () => {\r\n checkSimple('XmlData', 213, 'XMLDATA')\r\n})\r\n\r\n/*\r\n <message name='Logon' msgcat='admin' msgtype='A'>\r\n <field name='EncryptMethod' required='Y' />\r\n <field name='HeartBtInt' required='Y' />\r\n <field name='RawDataLength' required='N' />\r\n <field name='RawData' required='N' />\r\n <field name='ResetSeqNumFlag' required='N' />\r\n <field name='NextExpectedMsgSeqNum' required='N' />\r\n <field name='MaxMessageSize' required='N' />\r\n <group name='NoMsgTypes' required='N'>\r\n <field name='RefMsgType' required='N' />\r\n <field name='MsgDirection' required='N' />\r\n </group>\r\n <field name='TestMessageIndicator' required='N' />\r\n <field name='Username' required='N' />\r\n <field name='Password' required='N' />\r\n <field name='NewPassword' required='N' />\r\n <field name='EncryptedPasswordMethod' required='N' />\r\n <field name='EncryptedPasswordLen' required='N' />\r\n <field name='EncryptedPassword' required='N' />\r\n <field name='EncryptedNewPasswordLen' required='N' />\r\n <field name='EncryptedNewPassword' required='N' />\r\n <field name='SessionStatus' required='N' />\r\n <field name='DefaultApplVerID' required='N' />\r\n <field name='DefaultApplExtID' required='N' />\r\n <field name='DefaultCstmApplVerID' required='N' />\r\n <field name='Text' required='N' />\r\n <field name='EncodedTextLen' required='N' />\r\n <field name='EncodedText' required='N' />\r\n </message>\r\n */\r\ntest('check logon fields', () => {\r\n const logon = definitions.message.get('Logon')\r\n expect(logon).toBeTruthy()\r\n let index = 0\r\n setHelper.isComponent(logon, index++, 'StandardHeader', true)\r\n setHelper.isSimple(logon, index++, 'EncryptMethod', true)\r\n setHelper.isSimple(logon, index++, 'HeartBtInt', true)\r\n setHelper.isSimple(logon, index++, 'RawDataLength', false)\r\n setHelper.isSimple(logon, index++, 'RawData', false)\r\n setHelper.isSimple(logon, index++, 'ResetSeqNumFlag', false)\r\n setHelper.isSimple(logon, index++, 'NextExpectedMsgSeqNum', false)\r\n setHelper.isSimple(logon, index++, 'MaxMessageSize', false)\r\n setHelper.isGroup(logon, index++, 'NoMsgTypes', false)\r\n setHelper.isSimple(logon, index++, 'TestMessageIndicator', false)\r\n setHelper.isSimple(logon, index++, 'Username', false)\r\n setHelper.isSimple(logon, index++, 'Password', false)\r\n setHelper.isSimple(logon, index++, 'NewPassword', false)\r\n setHelper.isSimple(logon, index++, 'EncryptedPasswordMethod', false)\r\n setHelper.isSimple(logon, index++, 'EncryptedPasswordLen', false)\r\n setHelper.isSimple(logon, index++, 'EncryptedPassword', false)\r\n setHelper.isSimple(logon, index++, 'EncryptedNewPasswordLen', false)\r\n setHelper.isSimple(logon, index++, 'EncryptedNewPassword', false)\r\n setHelper.isSimple(logon, index++, 'SessionStatus', false)\r\n setHelper.isSimple(logon, index++, 'DefaultApplVerID', false)\r\n setHelper.isSimple(logon, index++, 'DefaultApplExtID', false)\r\n setHelper.isSimple(logon, index++, 'DefaultCstmApplVerID', false)\r\n setHelper.isSimple(logon, index++, 'Text', false)\r\n setHelper.isSimple(logon, index++, 'EncodedTextLen', false)\r\n setHelper.isSimple(logon, index++, 'EncodedText', false)\r\n expect(logon?.containsRaw).toBeTruthy()\r\n})\r\n\r\ntest('check message existance', () => {\r\n const mt = definitions.simple.get('MsgType')\r\n expect(mt?.isEnum()).toBeTruthy()\r\n expect(mt?.enums.get('0')).toBeTruthy()\r\n expect(mt?.enums.get('1')).toBeTruthy()\r\n mt?.enums.keys().forEach(k => {\r\n if (k === 'n') return\r\n const m = definitions.message.get(k)\r\n expect(k).toBeTruthy()\r\n expect(m).toBeTruthy()\r\n expect(m?.msgType).toEqual(k)\r\n })\r\n})\r\n"]}
1
+ {"version":3,"file":"qf-50sp2-dict.test.js","sourceRoot":"","sources":["../../../src/test/ascii/qf-50sp2-dict.test.ts"],"names":[],"mappings":"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","sourcesContent":["import 'reflect-metadata'\r\n\r\nimport { FixDefinitions, MessageDefinition } from '../../dictionary/definition'\r\nimport { DefinitionFactory } from '../../util'\r\nimport { SetConstraintHelper } from '../env/set-constraint-helper'\r\nimport { QuickFixXmlFileBuilder } from '../../dictionary/parser/quickfix/quick-fix-xml-file-builder'\r\nimport { FieldEnum, FixVersion } from '../../dictionary'\r\nimport { QuickFixXmlFileParser } from '../../dictionary/parser'\r\nimport { StringDuplex } from '../../transport'\r\nimport { EmptyLogger } from '../../config'\r\n\r\nlet definitions: FixDefinitions\r\nlet setHelper: SetConstraintHelper\r\n\r\nbeforeAll(async () => {\r\n definitions = await new DefinitionFactory().getDefinitions('data/FIX50SP2.xml')\r\n setHelper = new SetConstraintHelper(definitions)\r\n}, 45000)\r\n\r\n/*\r\nuse notepad++ replace with regular expression\r\n.*component name='(.*)' required.*\r\nsetHelper.isComponent\\(tc, index++, '\\1', false\\)\r\n */\r\n\r\nfunction checkTradeCapture (tc: (MessageDefinition | undefined)): void {\r\n expect(tc).toBeTruthy()\r\n let index = 0\r\n setHelper.isComponent(tc, index++, 'StandardHeader', true)\r\n setHelper.isComponent(tc, index++, 'ApplicationSequenceControl', false)\r\n setHelper.isSimple(tc, index++, 'TradeReportID', false)\r\n setHelper.isSimple(tc, index++, 'TradeID', false)\r\n setHelper.isSimple(tc, index++, 'SecondaryTradeID', false)\r\n setHelper.isSimple(tc, index++, 'FirmTradeID', false)\r\n setHelper.isSimple(tc, index++, 'SecondaryFirmTradeID', false)\r\n setHelper.isSimple(tc, index++, 'PackageID', false)\r\n setHelper.isSimple(tc, index++, 'TradeNumber', false)\r\n setHelper.isSimple(tc, index++, 'TradeReportTransType', false)\r\n setHelper.isSimple(tc, index++, 'TradeReportType', false)\r\n setHelper.isSimple(tc, index++, 'TrdRptStatus', false)\r\n setHelper.isSimple(tc, index++, 'TradeRequestID', false)\r\n setHelper.isSimple(tc, index++, 'TrdType', false)\r\n setHelper.isSimple(tc, index++, 'TrdSubType', false)\r\n setHelper.isSimple(tc, index++, 'SecondaryTrdType', false)\r\n setHelper.isSimple(tc, index++, 'TertiaryTrdType', false)\r\n setHelper.isSimple(tc, index++, 'AnonymousTradeIndicator', false)\r\n setHelper.isSimple(tc, index++, 'AlgorithmicTradeIndicator', false)\r\n setHelper.isSimple(tc, index++, 'OffsetInstruction', false)\r\n setHelper.isComponent(tc, index++, 'TradePriceConditionGrp', false)\r\n setHelper.isSimple(tc, index++, 'TradeHandlingInstr', false)\r\n setHelper.isSimple(tc, index++, 'OrigTradeHandlingInstr', false)\r\n setHelper.isSimple(tc, index++, 'OrigTradeDate', false)\r\n setHelper.isSimple(tc, index++, 'OrigTradeID', false)\r\n setHelper.isSimple(tc, index++, 'OrigSecondaryTradeID', false)\r\n setHelper.isSimple(tc, index++, 'TransferReason', false)\r\n setHelper.isSimple(tc, index++, 'ExecType', false)\r\n setHelper.isSimple(tc, index++, 'TotNumTradeReports', false)\r\n setHelper.isSimple(tc, index++, 'LastRptRequested', false)\r\n setHelper.isSimple(tc, index++, 'ManualOrderIndicator', false)\r\n setHelper.isSimple(tc, index++, 'UnsolicitedIndicator', false)\r\n setHelper.isSimple(tc, index++, 'SubscriptionRequestType', false)\r\n setHelper.isSimple(tc, index++, 'TradeReportRefID', false)\r\n setHelper.isSimple(tc, index++, 'SecondaryTradeReportRefID', false)\r\n setHelper.isSimple(tc, index++, 'SecondaryTradeReportID', false)\r\n setHelper.isSimple(tc, index++, 'TradeLinkID', false)\r\n setHelper.isSimple(tc, index++, 'TrdMatchID', false)\r\n setHelper.isSimple(tc, index++, 'ExecID', false)\r\n setHelper.isSimple(tc, index++, 'ExecRefID', false)\r\n setHelper.isSimple(tc, index++, 'SecondaryExecID', false)\r\n setHelper.isSimple(tc, index++, 'ExecRestatementReason', false)\r\n setHelper.isSimple(tc, index++, 'RegulatoryTransactionType', false)\r\n setHelper.isComponent(tc, index++, 'RegulatoryTradeIDGrp', false)\r\n setHelper.isSimple(tc, index++, 'PreviouslyReported', false)\r\n setHelper.isSimple(tc, index++, 'PriceType', false)\r\n setHelper.isComponent(tc, index++, 'PriceQualifierGrp', false)\r\n setHelper.isSimple(tc, index++, 'CrossType', false)\r\n setHelper.isComponent(tc, index++, 'RootParties', false)\r\n setHelper.isSimple(tc, index++, 'AsOfIndicator', false)\r\n setHelper.isSimple(tc, index++, 'SettlSessID', false)\r\n setHelper.isSimple(tc, index++, 'SettlSessSubID', false)\r\n setHelper.isSimple(tc, index++, 'VenueType', false)\r\n setHelper.isSimple(tc, index++, 'MarketSegmentID', false)\r\n setHelper.isSimple(tc, index++, 'MarketID', false)\r\n setHelper.isSimple(tc, index++, 'TaxonomyType', false)\r\n setHelper.isComponent(tc, index++, 'Instrument', false)\r\n setHelper.isComponent(tc, index++, 'InstrumentExtension', false)\r\n setHelper.isComponent(tc, index++, 'FinancingDetails', false)\r\n setHelper.isComponent(tc, index++, 'PaymentGrp', false)\r\n setHelper.isSimple(tc, index++, 'QtyType', false)\r\n setHelper.isComponent(tc, index++, 'YieldData', false)\r\n setHelper.isComponent(tc, index++, 'UndInstrmtGrp', false)\r\n setHelper.isComponent(tc, index++, 'RelatedInstrumentGrp', false)\r\n setHelper.isComponent(tc, index++, 'CollateralAmountGrp', false)\r\n setHelper.isSimple(tc, index++, 'CollateralizationValueDate', false)\r\n setHelper.isComponent(tc, index++, 'RateSource', false)\r\n setHelper.isComponent(tc, index++, 'TransactionAttributeGrp', false)\r\n setHelper.isSimple(tc, index++, 'UnderlyingTradingSessionID', false)\r\n setHelper.isSimple(tc, index++, 'UnderlyingTradingSessionSubID', false)\r\n setHelper.isSimple(tc, index++, 'LastQty', false)\r\n setHelper.isSimple(tc, index++, 'LastQtyVariance', false)\r\n setHelper.isSimple(tc, index++, 'LastQtyChanged', false)\r\n setHelper.isSimple(tc, index++, 'LastMultipliedQty', false)\r\n setHelper.isSimple(tc, index++, 'TotalTradeQty', false)\r\n setHelper.isSimple(tc, index++, 'TotalTradeMultipliedQty', false)\r\n setHelper.isSimple(tc, index++, 'LastPx', false)\r\n setHelper.isSimple(tc, index++, 'MidPx', false)\r\n setHelper.isSimple(tc, index++, 'DifferentialPrice', false)\r\n setHelper.isSimple(tc, index++, 'CalculatedCcyLastQty', false)\r\n setHelper.isSimple(tc, index++, 'PriceMarkup', false)\r\n setHelper.isComponent(tc, index++, 'AveragePriceDetail', false)\r\n setHelper.isSimple(tc, index++, 'Currency', false)\r\n setHelper.isSimple(tc, index++, 'CurrencyCodeSource', false)\r\n setHelper.isSimple(tc, index++, 'SettlCurrency', false)\r\n setHelper.isSimple(tc, index++, 'SettlCurrencyCodeSource', false)\r\n setHelper.isSimple(tc, index++, 'SettlPriceFxRateCalc', false)\r\n setHelper.isSimple(tc, index++, 'LastParPx', false)\r\n setHelper.isSimple(tc, index++, 'LastSpotRate', false)\r\n setHelper.isSimple(tc, index++, 'LastForwardPoints', false)\r\n setHelper.isSimple(tc, index++, 'LastSwapPoints', false)\r\n setHelper.isSimple(tc, index++, 'PricePrecision', false)\r\n setHelper.isSimple(tc, index++, 'LastMkt', false)\r\n setHelper.isSimple(tc, index++, 'ClearingTradePrice', false)\r\n setHelper.isSimple(tc, index++, 'TradePriceNegotiationMethod', false)\r\n setHelper.isSimple(tc, index++, 'LastUpfrontPrice', false)\r\n setHelper.isSimple(tc, index++, 'UpfrontPriceType', false)\r\n setHelper.isSimple(tc, index++, 'TradeDate', false)\r\n setHelper.isSimple(tc, index++, 'ClearingBusinessDate', false)\r\n setHelper.isSimple(tc, index++, 'ClearingPortfolioID', false)\r\n setHelper.isSimple(tc, index++, 'AvgPx', false)\r\n setHelper.isComponent(tc, index++, 'SpreadOrBenchmarkCurveData', false)\r\n setHelper.isSimple(tc, index++, 'AvgPxGroupID', false)\r\n setHelper.isSimple(tc, index++, 'AvgPxIndicator', false)\r\n setHelper.isSimple(tc, index++, 'ValuationDate', false)\r\n setHelper.isSimple(tc, index++, 'ValuationTime', false)\r\n setHelper.isSimple(tc, index++, 'ValuationBusinessCenter', false)\r\n setHelper.isComponent(tc, index++, 'PositionAmountData', false)\r\n setHelper.isSimple(tc, index++, 'MultiLegReportingType', false)\r\n setHelper.isSimple(tc, index++, 'TradeLegRefID', false)\r\n setHelper.isComponent(tc, index++, 'TrdInstrmtLegGrp', false)\r\n setHelper.isSimple(tc, index++, 'TransactTime', false)\r\n setHelper.isComponent(tc, index++, 'TrdRegTimestamps', false)\r\n setHelper.isSimple(tc, index++, 'SettlType', false)\r\n setHelper.isSimple(tc, index++, 'SettlDate', false)\r\n setHelper.isSimple(tc, index++, 'TerminationDate', false)\r\n setHelper.isSimple(tc, index++, 'UnderlyingSettlementDate', false)\r\n setHelper.isSimple(tc, index++, 'MatchStatus', false)\r\n setHelper.isSimple(tc, index++, 'ExecMethod', false)\r\n setHelper.isSimple(tc, index++, 'MatchType', false)\r\n setHelper.isComponent(tc, index++, 'TradeQtyGrp', false)\r\n setHelper.isComponent(tc, index++, 'TrdCapRptSideGrp', false)\r\n setHelper.isSimple(tc, index++, 'Volatility', false)\r\n setHelper.isSimple(tc, index++, 'TimeToExpiration', false)\r\n setHelper.isSimple(tc, index++, 'DividendYield', false)\r\n setHelper.isSimple(tc, index++, 'RiskFreeRate', false)\r\n setHelper.isSimple(tc, index++, 'PriceDelta', false)\r\n setHelper.isSimple(tc, index++, 'CurrencyRatio', false)\r\n setHelper.isSimple(tc, index++, 'CopyMsgIndicator', false)\r\n setHelper.isComponent(tc, index++, 'TrdRepIndicatorsGrp', false)\r\n setHelper.isSimple(tc, index++, 'TradeReportingIndicator', false)\r\n setHelper.isSimple(tc, index++, 'PublishTrdIndicator', false)\r\n setHelper.isSimple(tc, index++, 'TradePublishIndicator', false)\r\n setHelper.isComponent(tc, index++, 'TrdRegPublicationGrp', false)\r\n setHelper.isSimple(tc, index++, 'ShortSaleReason', false)\r\n setHelper.isSimple(tc, index++, 'TierCode', false)\r\n setHelper.isSimple(tc, index++, 'MessageEventSource', false)\r\n setHelper.isSimple(tc, index++, 'LastUpdateTime', false)\r\n setHelper.isSimple(tc, index++, 'RndPx', false)\r\n setHelper.isSimple(tc, index++, 'TZTransactTime', false)\r\n setHelper.isSimple(tc, index++, 'ReportedPxDiff', false)\r\n setHelper.isSimple(tc, index++, 'GrossTradeAmt', false)\r\n setHelper.isSimple(tc, index++, 'TotalGrossTradeAmt', false)\r\n setHelper.isSimple(tc, index++, 'TradeReportRejectReason', false)\r\n setHelper.isSimple(tc, index++, 'RejectText', false)\r\n setHelper.isSimple(tc, index++, 'EncodedRejectTextLen', false)\r\n setHelper.isSimple(tc, index++, 'EncodedRejectText', false)\r\n setHelper.isSimple(tc, index++, 'FeeMultiplier', false)\r\n setHelper.isSimple(tc, index++, 'ClearedIndicator', false)\r\n setHelper.isSimple(tc, index++, 'ClearingIntention', false)\r\n setHelper.isSimple(tc, index++, 'TradeClearingInstruction', false)\r\n setHelper.isSimple(tc, index++, 'BackloadedTradeIndicator', false)\r\n setHelper.isSimple(tc, index++, 'ConfirmationMethod', false)\r\n setHelper.isSimple(tc, index++, 'MandatoryClearingIndicator', false)\r\n setHelper.isComponent(tc, index++, 'MandatoryClearingJurisdictionGrp', false)\r\n setHelper.isSimple(tc, index++, 'MixedSwapIndicator', false)\r\n setHelper.isSimple(tc, index++, 'MultiAssetSwapIndicator', false)\r\n setHelper.isSimple(tc, index++, 'InternationalSwapIndicator', false)\r\n setHelper.isSimple(tc, index++, 'OffMarketPriceIndicator', false)\r\n setHelper.isSimple(tc, index++, 'VerificationMethod', false)\r\n setHelper.isSimple(tc, index++, 'ClearingRequirementException', false)\r\n setHelper.isSimple(tc, index++, 'IRSDirection', false)\r\n setHelper.isSimple(tc, index++, 'RegulatoryReportType', false)\r\n setHelper.isSimple(tc, index++, 'RegulatoryReportTypeBusinessDate', false)\r\n setHelper.isSimple(tc, index++, 'VoluntaryRegulatoryReport', false)\r\n setHelper.isSimple(tc, index++, 'MultiJurisdictionReportingIndicator', false)\r\n setHelper.isSimple(tc, index++, 'TradeCollateralization', false)\r\n setHelper.isSimple(tc, index++, 'TradeContinuation', false)\r\n setHelper.isSimple(tc, index++, 'TradeContingency', false)\r\n setHelper.isSimple(tc, index++, 'TradeVersion', false)\r\n setHelper.isSimple(tc, index++, 'HistoricalReportIndicator', false)\r\n setHelper.isSimple(tc, index++, 'DeltaCrossed', false)\r\n setHelper.isSimple(tc, index++, 'TradeContinuationText', false)\r\n setHelper.isSimple(tc, index++, 'EncodedTradeContinuationTextLen', false)\r\n setHelper.isSimple(tc, index++, 'EncodedTradeContinuationText', false)\r\n setHelper.isSimple(tc, index++, 'IntraFirmTradeIndicator', false)\r\n setHelper.isSimple(tc, index++, 'AffiliatedFirmsTradeIndicator', false)\r\n setHelper.isComponent(tc, index++, 'AttachmentGrp', false)\r\n setHelper.isSimple(tc, index++, 'RiskLimitCheckStatus', false)\r\n setHelper.isComponent(tc, index++, 'StandardTrailer', true)\r\n}\r\n\r\ntest('check definitions version', () => {\r\n expect(definitions.getMajor()).toEqual(5)\r\n expect(definitions.getMinor()).toEqual(0)\r\n expect(definitions.getServicePack()).toEqual(2)\r\n expect(definitions.version).toEqual(FixVersion.FIX50SP2)\r\n})\r\n\r\ntest('check trade caputure src xml', () => {\r\n checkTradeCapture(definitions.message.get('AE'))\r\n})\r\n\r\nasync function getTrimDefinitions (types: string[]): Promise<FixDefinitions> {\r\n const builder = new QuickFixXmlFileBuilder(definitions)\r\n builder.write(types)\r\n const d = builder.elasticBuffer.toString()\r\n const parser = new QuickFixXmlFileParser(() => new StringDuplex(d), () => new EmptyLogger())\r\n return await parser.parse()\r\n}\r\n\r\ntest('check builder', async () => {\r\n const msgTypes = ['0', '1', '2', '3', '4', '5', 'AE']\r\n const newdDefinitions = await getTrimDefinitions(msgTypes)\r\n expect(newdDefinitions).toBeTruthy()\r\n msgTypes.forEach(mt => {\r\n const m = newdDefinitions.message.get(mt)\r\n expect(m).toBeTruthy()\r\n })\r\n})\r\n\r\ntest('check version on trim definitions', async () => {\r\n const msgTypes = ['0']\r\n const newdDefinitions = await getTrimDefinitions(msgTypes)\r\n expect(newdDefinitions.getMajor()).toEqual(definitions.getMajor())\r\n expect(newdDefinitions.getMinor()).toEqual(definitions.getMinor())\r\n expect(newdDefinitions.getServicePack()).toEqual(definitions.getServicePack())\r\n expect(newdDefinitions.version).toEqual(definitions.version)\r\n})\r\n\r\ntest('check trade capture from trim', async () => {\r\n const msgTypes = ['0', '1', '2', '3', '4', '5', 'AE']\r\n const newdDefinitions = await getTrimDefinitions(msgTypes)\r\n checkTradeCapture(newdDefinitions.message.get('AE'))\r\n})\r\n\r\n/*\r\n <field number='4' name='AdvSide' type='CHAR'>\r\n <value enum='B' description='BUY' />\r\n <value enum='S' description='SELL' />\r\n <value enum='X' description='CROSS' />\r\n <value enum='T' description='TRADE' />\r\n </field>\r\n */\r\ntest('field fetch by name AdvSide', () => {\r\n const def = definitions.simple.get('AdvSide')\r\n expect(def).toBeTruthy()\r\n expect(def?.tag).toEqual(4)\r\n})\r\n\r\ntest('field fetch by name 4', () => {\r\n const def = definitions.tagToSimple[4]\r\n expect(def).toBeTruthy()\r\n expect(def?.name).toEqual('AdvSide')\r\n})\r\n\r\nfunction checkEnum (enums: (Map<string, FieldEnum> | undefined), key: string, expectedVal: string, expectedDescription: string): void {\r\n expect(enums).toBeTruthy()\r\n const en = enums?.get(key)\r\n expect(en).toBeTruthy()\r\n expect(en?.val).toEqual(expectedVal)\r\n expect(en?.description).toEqual(expectedDescription)\r\n expect(en?.key).toEqual(key)\r\n}\r\n\r\nfunction checkSimple (name: string, tag: number, type: string): void {\r\n const def = definitions.simple.get(name)\r\n expect(def).toBeTruthy()\r\n expect(def?.tag).toEqual(tag)\r\n expect(def?.name).toEqual(name)\r\n expect(def?.type).toEqual(type)\r\n}\r\n\r\ntest('field check AdvSide', () => {\r\n const def = definitions.simple.get('AdvSide')\r\n const keys = Array.from(def?.enumVals.keys() ?? [])\r\n expect(def).toBeTruthy()\r\n checkSimple('AdvSide', 4, 'CHAR')\r\n expect(def?.isEnum()).toBeTruthy()\r\n expect(def?.enumVals).toBeTruthy()\r\n expect(keys.length).toEqual(4)\r\n checkEnum(def?.enums, 'B', 'Buy', 'BUY')\r\n checkEnum(def?.enums, 'S', 'Sell', 'SELL')\r\n checkEnum(def?.enums, 'X', 'Cross', 'CROSS')\r\n checkEnum(def?.enums, 'T', 'Trade', 'TRADE')\r\n})\r\n// <field number='8' name='BeginString' type='STRING' />\r\ntest('field check 8', () => {\r\n checkSimple('BeginString', 8, 'STRING')\r\n})\r\n\r\n// <field number='9' name='BodyLength' type='LENGTH' />\r\ntest('field check 9', () => {\r\n checkSimple('BodyLength', 9, 'LENGTH')\r\n})\r\n\r\n// <field number='12' name='Commission' type='AMT' />\r\ntest('field check 12', () => {\r\n checkSimple('Commission', 12, 'AMT')\r\n})\r\n\r\n// <field number='16' name='EndSeqNo' type='SEQNUM' />\r\ntest('field check 16', () => {\r\n checkSimple('EndSeqNo', 16, 'SEQNUM')\r\n})\r\n\r\n// <field number='38' name='OrderQty' type='QTY' />\r\ntest('field check 38', () => {\r\n checkSimple('OrderQty', 38, 'QTY')\r\n})\r\n\r\n// <field number='212' name='XmlDataLen' type='LENGTH' />\r\ntest('field check 212', () => {\r\n checkSimple('XmlDataLen', 212, 'LENGTH')\r\n})\r\n// <field number='213' name='XmlData' type='DATA' />\r\ntest('field check 213', () => {\r\n checkSimple('XmlData', 213, 'XMLDATA')\r\n})\r\n\r\n/*\r\n <message name='Logon' msgcat='admin' msgtype='A'>\r\n <field name='EncryptMethod' required='Y' />\r\n <field name='HeartBtInt' required='Y' />\r\n <field name='RawDataLength' required='N' />\r\n <field name='RawData' required='N' />\r\n <field name='ResetSeqNumFlag' required='N' />\r\n <field name='NextExpectedMsgSeqNum' required='N' />\r\n <field name='MaxMessageSize' required='N' />\r\n <group name='NoMsgTypes' required='N'>\r\n <field name='RefMsgType' required='N' />\r\n <field name='MsgDirection' required='N' />\r\n </group>\r\n <field name='TestMessageIndicator' required='N' />\r\n <field name='Username' required='N' />\r\n <field name='Password' required='N' />\r\n <field name='NewPassword' required='N' />\r\n <field name='EncryptedPasswordMethod' required='N' />\r\n <field name='EncryptedPasswordLen' required='N' />\r\n <field name='EncryptedPassword' required='N' />\r\n <field name='EncryptedNewPasswordLen' required='N' />\r\n <field name='EncryptedNewPassword' required='N' />\r\n <field name='SessionStatus' required='N' />\r\n <field name='DefaultApplVerID' required='N' />\r\n <field name='DefaultApplExtID' required='N' />\r\n <field name='DefaultCstmApplVerID' required='N' />\r\n <field name='Text' required='N' />\r\n <field name='EncodedTextLen' required='N' />\r\n <field name='EncodedText' required='N' />\r\n </message>\r\n */\r\ntest('check logon fields', () => {\r\n const logon = definitions.message.get('Logon')\r\n expect(logon).toBeTruthy()\r\n let index = 0\r\n setHelper.isComponent(logon, index++, 'StandardHeader', true)\r\n setHelper.isSimple(logon, index++, 'EncryptMethod', true)\r\n setHelper.isSimple(logon, index++, 'HeartBtInt', true)\r\n setHelper.isSimple(logon, index++, 'RawDataLength', false)\r\n setHelper.isSimple(logon, index++, 'RawData', false)\r\n setHelper.isSimple(logon, index++, 'ResetSeqNumFlag', false)\r\n setHelper.isSimple(logon, index++, 'NextExpectedMsgSeqNum', false)\r\n setHelper.isSimple(logon, index++, 'MaxMessageSize', false)\r\n setHelper.isGroup(logon, index++, 'NoMsgTypes', false)\r\n setHelper.isSimple(logon, index++, 'TestMessageIndicator', false)\r\n setHelper.isSimple(logon, index++, 'Username', false)\r\n setHelper.isSimple(logon, index++, 'Password', false)\r\n setHelper.isSimple(logon, index++, 'NewPassword', false)\r\n setHelper.isSimple(logon, index++, 'EncryptedPasswordMethod', false)\r\n setHelper.isSimple(logon, index++, 'EncryptedPasswordLen', false)\r\n setHelper.isSimple(logon, index++, 'EncryptedPassword', false)\r\n setHelper.isSimple(logon, index++, 'EncryptedNewPasswordLen', false)\r\n setHelper.isSimple(logon, index++, 'EncryptedNewPassword', false)\r\n setHelper.isSimple(logon, index++, 'SessionStatus', false)\r\n setHelper.isSimple(logon, index++, 'DefaultApplVerID', false)\r\n setHelper.isSimple(logon, index++, 'DefaultApplExtID', false)\r\n setHelper.isSimple(logon, index++, 'DefaultCstmApplVerID', false)\r\n setHelper.isSimple(logon, index++, 'Text', false)\r\n setHelper.isSimple(logon, index++, 'EncodedTextLen', false)\r\n setHelper.isSimple(logon, index++, 'EncodedText', false)\r\n expect(logon?.containsRaw).toBeTruthy()\r\n})\r\n\r\ntest('check message existance', () => {\r\n const mt = definitions.simple.get('MsgType')\r\n expect(mt?.isEnum()).toBeTruthy()\r\n expect(mt?.enums.get('0')).toBeTruthy()\r\n expect(mt?.enums.get('1')).toBeTruthy()\r\n Array.from(mt?.enums.keys() ?? []).forEach(k => {\r\n if (k === 'n') return\r\n const m = definitions.message.get(k)\r\n expect(k).toBeTruthy()\r\n expect(m).toBeTruthy()\r\n expect(m?.msgType).toEqual(k)\r\n })\r\n})\r\n"]}
@@ -74,25 +74,74 @@ test('end to end logon', () => __awaiter(void 0, void 0, void 0, function* () {
74
74
  test('session send resendRequest when logged on', () => __awaiter(void 0, void 0, void 0, function* () {
75
75
  const runner = new skeleton_runner_1.SkeletonRunner(experiment, 2);
76
76
  const factory = experiment.client.config.factory;
77
- const resend = factory === null || factory === void 0 ? void 0 : factory.resendRequest(1, 2);
77
+ const resend = factory === null || factory === void 0 ? void 0 : factory.resendRequest(1, 1);
78
78
  expect(resend).toBeTruthy();
79
79
  if (!resend)
80
80
  return;
81
81
  runner.sendMsg(types_1.MsgType.ResendRequest, resend);
82
- try {
83
- const cViews = experiment.client.views;
84
- const sViews = experiment.server.views;
85
- yield runner.wait();
86
- const last = experiment.client.views[experiment.client.views.length - 1];
87
- expect(last).toBeTruthy();
88
- const clientResets = countOfType('SequenceReset', cViews);
89
- const serverResets = countOfType('SequenceReset', sViews);
90
- expect(clientResets).toEqual(1);
91
- expect(serverResets).toEqual(0);
92
- }
93
- catch (e) {
94
- expect(true).toEqual(false);
95
- }
82
+ const cViews = experiment.client.views;
83
+ const sViews = experiment.server.views;
84
+ yield runner.wait();
85
+ expect(cViews).toHaveLength(3);
86
+ expect(sViews).toHaveLength(3);
87
+ const resendRequestView = sViews[1];
88
+ expect(resendRequestView.segment.name).toBe('ResendRequest');
89
+ expect(resendRequestView.getTyped('MsgSeqNum')).toBe(2);
90
+ expect(resendRequestView.getTyped('BeginSeqNo')).toBe(1);
91
+ expect(resendRequestView.getTyped('EndSeqNo')).toBe(1);
92
+ const seqResetView = cViews[1];
93
+ expect(seqResetView.segment.name).toBe('SequenceReset');
94
+ expect(seqResetView.getTyped('MsgSeqNum')).toBe(1);
95
+ expect(seqResetView.getTyped('NewSeqNo')).toBe(2);
96
+ expect(seqResetView.getTyped('GapFillFlag')).toBe(true);
97
+ expect(seqResetView.getTyped('PossDupFlag')).toBe(true);
98
+ const logoutSView = sViews[2];
99
+ expect(logoutSView.segment.name).toBe('Logout');
100
+ expect(logoutSView.getTyped('MsgSeqNum')).toBe(3);
101
+ const logoutCView = cViews[2];
102
+ expect(logoutCView.segment.name).toBe('Logout');
103
+ expect(logoutCView.getTyped('MsgSeqNum')).toBe(2);
104
+ const clientResets = countOfType('SequenceReset', cViews);
105
+ const serverResets = countOfType('SequenceReset', sViews);
106
+ console.log('SERVER VIEWS', sViews.map((a => a.toJson())));
107
+ console.log('CLIENT VIEWS', cViews.map((a => a.toJson())));
108
+ expect(clientResets).toEqual(1);
109
+ expect(serverResets).toEqual(0);
110
+ }));
111
+ test('session send resendRequest with endSeqNo = 0 when logged on', () => __awaiter(void 0, void 0, void 0, function* () {
112
+ const runner = new skeleton_runner_1.SkeletonRunner(experiment, 2);
113
+ const factory = experiment.client.config.factory;
114
+ const resend = factory === null || factory === void 0 ? void 0 : factory.resendRequest(1, 0);
115
+ expect(resend).toBeTruthy();
116
+ if (!resend)
117
+ return;
118
+ runner.sendMsg(types_1.MsgType.ResendRequest, resend);
119
+ const cViews = experiment.client.views;
120
+ const sViews = experiment.server.views;
121
+ yield runner.wait();
122
+ expect(cViews).toHaveLength(3);
123
+ expect(sViews).toHaveLength(3);
124
+ const resendRequestView = sViews[1];
125
+ expect(resendRequestView.segment.name).toBe('ResendRequest');
126
+ expect(resendRequestView.getTyped('MsgSeqNum')).toBe(2);
127
+ expect(resendRequestView.getTyped('BeginSeqNo')).toBe(1);
128
+ expect(resendRequestView.getTyped('EndSeqNo')).toBe(0);
129
+ const seqResetView = cViews[1];
130
+ expect(seqResetView.segment.name).toBe('SequenceReset');
131
+ expect(seqResetView.getTyped('MsgSeqNum')).toBe(1);
132
+ expect(seqResetView.getTyped('NewSeqNo')).toBe(2);
133
+ expect(seqResetView.getTyped('GapFillFlag')).toBe(true);
134
+ expect(seqResetView.getTyped('PossDupFlag')).toBe(true);
135
+ const logoutSView = sViews[2];
136
+ expect(logoutSView.segment.name).toBe('Logout');
137
+ expect(logoutSView.getTyped('MsgSeqNum')).toBe(3);
138
+ const logoutCView = cViews[2];
139
+ expect(logoutCView.segment.name).toBe('Logout');
140
+ expect(logoutCView.getTyped('MsgSeqNum')).toBe(2);
141
+ const clientResets = countOfType('SequenceReset', cViews);
142
+ const serverResets = countOfType('SequenceReset', sViews);
143
+ expect(clientResets).toEqual(1);
144
+ expect(serverResets).toEqual(0);
96
145
  }));
97
146
  test('session send logon when logged on', () => __awaiter(void 0, void 0, void 0, function* () {
98
147
  var _d, _e, _f;
@@ -1 +1 @@
1
- {"version":3,"file":"session.test.js","sourceRoot":"","sources":["../../../src/test/ascii/session.test.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,4BAAyB;AAIzB,uCAA0D;AAK1D,wCAAoC;AACpC,kDAA8C;AAC9C,4DAAuD;AAEvD,MAAM,QAAQ,GAAW,iJAAiJ,CAAA;AAC1K,MAAM,SAAS,GAAW,mIAAmI,CAAA;AAE7J,IAAI,KAAY,CAAA;AAChB,IAAI,UAAsB,CAAA;AAE1B,UAAU,CAAC,GAAS,EAAE;IACpB,KAAK,GAAG,IAAI,aAAK,EAAE,CAAA;IACnB,MAAM,KAAK,CAAC,IAAI,EAAE,CAAA;IAClB,UAAU,GAAG,IAAI,uBAAU,CAAC,KAAK,CAAC,CAAA;AACpC,CAAC,CAAA,EAAE,KAAK,CAAC,CAAA;AAET,MAAM,aAAa;IACjB,YACkB,KAAa,EACb,OAAe,EACf,IAAa;QAFb,UAAK,GAAL,KAAK,CAAQ;QACb,YAAO,GAAP,OAAO,CAAQ;QACf,SAAI,GAAJ,IAAI,CAAS;IAC/B,CAAC;CACF;AAED,SAAe,8BAA8B,CAAE,IAAY,EAAE,GAAiB;;QAC5E,OAAO,MAAM,IAAI,OAAO,CAAM,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAChD,MAAM,GAAG,GAAG,UAAU,CAAC,MAAM,CAAC,SAAS,CAAA;YACvC,MAAM,GAAG,GAAG,UAAU,CAAC,MAAM,CAAC,SAAS,CAAA;YACvC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAQ,EAAE,EAAE;gBACvC,MAAM,CAAC,CAAC,CAAC,CAAA;YACX,CAAC,CAAC,CAAA;YACF,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,OAAe,EAAE,IAAa,EAAE,EAAE;gBACxD,OAAO,CAAC,IAAI,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;YAC1D,CAAC,CAAC,CAAA;YACF,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAQ,EAAE,EAAE;gBACpC,MAAM,CAAC,CAAC,CAAC,CAAA;YACX,CAAC,CAAC,CAAA;YACF,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;YAC/B,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,CAAA;QACnC,CAAC,CAAC,CAAA;IACJ,CAAC;CAAA;AAED,SAAe,YAAY,CAAE,gBAAwB,CAAC,EAAE,WAA0B,IAAI;;QACpF,MAAM,MAAM,GAAmB,IAAI,gCAAc,CAAC,UAAU,EAAE,aAAa,CAAC,CAAA;QAC5E,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;QACzB,MAAM,MAAM,CAAC,IAAI,EAAE,CAAA;IACrB,CAAC;CAAA;AAED,IAAI,CAAC,kBAAkB,EAAE,GAAS,EAAE;;IAClC,MAAM,EAAE,GAAG,MAAA,MAAA,MAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,MAAM,0CAAE,MAAM,0CAAE,OAAO,0CAAE,KAAK,EAAY,CAAA;IACjE,MAAM,CAAC,EAAE,CAAC,CAAC,UAAU,EAAE,CAAA;IACvB,IAAI,CAAC,EAAE;QAAE,OAAM;IACf,MAAM,GAAG,GAAkB,MAAM,8BAA8B,CAAC,eAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;IAClF,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;IAChC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IAChC,MAAM,QAAQ,GAAG,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAkB,CAAA;IACpD,MAAM,CAAC,QAAQ,CAAC,CAAC,UAAU,EAAE,CAAA;IAC7B,OAAO,QAAQ,CAAC,cAAc,CAAA;IAC9B,OAAO,QAAQ,CAAC,eAAe,CAAA;IAC/B,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;AAC9B,CAAC,CAAA,CAAC,CAAA;AAEF,IAAI,CAAC,2CAA2C,EAAE,GAAS,EAAE;IAC3D,MAAM,MAAM,GAAmB,IAAI,gCAAc,CAAC,UAAU,EAAE,CAAC,CAAC,CAAA;IAChE,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAA;IAChD,MAAM,MAAM,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IAC3C,MAAM,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,CAAA;IAC3B,IAAI,CAAC,MAAM;QAAE,OAAM;IACnB,MAAM,CAAC,OAAO,CAAC,eAAO,CAAC,aAAa,EAAE,MAAM,CAAC,CAAA;IAC7C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAA;QACtC,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAA;QACtC,MAAM,MAAM,CAAC,IAAI,EAAE,CAAA;QACnB,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;QACxE,MAAM,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,CAAA;QACzB,MAAM,YAAY,GAAG,WAAW,CAAC,eAAe,EAAE,MAAM,CAAC,CAAA;QACzD,MAAM,YAAY,GAAG,WAAW,CAAC,eAAe,EAAE,MAAM,CAAC,CAAA;QACzD,MAAM,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;QAC/B,MAAM,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;IACjC,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;IAC7B,CAAC;AACH,CAAC,CAAA,CAAC,CAAA;AAEF,IAAI,CAAC,mCAAmC,EAAE,GAAS,EAAE;;IACnD,MAAM,MAAM,GAAmB,IAAI,gCAAc,CAAC,UAAU,EAAE,CAAC,CAAC,CAAA;IAChE,MAAM,KAAK,GAAG,MAAA,MAAA,MAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,MAAM,0CAAE,MAAM,0CAAE,OAAO,0CAAE,KAAK,EAAE,CAAA;IAC1D,MAAM,CAAC,KAAK,CAAC,CAAC,UAAU,EAAE,CAAA;IAC1B,IAAI,CAAC,KAAK;QAAE,OAAM;IAClB,MAAM,CAAC,OAAO,CAAC,eAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;IACpC,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,IAAI,EAAE,CAAA;IACrB,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;IACpD,CAAC;AACH,CAAC,CAAA,CAAC,CAAA;AAEF,IAAI,CAAC,wBAAwB,EAAE,GAAS,EAAE;IACxC,MAAM,YAAY,EAAE,CAAA;IACpB,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAA;IACtC,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAA;IAEtC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;IAClD,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;IAGlD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;IAChC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;IAEhC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IAC/C,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;IAEhD,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IAC/C,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;AAClD,CAAC,CAAA,CAAC,CAAA;AAEF,SAAS,WAAW,CAAE,KAAgB;IACpC,MAAM,KAAK,GAAa,KAAK,CAAC,GAAG,CAAC,CAAC,CAAU,EAAE,EAAE,eAAC,OAAA,MAAC,MAAA,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,0CAAE,QAAQ,EAAsB,0CAAE,SAAS,CAAA,EAAA,CAAC,CAAA;IAC1H,MAAM,CAAC,KAAK,CAAC,CAAC,UAAU,EAAE,CAAA;IAC1B,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAS,EAAE,MAAc,EAAE,EAAE;QACvD,OAAO,MAAM,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;IACzC,CAAC,EAAE,CAAC,CAAC,CAAA;IACL,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;AACrC,CAAC;AAED,IAAI,CAAC,WAAW,EAAE,GAAS,EAAE;IAC3B,MAAM,YAAY,EAAE,CAAA;IACpB,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAA;IACtC,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAA;IAEtC,MAAM,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IACxC,MAAM,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IACxC,WAAW,CAAC,MAAM,CAAC,CAAA;IACnB,WAAW,CAAC,MAAM,CAAC,CAAA;AACrB,CAAC,CAAA,CAAC,CAAA;AAEF,SAAS,WAAW,CAAE,CAAsB,EAAE,IAAY,EAAE,CAAe;IACzE,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,gBAAgB,CAAC,CAAC,CAAC;YACtB,MAAM,GAAG,GAAG,CAAoB,CAAA;YAChC,IAAI,GAAG,CAAC,SAAS,KAAK,CAAC,EAAE,CAAC;gBACxB,GAAG,CAAC,SAAS,GAAG,CAAC,CAAA;YACnB,CAAC;YACD,MAAK;QACP,CAAC;IACH,CAAC;IACD,OAAO,CAAC,CAAA;AACV,CAAC;AAED,IAAI,CAAC,mBAAmB,EAAE,GAAS,EAAE;IACnC,UAAU,CAAC,aAAa,CAAC,OAAO,GAAG,WAAW,CAAA;IAC9C,MAAM,YAAY,EAAE,CAAA;IACpB,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAA;IACtC,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAA;IAEtC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;IAChC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IAC/C,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;IAChC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IAC/C,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;AAClD,CAAC,CAAA,CAAC,CAAA;AAEF,SAAS,WAAW,CAAE,IAAY,EAAE,KAAgB;IAClD,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAS,EAAE,CAAU,EAAE,EAAE;QAC5C,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAC5C,CAAC,EAAE,CAAC,CAAC,CAAA;AACP,CAAC;AAED,SAAS,8BAA8B,CAAE,CAAsB,EAAE,IAAY,EAAE,CAAe;IAC5F,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,GAAG,CAAC,CAAC,CAAC;YACT,MAAM,KAAK,GAAG,CAAW,CAAA;YAEzB,OAAO,KAAK,CAAC,UAAU,CAAA;YACvB,MAAK;QACP,CAAC;IACH,CAAC;IACD,OAAO,CAAC,CAAA;AACV,CAAC;AAED,IAAI,CAAC,iCAAiC,EAAE,GAAS,EAAE;IACjD,UAAU,CAAC,aAAa,CAAC,OAAO,GAAG,8BAA8B,CAAA;IACjE,MAAM,YAAY,CAAC,CAAC,CAAC,CAAA;IAErB,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAA;IACtC,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAA;IACtC,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IACzC,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IACzC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;IAChD,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IAC/C,MAAM,MAAM,GAAY,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAa,CAAA;IACvD,MAAM,CAAC,MAAM,CAAC,mBAAmB,KAAK,2BAAmB,CAAC,kBAAkB,CAAC,CAAA;IAC7E,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,oCAAoC,CAAC,CAAA;AACnE,CAAC,CAAA,EAAE,KAAK,CAAC,CAAA;AAIT,SAAe,cAAc,CAAE,UAAsB,EAAE,OAAe;;QACpE,MAAM,YAAY,CAAC,CAAC,EAAE,OAAO,CAAC,CAAA;QAC9B,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAA;QACtC,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAA;QAEtC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;QAChC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;QAChC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;QAC/C,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;QAChD,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IACjD,CAAC;CAAA;AAED,IAAI,CAAC,yBAAyB,EAAE,GAAS,EAAE;IACzC,MAAM,EAAE,GAAG,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,WAAkC,CAAA;IACzE,MAAM,OAAO,GAAG,QAAQ;SACrB,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC;SACxB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC,CAAA;IAC5C,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAA;IACtC,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAA;IACtC,MAAM,cAAc,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;IACzC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;IACjD,MAAM,MAAM,GAAY,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAa,CAAA;IACvD,MAAM,CAAC,MAAM,CAAC,mBAAmB,KAAK,2BAAmB,CAAC,cAAc,CAAC,CAAA;IACzE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAA;AACnD,CAAC,CAAA,EAAE,KAAK,CAAC,CAAA;AAET,IAAI,CAAC,uBAAuB,EAAE,GAAS,EAAE;IACvC,MAAM,EAAE,GAAG,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,WAAkC,CAAA;IACzE,MAAM,OAAO,GAAG,SAAS;SACtB,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC;SACvB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC,CAAA;IAC5C,MAAM,YAAY,CAAC,CAAC,EAAE,OAAO,CAAC,CAAA;IAC9B,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAA;IACtC,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAA;IACtC,MAAM,cAAc,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;IACzC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;IACnD,MAAM,MAAM,GAAY,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAa,CAAA;IACxE,MAAM,CAAC,MAAM,CAAC,mBAAmB,KAAK,2BAAmB,CAAC,gBAAgB,CAAC,CAAA;IAC3E,WAAW,CAAC,MAAM,CAAC,CAAA;IACnB,WAAW,CAAC,MAAM,CAAC,CAAA;AACrB,CAAC,CAAA,EAAE,KAAK,CAAC,CAAA;AAET,IAAI,CAAC,+BAA+B,EAAE,GAAS,EAAE;IAC/C,MAAM,EAAE,GAAG,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,WAAkC,CAAA;IACzE,MAAM,OAAO,GAAG,SAAS;SACtB,OAAO,CAAC,cAAc,EAAE,cAAc,CAAC;SACvC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC,CAAA;IAC5C,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAA;IACtC,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAA;IACtC,MAAM,cAAc,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;IACzC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;IACnD,MAAM,MAAM,GAAY,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAa,CAAA;IACvD,MAAM,CAAC,MAAM,CAAC,mBAAmB,KAAK,2BAAmB,CAAC,aAAa,CAAC,CAAA;IACxE,WAAW,CAAC,MAAM,CAAC,CAAA;IACnB,WAAW,CAAC,MAAM,CAAC,CAAA;AACrB,CAAC,CAAA,EAAE,KAAK,CAAC,CAAA;AAGT,IAAI,CAAC,6BAA6B,EAAE,GAAS,EAAE;IAC7C,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,UAAU,CAAA;IAC9D,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,UAAU,GAAG,CAAC,CAAA;IACnD,MAAM,YAAY,CAAC,CAAC,CAAC,CAAA;IACrB,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAA;IACtC,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAA;IAEtC,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IACzC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IACvC,MAAM,wBAAwB,GAAG,WAAW,CAAC,WAAW,EAAE,MAAM,CAAC,CAAA;IACjE,MAAM,CAAC,wBAAwB,IAAI,CAAC,IAAI,wBAAwB,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IACpF,WAAW,CAAC,MAAM,CAAC,CAAA;IACnB,WAAW,CAAC,MAAM,CAAC,CAAA;IACnB,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,UAAU,GAAG,MAAM,CAAA;AAC1D,CAAC,CAAA,EAAE,KAAK,CAAC,CAAA;AAET,IAAI,CAAC,6BAA6B,EAAE,GAAS,EAAE;IAC7C,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,UAAU,CAAA;IAC9D,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,UAAU,GAAG,CAAC,CAAA;IACnD,MAAM,YAAY,CAAC,CAAC,CAAC,CAAA;IAErB,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAA;IACtC,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAA;IACtC,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IACzC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IACvC,MAAM,wBAAwB,GAAG,WAAW,CAAC,WAAW,EAAE,MAAM,CAAC,CAAA;IACjE,MAAM,CAAC,wBAAwB,IAAI,CAAC,IAAI,wBAAwB,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IACpF,WAAW,CAAC,MAAM,CAAC,CAAA;IACnB,WAAW,CAAC,MAAM,CAAC,CAAA;IACnB,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,UAAU,GAAG,MAAM,CAAA;AAC1D,CAAC,CAAA,EAAE,KAAK,CAAC,CAAA;AAET,IAAI,CAAC,yBAAyB,EAAE,GAAS,EAAE;IACzC,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,UAAU,CAAA;IAC9D,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,UAAU,GAAG,CAAC,CAAA;IACnD,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,UAAU,GAAG,CAAC,CAAA;IACnD,MAAM,YAAY,CAAC,CAAC,CAAC,CAAA;IACrB,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAA;IACtC,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAA;IAEtC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IACvC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IACvC,MAAM,wBAAwB,GAAG,WAAW,CAAC,WAAW,EAAE,MAAM,CAAC,CAAA;IACjE,MAAM,yBAAyB,GAAG,WAAW,CAAC,aAAa,EAAE,MAAM,CAAC,CAAA;IACpE,MAAM,WAAW,GAAG,wBAAwB,GAAG,yBAAyB,CAAA;IACxE,MAAM,wBAAwB,GAAG,WAAW,CAAC,WAAW,EAAE,MAAM,CAAC,CAAA;IACjE,MAAM,yBAAyB,GAAG,WAAW,CAAC,aAAa,EAAE,MAAM,CAAC,CAAA;IACpE,MAAM,WAAW,GAAG,wBAAwB,GAAG,yBAAyB,CAAA;IACxE,MAAM,CAAC,WAAW,IAAI,CAAC,IAAI,wBAAwB,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IACvE,MAAM,CAAC,WAAW,IAAI,CAAC,IAAI,wBAAwB,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IACvE,WAAW,CAAC,MAAM,CAAC,CAAA;IACnB,WAAW,CAAC,MAAM,CAAC,CAAA;IACnB,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,UAAU,GAAG,MAAM,CAAA;IACxD,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,UAAU,GAAG,MAAM,CAAA;AAC1D,CAAC,CAAA,EAAE,KAAK,CAAC,CAAA","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\r\nlet experiment: Experiment\r\n\r\nbeforeEach(async () => {\r\n setup = new Setup()\r\n await setup.init()\r\n experiment = new Experiment(setup)\r\n}, 30000)\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\nasync function clientToServerWaitFirstMessage (type: string, obj: ILooseObject): Promise<ParsingResult> {\r\n return await 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 = null): Promise<void> {\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() as ILogon\r\n expect(lo).toBeTruthy()\r\n if (!lo) return\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() as ILooseObject\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 expect(resend).toBeTruthy()\r\n if (!resend) return\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 expect(logon).toBeTruthy()\r\n if (!logon) return\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[]): void {\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 (_: 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 (_: ISessionDescription, type: string, o: ILooseObject): ILooseObject {\r\n switch (type) {\r\n case 'A': {\r\n const logon = o as ILogon\r\n // @ts-expect-error - this is for test purposed\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() as IReject\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\nasync function runCheckReject (experiment: Experiment, changed: string): Promise<void> {\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}\r\n\r\ntest('client unknown msg type', async () => {\r\n const at = experiment.client.transport.transmitter as AsciiMsgTransmitter\r\n const changed = logonMsg\r\n .replace('35=A', '35=ZZ')\r\n .replace('34=1', `34=${at.msgSeqNum + 1}`)\r\n const cviews = experiment.client.views\r\n const sviews = experiment.server.views\r\n await runCheckReject(experiment, changed)\r\n expect(sviews[1].segment.name).toEqual('unknown')\r\n const reject: IReject = cviews[1].toObject() as IReject\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\r\n .replace('112=', '999=')\r\n .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 await runCheckReject(experiment, changed)\r\n expect(sviews[1].segment.name).toEqual('Heartbeat')\r\n const reject: IReject = experiment.client.views[1].toObject() as IReject\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\r\n .replace('49=init-comp', '49=init-not!')\r\n .replace('34=1', `34=${at.msgSeqNum + 1}`)\r\n const cviews = experiment.client.views\r\n const sviews = experiment.server.views\r\n await runCheckReject(experiment, changed)\r\n expect(sviews[1].segment.name).toEqual('Heartbeat')\r\n const reject: IReject = cviews[1].toObject() as IReject\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
+ {"version":3,"file":"session.test.js","sourceRoot":"","sources":["../../../src/test/ascii/session.test.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,4BAAyB;AAIzB,uCAA0D;AAK1D,wCAAoC;AACpC,kDAA8C;AAC9C,4DAAuD;AAEvD,MAAM,QAAQ,GAAW,iJAAiJ,CAAA;AAC1K,MAAM,SAAS,GAAW,mIAAmI,CAAA;AAE7J,IAAI,KAAY,CAAA;AAChB,IAAI,UAAsB,CAAA;AAE1B,UAAU,CAAC,GAAS,EAAE;IACpB,KAAK,GAAG,IAAI,aAAK,EAAE,CAAA;IACnB,MAAM,KAAK,CAAC,IAAI,EAAE,CAAA;IAClB,UAAU,GAAG,IAAI,uBAAU,CAAC,KAAK,CAAC,CAAA;AACpC,CAAC,CAAA,EAAE,KAAK,CAAC,CAAA;AAET,MAAM,aAAa;IACjB,YACkB,KAAa,EACb,OAAe,EACf,IAAa;QAFb,UAAK,GAAL,KAAK,CAAQ;QACb,YAAO,GAAP,OAAO,CAAQ;QACf,SAAI,GAAJ,IAAI,CAAS;IAC/B,CAAC;CACF;AAED,SAAe,8BAA8B,CAAE,IAAY,EAAE,GAAiB;;QAC5E,OAAO,MAAM,IAAI,OAAO,CAAM,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAChD,MAAM,GAAG,GAAG,UAAU,CAAC,MAAM,CAAC,SAAS,CAAA;YACvC,MAAM,GAAG,GAAG,UAAU,CAAC,MAAM,CAAC,SAAS,CAAA;YACvC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAQ,EAAE,EAAE;gBACvC,MAAM,CAAC,CAAC,CAAC,CAAA;YACX,CAAC,CAAC,CAAA;YACF,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,OAAe,EAAE,IAAa,EAAE,EAAE;gBACxD,OAAO,CAAC,IAAI,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;YAC1D,CAAC,CAAC,CAAA;YACF,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAQ,EAAE,EAAE;gBACpC,MAAM,CAAC,CAAC,CAAC,CAAA;YACX,CAAC,CAAC,CAAA;YACF,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;YAC/B,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,CAAA;QACnC,CAAC,CAAC,CAAA;IACJ,CAAC;CAAA;AAED,SAAe,YAAY,CAAE,gBAAwB,CAAC,EAAE,WAA0B,IAAI;;QACpF,MAAM,MAAM,GAAmB,IAAI,gCAAc,CAAC,UAAU,EAAE,aAAa,CAAC,CAAA;QAC5E,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;QACzB,MAAM,MAAM,CAAC,IAAI,EAAE,CAAA;IACrB,CAAC;CAAA;AAED,IAAI,CAAC,kBAAkB,EAAE,GAAS,EAAE;;IAClC,MAAM,EAAE,GAAG,MAAA,MAAA,MAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,MAAM,0CAAE,MAAM,0CAAE,OAAO,0CAAE,KAAK,EAAY,CAAA;IACjE,MAAM,CAAC,EAAE,CAAC,CAAC,UAAU,EAAE,CAAA;IACvB,IAAI,CAAC,EAAE;QAAE,OAAM;IACf,MAAM,GAAG,GAAkB,MAAM,8BAA8B,CAAC,eAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;IAClF,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;IAChC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IAChC,MAAM,QAAQ,GAAG,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAkB,CAAA;IACpD,MAAM,CAAC,QAAQ,CAAC,CAAC,UAAU,EAAE,CAAA;IAC7B,OAAO,QAAQ,CAAC,cAAc,CAAA;IAC9B,OAAO,QAAQ,CAAC,eAAe,CAAA;IAC/B,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;AAC9B,CAAC,CAAA,CAAC,CAAA;AAEF,IAAI,CAAC,2CAA2C,EAAE,GAAS,EAAE;IAC3D,MAAM,MAAM,GAAmB,IAAI,gCAAc,CAAC,UAAU,EAAE,CAAC,CAAC,CAAA;IAChE,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAA;IAChD,MAAM,MAAM,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IAC3C,MAAM,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,CAAA;IAC3B,IAAI,CAAC,MAAM;QAAE,OAAM;IACnB,MAAM,CAAC,OAAO,CAAC,eAAO,CAAC,aAAa,EAAE,MAAM,CAAC,CAAA;IAE7C,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAA;IACtC,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAA;IACtC,MAAM,MAAM,CAAC,IAAI,EAAE,CAAA;IAEnB,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;IAC9B,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;IAE9B,MAAM,iBAAiB,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;IACnC,MAAM,CAAC,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;IAC5D,MAAM,CAAC,iBAAiB,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACvD,MAAM,CAAC,iBAAiB,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACxD,MAAM,CAAC,iBAAiB,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAEtD,MAAM,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;IAC9B,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;IACvD,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAClD,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjD,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACvD,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAEvD,MAAM,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;IAC7B,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IAC/C,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAEjD,MAAM,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;IAC7B,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IAC/C,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAEjD,MAAM,YAAY,GAAG,WAAW,CAAC,eAAe,EAAE,MAAM,CAAC,CAAA;IACzD,MAAM,YAAY,GAAG,WAAW,CAAC,eAAe,EAAE,MAAM,CAAC,CAAA;IACzD,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;IAC3D,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;IAC3D,MAAM,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;IAC/B,MAAM,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;AACjC,CAAC,CAAA,CAAC,CAAA;AAEF,IAAI,CAAC,6DAA6D,EAAE,GAAS,EAAE;IAC7E,MAAM,MAAM,GAAmB,IAAI,gCAAc,CAAC,UAAU,EAAE,CAAC,CAAC,CAAA;IAChE,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAA;IAEhD,MAAM,MAAM,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IAC3C,MAAM,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,CAAA;IAC3B,IAAI,CAAC,MAAM;QAAE,OAAM;IACnB,MAAM,CAAC,OAAO,CAAC,eAAO,CAAC,aAAa,EAAE,MAAM,CAAC,CAAA;IAE7C,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAA;IACtC,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAA;IACtC,MAAM,MAAM,CAAC,IAAI,EAAE,CAAA;IAEnB,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;IAC9B,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;IAE9B,MAAM,iBAAiB,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;IACnC,MAAM,CAAC,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;IAC5D,MAAM,CAAC,iBAAiB,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACvD,MAAM,CAAC,iBAAiB,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACxD,MAAM,CAAC,iBAAiB,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAEtD,MAAM,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;IAC9B,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;IACvD,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAClD,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjD,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACvD,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAEvD,MAAM,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;IAC7B,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IAC/C,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAEjD,MAAM,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;IAC7B,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IAC/C,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAEjD,MAAM,YAAY,GAAG,WAAW,CAAC,eAAe,EAAE,MAAM,CAAC,CAAA;IACzD,MAAM,YAAY,GAAG,WAAW,CAAC,eAAe,EAAE,MAAM,CAAC,CAAA;IACzD,MAAM,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;IAC/B,MAAM,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;AACjC,CAAC,CAAA,CAAC,CAAA;AAEF,IAAI,CAAC,mCAAmC,EAAE,GAAS,EAAE;;IACnD,MAAM,MAAM,GAAmB,IAAI,gCAAc,CAAC,UAAU,EAAE,CAAC,CAAC,CAAA;IAChE,MAAM,KAAK,GAAG,MAAA,MAAA,MAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,MAAM,0CAAE,MAAM,0CAAE,OAAO,0CAAE,KAAK,EAAE,CAAA;IAC1D,MAAM,CAAC,KAAK,CAAC,CAAC,UAAU,EAAE,CAAA;IAC1B,IAAI,CAAC,KAAK;QAAE,OAAM;IAClB,MAAM,CAAC,OAAO,CAAC,eAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;IACpC,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,IAAI,EAAE,CAAA;IACrB,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;IACpD,CAAC;AACH,CAAC,CAAA,CAAC,CAAA;AAEF,IAAI,CAAC,wBAAwB,EAAE,GAAS,EAAE;IACxC,MAAM,YAAY,EAAE,CAAA;IACpB,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAA;IACtC,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAA;IAEtC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;IAClD,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;IAGlD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;IAChC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;IAEhC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IAC/C,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;IAEhD,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IAC/C,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;AAClD,CAAC,CAAA,CAAC,CAAA;AAEF,SAAS,WAAW,CAAE,KAAgB;IACpC,MAAM,KAAK,GAAa,KAAK,CAAC,GAAG,CAAC,CAAC,CAAU,EAAE,EAAE,eAAC,OAAA,MAAC,MAAA,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,0CAAE,QAAQ,EAAsB,0CAAE,SAAS,CAAA,EAAA,CAAC,CAAA;IAC1H,MAAM,CAAC,KAAK,CAAC,CAAC,UAAU,EAAE,CAAA;IAC1B,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAS,EAAE,MAAc,EAAE,EAAE;QACvD,OAAO,MAAM,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;IACzC,CAAC,EAAE,CAAC,CAAC,CAAA;IACL,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;AACrC,CAAC;AAED,IAAI,CAAC,WAAW,EAAE,GAAS,EAAE;IAC3B,MAAM,YAAY,EAAE,CAAA;IACpB,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAA;IACtC,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAA;IAEtC,MAAM,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IACxC,MAAM,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IACxC,WAAW,CAAC,MAAM,CAAC,CAAA;IACnB,WAAW,CAAC,MAAM,CAAC,CAAA;AACrB,CAAC,CAAA,CAAC,CAAA;AAEF,SAAS,WAAW,CAAE,CAAsB,EAAE,IAAY,EAAE,CAAe;IACzE,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,gBAAgB,CAAC,CAAC,CAAC;YACtB,MAAM,GAAG,GAAG,CAAoB,CAAA;YAChC,IAAI,GAAG,CAAC,SAAS,KAAK,CAAC,EAAE,CAAC;gBACxB,GAAG,CAAC,SAAS,GAAG,CAAC,CAAA;YACnB,CAAC;YACD,MAAK;QACP,CAAC;IACH,CAAC;IACD,OAAO,CAAC,CAAA;AACV,CAAC;AAED,IAAI,CAAC,mBAAmB,EAAE,GAAS,EAAE;IACnC,UAAU,CAAC,aAAa,CAAC,OAAO,GAAG,WAAW,CAAA;IAC9C,MAAM,YAAY,EAAE,CAAA;IACpB,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAA;IACtC,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAA;IAEtC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;IAChC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IAC/C,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;IAChC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IAC/C,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;AAClD,CAAC,CAAA,CAAC,CAAA;AAEF,SAAS,WAAW,CAAE,IAAY,EAAE,KAAgB;IAClD,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAS,EAAE,CAAU,EAAE,EAAE;QAC5C,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAC5C,CAAC,EAAE,CAAC,CAAC,CAAA;AACP,CAAC;AAED,SAAS,8BAA8B,CAAE,CAAsB,EAAE,IAAY,EAAE,CAAe;IAC5F,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,GAAG,CAAC,CAAC,CAAC;YACT,MAAM,KAAK,GAAG,CAAW,CAAA;YAEzB,OAAO,KAAK,CAAC,UAAU,CAAA;YACvB,MAAK;QACP,CAAC;IACH,CAAC;IACD,OAAO,CAAC,CAAA;AACV,CAAC;AAED,IAAI,CAAC,iCAAiC,EAAE,GAAS,EAAE;IACjD,UAAU,CAAC,aAAa,CAAC,OAAO,GAAG,8BAA8B,CAAA;IACjE,MAAM,YAAY,CAAC,CAAC,CAAC,CAAA;IAErB,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAA;IACtC,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAA;IACtC,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IACzC,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IACzC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;IAChD,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IAC/C,MAAM,MAAM,GAAY,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAa,CAAA;IACvD,MAAM,CAAC,MAAM,CAAC,mBAAmB,KAAK,2BAAmB,CAAC,kBAAkB,CAAC,CAAA;IAC7E,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,oCAAoC,CAAC,CAAA;AACnE,CAAC,CAAA,EAAE,KAAK,CAAC,CAAA;AAIT,SAAe,cAAc,CAAE,UAAsB,EAAE,OAAe;;QACpE,MAAM,YAAY,CAAC,CAAC,EAAE,OAAO,CAAC,CAAA;QAC9B,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAA;QACtC,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAA;QAEtC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;QAChC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;QAChC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;QAC/C,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;QAChD,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IACjD,CAAC;CAAA;AAED,IAAI,CAAC,yBAAyB,EAAE,GAAS,EAAE;IACzC,MAAM,EAAE,GAAG,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,WAAkC,CAAA;IACzE,MAAM,OAAO,GAAG,QAAQ;SACrB,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC;SACxB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC,CAAA;IAC5C,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAA;IACtC,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAA;IACtC,MAAM,cAAc,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;IACzC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;IACjD,MAAM,MAAM,GAAY,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAa,CAAA;IACvD,MAAM,CAAC,MAAM,CAAC,mBAAmB,KAAK,2BAAmB,CAAC,cAAc,CAAC,CAAA;IACzE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAA;AACnD,CAAC,CAAA,EAAE,KAAK,CAAC,CAAA;AAET,IAAI,CAAC,uBAAuB,EAAE,GAAS,EAAE;IACvC,MAAM,EAAE,GAAG,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,WAAkC,CAAA;IACzE,MAAM,OAAO,GAAG,SAAS;SACtB,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC;SACvB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC,CAAA;IAC5C,MAAM,YAAY,CAAC,CAAC,EAAE,OAAO,CAAC,CAAA;IAC9B,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAA;IACtC,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAA;IACtC,MAAM,cAAc,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;IACzC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;IACnD,MAAM,MAAM,GAAY,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAa,CAAA;IACxE,MAAM,CAAC,MAAM,CAAC,mBAAmB,KAAK,2BAAmB,CAAC,gBAAgB,CAAC,CAAA;IAC3E,WAAW,CAAC,MAAM,CAAC,CAAA;IACnB,WAAW,CAAC,MAAM,CAAC,CAAA;AACrB,CAAC,CAAA,EAAE,KAAK,CAAC,CAAA;AAET,IAAI,CAAC,+BAA+B,EAAE,GAAS,EAAE;IAC/C,MAAM,EAAE,GAAG,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,WAAkC,CAAA;IACzE,MAAM,OAAO,GAAG,SAAS;SACtB,OAAO,CAAC,cAAc,EAAE,cAAc,CAAC;SACvC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC,CAAA;IAC5C,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAA;IACtC,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAA;IACtC,MAAM,cAAc,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;IACzC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;IACnD,MAAM,MAAM,GAAY,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAa,CAAA;IACvD,MAAM,CAAC,MAAM,CAAC,mBAAmB,KAAK,2BAAmB,CAAC,aAAa,CAAC,CAAA;IACxE,WAAW,CAAC,MAAM,CAAC,CAAA;IACnB,WAAW,CAAC,MAAM,CAAC,CAAA;AACrB,CAAC,CAAA,EAAE,KAAK,CAAC,CAAA;AAGT,IAAI,CAAC,6BAA6B,EAAE,GAAS,EAAE;IAC7C,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,UAAU,CAAA;IAC9D,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,UAAU,GAAG,CAAC,CAAA;IACnD,MAAM,YAAY,CAAC,CAAC,CAAC,CAAA;IACrB,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAA;IACtC,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAA;IAEtC,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IACzC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IACvC,MAAM,wBAAwB,GAAG,WAAW,CAAC,WAAW,EAAE,MAAM,CAAC,CAAA;IACjE,MAAM,CAAC,wBAAwB,IAAI,CAAC,IAAI,wBAAwB,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IACpF,WAAW,CAAC,MAAM,CAAC,CAAA;IACnB,WAAW,CAAC,MAAM,CAAC,CAAA;IACnB,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,UAAU,GAAG,MAAM,CAAA;AAC1D,CAAC,CAAA,EAAE,KAAK,CAAC,CAAA;AAET,IAAI,CAAC,6BAA6B,EAAE,GAAS,EAAE;IAC7C,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,UAAU,CAAA;IAC9D,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,UAAU,GAAG,CAAC,CAAA;IACnD,MAAM,YAAY,CAAC,CAAC,CAAC,CAAA;IAErB,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAA;IACtC,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAA;IACtC,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IACzC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IACvC,MAAM,wBAAwB,GAAG,WAAW,CAAC,WAAW,EAAE,MAAM,CAAC,CAAA;IACjE,MAAM,CAAC,wBAAwB,IAAI,CAAC,IAAI,wBAAwB,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IACpF,WAAW,CAAC,MAAM,CAAC,CAAA;IACnB,WAAW,CAAC,MAAM,CAAC,CAAA;IACnB,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,UAAU,GAAG,MAAM,CAAA;AAC1D,CAAC,CAAA,EAAE,KAAK,CAAC,CAAA;AAET,IAAI,CAAC,yBAAyB,EAAE,GAAS,EAAE;IACzC,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,UAAU,CAAA;IAC9D,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,UAAU,GAAG,CAAC,CAAA;IACnD,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,UAAU,GAAG,CAAC,CAAA;IACnD,MAAM,YAAY,CAAC,CAAC,CAAC,CAAA;IACrB,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAA;IACtC,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAA;IAEtC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IACvC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IACvC,MAAM,wBAAwB,GAAG,WAAW,CAAC,WAAW,EAAE,MAAM,CAAC,CAAA;IACjE,MAAM,yBAAyB,GAAG,WAAW,CAAC,aAAa,EAAE,MAAM,CAAC,CAAA;IACpE,MAAM,WAAW,GAAG,wBAAwB,GAAG,yBAAyB,CAAA;IACxE,MAAM,wBAAwB,GAAG,WAAW,CAAC,WAAW,EAAE,MAAM,CAAC,CAAA;IACjE,MAAM,yBAAyB,GAAG,WAAW,CAAC,aAAa,EAAE,MAAM,CAAC,CAAA;IACpE,MAAM,WAAW,GAAG,wBAAwB,GAAG,yBAAyB,CAAA;IACxE,MAAM,CAAC,WAAW,IAAI,CAAC,IAAI,wBAAwB,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IACvE,MAAM,CAAC,WAAW,IAAI,CAAC,IAAI,wBAAwB,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IACvE,WAAW,CAAC,MAAM,CAAC,CAAA;IACnB,WAAW,CAAC,MAAM,CAAC,CAAA;IACnB,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,UAAU,GAAG,MAAM,CAAA;IACxD,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,UAAU,GAAG,MAAM,CAAA;AAC1D,CAAC,CAAA,EAAE,KAAK,CAAC,CAAA","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\r\nlet experiment: Experiment\r\n\r\nbeforeEach(async () => {\r\n setup = new Setup()\r\n await setup.init()\r\n experiment = new Experiment(setup)\r\n}, 30000)\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\nasync function clientToServerWaitFirstMessage (type: string, obj: ILooseObject): Promise<ParsingResult> {\r\n return await 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 = null): Promise<void> {\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() as ILogon\r\n expect(lo).toBeTruthy()\r\n if (!lo) return\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() as ILooseObject\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, 1)\r\n expect(resend).toBeTruthy()\r\n if (!resend) return\r\n runner.sendMsg(MsgType.ResendRequest, resend)\r\n\r\n const cViews = experiment.client.views\r\n const sViews = experiment.server.views\r\n await runner.wait()\r\n\r\n expect(cViews).toHaveLength(3)\r\n expect(sViews).toHaveLength(3)\r\n\r\n const resendRequestView = sViews[1]\r\n expect(resendRequestView.segment.name).toBe('ResendRequest')\r\n expect(resendRequestView.getTyped('MsgSeqNum')).toBe(2)\r\n expect(resendRequestView.getTyped('BeginSeqNo')).toBe(1)\r\n expect(resendRequestView.getTyped('EndSeqNo')).toBe(1)\r\n\r\n const seqResetView = cViews[1]\r\n expect(seqResetView.segment.name).toBe('SequenceReset')\r\n expect(seqResetView.getTyped('MsgSeqNum')).toBe(1)\r\n expect(seqResetView.getTyped('NewSeqNo')).toBe(2)\r\n expect(seqResetView.getTyped('GapFillFlag')).toBe(true)\r\n expect(seqResetView.getTyped('PossDupFlag')).toBe(true)\r\n\r\n const logoutSView = sViews[2]\r\n expect(logoutSView.segment.name).toBe('Logout')\r\n expect(logoutSView.getTyped('MsgSeqNum')).toBe(3)\r\n\r\n const logoutCView = cViews[2]\r\n expect(logoutCView.segment.name).toBe('Logout')\r\n expect(logoutCView.getTyped('MsgSeqNum')).toBe(2)\r\n\r\n const clientResets = countOfType('SequenceReset', cViews)\r\n const serverResets = countOfType('SequenceReset', sViews)\r\n console.log('SERVER VIEWS', sViews.map((a => a.toJson())));\r\n console.log('CLIENT VIEWS', cViews.map((a => a.toJson())));\r\n expect(clientResets).toEqual(1)\r\n expect(serverResets).toEqual(0)\r\n})\r\n\r\ntest('session send resendRequest with endSeqNo = 0 when logged on', async () => {\r\n const runner: SkeletonRunner = new SkeletonRunner(experiment, 2)\r\n const factory = experiment.client.config.factory\r\n\r\n const resend = factory?.resendRequest(1, 0)\r\n expect(resend).toBeTruthy()\r\n if (!resend) return\r\n runner.sendMsg(MsgType.ResendRequest, resend)\r\n\r\n const cViews = experiment.client.views\r\n const sViews = experiment.server.views\r\n await runner.wait()\r\n\r\n expect(cViews).toHaveLength(3)\r\n expect(sViews).toHaveLength(3)\r\n\r\n const resendRequestView = sViews[1]\r\n expect(resendRequestView.segment.name).toBe('ResendRequest')\r\n expect(resendRequestView.getTyped('MsgSeqNum')).toBe(2)\r\n expect(resendRequestView.getTyped('BeginSeqNo')).toBe(1)\r\n expect(resendRequestView.getTyped('EndSeqNo')).toBe(0)\r\n\r\n const seqResetView = cViews[1]\r\n expect(seqResetView.segment.name).toBe('SequenceReset')\r\n expect(seqResetView.getTyped('MsgSeqNum')).toBe(1)\r\n expect(seqResetView.getTyped('NewSeqNo')).toBe(2)\r\n expect(seqResetView.getTyped('GapFillFlag')).toBe(true)\r\n expect(seqResetView.getTyped('PossDupFlag')).toBe(true)\r\n\r\n const logoutSView = sViews[2]\r\n expect(logoutSView.segment.name).toBe('Logout')\r\n expect(logoutSView.getTyped('MsgSeqNum')).toBe(3)\r\n\r\n const logoutCView = cViews[2]\r\n expect(logoutCView.segment.name).toBe('Logout')\r\n expect(logoutCView.getTyped('MsgSeqNum')).toBe(2)\r\n\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})\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 expect(logon).toBeTruthy()\r\n if (!logon) return\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[]): void {\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 (_: 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 (_: ISessionDescription, type: string, o: ILooseObject): ILooseObject {\r\n switch (type) {\r\n case 'A': {\r\n const logon = o as ILogon\r\n // @ts-expect-error - this is for test purposed\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() as IReject\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\nasync function runCheckReject (experiment: Experiment, changed: string): Promise<void> {\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}\r\n\r\ntest('client unknown msg type', async () => {\r\n const at = experiment.client.transport.transmitter as AsciiMsgTransmitter\r\n const changed = logonMsg\r\n .replace('35=A', '35=ZZ')\r\n .replace('34=1', `34=${at.msgSeqNum + 1}`)\r\n const cviews = experiment.client.views\r\n const sviews = experiment.server.views\r\n await runCheckReject(experiment, changed)\r\n expect(sviews[1].segment.name).toEqual('unknown')\r\n const reject: IReject = cviews[1].toObject() as IReject\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\r\n .replace('112=', '999=')\r\n .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 await runCheckReject(experiment, changed)\r\n expect(sviews[1].segment.name).toEqual('Heartbeat')\r\n const reject: IReject = experiment.client.views[1].toObject() as IReject\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\r\n .replace('49=init-comp', '49=init-not!')\r\n .replace('34=1', `34=${at.msgSeqNum + 1}`)\r\n const cviews = experiment.client.views\r\n const sviews = experiment.server.views\r\n await runCheckReject(experiment, changed)\r\n expect(sviews[1].segment.name).toEqual('Heartbeat')\r\n const reject: IReject = cviews[1].toObject() as IReject\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"]}