Skip to content

Commit e3839b7

Browse files
increase code coverage, ignore double insertions to bridge_archive table
1 parent 44774fa commit e3839b7

File tree

4 files changed

+72
-32
lines changed

4 files changed

+72
-32
lines changed

bridgesync/downloader_test.go

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ func TestBuildAppender(t *testing.T) {
5555
eventSignature common.Hash
5656
deploymentKind BridgeDeployment
5757
logBuilder func() (types.Log, error)
58+
expectedErr string
5859
}{
5960
{
6061
name: "bridgeEventSignature appender",
@@ -372,6 +373,12 @@ func TestBuildAppender(t *testing.T) {
372373
return l, nil
373374
},
374375
},
376+
{
377+
name: "unknown deployment kind",
378+
deploymentKind: 100,
379+
logBuilder: func() (types.Log, error) { return types.Log{}, nil },
380+
expectedErr: "unsupported bridge deployment kind: 100",
381+
},
375382
}
376383

377384
for _, tt := range tests {
@@ -382,17 +389,21 @@ func TestBuildAppender(t *testing.T) {
382389
logger := logger.WithFields("module", "test")
383390
bridgeDeployment.kind = tt.deploymentKind
384391
appenderMap, err := buildAppender(ethClient, bridgeAddr, false, bridgeDeployment, logger)
385-
require.NoError(t, err)
386-
require.NotNil(t, appenderMap)
392+
if tt.expectedErr == "" {
393+
require.NoError(t, err)
394+
require.NotNil(t, appenderMap)
387395

388-
block := &sync.EVMBlock{EVMBlockHeader: sync.EVMBlockHeader{Num: blockNum}}
396+
block := &sync.EVMBlock{EVMBlockHeader: sync.EVMBlockHeader{Num: blockNum}}
389397

390-
appenderFunc, exists := appenderMap[tt.eventSignature]
391-
require.True(t, exists)
398+
appenderFunc, exists := appenderMap[tt.eventSignature]
399+
require.True(t, exists)
392400

393-
err = appenderFunc(block, log)
394-
require.NoError(t, err)
395-
require.Len(t, block.Events, 1)
401+
err = appenderFunc(block, log)
402+
require.NoError(t, err)
403+
require.Len(t, block.Events, 1)
404+
} else {
405+
require.ErrorContains(t, err, tt.expectedErr)
406+
}
396407
})
397408
}
398409
}

