1
0
mirror of https://github.com/ipfs/kubo.git synced 2025-06-24 22:38:27 +08:00

add routing resolver test

This commit is contained in:
Jeromy
2014-09-12 17:34:07 +00:00
committed by Juan Batiz-Benet
parent 4c0f18cbbd
commit 2aa2b8c6c7
5 changed files with 81 additions and 7 deletions

View File

@ -61,7 +61,7 @@ type IpfsNode struct {
Resolver *path.Resolver
// the name system, resolves paths to hashes
Namesys namesys.NSResolver
Namesys namesys.Resolver
}
// 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}
resolve := namesys.NewMasterResolver(route, dag)
success = true
return &IpfsNode{
@ -155,6 +156,7 @@ func NewIpfsNode(cfg *config.Config, online bool) (*IpfsNode, error) {
Exchange: exchangeSession,
Identity: local,
Routing: route,
Namesys: resolve,
}, nil
}

View File

@ -1,5 +1,5 @@
package namesys
type NSResolver interface {
type Resolver interface {
Resolve(string) (string, error)
}

66
namesys/resolve_test.go Normal file
View 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.")
}
}

View File

@ -29,6 +29,7 @@ func NewRoutingResolver(route routing.IpfsRouting, dagservice *mdag.DAGService)
func (r *RoutingResolver) Resolve(name string) (string, error) {
hash, err := mh.FromB58String(name)
if err != nil {
u.DOut("RoutingResolve: bad input hash: [%s]\n", name)
return "", err
}
// 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)
val, err := r.routing.GetValue(inpsKey, time.Second*10)
if err != nil {
u.DOut("RoutingResolve get failed.\n")
return "", err
}
@ -55,13 +57,14 @@ func (r *RoutingResolver) Resolve(name string) (string, error) {
// name should be a public key retrievable from ipfs
// /ipfs/<name>
key := u.Key(hash)
node, err := r.dag.Get(key)
pkval, err := r.routing.GetValue(key, time.Second*10)
if err != nil {
u.DOut("RoutingResolve PubKey Get failed.\n")
return "", err
}
// get PublicKey from node.Data
pk, err := ci.UnmarshalPublicKey(node.Data)
pk, err := ci.UnmarshalPublicKey(pkval)
if err != nil {
return "", err
}

View File

@ -17,10 +17,13 @@ import (
// PutValue adds value corresponding to given Key.
// This is the top level "Store" operation of the DHT
func (dht *IpfsDHT) PutValue(ctx context.Context, key u.Key, value []byte) error {
peers := []*peer.Peer{}
func (dht *IpfsDHT) PutValue(key u.Key, value []byte) error {
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 {
npeers := route.NearestPeers(kb.ConvertKey(key), KValue)
peers = append(peers, npeers...)