add a test case for libp2p option prioritization

This commit is contained in:
Marten Seemann 2022-02-28 15:26:06 +04:00
parent ec46f1e6e4
commit 3674b662db

View File

@ -0,0 +1,58 @@
package libp2p
import (
"fmt"
"strconv"
"testing"
"github.com/libp2p/go-libp2p"
ma "github.com/multiformats/go-multiaddr"
"github.com/stretchr/testify/require"
)
func TestPrioritize(t *testing.T) {
// The option is encoded into the port number of a TCP multiaddr.
// By extracting the port numbers obtained from the applied option, we can make sure that
// prioritization sorted the options correctly.
newOption := func(num int) libp2p.Option {
return func(cfg *libp2p.Config) error {
cfg.ListenAddrs = append(cfg.ListenAddrs, ma.StringCast(fmt.Sprintf("/ip4/127.0.0.1/tcp/%d", num)))
return nil
}
}
extractNums := func(cfg *libp2p.Config) []int {
addrs := cfg.ListenAddrs
nums := make([]int, 0, len(addrs))
for _, addr := range addrs {
_, comp := ma.SplitLast(addr)
num, err := strconv.Atoi(comp.Value())
require.NoError(t, err)
nums = append(nums, num)
}
return nums
}
t.Run("using default priorities", func(t *testing.T) {
opts := []priorityOption{
{defaultPriority: 200, opt: newOption(200)},
{defaultPriority: 1, opt: newOption(1)},
{defaultPriority: 300, opt: newOption(300)},
}
var cfg libp2p.Config
require.NoError(t, prioritizeOptions(opts)(&cfg))
require.Equal(t, extractNums(&cfg), []int{1, 200, 300})
})
t.Run("using custom priorities", func(t *testing.T) {
opts := []priorityOption{
{defaultPriority: 200, priority: 1, opt: newOption(1)},
{defaultPriority: 1, priority: 300, opt: newOption(300)},
{defaultPriority: 300, priority: 20, opt: newOption(20)},
}
var cfg libp2p.Config
require.NoError(t, prioritizeOptions(opts)(&cfg))
require.Equal(t, extractNums(&cfg), []int{1, 20, 300})
})
}