@cryptotaxi247 / kubo / commits / 0a41abdd1

starting a new testing framework

Jeromy committed Aug 10, 2014 at 21:40 UTC 0a41abdd1d270a4c1eed14cc782675b971beb858
4 files changed +117 -68
routing/dht/dht.go
+3 -12
@@ -66,18 +66,9 @@ type listenInfo struct {
66 }
67
68 // NewDHT creates a new DHT object with the given peer as the 'local' host
69 -func NewDHT(p *peer.Peer) (*IpfsDHT, error) {
70 - if p == nil {
71 - return nil, errors.New("nil peer passed to NewDHT()")
72 - }
73 - network := swarm.NewSwarm(p)
74 - err := network.Listen()
75 - if err != nil {
76 - return nil, err
77 - }
78 -
69 +func NewDHT(p *peer.Peer, net swarm.Network) *IpfsDHT {
70 dht := new(IpfsDHT)
80 - dht.network = network
71 + dht.network = net
72 dht.datastore = ds.NewMapDatastore()
73 dht.self = p
74 dht.listeners = make(map[uint64]*listenInfo)
@@ -86,7 +77,7 @@ func NewDHT(p *peer.Peer) (*IpfsDHT, error) {
77 dht.routes = make([]*kb.RoutingTable, 1)
78 dht.routes[0] = kb.NewRoutingTable(20, kb.ConvertPeerID(p.ID))
79 dht.birth = time.Now()
89 - return dht, nil
80 + return dht
81 }
82
83 // Start up background goroutines needed by the DHT
routing/dht/dht_test.go
+18 -56
@@ -4,6 +4,7 @@ import (
4 "testing"
5
6 peer "github.com/jbenet/go-ipfs/peer"
7 + swarm "github.com/jbenet/go-ipfs/swarm"
8 u "github.com/jbenet/go-ipfs/util"
9 ma "github.com/jbenet/go-multiaddr"
10
@@ -31,10 +32,12 @@ func setupDHTS(n int, t *testing.T) ([]*ma.Multiaddr, []*peer.Peer, []*IpfsDHT)
32
33 var dhts []*IpfsDHT
34 for i := 0; i < 4; i++ {
34 - d, err := NewDHT(peers[i])
35 + net := swarm.NewSwarm(peers[i])
36 + err := net.Listen()
37 if err != nil {
38 t.Fatal(err)
39 }
40 + d := NewDHT(peers[i], net)
41 dhts = append(dhts, d)
42 d.Start()
43 }
@@ -61,15 +64,19 @@ func TestPing(t *testing.T) {
64 peer_b.AddAddress(addr_b)
65 peer_b.ID = peer.ID([]byte("peer_b"))
66
64 - dht_a, err := NewDHT(peer_a)
67 + neta := swarm.NewSwarm(peer_a)
68 + err = neta.Listen()
69 if err != nil {
70 t.Fatal(err)
71 }
72 + dht_a := NewDHT(peer_a, neta)
73
69 - dht_b, err := NewDHT(peer_b)
74 + netb := swarm.NewSwarm(peer_b)
75 + err = netb.Listen()
76 if err != nil {
77 t.Fatal(err)
78 }
79 + dht_b := NewDHT(peer_b, netb)
80
81 dht_a.Start()
82 dht_b.Start()
@@ -108,15 +115,19 @@ func TestValueGetSet(t *testing.T) {
115 peer_b.AddAddress(addr_b)
116 peer_b.ID = peer.ID([]byte("peer_b"))
117
111 - dht_a, err := NewDHT(peer_a)
118 + neta := swarm.NewSwarm(peer_a)
119 + err = neta.Listen()
120 if err != nil {
121 t.Fatal(err)
122 }
123 + dht_a := NewDHT(peer_a, neta)
124
116 - dht_b, err := NewDHT(peer_b)
125 + netb := swarm.NewSwarm(peer_b)
126 + err = netb.Listen()
127 if err != nil {
128 t.Fatal(err)
129 }
130 + dht_b := NewDHT(peer_b, netb)
131
132 dht_a.Start()
133 dht_b.Start()
@@ -197,32 +208,7 @@ func TestProvides(t *testing.T) {
208
209 func TestLayeredGet(t *testing.T) {
210 u.Debug = false
200 - var addrs []*ma.Multiaddr
201 - for i := 0; i < 4; i++ {
202 - a, err := ma.NewMultiaddr(fmt.Sprintf("/ip4/127.0.0.1/tcp/%d", 5000+i))
203 - if err != nil {
204 - t.Fatal(err)
205 - }
206 - addrs = append(addrs, a)
207 - }
208 -
209 - var peers []*peer.Peer
210 - for i := 0; i < 4; i++ {
211 - p := new(peer.Peer)
212 - p.AddAddress(addrs[i])
213 - p.ID = peer.ID([]byte(fmt.Sprintf("peer_%d", i)))
214 - peers = append(peers, p)
215 - }
216 -
217 - var dhts []*IpfsDHT
218 - for i := 0; i < 4; i++ {
219 - d, err := NewDHT(peers[i])
220 - if err != nil {
221 - t.Fatal(err)
222 - }
223 - dhts = append(dhts, d)
224 - d.Start()
225 - }
211 + addrs,_,dhts := setupDHTS(4, t)
212
213 _, err := dhts[0].Connect(addrs[1])
214 if err != nil {
@@ -267,32 +253,8 @@ func TestLayeredGet(t *testing.T) {
253
254 func TestFindPeer(t *testing.T) {
255 u.Debug = false
270 - var addrs []*ma.Multiaddr
271 - for i := 0; i < 4; i++ {
272 - a, err := ma.NewMultiaddr(fmt.Sprintf("/ip4/127.0.0.1/tcp/%d", 5000+i))
273 - if err != nil {
274 - t.Fatal(err)
275 - }
276 - addrs = append(addrs, a)
277 - }
278 -
279 - var peers []*peer.Peer
280 - for i := 0; i < 4; i++ {
281 - p := new(peer.Peer)
282 - p.AddAddress(addrs[i])
283 - p.ID = peer.ID([]byte(fmt.Sprintf("peer_%d", i)))
284 - peers = append(peers, p)
285 - }
256
287 - var dhts []*IpfsDHT
288 - for i := 0; i < 4; i++ {
289 - d, err := NewDHT(peers[i])
290 - if err != nil {
291 - t.Fatal(err)
292 - }
293 - dhts = append(dhts, d)
294 - d.Start()
295 - }
257 + addrs,peers,dhts := setupDHTS(4, t)
258
259 _, err := dhts[0].Connect(addrs[1])
260 if err != nil {
routing/dht/ext_test.go new
+77
@@ -0,0 +1,77 @@
1 +package dht
2 +
3 +import (
4 + "testing"
5 +
6 + peer "github.com/jbenet/go-ipfs/peer"
7 + u "github.com/jbenet/go-ipfs/util"
8 + swarm "github.com/jbenet/go-ipfs/swarm"
9 + //ma "github.com/jbenet/go-multiaddr"
10 +
11 + "fmt"
12 + "time"
13 +)
14 +
15 +// fauxNet is a standin for a swarm.Network in order to more easily recreate
16 +// different testing scenarios
17 +type fauxNet struct {
18 + Chan *swarm.Chan
19 +
20 + swarm.Network
21 +
22 + handlers []mesHandleFunc
23 +}
24 +
25 +type mesHandleFunc func(*swarm.Message) *swarm.Message
26 +
27 +func newFauxNet() *fauxNet {
28 + fn := new(fauxNet)
29 + fn.Chan = swarm.NewChan(8)
30 +
31 + return fn
32 +}
33 +
34 +func (f *fauxNet) Listen() error {
35 + go func() {
36 + for {
37 + select {
38 + case in := <-f.Chan.Outgoing:
39 + for _,h := range f.handlers {
40 + reply := h(in)
41 + if reply != nil {
42 + f.Chan.Incoming <- reply
43 + break
44 + }
45 + }
46 + }
47 + }
48 + }()
49 + return nil
50 +}
51 +
52 +func (f *fauxNet) AddHandler(fn func(*swarm.Message) *swarm.Message) {
53 + f.handlers = append(f.handlers, fn)
54 +}
55 +
56 +func (f *fauxNet) Send(mes *swarm.Message) {
57 +
58 +}
59 +
60 +func TestGetFailure(t *testing.T) {
61 + fn := newFauxNet()
62 + fn.Listen()
63 +
64 + local := new(peer.Peer)
65 + local.ID = peer.ID([]byte("test_peer"))
66 +
67 + d := NewDHT(local, fn)
68 +
69 + d.Start()
70 +
71 + b, err := d.GetValue(u.Key("test"), time.Second)
72 + if err != nil {
73 + t.Fatal(err)
74 + }
75 +
76 + fmt.Println(b)
77 +}
swarm/interface.go new
+19
@@ -0,0 +1,19 @@
1 +package swarm
2 +
3 +import (
4 + peer "github.com/jbenet/go-ipfs/peer"
5 + u "github.com/jbenet/go-ipfs/util"
6 +
7 + ma "github.com/jbenet/go-multiaddr"
8 +)
9 +
10 +type Network interface {
11 + Send(*Message)
12 + Error(error)
13 + Find(u.Key) *peer.Peer
14 + Listen() error
15 + Connect(*ma.Multiaddr) (*peer.Peer, error)
16 + GetChan() *Chan
17 + Close()
18 + Drop(*peer.Peer) error
19 +}