You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

73 lines
1.6 KiB

package p2p
import (
"math"
"math/rand"
"net"
"testing"
"time"
"github.com/stretchr/testify/require"
)
func randByte() byte {
return byte(rand.Intn(math.MaxUint8))
}
func randLocalIPv4() net.IP {
return net.IPv4(127, randByte(), randByte(), randByte())
}
func TestConnTracker(t *testing.T) {
for name, factory := range map[string]func() connectionTracker{
"BaseSmall": func() connectionTracker {
return newConnTracker(10, time.Second)
},
"BaseLarge": func() connectionTracker {
return newConnTracker(100, time.Hour)
},
} {
t.Run(name, func(t *testing.T) {
factory := factory // nolint:scopelint
t.Run("Initialized", func(t *testing.T) {
ct := factory()
require.Equal(t, 0, ct.Len())
})
t.Run("RepeatedAdding", func(t *testing.T) {
ct := factory()
ip := randLocalIPv4()
require.NoError(t, ct.AddConn(ip))
for i := 0; i < 100; i++ {
_ = ct.AddConn(ip)
}
require.Equal(t, 1, ct.Len())
})
t.Run("AddingMany", func(t *testing.T) {
ct := factory()
for i := 0; i < 100; i++ {
_ = ct.AddConn(randLocalIPv4())
}
require.Equal(t, 100, ct.Len())
})
t.Run("Cycle", func(t *testing.T) {
ct := factory()
for i := 0; i < 100; i++ {
ip := randLocalIPv4()
require.NoError(t, ct.AddConn(ip))
ct.RemoveConn(ip)
}
require.Equal(t, 0, ct.Len())
})
})
}
t.Run("VeryShort", func(t *testing.T) {
ct := newConnTracker(10, time.Microsecond)
for i := 0; i < 10; i++ {
ip := randLocalIPv4()
require.NoError(t, ct.AddConn(ip))
time.Sleep(2 * time.Microsecond)
require.NoError(t, ct.AddConn(ip))
}
require.Equal(t, 10, ct.Len())
})
}