@cryptotaxi247 / kubo / commits / e14fb5658

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 +