From 795621ed277e8548026308ae904dfc847b29a863 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Magiera?= Date: Sat, 29 Jun 2019 11:19:06 +0200 Subject: [PATCH] Node builder structure License: MIT Signed-off-by: Jakub Sztandera --- api/api.go | 11 +++- api/client/client.go | 7 +- api/struct.go | 24 +++++++ api/test/test.go | 35 ++++++++++ daemon/builder.go | 1 - daemon/cmd.go | 13 +++- daemon/modules/testing.go | 1 - daemon/rpc.go | 15 +---- go.mod | 4 +- go.sum | 101 +++++++++++++++++++++++++++++ node/builder.go | 48 ++++++++++++++ {daemon => node}/modules/core.go | 0 {daemon => node}/modules/libp2p.go | 0 node/modules/testing.go | 22 +++++++ rpclib/rpcServer.go | 8 +-- rpclib/rpc_test.go | 4 +- 16 files changed, 268 insertions(+), 26 deletions(-) create mode 100644 api/struct.go create mode 100644 api/test/test.go delete mode 100644 daemon/builder.go delete mode 100644 daemon/modules/testing.go create mode 100644 node/builder.go rename {daemon => node}/modules/core.go (100%) rename {daemon => node}/modules/libp2p.go (100%) create mode 100644 node/modules/testing.go diff --git a/api/api.go b/api/api.go index 990ba78c6..9f100546a 100644 --- a/api/api.go +++ b/api/api.go @@ -1,5 +1,11 @@ package api +import ( + "context" + + "github.com/libp2p/go-libp2p-core/peer" +) + type Version struct { Version string @@ -30,7 +36,7 @@ type API interface { // // ping // // connect - // client + // Struct // miner @@ -65,5 +71,6 @@ type API interface { // // ID (on cli - print with other info) - Version() Version + ID(context.Context) (peer.ID, error) + Version(context.Context) (Version, error) } diff --git a/api/client/client.go b/api/client/client.go index c86373513..921c50478 100644 --- a/api/client/client.go +++ b/api/client/client.go @@ -2,8 +2,11 @@ package client import ( "github.com/filecoin-project/go-lotus/api" + "github.com/filecoin-project/go-lotus/rpclib" ) func NewRPC(addr string) api.API { - return nil // TODO -} + var res api.Struct + rpclib.NewClient(addr, "Filecoin", &res.Internal) + return &res +} \ No newline at end of file diff --git a/api/struct.go b/api/struct.go new file mode 100644 index 000000000..e2c91b49b --- /dev/null +++ b/api/struct.go @@ -0,0 +1,24 @@ +package api + +import ( + "context" + + "github.com/libp2p/go-libp2p-core/peer" +) + +type Struct struct { + Internal struct{ + ID func(context.Context) (peer.ID, error) + Version func(context.Context) (Version, error) + } +} + +func (c *Struct) ID(ctx context.Context) (peer.ID, error) { + return c.Internal.ID(ctx) +} + +func (c *Struct) Version(ctx context.Context) (Version, error) { + return c.Internal.Version(ctx) +} + +var _ API = &Struct{} \ No newline at end of file diff --git a/api/test/test.go b/api/test/test.go new file mode 100644 index 000000000..6efa25196 --- /dev/null +++ b/api/test/test.go @@ -0,0 +1,35 @@ +package test + +import ( + "context" + "testing" + + "github.com/filecoin-project/go-lotus/api" + "github.com/filecoin-project/go-lotus/build" +) + +type NodeBuilder func() api.API +type testSuite struct { + makeNode NodeBuilder +} + +func TestApis(t *testing.T, nb NodeBuilder) { + ts := testSuite{ + makeNode: nb, + } + + t.Run("version", ts.testVersion) +} + +func (ts *testSuite) testVersion(t *testing.T) { + ctx := context.Background() + fc := ts.makeNode() + + v, err := fc.Version(ctx) + if err != nil { + t.Fatal(err) + } + if v.Version != build.Version { + t.Error("Version didn't work properly") + } +} diff --git a/daemon/builder.go b/daemon/builder.go deleted file mode 100644 index 9d3072094..000000000 --- a/daemon/builder.go +++ /dev/null @@ -1 +0,0 @@ -package daemon diff --git a/daemon/cmd.go b/daemon/cmd.go index aa62f8312..c73a66774 100644 --- a/daemon/cmd.go +++ b/daemon/cmd.go @@ -1,13 +1,24 @@ package daemon import ( + goctx "context" + "gopkg.in/urfave/cli.v2" + + "github.com/filecoin-project/go-lotus/node" ) var Cmd = &cli.Command{ Name: "daemon", Usage: "Start a lotus daemon process", Action: func(context *cli.Context) error { - return serveRPC() + ctx := goctx.Background() + + api, err := node.New(ctx) + if err != nil { + return err + } + + return serveRPC(api) }, } diff --git a/daemon/modules/testing.go b/daemon/modules/testing.go deleted file mode 100644 index 11174d7d4..000000000 --- a/daemon/modules/testing.go +++ /dev/null @@ -1 +0,0 @@ -package modules diff --git a/daemon/rpc.go b/daemon/rpc.go index ad707b632..bc383cdbe 100644 --- a/daemon/rpc.go +++ b/daemon/rpc.go @@ -1,25 +1,16 @@ package daemon import ( - "fmt" "net/http" - "github.com/filecoin-project/go-lotus/build" + "github.com/filecoin-project/go-lotus/api" "github.com/filecoin-project/go-lotus/rpclib" ) -type Filecoin struct{} - -func (*Filecoin) ServerVersion(in int) (string, error) { - fmt.Println(in) - return build.Version, nil -} - -func serveRPC() error { - fc := new(Filecoin) +func serveRPC(api api.API) error { rpcServer := rpclib.NewServer() - rpcServer.Register(fc) + rpcServer.Register("Filecoin", api) http.Handle("/rpc/v0", rpcServer) return http.ListenAndServe(":1234", http.DefaultServeMux) } diff --git a/go.mod b/go.mod index 9ed8b5396..2beb4558f 100644 --- a/go.mod +++ b/go.mod @@ -4,9 +4,11 @@ go 1.12 require ( github.com/gorilla/rpc v1.2.0 + github.com/libp2p/go-libp2p-core v0.0.6 + github.com/multiformats/go-multihash v0.0.5 go.uber.org/atomic v1.4.0 // indirect go.uber.org/dig v1.7.0 // indirect - go.uber.org/fx v1.9.0 // indirect + go.uber.org/fx v1.9.0 go.uber.org/multierr v1.1.0 // indirect gopkg.in/urfave/cli.v2 v2.0.0-20180128182452-d3ae77c26ac8 ) diff --git a/go.sum b/go.sum index 940a82af0..c73d772f2 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,67 @@ +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= +github.com/btcsuite/btcd v0.0.0-20190523000118-16327141da8c h1:aEbSeNALREWXk0G7UdNhR3ayBV7tZ4M2PNmnrCAph6Q= +github.com/btcsuite/btcd v0.0.0-20190523000118-16327141da8c/go.mod h1:3J08xEfcugPacsc34/LKRU2yO7YmuT8yt28J8k2+rrI= +github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= +github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= +github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg= +github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd/go.mod h1:F+uVaaLLH7j4eDXPRvw78tMflu7Ie2bzYOH4Y8rRKBY= +github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= +github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY= +github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= +github.com/gogo/protobuf v1.2.1 h1:/s5zKNz0uPFCZ5hddgPdo2TK2TVrUNMn0OOX8/aZMTE= +github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/gorilla/rpc v1.2.0 h1:WvvdC2lNeT1SP32zrIce5l0ECBfbAlmrmSBsuc57wfk= github.com/gorilla/rpc v1.2.0/go.mod h1:V4h9r+4sF5HnzqbwIez0fKSpANP0zlYd3qR7p36jkTQ= +github.com/gxed/hashland/keccakpg v0.0.1/go.mod h1:kRzw3HkwxFU1mpmPP8v1WyQzwdGfmKFJ6tItnhQ67kU= +github.com/gxed/hashland/murmur3 v0.0.1/go.mod h1:KjXop02n4/ckmZSnY2+HKcLud/tcmvhST0bie/0lS48= +github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/ipfs/go-cid v0.0.2/go.mod h1:GHWU/WuQdMPmIosc4Yn1bcCT7dSeX4lBafM7iqUPQvM= +github.com/jbenet/go-cienv v0.1.0/go.mod h1:TqNnHUmJgXau0nCzC7kXWeotg3J9W34CUv5Djy1+FlA= +github.com/jbenet/goprocess v0.1.3 h1:YKyIEECS/XvcfHtBzxtjBBbWK+MbvA6dG8ASiqwvr10= +github.com/jbenet/goprocess v0.1.3/go.mod h1:5yspPrukOVuOLORacaBi858NqyClJPQxYZlqdZVfqY4= +github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= +github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= +github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= +github.com/libp2p/go-flow-metrics v0.0.1/go.mod h1:Iv1GH0sG8DtYN3SVJ2eG221wMiNpZxBdp967ls1g+k8= +github.com/libp2p/go-libp2p-core v0.0.6 h1:SsYhfWJ47vLP1Rd9/0hqEm/W/PlFbC/3YLZyLCcvo1w= +github.com/libp2p/go-libp2p-core v0.0.6/go.mod h1:0d9xmaYAVY5qmbp/fcgxHT3ZJsLjYeYPMJAUKpaCHrE= +github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 h1:lYpkrQH5ajf0OXOcUbGjvZxxijuBwbbmlSxLiuofa+g= +github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1/go.mod h1:pD8RvIylQ358TN4wwqatJ8rNavkEINozVn9DtGI3dfQ= +github.com/minio/sha256-simd v0.0.0-20190131020904-2d45a736cd16/go.mod h1:2FMWW+8GMoPweT6+pI63m9YE3Lmw4J71hV56Chs1E/U= +github.com/minio/sha256-simd v0.0.0-20190328051042-05b4dd3047e5/go.mod h1:2FMWW+8GMoPweT6+pI63m9YE3Lmw4J71hV56Chs1E/U= +github.com/minio/sha256-simd v0.1.0 h1:U41/2erhAKcmSI14xh/ZTUdBPOzDOIfS93ibzUSl8KM= +github.com/minio/sha256-simd v0.1.0/go.mod h1:2FMWW+8GMoPweT6+pI63m9YE3Lmw4J71hV56Chs1E/U= +github.com/mr-tron/base58 v1.1.0/go.mod h1:xcD2VGqlgYjBdcBLw+TuYLr8afG+Hj8g2eTVqeSzSU8= +github.com/mr-tron/base58 v1.1.2 h1:ZEw4I2EgPKDJ2iEw0cNmLB3ROrEmkOtXIkaG7wZg+78= +github.com/mr-tron/base58 v1.1.2/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= +github.com/multiformats/go-base32 v0.0.3/go.mod h1:pLiuGC8y0QR3Ue4Zug5UzK9LjgbkL8NSQj0zQ5Nz/AA= +github.com/multiformats/go-multiaddr v0.0.4 h1:WgMSI84/eRLdbptXMkMWDXPjPq7SPLIgGUVm2eroyU4= +github.com/multiformats/go-multiaddr v0.0.4/go.mod h1:xKVEak1K9cS1VdmPZW3LSIb6lgmoS58qz/pzqmAxV44= +github.com/multiformats/go-multibase v0.0.1/go.mod h1:bja2MqRZ3ggyXtZSEDKpl0uO/gviWFaSteVbWT51qgs= +github.com/multiformats/go-multihash v0.0.1/go.mod h1:w/5tugSrLEbWqlcgJabL3oHFKTwfvkofsjW2Qa1ct4U= +github.com/multiformats/go-multihash v0.0.5 h1:1wxmCvTXAifAepIMyF39vZinRw5sbqjPs/UIi93+uik= +github.com/multiformats/go-multihash v0.0.5/go.mod h1:lt/HCbqlQwlPBz7lv0sQCdtfcMtlJvakRUn/0Ual8po= +github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/spacemonkeygo/openssl v0.0.0-20181017203307-c2dcc5cca94a/go.mod h1:7AyxJNCJ7SBZ1MfVQCWD6Uqo2oubI2Eq2y2eqf+A5r0= +github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572/go.mod h1:w0SWMsp6j9O/dk4/ZpIhL+3CkG8ofA2vuv7k+ltqUMc= +github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= +github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.uber.org/atomic v1.4.0 h1:cxzIVoETapQEqDhQu3QfnvXAV4AlzcvUCxkVUFw3+EU= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/dig v1.7.0 h1:E5/L92iQTNJTjfgJF2KgU+/JpMaiuvK2DHLBj0+kSZk= @@ -8,5 +70,44 @@ go.uber.org/fx v1.9.0 h1:7OAz8ucp35AU8eydejpYG7QrbE8rLKzGhHbZlJi5LYY= go.uber.org/fx v1.9.0/go.mod h1:mFdUyAUuJ3w4jAckiKSKbldsxy1ojpAMJ+dVZg5Y0Aw= go.uber.org/multierr v1.1.0 h1:HoEmRHQPVSqub6w2z2d2EOVs2fjyFRGyofhKuyDq0QI= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= +golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190426145343-a29dc8fdc734/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190618222545-ea8f1a30c443 h1:IcSOAf4PyMp3U3XbIEj1/xJ2BjNN2jWv7JoyOsMxXUU= +golang.org/x/crypto v0.0.0-20190618222545-ea8f1a30c443/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190219092855-153ac476189d/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d h1:+R4KGOnez64A81RvjARKc4UT5/tI9ujCIVX+P5KiHuI= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/urfave/cli.v2 v2.0.0-20180128182452-d3ae77c26ac8 h1:Ggy3mWN4l3PUFPfSG0YB3n5fVYggzysUmiUQ89SnX6Y= gopkg.in/urfave/cli.v2 v2.0.0-20180128182452-d3ae77c26ac8/go.mod h1:cKXr3E0k4aosgycml1b5z33BVV6hai1Kh7uDgFOkbcs= +gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/node/builder.go b/node/builder.go new file mode 100644 index 000000000..fb5ae6b78 --- /dev/null +++ b/node/builder.go @@ -0,0 +1,48 @@ +package node + +import ( + "context" + + "github.com/libp2p/go-libp2p-core/peer" + "go.uber.org/fx" + + "github.com/filecoin-project/go-lotus/api" + "github.com/filecoin-project/go-lotus/build" + "github.com/filecoin-project/go-lotus/node/modules" +) + +func New(ctx context.Context) (api.API, error) { + var resApi api.Struct + + app := fx.New( + fx.Provide(modules.RandomPeerID), + + fx.Invoke(versionApi(&resApi.Internal.Version)), + fx.Invoke(idApi(&resApi.Internal.ID)), + ) + + if err := app.Start(ctx); err != nil { + return nil, err + } + + return &resApi, nil +} + +// TODO: figure out a better way, this isn't usable in long term +func idApi(set *func(ctx context.Context) (peer.ID, error)) func(id peer.ID) { + return func(id peer.ID) { + *set = func(ctx context.Context) (peer.ID, error) { + return id, nil + } + } +} + +func versionApi(set *func(context.Context) (api.Version, error)) func() { + return func() { + *set = func(context.Context) (api.Version, error) { + return api.Version{ + Version: build.Version, + }, nil + } + } +} diff --git a/daemon/modules/core.go b/node/modules/core.go similarity index 100% rename from daemon/modules/core.go rename to node/modules/core.go diff --git a/daemon/modules/libp2p.go b/node/modules/libp2p.go similarity index 100% rename from daemon/modules/libp2p.go rename to node/modules/libp2p.go diff --git a/node/modules/testing.go b/node/modules/testing.go new file mode 100644 index 000000000..a8b4b3a1e --- /dev/null +++ b/node/modules/testing.go @@ -0,0 +1,22 @@ +package modules + +import ( + "crypto/rand" + "io" + "io/ioutil" + + "github.com/libp2p/go-libp2p-core/peer" + mh "github.com/multiformats/go-multihash" +) + +func RandomPeerID() (peer.ID, error) { + b, err := ioutil.ReadAll(io.LimitReader(rand.Reader, 32)) + if err != nil { + return "", err + } + hash, err := mh.Sum(b, mh.SHA2_256, -1) + if err != nil { + return "", err + } + return peer.ID(hash), nil +} \ No newline at end of file diff --git a/rpclib/rpcServer.go b/rpclib/rpcServer.go index 1237497ee..b0e039bfd 100644 --- a/rpclib/rpcServer.go +++ b/rpclib/rpcServer.go @@ -130,12 +130,10 @@ func (s *RPCServer) ServeHTTP(w http.ResponseWriter, r *http.Request) { } } -func (s *RPCServer) Register(r interface{}) { +func (s *RPCServer) Register(namespace string, r interface{}) { val := reflect.ValueOf(r) //TODO: expect ptr - name := val.Type().Elem().Name() - for i := 0; i < val.NumMethod(); i++ { method := val.Type().Method(i) @@ -153,7 +151,9 @@ func (s *RPCServer) Register(r interface{}) { valOut, errOut, _ := processFuncOut(funcType) - s.methods[name+"."+method.Name] = rpcHandler{ + fmt.Println(namespace+"."+method.Name) + + s.methods[namespace+"."+method.Name] = rpcHandler{ paramReceivers: recvs, nParams: ins, diff --git a/rpclib/rpc_test.go b/rpclib/rpc_test.go index 2e890b5ac..7eb82b7c6 100644 --- a/rpclib/rpc_test.go +++ b/rpclib/rpc_test.go @@ -56,7 +56,7 @@ func TestRPC(t *testing.T) { serverHandler := &SimpleServerHandler{} rpcServer := NewServer() - rpcServer.Register(serverHandler) + rpcServer.Register("SimpleServerHandler", serverHandler) // httptest stuff testServ := httptest.NewServer(rpcServer) @@ -187,7 +187,7 @@ func TestCtx(t *testing.T) { serverHandler := &CtxHandler{} rpcServer := NewServer() - rpcServer.Register(serverHandler) + rpcServer.Register("SimpleServerHandler", serverHandler) // httptest stuff testServ := httptest.NewServer(rpcServer)