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 }