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.
- package/appveyor.yml +1 -1
- package/dist/buffer/ascii/ascii-encoder.d.ts +2 -2
- package/dist/buffer/ascii/ascii-encoder.js +1 -1
- package/dist/buffer/ascii/ascii-encoder.js.map +1 -1
- package/dist/buffer/ascii/ascii-parser-state.d.ts +3 -2
- package/dist/buffer/ascii/ascii-parser-state.js +1 -2
- package/dist/buffer/ascii/ascii-parser-state.js.map +1 -1
- package/dist/buffer/ascii/ascii-parser.d.ts +1 -1
- package/dist/buffer/ascii/ascii-parser.js +5 -4
- package/dist/buffer/ascii/ascii-parser.js.map +1 -1
- package/dist/buffer/ascii/ascii-segment-parser.js.map +1 -1
- package/dist/buffer/ascii/ascii-view.d.ts +4 -3
- package/dist/buffer/ascii/ascii-view.js +8 -5
- package/dist/buffer/ascii/ascii-view.js.map +1 -1
- package/dist/buffer/encode-proxy.js +1 -1
- package/dist/buffer/encode-proxy.js.map +1 -1
- package/dist/buffer/fixml/fixml-encoder.d.ts +2 -2
- package/dist/buffer/fixml/fixml-encoder.js +1 -1
- package/dist/buffer/fixml/fixml-encoder.js.map +1 -1
- package/dist/buffer/fixml/fixml-parser.js +2 -2
- package/dist/buffer/fixml/fixml-parser.js.map +1 -1
- package/dist/buffer/fixml/fixml-view.d.ts +3 -2
- package/dist/buffer/fixml/fixml-view.js +5 -4
- package/dist/buffer/fixml/fixml-view.js.map +1 -1
- package/dist/buffer/msg-encoder.d.ts +2 -2
- package/dist/buffer/msg-encoder.js.map +1 -1
- package/dist/buffer/msg-view.d.ts +8 -6
- package/dist/buffer/msg-view.js +10 -8
- package/dist/buffer/msg-view.js.map +1 -1
- package/dist/buffer/segment/segment-description.d.ts +3 -3
- package/dist/buffer/segment/segment-description.js.map +1 -1
- package/dist/buffer/tag/tags.d.ts +2 -5
- package/dist/buffer/tag/tags.js +4 -5
- package/dist/buffer/tag/tags.js.map +1 -1
- package/dist/collections/collection.d.ts +0 -1
- package/dist/collections/collection.js.map +1 -1
- package/dist/collections/index.d.ts +0 -1
- package/dist/collections/index.js +0 -17
- package/dist/collections/index.js.map +1 -1
- package/dist/config/js-fix-config.d.ts +2 -1
- package/dist/config/js-fix-config.js +3 -3
- package/dist/config/js-fix-config.js.map +1 -1
- package/dist/dictionary/compiler/compiler-type.d.ts +3 -3
- package/dist/dictionary/compiler/compiler-type.js.map +1 -1
- package/dist/dictionary/compiler/enum-compiler.js +2 -2
- package/dist/dictionary/compiler/enum-compiler.js.map +1 -1
- package/dist/dictionary/compiler/msg-compiler.d.ts +1 -2
- package/dist/dictionary/compiler/msg-compiler.js +6 -7
- package/dist/dictionary/compiler/msg-compiler.js.map +1 -1
- package/dist/dictionary/contained/contained-component-field.d.ts +1 -1
- package/dist/dictionary/contained/contained-component-field.js.map +1 -1
- package/dist/dictionary/contained/contained-field-set.d.ts +9 -20
- package/dist/dictionary/contained/contained-field-set.js +16 -149
- package/dist/dictionary/contained/contained-field-set.js.map +1 -1
- package/dist/dictionary/contained/contained-group-field.d.ts +1 -1
- package/dist/dictionary/contained/contained-group-field.js.map +1 -1
- package/dist/dictionary/contained/contained-set-builder.d.ts +15 -0
- package/dist/dictionary/contained/contained-set-builder.js +142 -0
- package/dist/dictionary/contained/contained-set-builder.js.map +1 -0
- package/dist/dictionary/contained/contained-set.d.ts +32 -0
- package/dist/{types/FIX.5.0SP2/quickfix/xm_lnon_fix.js → dictionary/contained/contained-set.js} +1 -1
- package/dist/dictionary/contained/contained-set.js.map +1 -0
- package/dist/dictionary/contained/contained-simple-field.d.ts +1 -1
- package/dist/dictionary/contained/contained-simple-field.js.map +1 -1
- package/dist/dictionary/contained/index.d.ts +4 -1
- package/dist/dictionary/contained/index.js +4 -1
- package/dist/dictionary/contained/index.js.map +1 -1
- package/dist/dictionary/definition/category-simple-set.d.ts +1 -2
- package/dist/dictionary/definition/category-simple-set.js +1 -2
- package/dist/dictionary/definition/category-simple-set.js.map +1 -1
- package/dist/dictionary/definition/component-field-definition.d.ts +1 -1
- package/dist/dictionary/definition/component-field-definition.js +2 -2
- package/dist/dictionary/definition/component-field-definition.js.map +1 -1
- package/dist/dictionary/definition/fix-definitions.d.ts +8 -9
- package/dist/dictionary/definition/fix-definitions.js +22 -20
- package/dist/dictionary/definition/fix-definitions.js.map +1 -1
- package/dist/dictionary/definition/group-field-definition.d.ts +1 -1
- package/dist/dictionary/definition/group-field-definition.js +2 -2
- package/dist/dictionary/definition/group-field-definition.js.map +1 -1
- package/dist/dictionary/definition/message-definition.d.ts +1 -1
- package/dist/dictionary/definition/message-definition.js +2 -2
- package/dist/dictionary/definition/message-definition.js.map +1 -1
- package/dist/dictionary/definition/simple-field-definition.d.ts +2 -3
- package/dist/dictionary/definition/simple-field-definition.js +6 -7
- package/dist/dictionary/definition/simple-field-definition.js.map +1 -1
- package/dist/dictionary/parser/fix-repository/repository.js +20 -20
- package/dist/dictionary/parser/fix-repository/repository.js.map +1 -1
- package/dist/dictionary/parser/fixml/components-parser.js +18 -16
- package/dist/dictionary/parser/fixml/components-parser.js.map +1 -1
- package/dist/dictionary/parser/fixml/fields-parser.js +2 -3
- package/dist/dictionary/parser/fixml/fields-parser.js.map +1 -1
- package/dist/dictionary/parser/fixml/include-graph.js +8 -9
- package/dist/dictionary/parser/fixml/include-graph.js.map +1 -1
- package/dist/dictionary/parser/quickfix/field-definition-parser.js.map +1 -1
- package/dist/dictionary/parser/quickfix/message-parser.js +2 -1
- package/dist/dictionary/parser/quickfix/message-parser.js.map +1 -1
- package/dist/dictionary/parser/quickfix/node-parser.js +3 -2
- package/dist/dictionary/parser/quickfix/node-parser.js.map +1 -1
- package/dist/dictionary/parser/quickfix/parse-context.d.ts +3 -3
- package/dist/dictionary/parser/quickfix/parse-context.js.map +1 -1
- package/dist/dictionary/parser/quickfix/parse-progress.d.ts +1 -2
- package/dist/dictionary/parser/quickfix/parse-progress.js +2 -3
- package/dist/dictionary/parser/quickfix/parse-progress.js.map +1 -1
- package/dist/dictionary/parser/quickfix/quick-fix-xml-file-builder.js +4 -5
- package/dist/dictionary/parser/quickfix/quick-fix-xml-file-builder.js.map +1 -1
- package/dist/dictionary/parser/quickfix/quick-fix-xml-file-parser.js +6 -6
- package/dist/dictionary/parser/quickfix/quick-fix-xml-file-parser.js.map +1 -1
- package/dist/dictionary/parser/quickfix/quick-fix-xml-formatter.d.ts +1 -1
- package/dist/dictionary/parser/quickfix/quick-fix-xml-formatter.js.map +1 -1
- package/dist/dictionary/set-reduce.d.ts +2 -2
- package/dist/dictionary/set-reduce.js.map +1 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.js +0 -1
- package/dist/index.js.map +1 -1
- package/dist/jsfix-cmd.js +4 -5
- package/dist/jsfix-cmd.js.map +1 -1
- package/dist/sample/tcp/recovering-skeleton/respawn-acceptor.js +7 -8
- package/dist/sample/tcp/recovering-skeleton/respawn-acceptor.js.map +1 -1
- package/dist/sample/tcp/trade-capture/trade-capture-client.js +3 -4
- package/dist/sample/tcp/trade-capture/trade-capture-client.js.map +1 -1
- package/dist/sample/tcp/trade-capture/trade-capture-server.js.map +1 -1
- package/dist/store/fix-msg-ascii-store-resend.d.ts +4 -3
- package/dist/store/fix-msg-ascii-store-resend.js +21 -5
- package/dist/store/fix-msg-ascii-store-resend.js.map +1 -1
- package/dist/store/fix-msg-memory-store.js +3 -4
- package/dist/store/fix-msg-memory-store.js.map +1 -1
- package/dist/store/fix-msg-store-record.js.map +1 -1
- package/dist/test/ascii/ascii-encoder.test.js.map +1 -1
- package/dist/test/ascii/ascii-store-replay.test.js +14 -1
- package/dist/test/ascii/ascii-store-replay.test.js.map +1 -1
- package/dist/test/ascii/fix-log-replay.test.js.map +1 -1
- package/dist/test/ascii/fix-repo-dict.test.js.map +1 -1
- package/dist/test/ascii/qf-50sp0-dict.test.js +7 -7
- package/dist/test/ascii/qf-50sp0-dict.test.js.map +1 -1
- package/dist/test/ascii/qf-50sp2-dict.test.js +5 -2
- package/dist/test/ascii/qf-50sp2-dict.test.js.map +1 -1
- package/dist/test/ascii/session.test.js +64 -15
- package/dist/test/ascii/session.test.js.map +1 -1
- package/dist/test/env/encoder-test.d.ts +3 -3
- package/dist/test/env/encoder-test.js.map +1 -1
- package/dist/test/env/set-constraint-helper.d.ts +4 -4
- package/dist/test/env/set-constraint-helper.js.map +1 -1
- package/dist/transport/ascii/ascii-msg-transmitter.js.map +1 -1
- package/dist/transport/ascii/ascii-session.js +5 -2
- package/dist/transport/ascii/ascii-session.js.map +1 -1
- package/dist/transport/fixml/fixml-session.js.map +1 -1
- package/dist/transport/http/http-acceptor.js +3 -4
- package/dist/transport/http/http-acceptor.js.map +1 -1
- package/dist/transport/http/http-json-sample-adapter.js +3 -4
- package/dist/transport/http/http-json-sample-adapter.js.map +1 -1
- package/dist/transport/session/dynamic-session-manager.d.ts +8 -0
- package/dist/transport/session/dynamic-session-manager.js +15 -0
- package/dist/transport/session/dynamic-session-manager.js.map +1 -0
- package/dist/transport/session/session-description.d.ts +9 -7
- package/dist/transport/session/session-description.js.map +1 -1
- package/dist/util/json-helper.d.ts +2 -2
- package/dist/util/json-helper.js.map +1 -1
- package/dist/util/message-generator.js +1 -1
- package/dist/util/message-generator.js.map +1 -1
- package/package.json +21 -21
- package/src/buffer/ascii/ascii-encoder.ts +7 -7
- package/src/buffer/ascii/ascii-parser-state.ts +4 -4
- package/src/buffer/ascii/ascii-parser.ts +6 -5
- package/src/buffer/ascii/ascii-segment-parser.ts +2 -2
- package/src/buffer/ascii/ascii-view.ts +9 -7
- package/src/buffer/encode-proxy.ts +9 -9
- package/src/buffer/fixml/fixml-encoder.ts +14 -10
- package/src/buffer/fixml/fixml-parser.ts +5 -5
- package/src/buffer/fixml/fixml-view.ts +5 -5
- package/src/buffer/msg-encoder.ts +3 -3
- package/src/buffer/msg-view.ts +18 -18
- package/src/buffer/segment/segment-description.ts +2 -2
- package/src/buffer/tag/tags.ts +4 -6
- package/src/collections/collection.ts +0 -1
- package/src/collections/index.ts +1 -1
- package/src/config/js-fix-config.ts +3 -2
- package/src/dictionary/compiler/compiler-type.ts +8 -2
- package/src/dictionary/compiler/enum-compiler.ts +2 -2
- package/src/dictionary/compiler/msg-compiler.ts +11 -12
- package/src/dictionary/contained/contained-component-field.ts +1 -1
- package/src/dictionary/contained/contained-field-set.ts +21 -176
- package/src/dictionary/contained/contained-group-field.ts +1 -1
- package/src/dictionary/contained/contained-set-builder.ts +164 -0
- package/src/dictionary/contained/contained-set.ts +83 -0
- package/src/dictionary/contained/contained-simple-field.ts +1 -1
- package/src/dictionary/contained/index.ts +4 -1
- package/src/dictionary/definition/category-simple-set.ts +1 -2
- package/src/dictionary/definition/component-field-definition.ts +1 -1
- package/src/dictionary/definition/fix-definitions.ts +28 -26
- package/src/dictionary/definition/group-field-definition.ts +1 -1
- package/src/dictionary/definition/message-definition.ts +6 -6
- package/src/dictionary/definition/simple-field-definition.ts +9 -10
- package/src/dictionary/parser/fix-repository/repository.ts +47 -40
- package/src/dictionary/parser/fixml/components-parser.ts +41 -38
- package/src/dictionary/parser/fixml/fields-parser.ts +3 -4
- package/src/dictionary/parser/fixml/include-graph.ts +13 -14
- package/src/dictionary/parser/quickfix/field-definition-parser.ts +5 -5
- package/src/dictionary/parser/quickfix/message-parser.ts +7 -5
- package/src/dictionary/parser/quickfix/node-parser.ts +13 -6
- package/src/dictionary/parser/quickfix/parse-context.ts +2 -2
- package/src/dictionary/parser/quickfix/parse-progress.ts +2 -3
- package/src/dictionary/parser/quickfix/quick-fix-xml-file-builder.ts +4 -5
- package/src/dictionary/parser/quickfix/quick-fix-xml-file-parser.ts +10 -12
- package/src/dictionary/parser/quickfix/quick-fix-xml-formatter.ts +1 -1
- package/src/dictionary/set-reduce.ts +3 -3
- package/src/index.ts +0 -1
- package/src/jsfix-cmd.ts +5 -6
- package/src/sample/tcp/recovering-skeleton/respawn-acceptor.ts +7 -8
- package/src/sample/tcp/trade-capture/trade-capture-client.ts +4 -5
- package/src/sample/tcp/trade-capture/trade-capture-server.ts +1 -1
- package/src/store/fix-msg-ascii-store-resend.ts +64 -8
- package/src/store/fix-msg-memory-store.ts +3 -4
- package/src/store/fix-msg-store-record.ts +1 -1
- package/src/transport/ascii/ascii-msg-transmitter.ts +6 -6
- package/src/transport/ascii/ascii-session.ts +11 -7
- package/src/transport/fixml/fixml-session.ts +3 -3
- package/src/transport/http/http-acceptor.ts +4 -5
- package/src/transport/http/http-json-sample-adapter.ts +3 -4
- package/src/transport/session/dynamic-session-manager.ts +16 -0
- package/src/transport/session/session-description.ts +10 -7
- package/src/util/json-helper.ts +3 -3
- package/src/util/message-generator.ts +4 -4
- package/dist/collections/dictionary.d.ts +0 -15
- package/dist/collections/dictionary.js +0 -57
- package/dist/collections/dictionary.js.map +0 -1
- package/dist/types/FIX.5.0SP2/quickfix/execution_acknowledgement.d.ts +0 -31
- package/dist/types/FIX.5.0SP2/quickfix/execution_acknowledgement.js +0 -3
- package/dist/types/FIX.5.0SP2/quickfix/execution_acknowledgement.js.map +0 -1
- package/dist/types/FIX.5.0SP2/quickfix/mass_quote_acknowledgement.d.ts +0 -26
- package/dist/types/FIX.5.0SP2/quickfix/mass_quote_acknowledgement.js +0 -3
- package/dist/types/FIX.5.0SP2/quickfix/mass_quote_acknowledgement.js.map +0 -1
- package/dist/types/FIX.5.0SP2/quickfix/set/hop_grp.d.ts +0 -5
- package/dist/types/FIX.5.0SP2/quickfix/set/hop_grp.js +0 -3
- package/dist/types/FIX.5.0SP2/quickfix/set/hop_grp.js.map +0 -1
- package/dist/types/FIX.5.0SP2/quickfix/set/msg_type_grp.d.ts +0 -8
- package/dist/types/FIX.5.0SP2/quickfix/set/msg_type_grp.js +0 -3
- package/dist/types/FIX.5.0SP2/quickfix/set/msg_type_grp.js.map +0 -1
- package/dist/types/FIX.5.0SP2/quickfix/set/not_affected_orders_grp.d.ts +0 -4
- package/dist/types/FIX.5.0SP2/quickfix/set/not_affected_orders_grp.js +0 -3
- package/dist/types/FIX.5.0SP2/quickfix/set/not_affected_orders_grp.js.map +0 -1
- package/dist/types/FIX.5.0SP2/quickfix/xm_lnon_fix.d.ts +0 -6
- package/dist/types/FIX.5.0SP2/quickfix/xm_lnon_fix.js.map +0 -1
- 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(
|
|
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,
|
|
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
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
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":"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","sourcesContent":["import 'reflect-metadata'\r\n\r\nimport { MsgView } from '../../buffer'\r\nimport { ISessionDescription } from '../../transport'\r\nimport { MsgType, SessionRejectReason } from '../../types'\r\nimport { ILooseObject } from '../../collections/collection'\r\nimport { IStandardHeader, IReject, ILogon } from '../../types/FIX4.4/repo'\r\n\r\nimport { AsciiMsgTransmitter } from '../../transport/ascii/ascii-msg-transmitter'\r\nimport { Setup } from '../env/setup'\r\nimport { Experiment } from '../env/experiment'\r\nimport { SkeletonRunner } from '../env/skeleton-runner'\r\n\r\nconst logonMsg: string = '8=FIX4.4|9=0000136|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20180902-12:25:28.980|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=177|'\r\nconst heartbeat: string = '8=FIX4.4|9=0000123|35=0|49=init-comp|56=accept-comp|34=1|57=fix|52=20180902-12:25:59.161|112=Sun, 02 Sep 2018 12:25:59 GMT|10=95|'\r\n\r\nlet setup: Setup\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":"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","sourcesContent":["import 'reflect-metadata'\r\n\r\nimport { MsgView } from '../../buffer'\r\nimport { ISessionDescription } from '../../transport'\r\nimport { MsgType, SessionRejectReason } from '../../types'\r\nimport { ILooseObject } from '../../collections/collection'\r\nimport { IStandardHeader, IReject, ILogon } from '../../types/FIX4.4/repo'\r\n\r\nimport { AsciiMsgTransmitter } from '../../transport/ascii/ascii-msg-transmitter'\r\nimport { Setup } from '../env/setup'\r\nimport { Experiment } from '../env/experiment'\r\nimport { SkeletonRunner } from '../env/skeleton-runner'\r\n\r\nconst logonMsg: string = '8=FIX4.4|9=0000136|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20180902-12:25:28.980|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=177|'\r\nconst heartbeat: string = '8=FIX4.4|9=0000123|35=0|49=init-comp|56=accept-comp|34=1|57=fix|52=20180902-12:25:59.161|112=Sun, 02 Sep 2018 12:25:59 GMT|10=95|'\r\n\r\nlet setup: Setup\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"]}
|