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
}