Skip to content

Commit d8f885a

Browse files
Simplify
1 parent eac987b commit d8f885a

4 files changed

Lines changed: 68 additions & 96 deletions

File tree

block/pending_base_test.go

Lines changed: 56 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,14 @@ func runPendingBase_GetPending_AllCases[T any](t *testing.T, tc pendingBaseTestC
7373
assert.Len(t, pending, 2)
7474
// Use reflection to call Height() for both types
7575
getHeight := func(item any) uint64 {
76-
return item.(interface{ Height() uint64 }).Height()
76+
switch v := item.(type) {
77+
case *types.Data:
78+
return v.Height()
79+
case *types.SignedHeader:
80+
return v.Height()
81+
default:
82+
panic("unexpected type")
83+
}
7784
}
7885
assert.Equal(t, uint64(3), getHeight(pending[0]))
7986
assert.Equal(t, uint64(4), getHeight(pending[1]))
@@ -136,79 +143,52 @@ func runPendingBase_setLastSubmittedHeight[T any](t *testing.T, tc pendingBaseTe
136143
})
137144
}
138145

139-
func runPendingBase_init_with_existing_metadata[T any](t *testing.T, tc pendingBaseTestCase[T]) {
140-
t.Run(tc.name+"/init_with_existing_metadata", func(t *testing.T) {
141-
mockStore := mocksStore.NewStore(t)
142-
logger := log.NewNopLogger()
143-
val := make([]byte, 8)
144-
binary.LittleEndian.PutUint64(val, 7)
145-
mockStore.On("GetMetadata", mock.Anything, tc.key).Return(val, nil).Once()
146-
pb := &pendingBase[T]{store: mockStore, logger: logger, metaKey: tc.key, fetch: tc.fetch}
147-
err := pb.init()
148-
assert.NoError(t, err)
149-
assert.Equal(t, uint64(7), pb.lastHeight.Load())
150-
})
151-
}
152-
153-
func runPendingBase_init_invalid_length[T any](t *testing.T, tc pendingBaseTestCase[T]) {
154-
t.Run(tc.name+"/init_invalid_length", func(t *testing.T) {
155-
mockStore := mocksStore.NewStore(t)
156-
logger := log.NewNopLogger()
157-
mockStore.On("GetMetadata", mock.Anything, tc.key).Return([]byte{1, 2}, nil).Once()
158-
pb := &pendingBase[T]{store: mockStore, logger: logger, metaKey: tc.key, fetch: tc.fetch}
159-
err := pb.init()
160-
assert.Error(t, err)
161-
})
162-
}
163-
164-
func runPendingBase_isEmpty_and_init[T any](t *testing.T, tc pendingBaseTestCase[T]) {
165-
t.Run(tc.name+"/isEmpty", func(t *testing.T) {
166-
mockStore := mocksStore.NewStore(t)
167-
logger := log.NewNopLogger()
168-
mockStore.On("GetMetadata", mock.Anything, tc.key).Return(nil, ds.ErrNotFound).Once()
169-
pb, err := newPendingBase(mockStore, logger, tc.key, tc.fetch)
170-
require.NoError(t, err)
171-
172-
// isEmpty true
173-
pb.lastHeight.Store(10)
174-
mockStore.On("Height", mock.Anything).Return(uint64(10), nil).Once()
175-
assert.True(t, pb.isEmpty())
176-
177-
// isEmpty false
178-
pb.lastHeight.Store(5)
179-
mockStore.On("Height", mock.Anything).Return(uint64(10), nil).Once()
180-
assert.False(t, pb.isEmpty())
181-
})
182-
183-
t.Run(tc.name+"/init_missing_metadata", func(t *testing.T) {
184-
mockStore := mocksStore.NewStore(t)
185-
logger := log.NewNopLogger()
186-
mockStore.On("GetMetadata", mock.Anything, tc.key).Return(nil, ds.ErrNotFound).Once()
187-
pb := &pendingBase[T]{store: mockStore, logger: logger, metaKey: tc.key, fetch: tc.fetch}
188-
err := pb.init()
189-
assert.NoError(t, err)
190-
assert.Equal(t, uint64(0), pb.lastHeight.Load())
191-
})
192-
193-
t.Run(tc.name+"/init_valid_metadata", func(t *testing.T) {
194-
mockStore := mocksStore.NewStore(t)
195-
logger := log.NewNopLogger()
196-
val := make([]byte, 8)
197-
binary.LittleEndian.PutUint64(val, 7)
198-
mockStore.On("GetMetadata", mock.Anything, tc.key).Return(val, nil).Once()
199-
pb := &pendingBase[T]{store: mockStore, logger: logger, metaKey: tc.key, fetch: tc.fetch}
200-
err := pb.init()
201-
assert.NoError(t, err)
202-
assert.Equal(t, uint64(7), pb.lastHeight.Load())
203-
})
204-
205-
t.Run(tc.name+"/init_invalid_metadata_length", func(t *testing.T) {
206-
mockStore := mocksStore.NewStore(t)
207-
logger := log.NewNopLogger()
208-
mockStore.On("GetMetadata", mock.Anything, tc.key).Return([]byte{1, 2}, nil).Once()
209-
pb := &pendingBase[T]{store: mockStore, logger: logger, metaKey: tc.key, fetch: tc.fetch}
210-
err := pb.init()
211-
assert.Error(t, err)
146+
func runPendingBase_init_cases[T any](t *testing.T, tc pendingBaseTestCase[T]) {
147+
t.Run(tc.name+"/init_cases", func(t *testing.T) {
148+
cases := []struct {
149+
name string
150+
metaValue []byte
151+
metaErr error
152+
expectErr bool
153+
expectVal uint64
154+
}{
155+
{
156+
name: "missing_metadata",
157+
metaValue: nil,
158+
metaErr: ds.ErrNotFound,
159+
expectErr: false,
160+
expectVal: 0,
161+
},
162+
{
163+
name: "valid_metadata",
164+
metaValue: func() []byte { v := make([]byte, 8); binary.LittleEndian.PutUint64(v, 7); return v }(),
165+
metaErr: nil,
166+
expectErr: false,
167+
expectVal: 7,
168+
},
169+
{
170+
name: "invalid_metadata_length",
171+
metaValue: []byte{1, 2},
172+
metaErr: nil,
173+
expectErr: true,
174+
expectVal: 0,
175+
},
176+
}
177+
for _, c := range cases {
178+
t.Run(c.name, func(t *testing.T) {
179+
mockStore := mocksStore.NewStore(t)
180+
logger := log.NewNopLogger()
181+
mockStore.On("GetMetadata", mock.Anything, tc.key).Return(c.metaValue, c.metaErr).Once()
182+
pb := &pendingBase[T]{store: mockStore, logger: logger, metaKey: tc.key, fetch: tc.fetch}
183+
err := pb.init()
184+
if c.expectErr {
185+
assert.Error(t, err)
186+
} else {
187+
assert.NoError(t, err)
188+
assert.Equal(t, c.expectVal, pb.lastHeight.Load())
189+
}
190+
})
191+
}
212192
})
213193
}
214194

@@ -293,19 +273,15 @@ func TestPendingBase_Generic(t *testing.T) {
293273
runPendingBase_GetPending_AllCases(t, tc)
294274
runPendingBase_isEmpty_numPending(t, tc)
295275
runPendingBase_setLastSubmittedHeight(t, tc)
296-
runPendingBase_init_with_existing_metadata(t, tc)
297-
runPendingBase_init_invalid_length(t, tc)
298-
runPendingBase_isEmpty_and_init(t, tc)
276+
runPendingBase_init_cases(t, tc)
299277
runPendingBase_Fetch(t, tc)
300278
runPendingBase_NewPending(t, tc, func(store store.Store, logger log.Logger) (any, error) { return NewPendingData(store, logger) })
301279
case pendingBaseTestCase[*types.SignedHeader]:
302280
runPendingBase_InitAndGetLastSubmittedHeight(t, tc)
303281
runPendingBase_GetPending_AllCases(t, tc)
304282
runPendingBase_isEmpty_numPending(t, tc)
305283
runPendingBase_setLastSubmittedHeight(t, tc)
306-
runPendingBase_init_with_existing_metadata(t, tc)
307-
runPendingBase_init_invalid_length(t, tc)
308-
runPendingBase_isEmpty_and_init(t, tc)
284+
runPendingBase_init_cases(t, tc)
309285
runPendingBase_Fetch(t, tc)
310286
runPendingBase_NewPending(t, tc, func(store store.Store, logger log.Logger) (any, error) { return NewPendingHeaders(store, logger) })
311287
}

block/pending_data.go

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,7 @@ type PendingData struct {
3030

3131
func fetchData(ctx context.Context, store store.Store, height uint64) (*types.Data, error) {
3232
_, data, err := store.GetBlockData(ctx, height)
33-
if err != nil {
34-
return nil, err
35-
}
36-
if data == nil {
37-
return nil, nil
38-
}
39-
return data, nil
33+
return data, err
4034
}
4135

4236
// NewPendingData returns a new PendingData struct

block/pending_headers.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import (
99
"github.com/rollkit/rollkit/types"
1010
)
1111

12-
// LastSubmittedHeaderHeightKey is the key used for persisting the last submitted height in store.
12+
// LastSubmittedHeaderHeightKey is the key used for persisting the last submitted header height in store.
1313
const LastSubmittedHeaderHeightKey = "last-submitted-header-height"
1414

1515
// PendingHeaders maintains headers that need to be published to DA layer

block/submitter_test.go

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ import (
2424
"github.com/rollkit/rollkit/types"
2525
)
2626

27+
const numItemsToSubmit = 3
28+
2729
// newTestManagerWithDA creates a Manager instance with a mocked DA layer for testing.
2830
func newTestManagerWithDA(t *testing.T, da *mocks.DA) (m *Manager) {
2931
logger := log.NewNopLogger()
@@ -87,7 +89,7 @@ func TestSubmitDataToDA_Success(t *testing.T) {
8789
runSubmitToDASuccessCase(t, submitToDASuccessCase[*types.SignedData]{
8890
name: "Data",
8991
fillPending: func(ctx context.Context, t *testing.T, m *Manager) {
90-
fillPendingData(ctx, t, m.pendingData, "Test Submitting Data", 3)
92+
fillPendingData(ctx, t, m.pendingData, "Test Submitting Data", numItemsToSubmit)
9193
},
9294
getToSubmit: func(m *Manager, ctx context.Context) ([]*types.SignedData, error) {
9395
return m.createSignedDataToSubmit(ctx)
@@ -106,7 +108,7 @@ func TestSubmitHeadersToDA_Success(t *testing.T) {
106108
runSubmitToDASuccessCase(t, submitToDASuccessCase[*types.SignedHeader]{
107109
name: "Headers",
108110
fillPending: func(ctx context.Context, t *testing.T, m *Manager) {
109-
fillPendingHeaders(ctx, t, m.pendingHeaders, "Test Submitting Headers", 3)
111+
fillPendingHeaders(ctx, t, m.pendingHeaders, "Test Submitting Headers", numItemsToSubmit)
110112
},
111113
getToSubmit: func(m *Manager, ctx context.Context) ([]*types.SignedHeader, error) {
112114
return m.pendingHeaders.getPendingHeaders(ctx)
@@ -173,7 +175,7 @@ func TestSubmitDataToDA_Failure(t *testing.T) {
173175
runSubmitToDAFailureCase(t, submitToDAFailureCase[*types.SignedData]{
174176
name: "Data",
175177
fillPending: func(ctx context.Context, t *testing.T, m *Manager) {
176-
fillPendingData(ctx, t, m.pendingData, "Test Submitting Data", 3)
178+
fillPendingData(ctx, t, m.pendingData, "Test Submitting Data", numItemsToSubmit)
177179
},
178180
getToSubmit: func(m *Manager, ctx context.Context) ([]*types.SignedData, error) {
179181
return m.createSignedDataToSubmit(ctx)
@@ -208,7 +210,7 @@ func TestSubmitHeadersToDA_Failure(t *testing.T) {
208210
runSubmitToDAFailureCase(t, submitToDAFailureCase[*types.SignedHeader]{
209211
name: "Headers",
210212
fillPending: func(ctx context.Context, t *testing.T, m *Manager) {
211-
fillPendingHeaders(ctx, t, m.pendingHeaders, "Test Submitting Headers", 3)
213+
fillPendingHeaders(ctx, t, m.pendingHeaders, "Test Submitting Headers", numItemsToSubmit)
212214
},
213215
getToSubmit: func(m *Manager, ctx context.Context) ([]*types.SignedHeader, error) {
214216
return m.pendingHeaders.getPendingHeaders(ctx)
@@ -285,7 +287,7 @@ func TestSubmitToDA_RetryPartialFailures_Generic(t *testing.T) {
285287
name: "Data",
286288
metaKey: "last-submitted-data-height",
287289
fillPending: func(ctx context.Context, t *testing.T, m *Manager) {
288-
fillPendingData(ctx, t, m.pendingData, "Test", 3)
290+
fillPendingData(ctx, t, m.pendingData, "Test", numItemsToSubmit)
289291
},
290292
submitToDA: func(m *Manager, ctx context.Context, items []*types.SignedData) error {
291293
return m.submitDataToDA(ctx, items)
@@ -316,7 +318,7 @@ func TestSubmitToDA_RetryPartialFailures_Generic(t *testing.T) {
316318
name: "Header",
317319
metaKey: "last-submitted-header-height",
318320
fillPending: func(ctx context.Context, t *testing.T, m *Manager) {
319-
fillPendingHeaders(ctx, t, m.pendingHeaders, "Test", 3)
321+
fillPendingHeaders(ctx, t, m.pendingHeaders, "Test", numItemsToSubmit)
320322
},
321323
submitToDA: func(m *Manager, ctx context.Context, items []*types.SignedHeader) error {
322324
return m.submitHeadersToDA(ctx, items)
@@ -355,14 +357,14 @@ func TestCreateSignedDataToSubmit(t *testing.T) {
355357
// Normal case: pending data exists and is signed correctly
356358
t.Run("normal case", func(t *testing.T) {
357359
m := newTestManagerWithDA(t, nil)
358-
fillPendingData(t.Context(), t, m.pendingData, "Test Creating Signed Data", 2)
360+
fillPendingData(t.Context(), t, m.pendingData, "Test Creating Signed Data", numItemsToSubmit)
359361
pubKey, err := m.signer.GetPublic()
360362
require.NoError(t, err)
361363
proposerAddr, err := m.signer.GetAddress()
362364
require.NoError(t, err)
363365
signedDataList, err := m.createSignedDataToSubmit(t.Context())
364366
require.NoError(t, err)
365-
require.Len(t, signedDataList, 2)
367+
require.Len(t, signedDataList, numItemsToSubmit)
366368
assert.Equal(t, types.Tx("tx1"), signedDataList[0].Txs[0])
367369
assert.Equal(t, types.Tx("tx2"), signedDataList[0].Txs[1])
368370
assert.Equal(t, pubKey, signedDataList[0].Signer.PubKey)

0 commit comments

Comments
 (0)