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...)