Files
scroll/tests/integration-test/integration_test.go
2023-04-26 10:20:36 +08:00

125 lines
3.8 KiB
Go

package integration_test
import (
"crypto/rand"
"io/ioutil"
"math/big"
"net/http"
"strconv"
"strings"
"testing"
"github.com/stretchr/testify/assert"
bcmd "scroll-tech/bridge/cmd"
_ "scroll-tech/bridge/cmd/event_watcher/app"
_ "scroll-tech/bridge/cmd/gas_oracle/app"
_ "scroll-tech/bridge/cmd/msg_relayer/app"
_ "scroll-tech/bridge/cmd/rollup_relayer/app"
"scroll-tech/common/docker"
"scroll-tech/common/utils"
rapp "scroll-tech/roller/cmd/app"
"scroll-tech/database/migrate"
capp "scroll-tech/coordinator/cmd/app"
)
var (
base *docker.App
bridgeApp *bcmd.MockApp
coordinatorApp *capp.CoordinatorApp
rollerApp *rapp.RollerApp
)
func TestMain(m *testing.M) {
base = docker.NewDockerApp()
bridgeApp = bcmd.NewBridgeApp(base, "../../bridge/config.json")
coordinatorApp = capp.NewCoordinatorApp(base, "../../coordinator/config.json")
rollerApp = rapp.NewRollerApp(base, "../../roller/config.json", coordinatorApp.WSEndpoint())
m.Run()
bridgeApp.Free()
coordinatorApp.Free()
rollerApp.Free()
base.Free()
}
func TestStartProcess(t *testing.T) {
// Start l1geth l2geth and postgres docker containers.
base.RunImages(t)
// Reset db.
assert.NoError(t, migrate.ResetDB(base.DBClient(t)))
// Run bridge apps.
bridgeApp.RunApp(t, utils.EventWatcherApp)
bridgeApp.RunApp(t, utils.GasOracleApp)
bridgeApp.RunApp(t, utils.MessageRelayerApp)
bridgeApp.RunApp(t, utils.RollupRelayerApp)
// Run coordinator app.
coordinatorApp.RunApp(t)
// Run roller app.
rollerApp.RunApp(t)
// Free apps.
bridgeApp.WaitExit()
rollerApp.WaitExit()
coordinatorApp.WaitExit()
}
func TestMonitorMetrics(t *testing.T) {
// Start l1geth l2geth and postgres docker containers.
base.RunImages(t)
// Reset db.
assert.NoError(t, migrate.ResetDB(base.DBClient(t)))
port1, _ := rand.Int(rand.Reader, big.NewInt(2000))
svrPort1 := strconv.FormatInt(port1.Int64()+50000, 10)
bridgeApp.RunApp(t, utils.EventWatcherApp, "--metrics", "--metrics.addr", "localhost", "--metrics.port", svrPort1)
port2, _ := rand.Int(rand.Reader, big.NewInt(2000))
svrPort2 := strconv.FormatInt(port2.Int64()+50000, 10)
bridgeApp.RunApp(t, utils.GasOracleApp, "--metrics", "--metrics.addr", "localhost", "--metrics.port", svrPort2)
port3, _ := rand.Int(rand.Reader, big.NewInt(2000))
svrPort3 := strconv.FormatInt(port3.Int64()+50000, 10)
bridgeApp.RunApp(t, utils.MessageRelayerApp, "--metrics", "--metrics.addr", "localhost", "--metrics.port", svrPort3)
port4, _ := rand.Int(rand.Reader, big.NewInt(2000))
svrPort4 := strconv.FormatInt(port4.Int64()+50000, 10)
bridgeApp.RunApp(t, utils.RollupRelayerApp, "--metrics", "--metrics.addr", "localhost", "--metrics.port", svrPort4)
// Start coordinator process with metrics server.
port5, _ := rand.Int(rand.Reader, big.NewInt(2000))
svrPort5 := strconv.FormatInt(port5.Int64()+52000, 10)
coordinatorApp.RunApp(t, "--metrics", "--metrics.addr", "localhost", "--metrics.port", svrPort5)
// Get bridge monitor metrics.
resp, err := http.Get("http://localhost:" + svrPort1)
assert.NoError(t, err)
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
assert.NoError(t, err)
bodyStr := string(body)
assert.Equal(t, 200, resp.StatusCode)
assert.Equal(t, true, strings.Contains(bodyStr, "bridge_l1_msgs_sync_height"))
assert.Equal(t, true, strings.Contains(bodyStr, "bridge_l2_msgs_sync_height"))
// Get coordinator monitor metrics.
resp, err = http.Get("http://localhost:" + svrPort5)
assert.NoError(t, err)
defer resp.Body.Close()
body, err = ioutil.ReadAll(resp.Body)
assert.NoError(t, err)
bodyStr = string(body)
assert.Equal(t, 200, resp.StatusCode)
assert.Equal(t, true, strings.Contains(bodyStr, "coordinator_sessions_timeout_total"))
assert.Equal(t, true, strings.Contains(bodyStr, "coordinator_rollers_disconnects_total"))
// Exit.
bridgeApp.WaitExit()
coordinatorApp.WaitExit()
}