github.com/leovct/zkevm-bridge-service@v0.4.4/test/e2e/edge_test.go (about)

     1  //go:build edge
     2  // +build edge
     3  
     4  package e2e
     5  
     6  import (
     7  	"context"
     8  	"math/big"
     9  	"testing"
    10  	"time"
    11  
    12  	"github.com/0xPolygonHermez/zkevm-bridge-service/bridgectrl"
    13  	"github.com/0xPolygonHermez/zkevm-bridge-service/db"
    14  	"github.com/0xPolygonHermez/zkevm-bridge-service/server"
    15  	"github.com/0xPolygonHermez/zkevm-bridge-service/test/operations"
    16  	"github.com/ethereum/go-ethereum/common"
    17  	"github.com/stretchr/testify/require"
    18  )
    19  
    20  func depositFromL1(ctx context.Context, opsman *operations.Manager, t *testing.T) {
    21  	amount := new(big.Int).SetUint64(250000000000000000)
    22  	tokenAddr := common.Address{} // This means is eth
    23  	destAddr := common.HexToAddress("0xc949254d682d8c9ad5682521675b8f43b102aec4")
    24  	var destNetwork uint32 = 1
    25  	// L1 Deposit
    26  	err := opsman.SendL1Deposit(ctx, tokenAddr, amount, destNetwork, &destAddr)
    27  	require.NoError(t, err)
    28  
    29  	deposits, err := opsman.GetBridgeInfoByDestAddr(ctx, &destAddr)
    30  	require.NoError(t, err)
    31  	// Check a L2 claim tx
    32  	err = opsman.CheckL2Claim(ctx, uint(deposits[0].DestNet), uint(deposits[0].DepositCnt))
    33  	require.NoError(t, err)
    34  }
    35  
    36  func depositFromL2(ctx context.Context, opsman *operations.Manager, t *testing.T) {
    37  	// Send L2 Deposit to withdraw the some funds
    38  	var destNetwork uint32 = 0
    39  	amount := new(big.Int).SetUint64(100000000000000000)
    40  	tokenAddr := common.Address{} // This means is eth
    41  	destAddr := common.HexToAddress("0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC")
    42  	err := opsman.SendL2Deposit(ctx, tokenAddr, amount, destNetwork, &destAddr)
    43  	require.NoError(t, err)
    44  
    45  	// Get Bridge Info By DestAddr
    46  	deposits, err := opsman.GetBridgeInfoByDestAddr(ctx, &destAddr)
    47  	require.NoError(t, err)
    48  	// Check globalExitRoot
    49  	// Get the claim data
    50  	smtProof, smtRollupProof, globalExitRoot, err := opsman.GetClaimData(ctx, uint(deposits[0].NetworkId), uint(deposits[0].DepositCnt))
    51  	require.NoError(t, err)
    52  	// Claim funds in L1
    53  	err = opsman.SendL1Claim(ctx, deposits[0], smtProof, smtRollupProof, globalExitRoot)
    54  	require.NoError(t, err)
    55  }
    56  
    57  func TestEdgeCase(t *testing.T) {
    58  	if testing.Short() {
    59  		t.Skip()
    60  	}
    61  
    62  	ctx := context.Background()
    63  	opsCfg := &operations.Config{
    64  		Storage: db.Config{
    65  			Database: "postgres",
    66  			Name:     "test_db",
    67  			User:     "test_user",
    68  			Password: "test_password",
    69  			Host:     "localhost",
    70  			Port:     "5435",
    71  			MaxConns: 10,
    72  		},
    73  		BT: bridgectrl.Config{
    74  			Store:  "postgres",
    75  			Height: uint8(32),
    76  		},
    77  		BS: server.Config{
    78  			GRPCPort:         "9090",
    79  			HTTPPort:         "8080",
    80  			CacheSize:        100000,
    81  			DefaultPageLimit: 25,
    82  			MaxPageLimit:     100,
    83  			BridgeVersion:    "v1",
    84  			DB: db.Config{
    85  				Database: "postgres",
    86  				Name:     "test_db",
    87  				User:     "test_user",
    88  				Password: "test_password",
    89  				Host:     "localhost",
    90  				Port:     "5435",
    91  				MaxConns: 10,
    92  			},
    93  		},
    94  	}
    95  
    96  	opsman, err := operations.NewManager(ctx, opsCfg)
    97  	require.NoError(t, err)
    98  	require.NoError(t, opsman.StartBridge())
    99  	const st time.Duration = 20 // wait until the syncing is finished
   100  	time.Sleep(st * time.Second)
   101  
   102  	t.Run("Test a case of restart with reorg.", func(t *testing.T) {
   103  		depositFromL1(ctx, opsman, t)
   104  		depositFromL2(ctx, opsman, t)
   105  		// Stop the bridge service.
   106  		require.NoError(t, operations.StopBridge())
   107  		// Modify the L1 blocks for L1 reorg
   108  		require.NoError(t, opsman.UpdateBlocksForTesting(ctx, 0, 1))
   109  		// Restart the bridge service.
   110  		require.NoError(t, opsman.StartBridge())
   111  		time.Sleep(st * time.Second)
   112  
   113  		depositFromL2(ctx, opsman, t)
   114  		depositFromL1(ctx, opsman, t)
   115  	})
   116  }