add a unit test for provides functionality
Jeromy committed
Aug 7, 2014 at 21:52 UTC
e14fb5658ea87bfab1e0fe0343f79b9793222f04
2 files changed
+84
routing/dht/dht.go
+14
@@ -92,6 +92,8 @@ func (dht *IpfsDHT) Start() {
92
// Connect to a new peer at the given address
93
// TODO: move this into swarm
94
func (dht *IpfsDHT) Connect(addr *ma.Multiaddr) (*peer.Peer, error) {
95
+ maddrstr,_ := addr.String()
96
+ u.DOut("Connect to new peer: %s", maddrstr)
97
if addr == nil {
98
panic("addr was nil!")
99
}
@@ -484,3 +486,15 @@ out:
486
mes := swarm.NewMessage(p, resp.ToProtobuf())
487
dht.network.Chan.Outgoing <-mes
488
}
489
+
490
+func (dht *IpfsDHT) GetLocal(key u.Key) ([]byte, error) {
491
+ v,err := dht.datastore.Get(ds.NewKey(string(key)))
492
+ if err != nil {
493
+ return nil, err
494
+ }
495
+ return v.([]byte), nil
496
+}
497
+
498
+func (dht *IpfsDHT) PutLocal(key u.Key, value []byte) error {
499
+ return dht.datastore.Put(ds.NewKey(string(key)), value)
500
+}
routing/dht/dht_test.go
+70
@@ -7,6 +7,7 @@ import (
7
u "github.com/jbenet/go-ipfs/util"
8
9
"time"
10
+ "fmt"
11
)
12
13
func TestPing(t *testing.T) {
@@ -107,3 +108,72 @@ func TestValueGetSet(t *testing.T) {
108
t.Fatalf("Expected 'world' got %s", string(val))
109
}
110
}
111
+
112
+func TestProvides(t *testing.T) {
113
+ u.Debug = false
114
+ var addrs []*ma.Multiaddr
115
+ for i := 0; i < 4; i++ {
116
+ a,err := ma.NewMultiaddr(fmt.Sprintf("/ip4/127.0.0.1/tcp/%d", 5000 + i))
117
+ if err != nil {
118
+ t.Fatal(err)
119
+ }
120
+ addrs = append(addrs, a)
121
+ }
122
+
123
+
124
+ var peers []*peer.Peer
125
+ for i := 0; i < 4; i++ {
126
+ p := new(peer.Peer)
127
+ p.AddAddress(addrs[i])
128
+ p.ID = peer.ID([]byte(fmt.Sprintf("peer_%d", i)))
129
+ peers = append(peers, p)
130
+ }
131
+
132
+ var dhts []*IpfsDHT
133
+ for i := 0; i < 4; i++ {
134
+ d,err := NewDHT(peers[i])
135
+ if err != nil {
136
+ t.Fatal(err)
137
+ }
138
+ dhts = append(dhts, d)
139
+ d.Start()
140
+ }
141
+
142
+ _, err := dhts[0].Connect(addrs[1])
143
+ if err != nil {
144
+ t.Fatal(err)
145
+ }
146
+
147
+ _, err = dhts[1].Connect(addrs[2])
148
+ if err != nil {
149
+ t.Fatal(err)
150
+ }
151
+
152
+ _, err = dhts[1].Connect(addrs[3])
153
+ if err != nil {
154
+ t.Fatal(err)
155
+ }
156
+
157
+ err = dhts[3].PutLocal(u.Key("hello"), []byte("world"))
158
+ if err != nil {
159
+ t.Fatal(err)
160
+ }
161
+
162
+ err = dhts[3].Provide(u.Key("hello"))
163
+ if err != nil {
164
+ t.Fatal(err)
165
+ }
166
+
167
+ time.Sleep(time.Millisecond * 60)
168
+
169
+ provs,err := dhts[0].FindProviders(u.Key("hello"), time.Second)
170
+ if err != nil {
171
+ t.Fatal(err)
172
+ }
173
+
174
+ if len(provs) != 1 {
175
+ t.Fatal("Didnt get back providers")
176
+ }
177
+}
178
+
179
+