2022-10-31 15:52:21 +00:00
|
|
|
//go:build nimbus_light_client
|
|
|
|
// +build nimbus_light_client
|
|
|
|
|
|
|
|
package rpc
|
|
|
|
|
|
|
|
import (
|
|
|
|
"context"
|
|
|
|
"fmt"
|
|
|
|
"os"
|
|
|
|
"os/signal"
|
|
|
|
"syscall"
|
|
|
|
"testing"
|
|
|
|
"time"
|
|
|
|
|
|
|
|
"net/http"
|
|
|
|
"net/http/httptest"
|
|
|
|
|
|
|
|
"github.com/ethereum/go-ethereum/common"
|
|
|
|
"github.com/ethereum/go-ethereum/common/hexutil"
|
|
|
|
|
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
"github.com/stretchr/testify/suite"
|
2023-05-24 15:02:53 +00:00
|
|
|
|
|
|
|
gethrpc "github.com/ethereum/go-ethereum/rpc"
|
|
|
|
"github.com/status-im/status-go/params"
|
2022-10-31 15:52:21 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
type ProxySuite struct {
|
|
|
|
suite.Suite
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestProxySuite(t *testing.T) {
|
|
|
|
suite.Run(t, new(ProxySuite))
|
|
|
|
}
|
|
|
|
|
|
|
|
func (s *ProxySuite) startRpcClient(infuraURL string) *Client {
|
|
|
|
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
|
|
fmt.Fprintln(w, `{
|
|
|
|
"id": 1,
|
|
|
|
"jsonrpc": "2.0",
|
|
|
|
"result": "0x234234e22b9ffc2387e18636e0534534a3d0c56b0243567432453264c16e78a2adc"
|
|
|
|
}`)
|
|
|
|
}))
|
|
|
|
defer ts.Close()
|
|
|
|
|
|
|
|
gethRPCClient, err := gethrpc.Dial(ts.URL)
|
|
|
|
require.NoError(s.T(), err)
|
|
|
|
|
|
|
|
db, close := setupTestNetworkDB(s.T())
|
|
|
|
defer close()
|
|
|
|
c, err := NewClient(gethRPCClient, 1, params.UpstreamRPCConfig{Enabled: true, URL: infuraURL}, []params.Network{}, db)
|
|
|
|
require.NoError(s.T(), err)
|
|
|
|
|
|
|
|
return c
|
|
|
|
}
|
|
|
|
|
|
|
|
func (s *ProxySuite) TestRun() {
|
2024-04-24 14:41:42 +00:00
|
|
|
s.T().Skip("skip test using infura")
|
2022-10-31 15:52:21 +00:00
|
|
|
infuraURL := "https://mainnet.infura.io/v3/800c641949d64d768a5070a1b0511938"
|
|
|
|
client := s.startRpcClient(infuraURL)
|
|
|
|
|
|
|
|
// Run light client proxy
|
|
|
|
ctx, cancel := context.WithCancel(context.Background())
|
|
|
|
|
|
|
|
signals := make(chan os.Signal, 1)
|
|
|
|
signal.Notify(signals, syscall.SIGINT, syscall.SIGTERM)
|
|
|
|
fmt.Println("Before range signals")
|
|
|
|
|
|
|
|
// Invoke eth_getBalance
|
|
|
|
var result hexutil.Big
|
|
|
|
var addr common.Address
|
|
|
|
addr = common.HexToAddress("0x95222290DD7278Aa3Ddd389Cc1E1d165CC4BAfe5")
|
|
|
|
chainID := uint64(1)
|
|
|
|
|
|
|
|
time.Sleep(200 * time.Second)
|
|
|
|
err := client.CallContext(ctx, &result, chainID, "eth_getBalance", addr, "latest")
|
|
|
|
require.NoError(s.T(), err)
|
|
|
|
|
|
|
|
client.UnregisterHandler("eth_getBalance")
|
|
|
|
var resultRaw hexutil.Big
|
|
|
|
err = client.CallContext(ctx, &resultRaw, chainID, "eth_getBalance", addr, "latest")
|
|
|
|
s.Require().Equal(result, resultRaw)
|
|
|
|
for range signals {
|
|
|
|
fmt.Println("Signal caught, exiting")
|
|
|
|
cancel()
|
|
|
|
}
|
|
|
|
fmt.Println("Exiting")
|
|
|
|
|
|
|
|
}
|