bridgesync/migrations/bridgesync0011.sql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ CREATE TRIGGER IF NOT EXISTS archive_bridge_before_delete
4242
BEFORE DELETE ON bridge
4343
FOR EACH ROW
4444
BEGIN
45-
INSERT INTO bridge_archive (
45+
INSERT OR IGNORE INTO bridge_archive (
4646
deposit_count,
4747
block_num,
4848
block_pos,

bridgesync/processor.go

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1203,21 +1203,27 @@ func (p *processor) Reorg(ctx context.Context, firstReorgedBlock uint64) error {
12031203
// 2. Restore bridge rows from archive for each interval
12041204
// ---------------------------------------------------------------------
12051205
for _, backwardLET := range backwardLETs {
1206-
if backwardLET.PreviousDepositCount.Cmp(backwardLET.NewDepositCount) <= 0 {
1207-
continue // malformed but safe to skip
1206+
if backwardLET.PreviousDepositCount == nil || !backwardLET.PreviousDepositCount.IsUint64() {
1207+
return fmt.Errorf("invalid previous deposit count: %d", backwardLET.PreviousDepositCount)
12081208
}
12091209

1210-
if _, err := tx.Exec(bridgeRestoreSQL, backwardLET.NewDepositCount, backwardLET.NewDepositCount); err != nil {
1210+
if backwardLET.PreviousDepositCount == nil || !backwardLET.PreviousDepositCount.IsUint64() {
1211+
return fmt.Errorf("invalid new deposit count: %d", backwardLET.NewDepositCount)
1212+
}
1213+
1214+
prevDepositCount := backwardLET.PreviousDepositCount.Uint64()
1215+
newDepositCount := backwardLET.NewDepositCount.Uint64()
1216+
if _, err := tx.Exec(bridgeRestoreSQL, newDepositCount, prevDepositCount); err != nil {
12111217
return fmt.Errorf("failed to restore bridges from bridge archive (range %d..%d): %w",
1212-
backwardLET.NewDepositCount, backwardLET.PreviousDepositCount, err)
1218+
newDepositCount, prevDepositCount, err)
12131219
}
12141220

12151221
// Remove restored rows from archive
12161222
_, err := tx.Exec(`DELETE FROM bridge_archive
1217-
WHERE deposit_count > $1 AND deposit_count <= $2`, backwardLET.NewDepositCount, backwardLET.PreviousDepositCount)
1223+
WHERE deposit_count > $1 AND deposit_count <= $2`, newDepositCount, prevDepositCount)
12181224
if err != nil {
12191225
return fmt.Errorf("failed to delete restored rows from archive (range %d..%d): %w",
1220-
backwardLET.NewDepositCount, backwardLET.PreviousDepositCount, err)
1226+
newDepositCount, prevDepositCount, err)
12211227
}
12221228
}
12231229

@@ -1369,10 +1375,9 @@ func (p *processor) ProcessBlock(ctx context.Context, block sync.Block) error {
13691375

13701376
// remove all the bridges whose deposit_count is greater than the one captured by the BackwardLET event
13711377
deleteBridges := fmt.Sprintf("DELETE from %s WHERE deposit_count > $1", bridgeTableName)
1372-
_, err := tx.Exec(deleteBridges, newDepositCount)
1378+
_, err := tx.Exec(deleteBridges, newDepositCountU64)
13731379
if err != nil {
1374-
p.log.Errorf("failed to remove bridges whose deposit count is greater than or equal to %d",
1375-
event.BackwardLET.NewDepositCount)
1380+
p.log.Errorf("failed to remove bridges whose deposit count is greater than %d", newDepositCountU64)
13761381
return err
13771382
}
13781383

bridgesync/processor_test.go

Lines changed: 38 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import (
2020
"github.com/0xPolygon/cdk-contracts-tooling/contracts/aggchain-multisig/polygonzkevmbridge"
2121
bridgetypes "github.com/agglayer/aggkit/bridgeservice/types"
2222
"github.com/agglayer/aggkit/bridgesync/migrations"
23+
bridgesynctypes "github.com/agglayer/aggkit/bridgesync/types"
2324
"github.com/agglayer/aggkit/db"
2425
"github.com/agglayer/aggkit/log"
2526
"github.com/agglayer/aggkit/sync"
@@ -320,6 +321,11 @@ func TestProcessor(t *testing.T) {
320321
eventsToClaims(block5.Events),
321322
)),
322323
},
324+
&reorgAction{
325+
p: p,
326+
description: "reorg the last block",
327+
firstReorgedBlock: 4,
328+
},
323329
}
324330

325331
for _, a := range actions {
@@ -339,22 +345,22 @@ var (
339345
Event{Bridge: &Bridge{
340346
BlockNum: 1,
341347
BlockPos: 0,
342-
LeafType: 1,
348+
LeafType: bridgesynctypes.LeafTypeAsset.Uint8(),
343349
OriginNetwork: 1,
344-
OriginAddress: common.HexToAddress("01"),
350+
OriginAddress: common.HexToAddress("1"),
345351
DestinationNetwork: 1,
346-
DestinationAddress: common.HexToAddress("01"),
352+
DestinationAddress: common.HexToAddress("1"),
347353
Amount: big.NewInt(1),
348-
Metadata: common.Hex2Bytes("01"),
354+
Metadata: common.Hex2Bytes("1"),
349355
DepositCount: 0,
350356
}},
351357
Event{Claim: &Claim{
352358
BlockNum: 1,
353359
BlockPos: 1,
354360
GlobalIndex: big.NewInt(1),
355361
OriginNetwork: 1,
356-
OriginAddress: common.HexToAddress("01"),
357-
DestinationAddress: common.HexToAddress("01"),
362+
OriginAddress: common.HexToAddress("1"),
363+
DestinationAddress: common.HexToAddress("1"),
358364
Amount: big.NewInt(1),
359365
MainnetExitRoot: common.Hash{},
360366
}},
@@ -390,27 +396,39 @@ var (
390396
Event{Bridge: &Bridge{
391397
BlockNum: 3,
392398
BlockPos: 0,
393-
LeafType: 2,
399+
LeafType: bridgesynctypes.LeafTypeAsset.Uint8(),
394400
OriginNetwork: 2,
395-
OriginAddress: common.HexToAddress("02"),
401+
OriginAddress: common.HexToAddress("2"),
396402
DestinationNetwork: 2,
397-
DestinationAddress: common.HexToAddress("02"),
403+
DestinationAddress: common.HexToAddress("2"),
398404
Amount: big.NewInt(2),
399-
Metadata: common.Hex2Bytes("02"),
405+
Metadata: common.Hex2Bytes("2"),
400406
DepositCount: 1,
401407
}},
402408
Event{Bridge: &Bridge{
403409
BlockNum: 3,
404410
BlockPos: 1,
405-
LeafType: 3,
411+
LeafType: bridgesynctypes.LeafTypeAsset.Uint8(),
406412
OriginNetwork: 3,
407-
OriginAddress: common.HexToAddress("03"),
413+
OriginAddress: common.HexToAddress("3"),
408414
DestinationNetwork: 3,
409-
DestinationAddress: common.HexToAddress("03"),
415+
DestinationAddress: common.HexToAddress("3"),
410416
Amount: big.NewInt(0),
411-
Metadata: common.Hex2Bytes("03"),
417+
Metadata: common.Hex2Bytes("3"),
412418
DepositCount: 2,
413419
}},
420+
Event{Bridge: &Bridge{
421+
BlockNum: 3,
422+
BlockPos: 2,
423+
LeafType: bridgesynctypes.LeafTypeAsset.Uint8(),
424+
OriginNetwork: 3,
425+
OriginAddress: common.HexToAddress("4"),
426+
DestinationNetwork: 3,
427+
DestinationAddress: common.HexToAddress("4"),
428+
Amount: big.NewInt(0),
429+
Metadata: common.Hex2Bytes("4"),
430+
DepositCount: 3,
431+
}},
414432
},
415433
}
416434
block4 = sync.Block{
@@ -453,6 +471,12 @@ var (
453471
BlockPos: 3,
454472
LegacyTokenAddress: common.HexToAddress("0x11"),
455473
}},
474+
Event{BackwardLET: &BackwardLET{
475+
BlockNum: 5,
476+
BlockPos: 4,
477+
PreviousDepositCount: big.NewInt(3),
478+
NewDepositCount: big.NewInt(2),
479+
}},
456480
},
457481
}
458482
)

0 commit comments

Comments
 (0)