combine multiple bootstrap addrs into single peer info
License: MIT Signed-off-by: Jeromy <jeromyj@gmail.com>
Jeromy committed
Jan 14, 2016 at 07:18 UTC
1649b44ae038680917d17ff9345c31ae703b08f6
2 files changed
+45
-2
core/bootstrap.go
+14
-2
@@ -203,10 +203,22 @@ func bootstrapConnect(ctx context.Context, ph host.Host, peers []peer.PeerInfo)
203
}
204
205
func toPeerInfos(bpeers []config.BootstrapPeer) []peer.PeerInfo {
206
- var peers []peer.PeerInfo
206
+ pinfos := make(map[peer.ID]*peer.PeerInfo)
207
for _, bootstrap := range bpeers {
208
- peers = append(peers, toPeerInfo(bootstrap))
208
+ pinfo, ok := pinfos[bootstrap.ID()]
209
+ if !ok {
210
+ pinfo = new(peer.PeerInfo)
211
+ pinfos[bootstrap.ID()] = pinfo
212
+ pinfo.ID = bootstrap.ID()
213
+ }
214
+ pinfo.Addrs = append(pinfo.Addrs, bootstrap.Multiaddr())
215
+ }
216
+
217
+ var peers []peer.PeerInfo
218
+ for _, pinfo := range pinfos {
219
+ peers = append(peers, *pinfo)
220
}
221
+
222
return peers
223
}
224
core/bootstrap_test.go
+31
@@ -1,9 +1,11 @@
1
package core
2
3
import (
4
+ "fmt"
5
"testing"
6
7
peer "github.com/ipfs/go-ipfs/p2p/peer"
8
+ config "github.com/ipfs/go-ipfs/repo/config"
9
testutil "github.com/ipfs/go-ipfs/util/testutil"
10
)
11
@@ -23,3 +25,32 @@ func TestSubsetWhenMaxIsGreaterThanLengthOfSlice(t *testing.T) {
25
t.Fail()
26
}
27
}
28
+
29
+func TestMultipleAddrsPerPeer(t *testing.T) {
30
+ var bsps []config.BootstrapPeer
31
+ for i := 0; i < 10; i++ {
32
+ pid, err := testutil.RandPeerID()
33
+ if err != nil {
34
+ t.Fatal(err)
35
+ }
36
+
37
+ addr := fmt.Sprintf("/ip4/127.0.0.1/tcp/5001/ipfs/%s", pid.Pretty())
38
+ bsp1, err := config.ParseBootstrapPeer(addr)
39
+ if err != nil {
40
+ t.Fatal(err)
41
+ }
42
+
43
+ addr = fmt.Sprintf("/ip4/127.0.0.1/udp/5002/utp/ipfs/%s", pid.Pretty())
44
+ bsp2, err := config.ParseBootstrapPeer(addr)
45
+ if err != nil {
46
+ t.Fatal(err)
47
+ }
48
+
49
+ bsps = append(bsps, bsp1, bsp2)
50
+ }
51
+
52
+ pinfos := toPeerInfos(bsps)
53
+ if len(pinfos) != len(bsps)/2 {
54
+ t.Fatal("expected fewer peers")
55
+ }
56
+}