From 9d0736bc3b546f2fcf63ada12bb0ced14c288f8e Mon Sep 17 00:00:00 2001 From: Juan Batiz-Benet Date: Mon, 5 Jan 2015 04:30:22 -0800 Subject: [PATCH] peer+mocknet: sorting for determinism. --- p2p/net/mock/mock_net.go | 19 +++++++++++++++++++ p2p/peer/peer.go | 7 +++++++ 2 files changed, 26 insertions(+) diff --git a/p2p/net/mock/mock_net.go b/p2p/net/mock/mock_net.go index d380e5173..1bb9ddf5a 100644 --- a/p2p/net/mock/mock_net.go +++ b/p2p/net/mock/mock_net.go @@ -2,6 +2,7 @@ package mocknet import ( "fmt" + "sort" "sync" "time" @@ -90,6 +91,7 @@ func (mn *mocknet) Peers() []peer.ID { for _, n := range mn.nets { cp = append(cp, n.peer) } + sort.Sort(peer.IDSlice(cp)) return cp } @@ -115,6 +117,8 @@ func (mn *mocknet) Hosts() []host.Host { for _, h := range mn.hosts { cp = append(cp, h) } + + sort.Sort(hostSlice(cp)) return cp } @@ -126,6 +130,7 @@ func (mn *mocknet) Nets() []inet.Network { for _, n := range mn.nets { cp = append(cp, n) } + sort.Sort(netSlice(cp)) return cp } @@ -339,3 +344,17 @@ func (mn *mocknet) LinkDefaults() LinkOptions { defer mn.RUnlock() return mn.linkDefaults } + +// netSlice for sorting by peer +type netSlice []inet.Network + +func (es netSlice) Len() int { return len(es) } +func (es netSlice) Swap(i, j int) { es[i], es[j] = es[j], es[i] } +func (es netSlice) Less(i, j int) bool { return string(es[i].LocalPeer()) < string(es[j].LocalPeer()) } + +// hostSlice for sorting by peer +type hostSlice []host.Host + +func (es hostSlice) Len() int { return len(es) } +func (es hostSlice) Swap(i, j int) { es[i], es[j] = es[j], es[i] } +func (es hostSlice) Less(i, j int) bool { return string(es[i].ID()) < string(es[j].ID()) } diff --git a/p2p/peer/peer.go b/p2p/peer/peer.go index fa4e448d6..c29e23283 100644 --- a/p2p/peer/peer.go +++ b/p2p/peer/peer.go @@ -130,3 +130,10 @@ type PeerInfo struct { ID ID Addrs []ma.Multiaddr } + +// IDSlice for sorting peers +type IDSlice []ID + +func (es IDSlice) Len() int { return len(es) } +func (es IDSlice) Swap(i, j int) { es[i], es[j] = es[j], es[i] } +func (es IDSlice) Less(i, j int) bool { return string(es[i]) < string(es[j]) }