@cryptotaxi247 / kubo / commits / 2aa2b8c6c

add routing resolver test

Jeromy committed Sep 12, 2014 at 17:34 UTC 2aa2b8c6c7f591c629c855ab352e12e59a93f54c
5 files changed +81 -7
core/core.go
+3 -1
@@ -61,7 +61,7 @@ type IpfsNode struct {
61 Resolver *path.Resolver
62
63 // the name system, resolves paths to hashes
64 - Namesys namesys.NSResolver
64 + Namesys namesys.Resolver
65 }
66
67 // NewIpfsNode constructs a new IpfsNode based on the given config.
@@ -143,6 +143,7 @@ func NewIpfsNode(cfg *config.Config, online bool) (*IpfsNode, error) {
143 }
144
145 dag := &merkledag.DAGService{Blocks: bs}
146 + resolve := namesys.NewMasterResolver(route, dag)
147
148 success = true
149 return &IpfsNode{
@@ -155,6 +156,7 @@ func NewIpfsNode(cfg *config.Config, online bool) (*IpfsNode, error) {
156 Exchange: exchangeSession,
157 Identity: local,
158 Routing: route,
159 + Namesys: resolve,
160 }, nil
161 }
162
namesys/nsresolver.go
+1 -1
@@ -1,5 +1,5 @@
1 package namesys
2
3 -type NSResolver interface {
3 +type Resolver interface {
4 Resolve(string) (string, error)
5 }
namesys/resolve_test.go new
+66
@@ -0,0 +1,66 @@
1 +package namesys
2 +
3 +import (
4 + "testing"
5 +
6 + ds "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/datastore.go"
7 + bs "github.com/jbenet/go-ipfs/blockservice"
8 + ci "github.com/jbenet/go-ipfs/crypto"
9 + mdag "github.com/jbenet/go-ipfs/merkledag"
10 + "github.com/jbenet/go-ipfs/peer"
11 + "github.com/jbenet/go-ipfs/routing/dht"
12 + "github.com/jbenet/go-ipfs/swarm"
13 + u "github.com/jbenet/go-ipfs/util"
14 +)
15 +
16 +func TestRoutingResolve(t *testing.T) {
17 + local := &peer.Peer{
18 + ID: []byte("testID"),
19 + }
20 + net := swarm.NewSwarm(local)
21 + lds := ds.NewMapDatastore()
22 + d := dht.NewDHT(local, net, lds)
23 +
24 + bserv, err := bs.NewBlockService(lds, nil)
25 + if err != nil {
26 + t.Fatal(err)
27 + }
28 +
29 + dag := &mdag.DAGService{Blocks: bserv}
30 +
31 + resolve := NewMasterResolver(d, dag)
32 +
33 + pub := IpnsPublisher{
34 + dag: dag,
35 + routing: d,
36 + }
37 +
38 + privk, pubk, err := ci.GenerateKeyPair(ci.RSA, 512)
39 + if err != nil {
40 + t.Fatal(err)
41 + }
42 +
43 + err = pub.Publish(privk, u.Key("Hello"))
44 + if err != nil {
45 + t.Fatal(err)
46 + }
47 +
48 + pubkb, err := pubk.Bytes()
49 + if err != nil {
50 + t.Fatal(err)
51 + }
52 +
53 + pkhash, err := u.Hash(pubkb)
54 + if err != nil {
55 + t.Fatal(err)
56 + }
57 +
58 + res, err := resolve.Resolve(u.Key(pkhash).Pretty())
59 + if err != nil {
60 + t.Fatal(err)
61 + }
62 +
63 + if res != "Hello" {
64 + t.Fatal("Got back incorrect value.")
65 + }
66 +}
namesys/routing.go
+5 -2
@@ -29,6 +29,7 @@ func NewRoutingResolver(route routing.IpfsRouting, dagservice *mdag.DAGService)
29 func (r *RoutingResolver) Resolve(name string) (string, error) {
30 hash, err := mh.FromB58String(name)
31 if err != nil {
32 + u.DOut("RoutingResolve: bad input hash: [%s]\n", name)
33 return "", err
34 }
35 // name should be a multihash. if it isn't, error out here.
@@ -43,6 +44,7 @@ func (r *RoutingResolver) Resolve(name string) (string, error) {
44 inpsKey := u.Key(h)
45 val, err := r.routing.GetValue(inpsKey, time.Second*10)
46 if err != nil {
47 + u.DOut("RoutingResolve get failed.\n")
48 return "", err
49 }
50
@@ -55,13 +57,14 @@ func (r *RoutingResolver) Resolve(name string) (string, error) {
57 // name should be a public key retrievable from ipfs
58 // /ipfs/<name>
59 key := u.Key(hash)
58 - node, err := r.dag.Get(key)
60 + pkval, err := r.routing.GetValue(key, time.Second*10)
61 if err != nil {
62 + u.DOut("RoutingResolve PubKey Get failed.\n")
63 return "", err
64 }
65
66 // get PublicKey from node.Data
64 - pk, err := ci.UnmarshalPublicKey(node.Data)
67 + pk, err := ci.UnmarshalPublicKey(pkval)
68 if err != nil {
69 return "", err
70 }
routing/dht/routing.go
+6 -3
@@ -17,10 +17,13 @@ import (
17
18 // PutValue adds value corresponding to given Key.
19 // This is the top level "Store" operation of the DHT
20 -func (dht *IpfsDHT) PutValue(ctx context.Context, key u.Key, value []byte) error {
21 - peers := []*peer.Peer{}
20 +func (dht *IpfsDHT) PutValue(key u.Key, value []byte) error {
21 + err := dht.putLocal(key, value)
22 + if err != nil {
23 + return err
24 + }
25
23 - // get the peers we need to announce to
26 + var peers []*peer.Peer
27 for _, route := range dht.routingTables {
28 npeers := route.NearestPeers(kb.ConvertKey(key), KValue)
29 peers = append(peers, npeers...)