add a test case for libp2p option prioritization
Marten Seemann committed
Feb 28, 2022 at 15:26 UTC
3674b662db89a6820b4adfea1ccddec37b8ffe17
1 file changed
+58
core/node/libp2p/libp2p_test.go
new
+58
@@ -0,0 +1,58 @@
1
+package libp2p
2
+
3
+import (
4
+ "fmt"
5
+ "strconv"
6
+ "testing"
7
+
8
+ "github.com/libp2p/go-libp2p"
9
+ ma "github.com/multiformats/go-multiaddr"
10
+
11
+ "github.com/stretchr/testify/require"
12
+)
13
+
14
+func TestPrioritize(t *testing.T) {
15
+ // The option is encoded into the port number of a TCP multiaddr.
16
+ // By extracting the port numbers obtained from the applied option, we can make sure that
17
+ // prioritization sorted the options correctly.
18
+ newOption := func(num int) libp2p.Option {
19
+ return func(cfg *libp2p.Config) error {
20
+ cfg.ListenAddrs = append(cfg.ListenAddrs, ma.StringCast(fmt.Sprintf("/ip4/127.0.0.1/tcp/%d", num)))
21
+ return nil
22
+ }
23
+ }
24
+
25
+ extractNums := func(cfg *libp2p.Config) []int {
26
+ addrs := cfg.ListenAddrs
27
+ nums := make([]int, 0, len(addrs))
28
+ for _, addr := range addrs {
29
+ _, comp := ma.SplitLast(addr)
30
+ num, err := strconv.Atoi(comp.Value())
31
+ require.NoError(t, err)
32
+ nums = append(nums, num)
33
+ }
34
+ return nums
35
+ }
36
+
37
+ t.Run("using default priorities", func(t *testing.T) {
38
+ opts := []priorityOption{
39
+ {defaultPriority: 200, opt: newOption(200)},
40
+ {defaultPriority: 1, opt: newOption(1)},
41
+ {defaultPriority: 300, opt: newOption(300)},
42
+ }
43
+ var cfg libp2p.Config
44
+ require.NoError(t, prioritizeOptions(opts)(&cfg))
45
+ require.Equal(t, extractNums(&cfg), []int{1, 200, 300})
46
+ })
47
+
48
+ t.Run("using custom priorities", func(t *testing.T) {
49
+ opts := []priorityOption{
50
+ {defaultPriority: 200, priority: 1, opt: newOption(1)},
51
+ {defaultPriority: 1, priority: 300, opt: newOption(300)},
52
+ {defaultPriority: 300, priority: 20, opt: newOption(20)},
53
+ }
54
+ var cfg libp2p.Config
55
+ require.NoError(t, prioritizeOptions(opts)(&cfg))
56
+ require.Equal(t, extractNums(&cfg), []int{1, 20, 300})
57
+ })
58
+}