@@ -31,15 +31,87 @@ func (m *MockForcedInclusionRetriever) RetrieveForcedIncludedTxs(ctx context.Con
3131 return args .Get (0 ).(* block.ForcedInclusionEvent ), args .Error (1 )
3232}
3333
34+ // MockDAClient is a mock implementation of block.FullDAClient for testing
35+ type MockDAClient struct {
36+ mock.Mock
37+ retriever * MockForcedInclusionRetriever
38+ }
39+
40+ // Client interface methods
41+ func (m * MockDAClient ) Submit (ctx context.Context , data [][]byte , gasPrice float64 , namespace []byte , options []byte ) datypes.ResultSubmit {
42+ args := m .Called (ctx , data , gasPrice , namespace , options )
43+ return args .Get (0 ).(datypes.ResultSubmit )
44+ }
45+
46+ func (m * MockDAClient ) Retrieve (ctx context.Context , height uint64 , namespace []byte ) datypes.ResultRetrieve {
47+ args := m .Called (ctx , height , namespace )
48+ return args .Get (0 ).(datypes.ResultRetrieve )
49+ }
50+
51+ func (m * MockDAClient ) Get (ctx context.Context , ids []datypes.ID , namespace []byte ) ([]datypes.Blob , error ) {
52+ args := m .Called (ctx , ids , namespace )
53+ if args .Get (0 ) == nil {
54+ return nil , args .Error (1 )
55+ }
56+ return args .Get (0 ).([]datypes.Blob ), args .Error (1 )
57+ }
58+
59+ func (m * MockDAClient ) GetHeaderNamespace () []byte {
60+ args := m .Called ()
61+ if args .Get (0 ) == nil {
62+ return nil
63+ }
64+ return args .Get (0 ).([]byte )
65+ }
66+
67+ func (m * MockDAClient ) GetDataNamespace () []byte {
68+ args := m .Called ()
69+ if args .Get (0 ) == nil {
70+ return nil
71+ }
72+ return args .Get (0 ).([]byte )
73+ }
74+
75+ func (m * MockDAClient ) GetForcedInclusionNamespace () []byte {
76+ args := m .Called ()
77+ if args .Get (0 ) == nil {
78+ return nil
79+ }
80+ return args .Get (0 ).([]byte )
81+ }
82+
83+ func (m * MockDAClient ) HasForcedInclusionNamespace () bool {
84+ args := m .Called ()
85+ return args .Get (0 ).(bool )
86+ }
87+
88+ // Verifier interface methods
89+ func (m * MockDAClient ) GetProofs (ctx context.Context , ids []datypes.ID , namespace []byte ) ([]datypes.Proof , error ) {
90+ args := m .Called (ctx , ids , namespace )
91+ return args .Get (0 ).([]datypes.Proof ), args .Error (1 )
92+ }
93+
94+ func (m * MockDAClient ) Validate (ctx context.Context , ids []datypes.ID , proofs []datypes.Proof , namespace []byte ) ([]bool , error ) {
95+ args := m .Called (ctx , ids , proofs , namespace )
96+ return args .Get (0 ).([]bool ), args .Error (1 )
97+ }
98+
3499// createTestSequencer is a helper function to create a sequencer for testing
35100func createTestSequencer (t * testing.T , mockRetriever * MockForcedInclusionRetriever , gen genesis.Genesis ) * BasedSequencer {
36101 t .Helper ()
37102
38103 // Create in-memory datastore
39104 db := syncds .MutexWrap (ds .NewMapDatastore ())
40105
41- seq , err := NewBasedSequencer (mockRetriever , db , gen , zerolog .Nop ())
106+ // Create mock DA client that wraps the retriever
107+ mockDAClient := & MockDAClient {retriever : mockRetriever }
108+
109+ seq , err := NewBasedSequencer (mockDAClient , db , gen , zerolog .Nop ())
42110 require .NoError (t , err )
111+
112+ // Replace the fiRetriever with our mock so tests work as before
113+ seq .fiRetriever = mockRetriever
114+
43115 return seq
44116}
45117
@@ -454,10 +526,16 @@ func TestBasedSequencer_CheckpointPersistence(t *testing.T) {
454526 // Create persistent datastore
455527 db := syncds .MutexWrap (ds .NewMapDatastore ())
456528
529+ // Create mock DA client
530+ mockDAClient := & MockDAClient {retriever : mockRetriever }
531+
457532 // Create first sequencer
458- seq1 , err := NewBasedSequencer (mockRetriever , db , gen , zerolog .Nop ())
533+ seq1 , err := NewBasedSequencer (mockDAClient , db , gen , zerolog .Nop ())
459534 require .NoError (t , err )
460535
536+ // Replace the fiRetriever with our mock so tests work as before
537+ seq1 .fiRetriever = mockRetriever
538+
461539 req := coresequencer.GetNextBatchRequest {
462540 MaxBytes : 1000000 ,
463541 LastBatchData : nil ,
@@ -470,9 +548,13 @@ func TestBasedSequencer_CheckpointPersistence(t *testing.T) {
470548 assert .Equal (t , 2 , len (resp .Batch .Transactions ))
471549
472550 // Create a new sequencer with the same datastore (simulating restart)
473- seq2 , err := NewBasedSequencer (mockRetriever , db , gen , zerolog .Nop ())
551+ mockDAClient2 := & MockDAClient {retriever : mockRetriever }
552+ seq2 , err := NewBasedSequencer (mockDAClient2 , db , gen , zerolog .Nop ())
474553 require .NoError (t , err )
475554
555+ // Replace the fiRetriever with our mock so tests work as before
556+ seq2 .fiRetriever = mockRetriever
557+
476558 // Checkpoint should be loaded from DB
477559 assert .Equal (t , uint64 (101 ), seq2 .checkpoint .DAHeight )
478560 assert .Equal (t , uint64 (0 ), seq2 .checkpoint .TxIndex )
0 commit comments