From 081384fb7f01ebb688fa7801027d93542acb59f0 Mon Sep 17 00:00:00 2001 From: Hector Sanjuan Date: Wed, 15 Nov 2017 18:55:55 +0100 Subject: [PATCH] cluster: Make peersFromMultiaddrs remove any duplicates. Use it to find out the number of peers in the config and prevent peerAdd test failures. License: MIT Signed-off-by: Hector Sanjuan --- peer_manager_test.go | 2 +- util.go | 10 +++++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/peer_manager_test.go b/peer_manager_test.go index 1abc1666..046e1d94 100644 --- a/peer_manager_test.go +++ b/peer_manager_test.go @@ -91,7 +91,7 @@ func TestClustersPeerAdd(t *testing.T) { // check that they are part of the configuration // This only works because each peer only has one multiaddress // (localhost) - if len(c.config.Peers) != nClusters-1 { + if len(peersFromMultiaddrs(c.config.Peers)) != nClusters-1 { t.Error(c.config.Peers) t.Errorf("%s: expected different cluster peers in the configuration", c.id) } diff --git a/util.go b/util.go index 193b1df2..65b83354 100644 --- a/util.go +++ b/util.go @@ -81,14 +81,22 @@ func multiaddrJoin(addr ma.Multiaddr, p peer.ID) ma.Multiaddr { return addr.Encapsulate(pidAddr) } +// returns all the different peers in the given addresses. +// each peer only will appear once in the result, even if several +// multiaddresses for it are provided. func peersFromMultiaddrs(addrs []ma.Multiaddr) []peer.ID { var pids []peer.ID + pm := make(map[peer.ID]struct{}) for _, addr := range addrs { pid, _, err := multiaddrSplit(addr) if err != nil { continue } - pids = append(pids, pid) + _, ok := pm[pid] + if !ok { + pm[pid] = struct{}{} + pids = append(pids, pid) + } } return pids }