mirror of
https://github.com/scroll-tech/scroll.git
synced 2026-01-14 16:37:56 -05:00
143 lines
4.2 KiB
Go
143 lines
4.2 KiB
Go
package relayer
|
|
|
|
import (
|
|
"crypto/rand"
|
|
"encoding/json"
|
|
"math/big"
|
|
"os"
|
|
"strconv"
|
|
"testing"
|
|
|
|
"github.com/scroll-tech/go-ethereum/common"
|
|
"github.com/scroll-tech/go-ethereum/ethclient"
|
|
"github.com/scroll-tech/go-ethereum/log"
|
|
"github.com/stretchr/testify/assert"
|
|
|
|
"scroll-tech/common/database"
|
|
dockercompose "scroll-tech/common/docker-compose/l1"
|
|
"scroll-tech/common/testcontainers"
|
|
"scroll-tech/common/types/encoding"
|
|
"scroll-tech/common/types/encoding/codecv0"
|
|
|
|
"scroll-tech/rollup/internal/config"
|
|
)
|
|
|
|
var (
|
|
// config
|
|
cfg *config.Config
|
|
|
|
testApps *testcontainers.TestcontainerApps
|
|
posL1TestEnv *dockercompose.PoSL1TestEnv
|
|
|
|
// l2geth client
|
|
l2Cli *ethclient.Client
|
|
|
|
// l2 block
|
|
block1 *encoding.Block
|
|
block2 *encoding.Block
|
|
|
|
// chunk
|
|
chunk1 *encoding.Chunk
|
|
chunk2 *encoding.Chunk
|
|
chunkHash1 common.Hash
|
|
chunkHash2 common.Hash
|
|
)
|
|
|
|
func setupEnv(t *testing.T) {
|
|
glogger := log.NewGlogHandler(log.StreamHandler(os.Stderr, log.LogfmtFormat()))
|
|
glogger.Verbosity(log.LvlInfo)
|
|
log.Root().SetHandler(glogger)
|
|
|
|
// Load config.
|
|
var err error
|
|
cfg, err = config.NewConfig("../../../conf/config.json")
|
|
assert.NoError(t, err)
|
|
|
|
posL1TestEnv, err = dockercompose.NewPoSL1TestEnv()
|
|
assert.NoError(t, err, "failed to create PoS L1 test environment")
|
|
assert.NoError(t, posL1TestEnv.Start(), "failed to start PoS L1 test environment")
|
|
|
|
testApps = testcontainers.NewTestcontainerApps()
|
|
assert.NoError(t, testApps.StartPostgresContainer())
|
|
assert.NoError(t, testApps.StartL2GethContainer())
|
|
|
|
cfg.L2Config.RelayerConfig.SenderConfig.Endpoint = posL1TestEnv.Endpoint()
|
|
cfg.L1Config.RelayerConfig.SenderConfig.Endpoint, err = testApps.GetL2GethEndPoint()
|
|
assert.NoError(t, err)
|
|
|
|
dsn, err := testApps.GetDBEndPoint()
|
|
assert.NoError(t, err)
|
|
cfg.DBConfig = &database.Config{
|
|
DSN: dsn,
|
|
DriverName: "postgres",
|
|
MaxOpenNum: 200,
|
|
MaxIdleNum: 20,
|
|
}
|
|
port, err := rand.Int(rand.Reader, big.NewInt(10000))
|
|
assert.NoError(t, err)
|
|
svrPort := strconv.FormatInt(port.Int64()+50000, 10)
|
|
cfg.L2Config.RelayerConfig.ChainMonitor.BaseURL = "http://localhost:" + svrPort
|
|
|
|
// Create l2geth client.
|
|
l2Cli, err = testApps.GetL2GethClient()
|
|
assert.NoError(t, err)
|
|
|
|
templateBlockTrace1, err := os.ReadFile("../../../testdata/blockTrace_02.json")
|
|
assert.NoError(t, err)
|
|
block1 = &encoding.Block{}
|
|
err = json.Unmarshal(templateBlockTrace1, block1)
|
|
assert.NoError(t, err)
|
|
chunk1 = &encoding.Chunk{Blocks: []*encoding.Block{block1}}
|
|
daChunk1, err := codecv0.NewDAChunk(chunk1, 0)
|
|
assert.NoError(t, err)
|
|
chunkHash1, err = daChunk1.Hash()
|
|
assert.NoError(t, err)
|
|
|
|
templateBlockTrace2, err := os.ReadFile("../../../testdata/blockTrace_03.json")
|
|
assert.NoError(t, err)
|
|
block2 = &encoding.Block{}
|
|
err = json.Unmarshal(templateBlockTrace2, block2)
|
|
assert.NoError(t, err)
|
|
chunk2 = &encoding.Chunk{Blocks: []*encoding.Block{block2}}
|
|
daChunk2, err := codecv0.NewDAChunk(chunk2, chunk1.NumL1Messages(0))
|
|
assert.NoError(t, err)
|
|
chunkHash2, err = daChunk2.Hash()
|
|
assert.NoError(t, err)
|
|
}
|
|
|
|
func TestMain(m *testing.M) {
|
|
defer func() {
|
|
if testApps != nil {
|
|
testApps.Free()
|
|
}
|
|
if posL1TestEnv != nil {
|
|
posL1TestEnv.Stop()
|
|
}
|
|
}()
|
|
m.Run()
|
|
}
|
|
|
|
func TestFunctions(t *testing.T) {
|
|
setupEnv(t)
|
|
srv, err := mockChainMonitorServer(cfg.L2Config.RelayerConfig.ChainMonitor.BaseURL)
|
|
assert.NoError(t, err)
|
|
defer srv.Close()
|
|
|
|
// Run l1 relayer test cases.
|
|
t.Run("TestCreateNewL1Relayer", testCreateNewL1Relayer)
|
|
t.Run("TestL1RelayerGasOracleConfirm", testL1RelayerGasOracleConfirm)
|
|
t.Run("TestL1RelayerProcessGasPriceOracle", testL1RelayerProcessGasPriceOracle)
|
|
|
|
// Run l2 relayer test cases.
|
|
t.Run("TestCreateNewRelayer", testCreateNewRelayer)
|
|
t.Run("TestL2RelayerProcessPendingBatches", testL2RelayerProcessPendingBatches)
|
|
t.Run("TestL2RelayerProcessCommittedBatches", testL2RelayerProcessCommittedBatches)
|
|
t.Run("TestL2RelayerFinalizeTimeoutBatches", testL2RelayerFinalizeTimeoutBatches)
|
|
t.Run("TestL2RelayerCommitConfirm", testL2RelayerCommitConfirm)
|
|
t.Run("TestL2RelayerFinalizeConfirm", testL2RelayerFinalizeConfirm)
|
|
t.Run("TestL2RelayerGasOracleConfirm", testL2RelayerGasOracleConfirm)
|
|
t.Run("TestLayer2RelayerProcessGasPriceOracle", testLayer2RelayerProcessGasPriceOracle)
|
|
// test getBatchStatusByIndex
|
|
t.Run("TestGetBatchStatusByIndex", testGetBatchStatusByIndex)
|
|
}
|