ensure testnet peers get evenly connected mesh
License: MIT Signed-off-by: Jeromy <jeromyj@gmail.com>
Jeromy committed
Jul 15, 2017 at 22:18 UTC
39e9328e47dae00ad446a84686472ded9a1987c1
3 files changed
+24
-3
exchange/bitswap/testnet/peernet.go
+2
-2
@@ -1,7 +1,7 @@
1
package bitswap
2
3
import (
4
- context "context"
4
+ "context"
5
bsnet "github.com/ipfs/go-ipfs/exchange/bitswap/network"
6
mockrouting "github.com/ipfs/go-ipfs/routing/mock"
7
testutil "github.com/ipfs/go-ipfs/thirdparty/testutil"
@@ -37,4 +37,4 @@ func (pn *peernet) HasPeer(p peer.ID) bool {
37
return false
38
}
39
40
-var _ Network = &peernet{}
40
+var _ Network = (*peernet)(nil)
exchange/bitswap/testnet/virtual.go
+21
@@ -9,16 +9,21 @@ import (
9
mockrouting "github.com/ipfs/go-ipfs/routing/mock"
10
delay "github.com/ipfs/go-ipfs/thirdparty/delay"
11
testutil "github.com/ipfs/go-ipfs/thirdparty/testutil"
12
+
13
routing "gx/ipfs/QmPjTrrSfE6TzLv6ya6VWhGcCgPrUAdcgrDcQyRDX2VyW1/go-libp2p-routing"
14
+ logging "gx/ipfs/QmSpJByNKFX1sCsHBEp3R73FL4NF6FnQTEGyNAXHm2GS52/go-log"
15
cid "gx/ipfs/QmTprEaAA2A9bst5XH7exuyi5KzNMK3SEDNN8rBDnKWcUS/go-cid"
16
peer "gx/ipfs/QmXYjuNuxVzXKJCfWasQk1RqkhVLDM9jtUKhqc2WPQmFSB/go-libp2p-peer"
17
)
18
19
+var log = logging.Logger("bstestnet")
20
+
21
func VirtualNetwork(rs mockrouting.Server, d delay.D) Network {
22
return &network{
23
clients: make(map[peer.ID]bsnet.Receiver),
24
delay: d,
25
routingserver: rs,
26
+ conns: make(map[string]struct{}),
27
}
28
}
29
@@ -26,6 +31,7 @@ type network struct {
31
clients map[peer.ID]bsnet.Receiver
32
routingserver mockrouting.Server
33
delay delay.D
34
+ conns map[string]struct{}
35
}
36
37
func (n *network) Adapter(p testutil.Identity) bsnet.BitSwapNetwork {
@@ -149,7 +155,22 @@ func (nc *networkClient) ConnectTo(_ context.Context, p peer.ID) error {
155
if !nc.network.HasPeer(p) {
156
return errors.New("no such peer in network")
157
}
158
+ tag := tagForPeers(nc.local, p)
159
+ if _, ok := nc.network.conns[tag]; ok {
160
+ log.Warning("ALREADY CONNECTED TO PEER (is this a reconnect? test lib needs fixing)")
161
+ return nil
162
+ }
163
+ nc.network.conns[tag] = struct{}{}
164
+ // TODO: add handling for disconnects
165
+
166
nc.network.clients[p].PeerConnected(nc.local)
167
nc.Receiver.PeerConnected(p)
168
return nil
169
}
170
+
171
+func tagForPeers(a, b peer.ID) string {
172
+ if a < b {
173
+ return string(a + b)
174
+ }
175
+ return string(b + a)
176
+}
exchange/bitswap/testutils.go
+1
-1
@@ -59,7 +59,7 @@ func (g *SessionGenerator) Instances(n int) []Instance {
59
for i, inst := range instances {
60
for j := i + 1; j < len(instances); j++ {
61
oinst := instances[j]
62
- inst.Exchange.PeerConnected(oinst.Peer)
62
+ inst.Exchange.network.ConnectTo(context.Background(), oinst.Peer)
63
}
64
}
65
return instances