1
0
Fork 0
mirror of https://github.com/anyproto/any-sync.git synced 2025-06-08 05:57:03 +09:00
any-sync/util/syncqueues/limit_test.go
2024-08-14 00:32:08 +02:00

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)
}
}