Merge pull request #1948 from weaveworks/test-claimforpeers

Improve IPAM Ring unit testing, and streamline ring.ClaimForPeers
This commit is contained in:
Matthias Radestock committed 2016-02-04 15:31:00 +00:00
commit e47c4a78f0
2 files changed
+37 -14

No files matched your search

+1 -6
View File
@@ -356,12 +356,7 @@ func (r *Ring) ClaimForPeers(peers []mesh.PeerName) {
}
}
if e, found := r.Entries.get(pos); found {
e.update(peer, share)
} else {
r.Entries.insert(entry{Token: pos, Peer: peer, Free: share})
}
r.Entries.insert(entry{Token: pos, Peer: peer, Free: share})
pos += address.Address(share)
}
+36 -8
View File
@@ -60,13 +60,19 @@ func TestInsert(t *testing.T) {
ring.Entries.entry(0).Free = 0
ring.Entries.insert(entry{Token: dot245, Peer: peer1name})
ring2 := New(start, end, peer1name)
ring2.Entries = []*entry{{Token: start, Peer: peer1name, Free: 0}, {Token: dot245, Peer: peer1name}}
require.Equal(t, ring2, ring)
check := []RangeInfo{
{Peer: peer1name, Range: address.Range{Start: start, End: dot245}},
{Peer: peer1name, Range: address.Range{Start: dot245, End: end}},
}
require.Equal(t, check, ring.AllRangeInfo())
ring.Entries.insert(entry{Token: dot10, Peer: peer1name})
ring2.Entries = []*entry{{Token: start, Peer: peer1name, Free: 0}, {Token: dot10, Peer: peer1name}, {Token: dot245, Peer: peer1name}}
require.Equal(t, ring2, ring)
check2 := []RangeInfo{
{Peer: peer1name, Range: address.Range{Start: start, End: dot10}},
{Peer: peer1name, Range: address.Range{Start: dot10, End: dot245}},
{Peer: peer1name, Range: address.Range{Start: dot245, End: end}},
}
require.Equal(t, check2, ring.AllRangeInfo())
}
func TestBetween(t *testing.T) {
@@ -506,6 +512,29 @@ func TestOwner(t *testing.T) {
}
func makePeerName(i int) mesh.PeerName {
if i >= 10000 {
panic("makePeerName: invalid value")
}
peer, _ := mesh.PeerNameFromString(fmt.Sprintf("%02d:%02d:00:00:00:ff", i/100, i%100))
return peer
}
func TestClaimForPeers(t *testing.T) {
const numPeers = 12
// Different end to usual so we get a number of addresses that a)
// is smaller than the max number of peers, and b) is divisible by
// some number of peers. This maximises coverage of edge cases.
end := dot10
peers := make([]mesh.PeerName, numPeers)
// Test for a range of peer counts
for i := 0; i < numPeers; i++ {
peers[i] = makePeerName(i)
ring := New(start, end, peers[0])
ring.ClaimForPeers(peers[:i+1])
}
}
type addressSlice []address.Address
func (s addressSlice) Len() int { return len(s) }
@@ -520,8 +549,7 @@ func TestFuzzRing(t *testing.T) {
peers := make([]mesh.PeerName, numPeers)
for i := 0; i < numPeers; i++ {
peer, _ := mesh.PeerNameFromString(fmt.Sprintf("%02d:00:00:00:02:00", i))
peers[i] = peer
peers[i] = makePeerName(i)
}
// Make a valid, random ring
@@ -608,7 +636,7 @@ func TestFuzzRingHard(t *testing.T) {
)
addPeer := func() {
peer, _ := mesh.PeerNameFromString(fmt.Sprintf("%02d:%02d:00:00:00:00", nextPeerID/10, nextPeerID%10))
peer := makePeerName(nextPeerID)
common.Log.Debugf("%s: Adding peer", peer)
nextPeerID++
peers = append(peers, peer)