@cryptotaxi247 / kubo / commits / 4cb2e1e07

add fauxNet to stand in for Swarm in tests to reproduce various network conditions

Jeromy committed Aug 11, 2014 at 09:06 UTC 4cb2e1e07be7ca308d624f459f96774e00493519
2 files changed +57 -11
routing/dht/dht_test.go
+2 -2
@@ -208,7 +208,7 @@ func TestProvides(t *testing.T) {
208
209 func TestLayeredGet(t *testing.T) {
210 u.Debug = false
211 - addrs,_,dhts := setupDHTS(4, t)
211 + addrs, _, dhts := setupDHTS(4, t)
212
213 _, err := dhts[0].Connect(addrs[1])
214 if err != nil {
@@ -254,7 +254,7 @@ func TestLayeredGet(t *testing.T) {
254 func TestFindPeer(t *testing.T) {
255 u.Debug = false
256
257 - addrs,peers,dhts := setupDHTS(4, t)
257 + addrs, peers, dhts := setupDHTS(4, t)
258
259 _, err := dhts[0].Connect(addrs[1])
260 if err != nil {
routing/dht/ext_test.go
+55 -9
@@ -3,12 +3,13 @@ package dht
3 import (
4 "testing"
5
6 + "code.google.com/p/goprotobuf/proto"
7 +
8 peer "github.com/jbenet/go-ipfs/peer"
7 - u "github.com/jbenet/go-ipfs/util"
9 swarm "github.com/jbenet/go-ipfs/swarm"
9 - //ma "github.com/jbenet/go-multiaddr"
10 + u "github.com/jbenet/go-ipfs/util"
11 + ma "github.com/jbenet/go-multiaddr"
12
11 - "fmt"
13 "time"
14 )
15
@@ -36,7 +37,7 @@ func (f *fauxNet) Listen() error {
37 for {
38 select {
39 case in := <-f.Chan.Outgoing:
39 - for _,h := range f.handlers {
40 + for _, h := range f.handlers {
41 reply := h(in)
42 if reply != nil {
43 f.Chan.Incoming <- reply
@@ -54,24 +55,69 @@ func (f *fauxNet) AddHandler(fn func(*swarm.Message) *swarm.Message) {
55 }
56
57 func (f *fauxNet) Send(mes *swarm.Message) {
58 + f.Chan.Outgoing <- mes
59 +}
60
61 +func (f *fauxNet) GetChan() *swarm.Chan {
62 + return f.Chan
63 }
64
60 -func TestGetFailure(t *testing.T) {
65 +func (f *fauxNet) Connect(addr *ma.Multiaddr) (*peer.Peer, error) {
66 + return nil, nil
67 +}
68 +
69 +func TestGetFailures(t *testing.T) {
70 fn := newFauxNet()
71 fn.Listen()
72
73 local := new(peer.Peer)
65 - local.ID = peer.ID([]byte("test_peer"))
74 + local.ID = peer.ID("test_peer")
75
76 d := NewDHT(local, fn)
77
78 + other := &peer.Peer{ID: peer.ID("other_peer")}
79 +
80 d.Start()
81
71 - b, err := d.GetValue(u.Key("test"), time.Second)
82 + d.Update(other)
83 +
84 + // This one should time out
85 + _, err := d.GetValue(u.Key("test"), time.Millisecond*5)
86 if err != nil {
73 - t.Fatal(err)
87 + nerr, ok := err.(*u.IpfsError)
88 + if !ok {
89 + t.Fatal("Got different error than we expected.")
90 + }
91 + if nerr.Inner != u.ErrTimeout {
92 + t.Fatal("Got different error than we expected.")
93 + }
94 + } else {
95 + t.Fatal("Did not get expected error!")
96 }
97
76 - fmt.Println(b)
98 + fn.AddHandler(func(mes *swarm.Message) *swarm.Message {
99 + pmes := new(PBDHTMessage)
100 + err := proto.Unmarshal(mes.Data, pmes)
101 + if err != nil {
102 + t.Fatal(err)
103 + }
104 +
105 + resp := DHTMessage{
106 + Type: pmes.GetType(),
107 + Id: pmes.GetId(),
108 + Response: true,
109 + Success: false,
110 + }
111 + return swarm.NewMessage(mes.Peer, resp.ToProtobuf())
112 + })
113 +
114 + // This one should fail with NotFound
115 + _, err = d.GetValue(u.Key("test"), time.Millisecond*5)
116 + if err != nil {
117 + if err != u.ErrNotFound {
118 + t.Fatal("Expected ErrNotFound, got: %s", err)
119 + }
120 + } else {
121 + t.Fatal("expected error, got none.")
122 + }
123 }