mirror of
https://github.com/ipfs/kubo.git
synced 2025-06-25 06:58:18 +08:00
add routing resolver test
This commit is contained in:
@ -61,7 +61,7 @@ type IpfsNode struct {
|
|||||||
Resolver *path.Resolver
|
Resolver *path.Resolver
|
||||||
|
|
||||||
// the name system, resolves paths to hashes
|
// the name system, resolves paths to hashes
|
||||||
Namesys namesys.NSResolver
|
Namesys namesys.Resolver
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewIpfsNode constructs a new IpfsNode based on the given config.
|
// NewIpfsNode constructs a new IpfsNode based on the given config.
|
||||||
@ -143,6 +143,7 @@ func NewIpfsNode(cfg *config.Config, online bool) (*IpfsNode, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dag := &merkledag.DAGService{Blocks: bs}
|
dag := &merkledag.DAGService{Blocks: bs}
|
||||||
|
resolve := namesys.NewMasterResolver(route, dag)
|
||||||
|
|
||||||
success = true
|
success = true
|
||||||
return &IpfsNode{
|
return &IpfsNode{
|
||||||
@ -155,6 +156,7 @@ func NewIpfsNode(cfg *config.Config, online bool) (*IpfsNode, error) {
|
|||||||
Exchange: exchangeSession,
|
Exchange: exchangeSession,
|
||||||
Identity: local,
|
Identity: local,
|
||||||
Routing: route,
|
Routing: route,
|
||||||
|
Namesys: resolve,
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
package namesys
|
package namesys
|
||||||
|
|
||||||
type NSResolver interface {
|
type Resolver interface {
|
||||||
Resolve(string) (string, error)
|
Resolve(string) (string, error)
|
||||||
}
|
}
|
||||||
|
66
namesys/resolve_test.go
Normal file
66
namesys/resolve_test.go
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
package namesys
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
ds "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/datastore.go"
|
||||||
|
bs "github.com/jbenet/go-ipfs/blockservice"
|
||||||
|
ci "github.com/jbenet/go-ipfs/crypto"
|
||||||
|
mdag "github.com/jbenet/go-ipfs/merkledag"
|
||||||
|
"github.com/jbenet/go-ipfs/peer"
|
||||||
|
"github.com/jbenet/go-ipfs/routing/dht"
|
||||||
|
"github.com/jbenet/go-ipfs/swarm"
|
||||||
|
u "github.com/jbenet/go-ipfs/util"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestRoutingResolve(t *testing.T) {
|
||||||
|
local := &peer.Peer{
|
||||||
|
ID: []byte("testID"),
|
||||||
|
}
|
||||||
|
net := swarm.NewSwarm(local)
|
||||||
|
lds := ds.NewMapDatastore()
|
||||||
|
d := dht.NewDHT(local, net, lds)
|
||||||
|
|
||||||
|
bserv, err := bs.NewBlockService(lds, nil)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
dag := &mdag.DAGService{Blocks: bserv}
|
||||||
|
|
||||||
|
resolve := NewMasterResolver(d, dag)
|
||||||
|
|
||||||
|
pub := IpnsPublisher{
|
||||||
|
dag: dag,
|
||||||
|
routing: d,
|
||||||
|
}
|
||||||
|
|
||||||
|
privk, pubk, err := ci.GenerateKeyPair(ci.RSA, 512)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
err = pub.Publish(privk, u.Key("Hello"))
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
pubkb, err := pubk.Bytes()
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
pkhash, err := u.Hash(pubkb)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
res, err := resolve.Resolve(u.Key(pkhash).Pretty())
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if res != "Hello" {
|
||||||
|
t.Fatal("Got back incorrect value.")
|
||||||
|
}
|
||||||
|
}
|
@ -29,6 +29,7 @@ func NewRoutingResolver(route routing.IpfsRouting, dagservice *mdag.DAGService)
|
|||||||
func (r *RoutingResolver) Resolve(name string) (string, error) {
|
func (r *RoutingResolver) Resolve(name string) (string, error) {
|
||||||
hash, err := mh.FromB58String(name)
|
hash, err := mh.FromB58String(name)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
u.DOut("RoutingResolve: bad input hash: [%s]\n", name)
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
// name should be a multihash. if it isn't, error out here.
|
// name should be a multihash. if it isn't, error out here.
|
||||||
@ -43,6 +44,7 @@ func (r *RoutingResolver) Resolve(name string) (string, error) {
|
|||||||
inpsKey := u.Key(h)
|
inpsKey := u.Key(h)
|
||||||
val, err := r.routing.GetValue(inpsKey, time.Second*10)
|
val, err := r.routing.GetValue(inpsKey, time.Second*10)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
u.DOut("RoutingResolve get failed.\n")
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -55,13 +57,14 @@ func (r *RoutingResolver) Resolve(name string) (string, error) {
|
|||||||
// name should be a public key retrievable from ipfs
|
// name should be a public key retrievable from ipfs
|
||||||
// /ipfs/<name>
|
// /ipfs/<name>
|
||||||
key := u.Key(hash)
|
key := u.Key(hash)
|
||||||
node, err := r.dag.Get(key)
|
pkval, err := r.routing.GetValue(key, time.Second*10)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
u.DOut("RoutingResolve PubKey Get failed.\n")
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
|
||||||
// get PublicKey from node.Data
|
// get PublicKey from node.Data
|
||||||
pk, err := ci.UnmarshalPublicKey(node.Data)
|
pk, err := ci.UnmarshalPublicKey(pkval)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
@ -17,10 +17,13 @@ import (
|
|||||||
|
|
||||||
// PutValue adds value corresponding to given Key.
|
// PutValue adds value corresponding to given Key.
|
||||||
// This is the top level "Store" operation of the DHT
|
// This is the top level "Store" operation of the DHT
|
||||||
func (dht *IpfsDHT) PutValue(ctx context.Context, key u.Key, value []byte) error {
|
func (dht *IpfsDHT) PutValue(key u.Key, value []byte) error {
|
||||||
peers := []*peer.Peer{}
|
err := dht.putLocal(key, value)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
// get the peers we need to announce to
|
var peers []*peer.Peer
|
||||||
for _, route := range dht.routingTables {
|
for _, route := range dht.routingTables {
|
||||||
npeers := route.NearestPeers(kb.ConvertKey(key), KValue)
|
npeers := route.NearestPeers(kb.ConvertKey(key), KValue)
|
||||||
peers = append(peers, npeers...)
|
peers = append(peers, npeers...)
|
||||||
|
Reference in New Issue
Block a user