github.com/status-im/status-go@v1.1.0/rpc/verif_proxy_test.go (about)

     1  //go:build nimbus_light_client
     2  // +build nimbus_light_client
     3  
     4  package rpc
     5  
     6  import (
     7  	"context"
     8  	"fmt"
     9  	"os"
    10  	"os/signal"
    11  	"syscall"
    12  	"testing"
    13  	"time"
    14  
    15  	"net/http"
    16  	"net/http/httptest"
    17  
    18  	"github.com/ethereum/go-ethereum/common"
    19  	"github.com/ethereum/go-ethereum/common/hexutil"
    20  
    21  	"github.com/stretchr/testify/require"
    22  	"github.com/stretchr/testify/suite"
    23  
    24  	gethrpc "github.com/ethereum/go-ethereum/rpc"
    25  	"github.com/status-im/status-go/params"
    26  )
    27  
    28  type ProxySuite struct {
    29  	suite.Suite
    30  }
    31  
    32  func TestProxySuite(t *testing.T) {
    33  	suite.Run(t, new(ProxySuite))
    34  }
    35  
    36  func (s *ProxySuite) startRpcClient(infuraURL string) *Client {
    37  	ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
    38  		fmt.Fprintln(w, `{
    39  			"id": 1,
    40  			"jsonrpc": "2.0",
    41  			"result": "0x234234e22b9ffc2387e18636e0534534a3d0c56b0243567432453264c16e78a2adc"
    42  		}`)
    43  	}))
    44  	defer ts.Close()
    45  
    46  	gethRPCClient, err := gethrpc.Dial(ts.URL)
    47  	require.NoError(s.T(), err)
    48  
    49  	db, close := setupTestNetworkDB(s.T())
    50  	defer close()
    51  	c, err := NewClient(gethRPCClient, 1, params.UpstreamRPCConfig{Enabled: true, URL: infuraURL}, []params.Network{}, db)
    52  	require.NoError(s.T(), err)
    53  
    54  	return c
    55  }
    56  
    57  func (s *ProxySuite) TestRun() {
    58  	s.T().Skip("skip test using infura")
    59  	infuraURL := "https://mainnet.infura.io/v3/800c641949d64d768a5070a1b0511938"
    60  	client := s.startRpcClient(infuraURL)
    61  
    62  	// Run light client proxy
    63  	ctx, cancel := context.WithCancel(context.Background())
    64  
    65  	signals := make(chan os.Signal, 1)
    66  	signal.Notify(signals, syscall.SIGINT, syscall.SIGTERM)
    67  	fmt.Println("Before range signals")
    68  
    69  	// Invoke eth_getBalance
    70  	var result hexutil.Big
    71  	var addr common.Address
    72  	addr = common.HexToAddress("0x95222290DD7278Aa3Ddd389Cc1E1d165CC4BAfe5")
    73  	chainID := uint64(1)
    74  
    75  	time.Sleep(200 * time.Second)
    76  	err := client.CallContext(ctx, &result, chainID, "eth_getBalance", addr, "latest")
    77  	require.NoError(s.T(), err)
    78  
    79  	client.UnregisterHandler("eth_getBalance")
    80  	var resultRaw hexutil.Big
    81  	err = client.CallContext(ctx, &resultRaw, chainID, "eth_getBalance", addr, "latest")
    82  	s.Require().Equal(result, resultRaw)
    83  	for range signals {
    84  		fmt.Println("Signal caught, exiting")
    85  		cancel()
    86  	}
    87  	fmt.Println("Exiting")
    88  
    89  }