make gateway tests use gateway rpc setup methods.
This commit is contained in:
parent
d8d48953d9
commit
75c88d0385
@ -20,8 +20,6 @@ import (
|
|||||||
|
|
||||||
"github.com/filecoin-project/lotus/api"
|
"github.com/filecoin-project/lotus/api"
|
||||||
"github.com/filecoin-project/lotus/api/client"
|
"github.com/filecoin-project/lotus/api/client"
|
||||||
"github.com/filecoin-project/lotus/api/v0api"
|
|
||||||
"github.com/filecoin-project/lotus/api/v1api"
|
|
||||||
"github.com/filecoin-project/lotus/chain/actors/policy"
|
"github.com/filecoin-project/lotus/chain/actors/policy"
|
||||||
"github.com/filecoin-project/lotus/chain/types"
|
"github.com/filecoin-project/lotus/chain/types"
|
||||||
"github.com/filecoin-project/lotus/cli"
|
"github.com/filecoin-project/lotus/cli"
|
||||||
@ -277,16 +275,15 @@ func startNodes(
|
|||||||
fullNode := nodes[0]
|
fullNode := nodes[0]
|
||||||
|
|
||||||
// Create a gateway server in front of the full node
|
// Create a gateway server in front of the full node
|
||||||
gapiImpl := gateway.NewNode(fullNode, lookbackCap, stateWaitLookbackLimit)
|
gwapi := gateway.NewNode(fullNode, lookbackCap, stateWaitLookbackLimit)
|
||||||
_, addr, err := kit.CreateRPCServer(t, map[string]interface{}{
|
handler, err := gateway.Handler(gwapi)
|
||||||
"/rpc/v1": gapiImpl,
|
|
||||||
"/rpc/v0": api.Wrap(new(v1api.FullNodeStruct), new(v0api.WrapperV1Full), gapiImpl),
|
|
||||||
})
|
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
srv, _ := kit.CreateRPCServer(t, handler)
|
||||||
|
|
||||||
// Create a gateway client API that connects to the gateway server
|
// Create a gateway client API that connects to the gateway server
|
||||||
var gapi api.Gateway
|
var gapi api.Gateway
|
||||||
gapi, closer, err = client.NewGatewayRPCV1(ctx, addr+"/rpc/v1", nil)
|
gapi, closer, err = client.NewGatewayRPCV1(ctx, srv.Listener.Addr().String()+"/rpc/v1", nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
// Provide the gateway API to dependency injection
|
// Provide the gateway API to dependency injection
|
||||||
|
@ -5,26 +5,19 @@ import (
|
|||||||
"context"
|
"context"
|
||||||
"crypto/rand"
|
"crypto/rand"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"net"
|
"net/http"
|
||||||
"net/http/httptest"
|
"net/http/httptest"
|
||||||
"strings"
|
|
||||||
"sync"
|
"sync"
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/filecoin-project/lotus/node/modules/dtypes"
|
|
||||||
"github.com/gorilla/mux"
|
|
||||||
"golang.org/x/xerrors"
|
|
||||||
|
|
||||||
"github.com/filecoin-project/go-address"
|
"github.com/filecoin-project/go-address"
|
||||||
"github.com/filecoin-project/go-jsonrpc"
|
|
||||||
"github.com/filecoin-project/go-state-types/abi"
|
"github.com/filecoin-project/go-state-types/abi"
|
||||||
"github.com/filecoin-project/go-state-types/big"
|
"github.com/filecoin-project/go-state-types/big"
|
||||||
"github.com/filecoin-project/go-state-types/exitcode"
|
"github.com/filecoin-project/go-state-types/exitcode"
|
||||||
"github.com/filecoin-project/go-storedcounter"
|
"github.com/filecoin-project/go-storedcounter"
|
||||||
"github.com/filecoin-project/lotus/api"
|
"github.com/filecoin-project/lotus/api"
|
||||||
"github.com/filecoin-project/lotus/api/client"
|
"github.com/filecoin-project/lotus/api/client"
|
||||||
"github.com/filecoin-project/lotus/api/v0api"
|
|
||||||
"github.com/filecoin-project/lotus/api/v1api"
|
"github.com/filecoin-project/lotus/api/v1api"
|
||||||
"github.com/filecoin-project/lotus/build"
|
"github.com/filecoin-project/lotus/build"
|
||||||
"github.com/filecoin-project/lotus/chain"
|
"github.com/filecoin-project/lotus/chain"
|
||||||
@ -44,6 +37,7 @@ import (
|
|||||||
lotusminer "github.com/filecoin-project/lotus/miner"
|
lotusminer "github.com/filecoin-project/lotus/miner"
|
||||||
"github.com/filecoin-project/lotus/node"
|
"github.com/filecoin-project/lotus/node"
|
||||||
"github.com/filecoin-project/lotus/node/modules"
|
"github.com/filecoin-project/lotus/node/modules"
|
||||||
|
"github.com/filecoin-project/lotus/node/modules/dtypes"
|
||||||
testing2 "github.com/filecoin-project/lotus/node/modules/testing"
|
testing2 "github.com/filecoin-project/lotus/node/modules/testing"
|
||||||
"github.com/filecoin-project/lotus/node/repo"
|
"github.com/filecoin-project/lotus/node/repo"
|
||||||
"github.com/filecoin-project/lotus/storage/mockstorage"
|
"github.com/filecoin-project/lotus/storage/mockstorage"
|
||||||
@ -54,6 +48,7 @@ import (
|
|||||||
"github.com/libp2p/go-libp2p-core/peer"
|
"github.com/libp2p/go-libp2p-core/peer"
|
||||||
mocknet "github.com/libp2p/go-libp2p/p2p/net/mock"
|
mocknet "github.com/libp2p/go-libp2p/p2p/net/mock"
|
||||||
"github.com/multiformats/go-multiaddr"
|
"github.com/multiformats/go-multiaddr"
|
||||||
|
manet "github.com/multiformats/go-multiaddr/net"
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -569,81 +564,43 @@ func mockMinerBuilderOpts(t *testing.T, fullOpts []FullNodeOpts, storage []Stora
|
|||||||
return fulls, miners
|
return fulls, miners
|
||||||
}
|
}
|
||||||
|
|
||||||
func fullRpc(t *testing.T, nd TestFullNode) TestFullNode {
|
func CreateRPCServer(t *testing.T, handler http.Handler) (*httptest.Server, multiaddr.Multiaddr) {
|
||||||
ma, listenAddr, err := CreateRPCServer(t, map[string]interface{}{
|
testServ := httptest.NewServer(handler)
|
||||||
"/rpc/v1": nd,
|
|
||||||
"/rpc/v0": &v0api.WrapperV1Full{FullNode: nd},
|
|
||||||
})
|
|
||||||
require.NoError(t, err)
|
|
||||||
|
|
||||||
var stop func()
|
|
||||||
var full TestFullNode
|
|
||||||
full.FullNode, stop, err = client.NewFullNodeRPCV1(context.Background(), listenAddr+"/rpc/v1", nil)
|
|
||||||
require.NoError(t, err)
|
|
||||||
t.Cleanup(stop)
|
|
||||||
|
|
||||||
full.ListenAddr = ma
|
|
||||||
return full
|
|
||||||
}
|
|
||||||
|
|
||||||
func storerRpc(t *testing.T, nd TestMiner) TestMiner {
|
|
||||||
ma, listenAddr, err := CreateRPCServer(t, map[string]interface{}{
|
|
||||||
"/rpc/v0": nd,
|
|
||||||
})
|
|
||||||
require.NoError(t, err)
|
|
||||||
|
|
||||||
var stop func()
|
|
||||||
var storer TestMiner
|
|
||||||
storer.StorageMiner, stop, err = client.NewStorageMinerRPCV0(context.Background(), listenAddr+"/rpc/v0", nil)
|
|
||||||
require.NoError(t, err)
|
|
||||||
t.Cleanup(stop)
|
|
||||||
|
|
||||||
storer.ListenAddr = ma
|
|
||||||
storer.MineOne = nd.MineOne
|
|
||||||
return storer
|
|
||||||
}
|
|
||||||
|
|
||||||
func CreateRPCServer(t *testing.T, handlers map[string]interface{}) (multiaddr.Multiaddr, string, error) {
|
|
||||||
m := mux.NewRouter()
|
|
||||||
for path, handler := range handlers {
|
|
||||||
rpcServer := jsonrpc.NewServer()
|
|
||||||
rpcServer.Register("Filecoin", handler)
|
|
||||||
m.Handle(path, rpcServer)
|
|
||||||
}
|
|
||||||
testServ := httptest.NewServer(m) // todo: close
|
|
||||||
t.Cleanup(testServ.Close)
|
t.Cleanup(testServ.Close)
|
||||||
t.Cleanup(testServ.CloseClientConnections)
|
t.Cleanup(testServ.CloseClientConnections)
|
||||||
|
|
||||||
addr := testServ.Listener.Addr()
|
addr := testServ.Listener.Addr()
|
||||||
listenAddr := "ws://" + addr.String()
|
maddr, err := manet.FromNetAddr(addr)
|
||||||
ma, err := parseWSMultiAddr(addr)
|
require.NoError(t, err)
|
||||||
if err != nil {
|
return testServ, maddr
|
||||||
return nil, "", err
|
|
||||||
}
|
|
||||||
return ma, listenAddr, err
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func parseWSMultiAddr(addr net.Addr) (multiaddr.Multiaddr, error) {
|
func fullRpc(t *testing.T, nd TestFullNode) TestFullNode {
|
||||||
host, port, err := net.SplitHostPort(addr.String())
|
handler, err := node.FullNodeHandler(nd.FullNode)
|
||||||
if err != nil {
|
require.NoError(t, err)
|
||||||
return nil, err
|
|
||||||
}
|
srv, maddr := CreateRPCServer(t, handler)
|
||||||
ma, err := multiaddr.NewMultiaddr("/ip4/" + host + "/" + addr.Network() + "/" + port + "/ws")
|
|
||||||
if err != nil {
|
var ret TestFullNode
|
||||||
return nil, err
|
cl, stop, err := client.NewFullNodeRPCV1(context.Background(), srv.Listener.Addr().String()+"/rpc/v1", nil)
|
||||||
}
|
require.NoError(t, err)
|
||||||
return ma, nil
|
t.Cleanup(stop)
|
||||||
|
ret.ListenAddr, ret.FullNode = maddr, cl
|
||||||
|
|
||||||
|
return ret
|
||||||
}
|
}
|
||||||
|
|
||||||
func WSMultiAddrToString(addr multiaddr.Multiaddr) (string, error) {
|
func storerRpc(t *testing.T, nd TestMiner) TestMiner {
|
||||||
parts := strings.Split(addr.String(), "/")
|
handler, err := node.MinerHandler(nd.StorageMiner)
|
||||||
if len(parts) != 6 || parts[0] != "" {
|
require.NoError(t, err)
|
||||||
return "", xerrors.Errorf("Malformed ws multiaddr %s", addr)
|
|
||||||
}
|
|
||||||
|
|
||||||
host := parts[2]
|
srv, maddr := CreateRPCServer(t, handler)
|
||||||
port := parts[4]
|
|
||||||
proto := parts[5]
|
|
||||||
|
|
||||||
return proto + "://" + host + ":" + port + "/rpc/v0", nil
|
var ret TestMiner
|
||||||
|
cl, stop, err := client.NewStorageMinerRPCV0(context.Background(), srv.Listener.Addr().String()+"/rpc/v0", nil)
|
||||||
|
require.NoError(t, err)
|
||||||
|
t.Cleanup(stop)
|
||||||
|
|
||||||
|
ret.ListenAddr, ret.StorageMiner, ret.MineOne = maddr, cl, nd.MineOne
|
||||||
|
return ret
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user