@@ -21,14 +21,18 @@ ChainID = '-3'
2121NetworkName = 'testnet'
2222
2323[TransactionManager]
24- BroadcastChanSize = 200
25- SendRetryDelay = '5s'
26- CleanupIntervalMins = 15
24+ BroadcastChanSize = 101
25+ ConfirmPollInterval = '9s'
26+ SendRetryDelay = '8s'
27+ MaxSendRetryAttempts = 7
28+ TxExpiration = '6h'
29+ CleanupInterval = '15m'
2730
2831[LogPoller]
2932PollPeriod = '10s'
3033PageSize = 50
31- BlockTime = '2500ms'
34+ LogPollerStartingLookback = '1h'
35+ BlockTime = '1200ms'
3236
3337[[Nodes]]
3438Name = 'ton-testnet-1'
@@ -44,14 +48,18 @@ URL = 'http://localhost:8081'
4448
4549 // Verify config sections exist and key fields parse correctly
4650 require.NotNil(t, cfg.TransactionManager)
47- assert.Equal(t, uint(200), cfg.TransactionManager.BroadcastChanSize)
48- assert.Equal(t, 5*time.Second, cfg.TransactionManager.SendRetryDelay.Duration())
49- assert.Equal(t, uint(15), cfg.TransactionManager.CleanupIntervalMins)
51+ assert.Equal(t, uint(101), cfg.TransactionManager.BroadcastChanSize)
52+ assert.Equal(t, 9*time.Second, cfg.TransactionManager.ConfirmPollInterval.Duration())
53+ assert.Equal(t, 8*time.Second, cfg.TransactionManager.SendRetryDelay.Duration())
54+ assert.Equal(t, uint(7), cfg.TransactionManager.MaxSendRetryAttempts)
55+ assert.Equal(t, 6*time.Hour, cfg.TransactionManager.TxExpiration.Duration())
56+ assert.Equal(t, 15*time.Minute, cfg.TransactionManager.CleanupInterval.Duration())
5057
5158 require.NotNil(t, cfg.LogPoller)
5259 assert.Equal(t, uint32(50), cfg.LogPoller.PageSize)
5360 assert.Equal(t, 10*time.Second, cfg.LogPoller.PollPeriod.Duration())
54- assert.Equal(t, 2500*time.Millisecond, cfg.LogPoller.BlockTime.Duration())
61+ assert.Equal(t, 1*time.Hour, cfg.LogPoller.LogPollerStartingLookback.Duration())
62+ assert.Equal(t, 1200*time.Millisecond, cfg.LogPoller.BlockTime.Duration())
5563
5664 require.Len(t, cfg.Nodes, 1)
5765 assert.Equal(t, "ton-testnet-1", *cfg.Nodes[0].Name)
@@ -71,12 +79,23 @@ URL = 'http://localhost:8081'
7179 cfg, err := NewDecodedTOMLConfig(tomlStr)
7280 require.NoError(t, err)
7381
74- // Missing sections should get full defaults
75- assert.Equal(t, DefaultConfigSet.TransactionManager, cfg.TransactionManager)
76- assert.Equal(t, DefaultConfigSet.LogPoller, cfg.LogPoller)
82+ // Missing sections should get full defaults - verify field by field
83+ require.NotNil(t, cfg.TransactionManager)
84+ assert.Equal(t, txm.DefaultConfigSet.BroadcastChanSize, cfg.TransactionManager.BroadcastChanSize)
85+ assert.Equal(t, txm.DefaultConfigSet.ConfirmPollInterval, cfg.TransactionManager.ConfirmPollInterval)
86+ assert.Equal(t, txm.DefaultConfigSet.SendRetryDelay, cfg.TransactionManager.SendRetryDelay)
87+ assert.Equal(t, txm.DefaultConfigSet.MaxSendRetryAttempts, cfg.TransactionManager.MaxSendRetryAttempts)
88+ assert.Equal(t, txm.DefaultConfigSet.TxExpiration, cfg.TransactionManager.TxExpiration)
89+ assert.Equal(t, txm.DefaultConfigSet.CleanupInterval, cfg.TransactionManager.CleanupInterval)
90+
91+ require.NotNil(t, cfg.LogPoller)
92+ assert.Equal(t, logpoller.DefaultConfigSet.PollPeriod, cfg.LogPoller.PollPeriod)
93+ assert.Equal(t, logpoller.DefaultConfigSet.PageSize, cfg.LogPoller.PageSize)
94+ assert.Equal(t, logpoller.DefaultConfigSet.LogPollerStartingLookback, cfg.LogPoller.LogPollerStartingLookback)
95+ assert.Equal(t, logpoller.DefaultConfigSet.BlockTime, cfg.LogPoller.BlockTime)
7796 })
7897
79- t.Run("partial configs get zero values ", func(t *testing.T) {
98+ t.Run("partial configs get field-by-field defaults ", func(t *testing.T) {
8099 tomlStr := `
81100Enabled = true
82101ChainID = '-3'
@@ -100,11 +119,16 @@ URL = 'http://localhost:8081'
100119 assert.Equal(t, uint(300), cfg.TransactionManager.BroadcastChanSize)
101120 assert.Equal(t, uint32(200), cfg.LogPoller.PageSize)
102121
103- // Missing fields get zero values (Aptos behavior)
104- assert.Equal(t, uint(0), cfg.TransactionManager.ConfirmPollSecs)
105- assert.Equal(t, uint(0), cfg.TransactionManager.CleanupIntervalMins)
106- assert.Nil(t, cfg.TransactionManager.SendRetryDelay)
107- assert.False(t, cfg.TransactionManager.StickyNodeContextEnabled)
122+ // Missing fields get defaults applied (field-by-field)
123+ assert.Equal(t, txm.DefaultConfigSet.ConfirmPollInterval, cfg.TransactionManager.ConfirmPollInterval)
124+ assert.Equal(t, txm.DefaultConfigSet.SendRetryDelay, cfg.TransactionManager.SendRetryDelay)
125+ assert.Equal(t, txm.DefaultConfigSet.MaxSendRetryAttempts, cfg.TransactionManager.MaxSendRetryAttempts)
126+ assert.Equal(t, txm.DefaultConfigSet.TxExpiration, cfg.TransactionManager.TxExpiration)
127+ assert.Equal(t, txm.DefaultConfigSet.CleanupInterval, cfg.TransactionManager.CleanupInterval)
128+
129+ assert.Equal(t, logpoller.DefaultConfigSet.PollPeriod, cfg.LogPoller.PollPeriod)
130+ assert.Equal(t, logpoller.DefaultConfigSet.LogPollerStartingLookback, cfg.LogPoller.LogPollerStartingLookback)
131+ assert.Equal(t, logpoller.DefaultConfigSet.BlockTime, cfg.LogPoller.BlockTime)
108132 })
109133
110134 t.Run("validation errors", func(t *testing.T) {
@@ -123,31 +147,67 @@ URL = 'http://localhost:8081'
123147}
124148
125149func TestTOMLConfig_SetDefaults(t *testing.T) {
126- // Test nil configs get defaults
127- cfg := &TOMLConfig{NetworkName: "testnet"}
128- cfg.SetDefaults()
129-
130- assert.Equal(t, DefaultConfigSet.TransactionManager, cfg.TransactionManager)
131- assert.Equal(t, DefaultConfigSet.LogPoller, cfg.LogPoller)
132- assert.Equal(t, "ton-testnet", cfg.NetworkNameFull)
133-
134- // Test existing configs preserved
135- customTxm := &txm.Config{BroadcastChanSize: 999}
136- customLP := &logpoller.Config{PageSize: 777}
137-
138- cfg2 := &TOMLConfig{
139- NetworkName: "mainnet",
140- NetworkNameFull: "custom-name",
141- Chain: Chain{
142- TransactionManager: customTxm,
143- LogPoller: customLP,
144- },
145- }
146- cfg2.SetDefaults()
147-
148- assert.Equal(t, customTxm, cfg2.TransactionManager)
149- assert.Equal(t, customLP, cfg2.LogPoller)
150- assert.Equal(t, "custom-name", cfg2.NetworkNameFull)
150+ t.Run("nil configs get full defaults", func(t *testing.T) {
151+ cfg := &TOMLConfig{NetworkName: "testnet"}
152+ cfg.SetDefaults()
153+
154+ // Verify all TransactionManager fields got defaults
155+ require.NotNil(t, cfg.TransactionManager)
156+ assert.Equal(t, txm.DefaultConfigSet.BroadcastChanSize, cfg.TransactionManager.BroadcastChanSize)
157+ assert.Equal(t, txm.DefaultConfigSet.ConfirmPollInterval, cfg.TransactionManager.ConfirmPollInterval)
158+ assert.Equal(t, txm.DefaultConfigSet.SendRetryDelay, cfg.TransactionManager.SendRetryDelay)
159+ assert.Equal(t, txm.DefaultConfigSet.MaxSendRetryAttempts, cfg.TransactionManager.MaxSendRetryAttempts)
160+ assert.Equal(t, txm.DefaultConfigSet.TxExpiration, cfg.TransactionManager.TxExpiration)
161+ assert.Equal(t, txm.DefaultConfigSet.CleanupInterval, cfg.TransactionManager.CleanupInterval)
162+
163+ // Verify all LogPoller fields got defaults
164+ require.NotNil(t, cfg.LogPoller)
165+ assert.Equal(t, logpoller.DefaultConfigSet.PollPeriod, cfg.LogPoller.PollPeriod)
166+ assert.Equal(t, logpoller.DefaultConfigSet.PageSize, cfg.LogPoller.PageSize)
167+ assert.Equal(t, logpoller.DefaultConfigSet.LogPollerStartingLookback, cfg.LogPoller.LogPollerStartingLookback)
168+ assert.Equal(t, logpoller.DefaultConfigSet.BlockTime, cfg.LogPoller.BlockTime)
169+
170+ assert.Equal(t, "ton-testnet", cfg.NetworkNameFull)
171+ })
172+
173+ t.Run("partial configs get field-by-field defaults applied", func(t *testing.T) {
174+ // Create configs with only some fields set
175+ customTxm := &txm.Config{
176+ BroadcastChanSize: 999,
177+ SendRetryDelay: config.MustNewDuration(10 * time.Second),
178+ }
179+ customLP := &logpoller.Config{
180+ PageSize: 777,
181+ BlockTime: config.MustNewDuration(3 * time.Second),
182+ }
183+
184+ cfg := &TOMLConfig{
185+ NetworkName: "mainnet",
186+ NetworkNameFull: "custom-name",
187+ Chain: Chain{
188+ TransactionManager: customTxm,
189+ LogPoller: customLP,
190+ },
191+ }
192+ cfg.SetDefaults()
193+
194+ // Verify custom values are preserved
195+ assert.Equal(t, uint(999), cfg.TransactionManager.BroadcastChanSize)
196+ assert.Equal(t, 10*time.Second, cfg.TransactionManager.SendRetryDelay.Duration())
197+ assert.Equal(t, uint32(777), cfg.LogPoller.PageSize)
198+ assert.Equal(t, 3*time.Second, cfg.LogPoller.BlockTime.Duration())
199+
200+ // Verify missing fields got defaults
201+ assert.Equal(t, txm.DefaultConfigSet.ConfirmPollInterval, cfg.TransactionManager.ConfirmPollInterval)
202+ assert.Equal(t, txm.DefaultConfigSet.MaxSendRetryAttempts, cfg.TransactionManager.MaxSendRetryAttempts)
203+ assert.Equal(t, txm.DefaultConfigSet.TxExpiration, cfg.TransactionManager.TxExpiration)
204+ assert.Equal(t, txm.DefaultConfigSet.CleanupInterval, cfg.TransactionManager.CleanupInterval)
205+
206+ assert.Equal(t, logpoller.DefaultConfigSet.PollPeriod, cfg.LogPoller.PollPeriod)
207+ assert.Equal(t, logpoller.DefaultConfigSet.LogPollerStartingLookback, cfg.LogPoller.LogPollerStartingLookback)
208+
209+ assert.Equal(t, "custom-name", cfg.NetworkNameFull)
210+ })
151211}
152212
153213func TestSetFromChain(t *testing.T) {
0 commit comments