Skip to content

Commit 435fdf8

Browse files
feat: more UTs
1 parent b782dc3 commit 435fdf8

File tree

4 files changed

+72
-18
lines changed

4 files changed

+72
-18
lines changed

aggsender/aggsender.go

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import (
1212
"github.com/0xPolygon/cdk/bridgesync"
1313
cdkcommon "github.com/0xPolygon/cdk/common"
1414
"github.com/0xPolygon/cdk/config/types"
15+
"github.com/0xPolygon/cdk/etherman"
1516
"github.com/0xPolygon/cdk/l1infotreesync"
1617
"github.com/0xPolygon/cdk/log"
1718
treeTypes "github.com/0xPolygon/cdk/tree/types"
@@ -26,11 +27,21 @@ type L1InfoTreeSyncer interface {
2627
index uint32, root common.Hash) (treeTypes.Proof, error)
2728
}
2829

30+
// L2BridgeSyncer is an interface defining functions that an L2BridgeSyncer should implement
31+
type L2BridgeSyncer interface {
32+
GetBlockByLER(ctx context.Context, ler common.Hash) (uint64, error)
33+
GetExitRootByIndex(ctx context.Context, index uint32) (treeTypes.Root, error)
34+
GetBridges(ctx context.Context, fromBlock, toBlock uint64) ([]bridgesync.Bridge, error)
35+
GetClaims(ctx context.Context, fromBlock, toBlock uint64) ([]bridgesync.Claim, error)
36+
OriginNetwork() uint32
37+
BlockFinality() etherman.BlockNumberFinality
38+
}
39+
2940
// AggSender is a component that will send certificates to the aggLayer
3041
type AggSender struct {
3142
log *log.Logger
3243

33-
l2Syncer *bridgesync.BridgeSync
44+
l2Syncer L2BridgeSyncer
3445
l2Client bridgesync.EthClienter
3546
l1infoTreeSyncer L1InfoTreeSyncer
3647

aggsender/aggsender_test.go

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -433,7 +433,7 @@ func TestGetImportedBridgeExits(t *testing.T) {
433433
DestinationAddress: common.HexToAddress("0xabc"),
434434
Amount: big.NewInt(200),
435435
Metadata: []byte("data"),
436-
GlobalIndex: big.NewInt(2),
436+
GlobalIndex: bridgesync.GenerateGlobalIndex(true, 0, 2),
437437
GlobalExitRoot: common.HexToHash("0xdef"),
438438
RollupExitRoot: common.HexToHash("0xbbb"),
439439
MainnetExitRoot: common.HexToHash("0xccc"),
@@ -494,11 +494,11 @@ func TestGetImportedBridgeExits(t *testing.T) {
494494
Metadata: []byte("data"),
495495
},
496496
GlobalIndex: &agglayer.GlobalIndex{
497-
MainnetFlag: false,
497+
MainnetFlag: true,
498498
RollupIndex: 0,
499499
LeafIndex: 2,
500500
},
501-
ClaimData: &agglayer.ClaimFromRollup{
501+
ClaimData: &agglayer.ClaimFromMainnnet{
502502
L1Leaf: agglayer.L1InfoTreeLeaf{
503503
L1InfoTreeIndex: 2,
504504
RollupExitRoot: common.HexToHash("0xbbb"),
@@ -509,11 +509,10 @@ func TestGetImportedBridgeExits(t *testing.T) {
509509
BlockHash: common.HexToHash("0xabc"),
510510
},
511511
},
512-
ProofLeafLER: agglayer.MerkleProof{
512+
ProofLeafMER: agglayer.MerkleProof{
513513
Root: common.HexToHash("0xccc"),
514514
Proof: mockProof,
515515
},
516-
ProofLERToRER: agglayer.MerkleProof{},
517516
ProofGERToL1Root: agglayer.MerkleProof{
518517
Root: common.HexToHash("0x789"),
519518
Proof: mockProof,

aggsender/db/aggsender_db_storage.go

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"database/sql"
66
"errors"
77
"fmt"
8+
"math"
89

910
"github.com/0xPolygon/cdk/aggsender/db/migrations"
1011
"github.com/0xPolygon/cdk/aggsender/types"
@@ -72,7 +73,7 @@ func (a *AggSenderSQLStorage) GetCertificateByHeight(ctx context.Context,
7273

7374
var certificateInfo types.CertificateInfo
7475
if err = meddler.ScanRow(rows, &certificateInfo); err != nil {
75-
return types.CertificateInfo{}, err
76+
return types.CertificateInfo{}, getSelectQueryError(height, err)
7677
}
7778

7879
return certificateInfo, nil
@@ -93,15 +94,12 @@ func (a *AggSenderSQLStorage) GetLastSentCertificate(ctx context.Context) (types
9394

9495
rows, err := tx.Query(`SELECT * FROM certificate_info ORDER BY height DESC LIMIT 1;`)
9596
if err != nil {
96-
if errors.Is(err, sql.ErrNoRows) {
97-
return types.CertificateInfo{}, db.ErrNotFound
98-
}
99-
return types.CertificateInfo{}, err
97+
return types.CertificateInfo{}, getSelectQueryError(math.MaxUint64, err) // force checking err not found
10098
}
10199

102100
var certificateInfo types.CertificateInfo
103101
if err = meddler.ScanRow(rows, &certificateInfo); err != nil {
104-
return types.CertificateInfo{}, err
102+
return types.CertificateInfo{}, getSelectQueryError(math.MaxUint64, err) // force checking err not found
105103
}
106104

107105
return certificateInfo, nil
@@ -159,6 +157,16 @@ func (a *AggSenderSQLStorage) DeleteCertificate(ctx context.Context, certificate
159157
return nil
160158
}
161159

160+
// clean deletes all the data from the storage
161+
// NOTE: Used only in tests
162+
func (a *AggSenderSQLStorage) clean() error {
163+
if _, err := a.db.Exec(`DELETE FROM certificate_info;`); err != nil {
164+
return err
165+
}
166+
167+
return nil
168+
}
169+
162170
func getSelectQueryError(height uint64, err error) error {
163171
errToReturn := err
164172
if errors.Is(err, sql.ErrNoRows) {

aggsender/db/aggsender_db_storage_test.go

Lines changed: 42 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,19 @@ package db
22

33
import (
44
"context"
5-
"database/sql"
6-
"errors"
75
"path"
86
"testing"
97

108
"github.com/0xPolygon/cdk/agglayer"
119
"github.com/0xPolygon/cdk/aggsender/db/migrations"
1210
"github.com/0xPolygon/cdk/aggsender/types"
11+
"github.com/0xPolygon/cdk/db"
1312
"github.com/0xPolygon/cdk/log"
1413
"github.com/ethereum/go-ethereum/common"
1514
"github.com/stretchr/testify/require"
1615
)
1716

18-
func Test_SaveLastSentCertificate(t *testing.T) {
17+
func Test_Storage(t *testing.T) {
1918
ctx := context.Background()
2019

2120
path := path.Join(t.TempDir(), "file::memory:?cache=shared")
@@ -40,6 +39,7 @@ func Test_SaveLastSentCertificate(t *testing.T) {
4039
require.NoError(t, err)
4140

4241
require.Equal(t, certificate, certificateFromDB)
42+
require.NoError(t, storage.clean())
4343
})
4444

4545
t.Run("DeleteCertificate", func(t *testing.T) {
@@ -56,12 +56,18 @@ func Test_SaveLastSentCertificate(t *testing.T) {
5656
require.NoError(t, storage.DeleteCertificate(ctx, certificate.CertificateID))
5757

5858
certificateFromDB, err := storage.GetCertificateByHeight(ctx, certificate.Height)
59-
require.Error(t, err)
60-
require.True(t, errors.Is(err, sql.ErrNoRows))
59+
require.ErrorIs(t, err, db.ErrNotFound)
6160
require.Equal(t, types.CertificateInfo{}, certificateFromDB)
61+
require.NoError(t, storage.clean())
6262
})
6363

6464
t.Run("GetLastSentCertificate", func(t *testing.T) {
65+
// try getting a certificate that doesn't exist
66+
certificateFromDB, err := storage.GetLastSentCertificate(ctx)
67+
require.ErrorIs(t, err, db.ErrNotFound)
68+
require.Equal(t, types.CertificateInfo{}, certificateFromDB)
69+
70+
// try getting a certificate that exists
6571
certificate := types.CertificateInfo{
6672
Height: 3,
6773
CertificateID: common.HexToHash("0x5"),
@@ -72,9 +78,39 @@ func Test_SaveLastSentCertificate(t *testing.T) {
7278
}
7379
require.NoError(t, storage.SaveLastSentCertificate(ctx, certificate))
7480

75-
certificateFromDB, err := storage.GetLastSentCertificate(ctx)
81+
certificateFromDB, err = storage.GetLastSentCertificate(ctx)
82+
require.NoError(t, err)
83+
84+
require.Equal(t, certificate, certificateFromDB)
85+
require.NoError(t, storage.clean())
86+
})
87+
88+
t.Run("GetCertificateByHeight", func(t *testing.T) {
89+
// try getting height 0
90+
certificateFromDB, err := storage.GetCertificateByHeight(ctx, 0)
91+
require.NoError(t, err)
92+
require.Equal(t, types.CertificateInfo{}, certificateFromDB)
93+
94+
// try getting a certificate that doesn't exist
95+
certificateFromDB, err = storage.GetCertificateByHeight(ctx, 4)
96+
require.ErrorIs(t, err, db.ErrNotFound)
97+
require.Equal(t, types.CertificateInfo{}, certificateFromDB)
98+
99+
// try getting a certificate that exists
100+
certificate := types.CertificateInfo{
101+
Height: 11,
102+
CertificateID: common.HexToHash("0x17"),
103+
NewLocalExitRoot: common.HexToHash("0x18"),
104+
FromBlock: 17,
105+
ToBlock: 18,
106+
Status: agglayer.Pending,
107+
}
108+
require.NoError(t, storage.SaveLastSentCertificate(ctx, certificate))
109+
110+
certificateFromDB, err = storage.GetCertificateByHeight(ctx, certificate.Height)
76111
require.NoError(t, err)
77112

78113
require.Equal(t, certificate, certificateFromDB)
114+
require.NoError(t, storage.clean())
79115
})
80116
}

0 commit comments

Comments
 (0)