-
Notifications
You must be signed in to change notification settings - Fork 10
Expand file tree
/
Copy pathmessagesV3_test.go
More file actions
237 lines (225 loc) · 14.5 KB
/
messagesV3_test.go
File metadata and controls
237 lines (225 loc) · 14.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
// Copyright (c) 2026 Neomantra Corp
//
// Tests for DBN Version 3 message types
package dbn_test
import (
"strings"
dbn "github.com/NimbleMarkets/dbn-go"
. "github.com/onsi/ginkgo/v2"
. "github.com/onsi/gomega"
)
var _ = Describe("Messages V3", func() {
Context("InstrumentDef v3 messages", func() {
It("should have correct size for InstrumentDefMsgV3", func() {
Expect(dbn.InstrumentDefMsgV3_Size).To(BeEquivalentTo(520))
})
It("should read v3 definition correctly using InstrumentDefMsgV3 type", func() {
file, closer, err := dbn.MakeCompressedReader("./tests/data/test_data.definition.v3.dbn.zst", false)
Expect(err).To(BeNil())
defer closer.Close()
records, metadata, err := dbn.ReadDBNToSlice[dbn.InstrumentDefMsgV3](file)
Expect(err).To(BeNil())
Expect(metadata).ToNot(BeNil())
Expect(metadata.VersionNum).To(Equal(uint8(dbn.HeaderVersion3)))
Expect(len(records)).To(Equal(2))
// dbn -J ./tests/data/test_data.definition.v3.dbn.zst
r0, r0h := records[0], records[0].Header
Expect(r0h.TsEvent).To(Equal(uint64(1633331241618018154)))
Expect(r0h.RType).To(Equal(dbn.RType(19)))
Expect(r0h.PublisherID).To(Equal(uint16(2)))
Expect(r0h.InstrumentID).To(Equal(uint32(6819)))
Expect(r0.TsRecv).To(Equal(uint64(1633331241618029519)))
Expect(r0.MinPriceIncrement).To(Equal(int64(9223372036854775807)))
Expect(r0.DisplayFactor).To(Equal(int64(100000000000000)))
Expect(r0.Expiration).To(Equal(uint64(18446744073709551615)))
Expect(r0.Activation).To(Equal(uint64(18446744073709551615)))
Expect(r0.HighLimitPrice).To(Equal(int64(9223372036854775807)))
Expect(r0.LowLimitPrice).To(Equal(int64(9223372036854775807)))
Expect(r0.MaxPriceVariation).To(Equal(int64(9223372036854775807)))
Expect(r0.UnitOfMeasureQty).To(Equal(int64(9223372036854775807)))
Expect(r0.MinPriceIncrementAmount).To(Equal(int64(9223372036854775807)))
Expect(r0.PriceRatio).To(Equal(int64(9223372036854775807)))
Expect(r0.StrikePrice).To(Equal(int64(9223372036854775807)))
Expect(r0.RawInstrumentID).To(Equal(uint64(2147483647)))
Expect(r0.LegPrice).To(Equal(int64(9223372036854775807)))
Expect(r0.LegDelta).To(Equal(int64(9223372036854775807)))
Expect(r0.InstAttribValue).To(Equal(int32(2147483647)))
Expect(r0.UnderlyingID).To(Equal(uint32(0)))
Expect(r0.MarketDepthImplied).To(Equal(int32(2147483647)))
Expect(r0.MarketDepth).To(Equal(int32(2147483647)))
Expect(r0.MarketSegmentID).To(Equal(uint32(4294967295)))
Expect(r0.MaxTradeVol).To(Equal(uint32(4294967295)))
Expect(r0.MinLotSize).To(Equal(int32(2147483647)))
Expect(r0.MinLotSizeBlock).To(Equal(int32(2147483647)))
Expect(r0.MinLotSizeRoundLot).To(Equal(int32(100)))
Expect(r0.MinTradeVol).To(Equal(uint32(4294967295)))
Expect(r0.ContractMultiplier).To(Equal(int32(2147483647)))
Expect(r0.DecayQuantity).To(Equal(int32(2147483647)))
Expect(r0.OriginalContractSize).To(Equal(int32(2147483647)))
Expect(r0.LegInstrumentID).To(Equal(uint32(0)))
Expect(r0.LegRatioPriceNumerator).To(Equal(int32(0)))
Expect(r0.LegRatioPriceDenominator).To(Equal(int32(0)))
Expect(r0.LegRatioQtyNumerator).To(Equal(int32(0)))
Expect(r0.LegRatioQtyDenominator).To(Equal(int32(0)))
Expect(r0.LegUnderlyingID).To(Equal(uint32(0)))
Expect(r0.ApplID).To(Equal(int16(32767)))
Expect(r0.MaturityYear).To(Equal(uint16(65535)))
Expect(r0.DecayStartDate).To(Equal(uint16(65535)))
Expect(r0.ChannelID).To(Equal(uint16(0)))
Expect(r0.LegCount).To(Equal(uint16(0)))
Expect(r0.LegIndex).To(Equal(uint16(0)))
Expect(string(r0.Currency[:])).To(Equal(strings.Repeat("\x00", 4)))
Expect(string(r0.SettlCurrency[:])).To(Equal(strings.Repeat("\x00", 4)))
Expect(string(r0.Secsubtype[:])).To(Equal("Z " + strings.Repeat("\x00", 4)))
Expect(string(r0.RawSymbol[:])).To(Equal("MSFT" + strings.Repeat("\x00", dbn.MetadataV2_SymbolCstrLen-len("MSFT"))))
Expect(string(r0.Group[:])).To(Equal("pxnas-1" + strings.Repeat("\x00", 21-len("pxnas-1"))))
Expect(string(r0.Exchange[:])).To(Equal("XNAS" + strings.Repeat("\x00", 5-len("XNAS"))))
Expect(string(r0.Asset[:])).To(Equal(strings.Repeat("\x00", dbn.MetadataV3_AssetCStrLen)))
Expect(string(r0.Cfi[:])).To(Equal(strings.Repeat("\x00", 7)))
Expect(string(r0.SecurityType[:])).To(Equal(strings.Repeat("\x00", 7)))
Expect(string(r0.UnitOfMeasure[:])).To(Equal(strings.Repeat("\x00", 31)))
Expect(string(r0.Underlying[:])).To(Equal(strings.Repeat("\x00", 21)))
Expect(string(r0.StrikePriceCurrency[:])).To(Equal(strings.Repeat("\x00", 4)))
Expect(string(r0.LegRawSymbol[:])).To(Equal(strings.Repeat("\x00", dbn.MetadataV3_SymbolCstrLen)))
Expect(r0.InstrumentClass).To(Equal(uint8('K')))
Expect(r0.MatchAlgorithm).To(Equal(uint8('F')))
Expect(r0.MainFraction).To(Equal(uint8(255)))
Expect(r0.PriceDisplayFormat).To(Equal(uint8(255)))
Expect(r0.SubFraction).To(Equal(uint8(255)))
Expect(r0.UnderlyingProduct).To(Equal(uint8(255)))
Expect(r0.SecurityUpdateAction).To(Equal(uint8('A')))
Expect(r0.MaturityMonth).To(Equal(uint8(255)))
Expect(r0.MaturityDay).To(Equal(uint8(255)))
Expect(r0.MaturityWeek).To(Equal(uint8(255)))
Expect(r0.UserDefinedInstrument).To(Equal(dbn.UserDefinedInstrument('N')))
Expect(r0.ContractMultiplierUnit).To(Equal(int8(127)))
Expect(r0.FlowScheduleType).To(Equal(int8(127)))
Expect(r0.TickRule).To(Equal(uint8(255)))
Expect(r0.LegInstrumentClass).To(Equal(uint8(0)))
Expect(r0.LegSide).To(Equal(uint8('N')))
// {"ts_recv":"1633417621703120931","hd":{"ts_event":"1633417621703109854","rtype":19,"publisher_id":2,"instrument_id":6830},"raw_symbol":"MSFT","security_update_action":"A","instrument_class":"K","min_price_increment":"9223372036854775807","display_factor":"100000000000000","expiration":"18446744073709551615","activation":"18446744073709551615","high_limit_price":"9223372036854775807","low_limit_price":"9223372036854775807","max_price_variation":"9223372036854775807","unit_of_measure_qty":"9223372036854775807","min_price_increment_amount":"9223372036854775807","price_ratio":"9223372036854775807","inst_attrib_value":2147483647,"underlying_id":0,"raw_instrument_id":"2147483647","market_depth_implied":2147483647,"market_depth":2147483647,"market_segment_id":4294967295,"max_trade_vol":4294967295,"min_lot_size":2147483647,"min_lot_size_block":2147483647,"min_lot_size_round_lot":100,"min_trade_vol":4294967295,"contract_multiplier":2147483647,"decay_quantity":2147483647,"original_contract_size":2147483647,"appl_id":32767,"maturity_year":65535,"decay_start_date":65535,"channel_id":0,"currency":"","settl_currency":"","secsubtype":"Z ","group":"pxnas-1","exchange":"XNAS","asset":"","cfi":"","security_type":"","unit_of_measure":"","underlying":"","strike_price_currency":"","strike_price":"9223372036854775807","match_algorithm":"F","main_fraction":255,"price_display_format":255,"sub_fraction":255,"underlying_product":255,"maturity_month":255,"maturity_day":255,"maturity_week":255,"user_defined_instrument":"N","contract_multiplier_unit":127,"flow_schedule_type":127,"tick_rule":255,"leg_count":0,"leg_index":0,"leg_instrument_id":0,"leg_raw_symbol":"","leg_instrument_class":null,"leg_side":"N","leg_price":"9223372036854775807","leg_delta":"9223372036854775807","leg_ratio_price_numerator":0,"leg_ratio_price_denominator":0,"leg_ratio_qty_numerator":0,"leg_ratio_qty_denominator":0,"leg_underlying_id":0}
r1, r1h := records[1], records[1].Header
Expect(r1h.TsEvent).To(Equal(uint64(1633417621703109854)))
Expect(r1h.RType).To(Equal(dbn.RType(19)))
Expect(r1h.PublisherID).To(Equal(uint16(2)))
Expect(r1h.InstrumentID).To(Equal(uint32(6830)))
Expect(r1.TsRecv).To(Equal(uint64(1633417621703120931)))
Expect(r1.MinPriceIncrement).To(Equal(int64(9223372036854775807)))
Expect(r1.DisplayFactor).To(Equal(int64(100000000000000)))
Expect(r1.Expiration).To(Equal(uint64(18446744073709551615)))
Expect(r1.Activation).To(Equal(uint64(18446744073709551615)))
Expect(r1.HighLimitPrice).To(Equal(int64(9223372036854775807)))
Expect(r1.LowLimitPrice).To(Equal(int64(9223372036854775807)))
Expect(r1.MaxPriceVariation).To(Equal(int64(9223372036854775807)))
Expect(r1.UnitOfMeasureQty).To(Equal(int64(9223372036854775807)))
Expect(r1.MinPriceIncrementAmount).To(Equal(int64(9223372036854775807)))
Expect(r1.PriceRatio).To(Equal(int64(9223372036854775807)))
Expect(r1.StrikePrice).To(Equal(int64(9223372036854775807)))
Expect(r1.RawInstrumentID).To(Equal(uint64(2147483647)))
Expect(r1.LegPrice).To(Equal(int64(9223372036854775807)))
Expect(r1.LegDelta).To(Equal(int64(9223372036854775807)))
Expect(r1.InstAttribValue).To(Equal(int32(2147483647)))
Expect(r1.UnderlyingID).To(Equal(uint32(0)))
Expect(r1.MarketDepthImplied).To(Equal(int32(2147483647)))
Expect(r1.MarketDepth).To(Equal(int32(2147483647)))
Expect(r1.MarketSegmentID).To(Equal(uint32(4294967295)))
Expect(r1.MaxTradeVol).To(Equal(uint32(4294967295)))
Expect(r1.MinLotSize).To(Equal(int32(2147483647)))
Expect(r1.MinLotSizeBlock).To(Equal(int32(2147483647)))
Expect(r1.MinLotSizeRoundLot).To(Equal(int32(100)))
Expect(r1.MinTradeVol).To(Equal(uint32(4294967295)))
Expect(r1.ContractMultiplier).To(Equal(int32(2147483647)))
Expect(r1.DecayQuantity).To(Equal(int32(2147483647)))
Expect(r1.OriginalContractSize).To(Equal(int32(2147483647)))
Expect(r1.LegInstrumentID).To(Equal(uint32(0)))
Expect(r1.LegRatioPriceNumerator).To(Equal(int32(0)))
Expect(r1.LegRatioPriceDenominator).To(Equal(int32(0)))
Expect(r1.LegRatioQtyNumerator).To(Equal(int32(0)))
Expect(r1.LegRatioQtyDenominator).To(Equal(int32(0)))
Expect(r1.LegUnderlyingID).To(Equal(uint32(0)))
Expect(r1.ApplID).To(Equal(int16(32767)))
Expect(r1.MaturityYear).To(Equal(uint16(65535)))
Expect(r1.DecayStartDate).To(Equal(uint16(65535)))
Expect(r1.ChannelID).To(Equal(uint16(0)))
Expect(r1.LegCount).To(Equal(uint16(0)))
Expect(r1.LegIndex).To(Equal(uint16(0)))
Expect(string(r1.Currency[:])).To(Equal(strings.Repeat("\x00", 4)))
Expect(string(r1.SettlCurrency[:])).To(Equal(strings.Repeat("\x00", 4)))
Expect(string(r1.Secsubtype[:])).To(Equal("Z " + strings.Repeat("\x00", 4)))
Expect(string(r1.RawSymbol[:])).To(Equal("MSFT" + strings.Repeat("\x00", dbn.MetadataV2_SymbolCstrLen-len("MSFT"))))
Expect(string(r1.Group[:])).To(Equal("pxnas-1" + strings.Repeat("\x00", 21-len("pxnas-1"))))
Expect(string(r1.Exchange[:])).To(Equal("XNAS" + strings.Repeat("\x00", 5-len("XNAS"))))
Expect(string(r1.Asset[:])).To(Equal(strings.Repeat("\x00", dbn.MetadataV3_AssetCStrLen)))
Expect(string(r1.Cfi[:])).To(Equal(strings.Repeat("\x00", 7)))
Expect(string(r1.SecurityType[:])).To(Equal(strings.Repeat("\x00", 7)))
Expect(string(r1.UnitOfMeasure[:])).To(Equal(strings.Repeat("\x00", 31)))
Expect(string(r1.Underlying[:])).To(Equal(strings.Repeat("\x00", 21)))
Expect(string(r1.StrikePriceCurrency[:])).To(Equal(strings.Repeat("\x00", 4)))
Expect(string(r1.LegRawSymbol[:])).To(Equal(strings.Repeat("\x00", dbn.MetadataV3_SymbolCstrLen)))
Expect(r1.InstrumentClass).To(Equal(uint8('K')))
Expect(r1.MatchAlgorithm).To(Equal(uint8('F')))
Expect(r1.MainFraction).To(Equal(uint8(255)))
Expect(r1.PriceDisplayFormat).To(Equal(uint8(255)))
Expect(r1.SubFraction).To(Equal(uint8(255)))
Expect(r1.UnderlyingProduct).To(Equal(uint8(255)))
Expect(r1.SecurityUpdateAction).To(Equal(uint8('A')))
Expect(r1.MaturityMonth).To(Equal(uint8(255)))
Expect(r1.MaturityDay).To(Equal(uint8(255)))
Expect(r1.MaturityWeek).To(Equal(uint8(255)))
Expect(r1.UserDefinedInstrument).To(Equal(dbn.UserDefinedInstrument('N')))
Expect(r1.ContractMultiplierUnit).To(Equal(int8(127)))
Expect(r1.FlowScheduleType).To(Equal(int8(127)))
Expect(r1.TickRule).To(Equal(uint8(255)))
Expect(r1.LegInstrumentClass).To(Equal(uint8(0)))
Expect(r1.LegSide).To(Equal(uint8('N')))
})
})
Context("Stats v3 messages", func() {
It("should have correct size for StatMsgV3", func() {
Expect(dbn.StatMsgV3_Size).To(BeEquivalentTo(80))
})
It("should read v3 statistics correctly using StatMsgV3 type", func() {
file, closer, err := dbn.MakeCompressedReader("./tests/data/test_data.statistics.v3.dbn.zst", false)
Expect(err).To(BeNil())
defer closer.Close()
records, metadata, err := dbn.ReadDBNToSlice[dbn.StatMsgV3](file)
Expect(err).To(BeNil())
Expect(metadata).ToNot(BeNil())
Expect(metadata.VersionNum).To(Equal(uint8(dbn.HeaderVersion3)))
Expect(len(records)).To(Equal(2))
// dbn -J ./tests/data/test_data.statistics.v3.dbn.zst
// {"ts_recv":"1682269536040124325","hd":{"ts_event":"1682269536030443135","rtype":24,"publisher_id":1,"instrument_id":146945},"ts_ref":"18446744073709551615","price":"100000000000","quantity":"9223372036854775807","sequence":2,"ts_in_delta":26961,"stat_type":7,"channel_id":13,"update_action":1,"stat_flags":255}
// {"ts_recv":"1682269536121890092","hd":{"ts_event":"1682269536071497081","rtype":24,"publisher_id":1,"instrument_id":146945},"ts_ref":"18446744073709551615","price":"100000000000","quantity":"9223372036854775807","sequence":7,"ts_in_delta":28456,"stat_type":5,"channel_id":13,"update_action":1,"stat_flags":255}
r0, r0h := records[0], records[0].Header
Expect(r0h.TsEvent).To(Equal(uint64(1682269536030443135)))
Expect(r0h.RType).To(Equal(dbn.RType(24)))
Expect(r0h.PublisherID).To(Equal(uint16(1)))
Expect(r0h.InstrumentID).To(Equal(uint32(146945)))
Expect(r0.TsRecv).To(Equal(uint64(1682269536040124325)))
Expect(r0.TsRef).To(Equal(uint64(18446744073709551615)))
Expect(r0.Price).To(Equal(int64(100000000000)))
Expect(r0.Quantity).To(Equal(int64(9223372036854775807)))
Expect(r0.Sequence).To(Equal(uint32(2)))
Expect(r0.TsInDelta).To(Equal(int32(26961)))
Expect(r0.StatType).To(Equal(uint16(7)))
Expect(r0.ChannelID).To(Equal(uint16(13)))
Expect(r0.UpdateAction).To(Equal(uint8(1)))
Expect(r0.StatFlags).To(Equal(uint8(255)))
r1, r1h := records[1], records[1].Header
Expect(r1h.TsEvent).To(Equal(uint64(1682269536071497081)))
Expect(r1h.RType).To(Equal(dbn.RType(24)))
Expect(r1h.PublisherID).To(Equal(uint16(1)))
Expect(r1h.InstrumentID).To(Equal(uint32(146945)))
Expect(r1.TsRecv).To(Equal(uint64(1682269536121890092)))
Expect(r1.TsRef).To(Equal(uint64(18446744073709551615)))
Expect(r1.Price).To(Equal(int64(100000000000)))
Expect(r1.Quantity).To(Equal(int64(9223372036854775807)))
Expect(r1.Sequence).To(Equal(uint32(7)))
Expect(r1.TsInDelta).To(Equal(int32(28456)))
Expect(r1.StatType).To(Equal(uint16(5)))
Expect(r1.ChannelID).To(Equal(uint16(13)))
Expect(r1.UpdateAction).To(Equal(uint8(1)))
Expect(r1.StatFlags).To(Equal(uint8(255)))
})
})
})