mirror of
https://github.com/anyproto/any-sync.git
synced 2025-06-08 05:57:03 +09:00
65 lines
1.6 KiB
Go
65 lines
1.6 KiB
Go
package syncqueues
|
|
|
|
import (
|
|
"fmt"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestLimitExcluded(t *testing.T) {
|
|
for _, tc := range []struct {
|
|
peerStep []int
|
|
excludeIds []string
|
|
excludedLimit int
|
|
}{
|
|
{
|
|
peerStep: []int{5, 4, 3, 2, 1},
|
|
excludeIds: []string{"excluded1", "excluded2"},
|
|
excludedLimit: 10,
|
|
},
|
|
} {
|
|
totalStep := make([]int, len(tc.peerStep)-1)
|
|
totalStep[0] = tc.peerStep[0]
|
|
for i := 1; i < len(tc.peerStep)-2; i++ {
|
|
totalStep[i] = totalStep[i-1] + tc.peerStep[i] + 1
|
|
}
|
|
totalStep[len(totalStep)-1] = totalStep[len(totalStep)-2] + tc.peerStep[len(tc.peerStep)-1]
|
|
l := NewLimit(tc.peerStep, totalStep, tc.excludeIds, tc.excludedLimit)
|
|
|
|
// Test regular peers
|
|
for j := 0; j < len(tc.peerStep); j++ {
|
|
for i := 0; i < tc.peerStep[j]; i++ {
|
|
require.True(t, l.Take(fmt.Sprint(j)))
|
|
}
|
|
require.False(t, l.Take(fmt.Sprint(j)))
|
|
}
|
|
require.Equal(t, len(tc.peerStep)-1, l.counter)
|
|
require.Equal(t, totalStep[len(totalStep)-1], l.total)
|
|
|
|
// Test excluded peers
|
|
for _, id := range tc.excludeIds {
|
|
for i := 0; i < tc.excludedLimit; i++ {
|
|
require.True(t, l.Take(id))
|
|
}
|
|
require.False(t, l.Take(id))
|
|
}
|
|
|
|
// Release regular peers
|
|
for j := 0; j < len(tc.peerStep); j++ {
|
|
for i := 0; i < tc.peerStep[j]; i++ {
|
|
l.Release(fmt.Sprint(j))
|
|
}
|
|
}
|
|
require.Equal(t, 0, l.counter)
|
|
require.Equal(t, 0, l.total)
|
|
|
|
// Release excluded peers
|
|
for _, id := range tc.excludeIds {
|
|
for i := 0; i < tc.excludedLimit; i++ {
|
|
l.Release(id)
|
|
}
|
|
}
|
|
require.Equal(t, 0, l.excludedTotal)
|
|
}
|
|
}
|