cloudflare/cloudflared

Public

mirrored from https://github.com/cloudflare/cloudflaredAvailable

CodeCommitsIssuesPull requestsActionsInsightsSecurity
2020.4.0

Branches

Tags

  • No tags available.
0Branches0Tags
Go to file
Add file
Code

Clone

HTTPS

Download ZIP

edgediscovery/allregions/regions_test.go

140lines · modecode

1package allregions
2
3import (
4 "net"
5 "testing"
6
7 "github.com/stretchr/testify/assert"
8)
9
10var (
11 addr0 = net.TCPAddr{
12 IP: net.ParseIP("123.4.5.0"),
13 Port: 8000,
14 Zone: "",
15 }
16 addr1 = net.TCPAddr{
17 IP: net.ParseIP("123.4.5.1"),
18 Port: 8000,
19 Zone: "",
20 }
21 addr2 = net.TCPAddr{
22 IP: net.ParseIP("123.4.5.2"),
23 Port: 8000,
24 Zone: "",
25 }
26 addr3 = net.TCPAddr{
27 IP: net.ParseIP("123.4.5.3"),
28 Port: 8000,
29 Zone: "",
30 }
31)
32
33func makeRegions() Regions {
34 r1 := NewRegion([]*net.TCPAddr{&addr0, &addr1})
35 r2 := NewRegion([]*net.TCPAddr{&addr2, &addr3})
36 return Regions{region1: r1, region2: r2}
37}
38
39func TestRegions_AddrUsedBy(t *testing.T) {
40 rs := makeRegions()
41 addr1 := rs.GetUnusedAddr(nil, 1)
42 assert.Equal(t, addr1, rs.AddrUsedBy(1))
43 addr2 := rs.GetUnusedAddr(nil, 2)
44 assert.Equal(t, addr2, rs.AddrUsedBy(2))
45 addr3 := rs.GetUnusedAddr(nil, 3)
46 assert.Equal(t, addr3, rs.AddrUsedBy(3))
47}
48
49func TestRegions_Giveback_Region1(t *testing.T) {
50 rs := makeRegions()
51 rs.region1.Use(&addr0, 0)
52 rs.region1.Use(&addr1, 1)
53 rs.region2.Use(&addr2, 2)
54 rs.region2.Use(&addr3, 3)
55
56 assert.Equal(t, 0, rs.AvailableAddrs())
57
58 rs.GiveBack(&addr0)
59 assert.Equal(t, &addr0, rs.GetUnusedAddr(nil, 3))
60}
61func TestRegions_Giveback_Region2(t *testing.T) {
62 rs := makeRegions()
63 rs.region1.Use(&addr0, 0)
64 rs.region1.Use(&addr1, 1)
65 rs.region2.Use(&addr2, 2)
66 rs.region2.Use(&addr3, 3)
67
68 assert.Equal(t, 0, rs.AvailableAddrs())
69
70 rs.GiveBack(&addr2)
71 assert.Equal(t, &addr2, rs.GetUnusedAddr(nil, 2))
72}
73
74func TestRegions_GetUnusedAddr_OneAddrLeft(t *testing.T) {
75 rs := makeRegions()
76
77 rs.region1.Use(&addr0, 0)
78 rs.region1.Use(&addr1, 1)
79 rs.region2.Use(&addr2, 2)
80
81 assert.Equal(t, 1, rs.AvailableAddrs())
82 assert.Equal(t, &addr3, rs.GetUnusedAddr(nil, 3))
83}
84
85func TestRegions_GetUnusedAddr_Excluding_Region1(t *testing.T) {
86 rs := makeRegions()
87
88 rs.region1.Use(&addr0, 0)
89 rs.region1.Use(&addr1, 1)
90
91 assert.Equal(t, 2, rs.AvailableAddrs())
92 assert.Equal(t, &addr3, rs.GetUnusedAddr(&addr2, 3))
93}
94
95func TestRegions_GetUnusedAddr_Excluding_Region2(t *testing.T) {
96 rs := makeRegions()
97
98 rs.region2.Use(&addr2, 0)
99 rs.region2.Use(&addr3, 1)
100
101 assert.Equal(t, 2, rs.AvailableAddrs())
102 assert.Equal(t, &addr1, rs.GetUnusedAddr(&addr0, 1))
103}
104
105func TestNewNoResolveBalancesRegions(t *testing.T) {
106 type args struct {
107 addrs []*net.TCPAddr
108 }
109 tests := []struct {
110 name string
111 args args
112 }{
113 {
114 name: "one address",
115 args: args{addrs: []*net.TCPAddr{&addr0}},
116 },
117 {
118 name: "two addresses",
119 args: args{addrs: []*net.TCPAddr{&addr0, &addr1}},
120 },
121 }
122 for _, tt := range tests {
123 t.Run(tt.name, func(t *testing.T) {
124 regions := NewNoResolve(tt.args.addrs)
125 RegionsIsBalanced(t, regions)
126 })
127 }
128}
129
130func RegionsIsBalanced(t *testing.T, rs *Regions) {
131 delta := rs.region1.AvailableAddrs() - rs.region2.AvailableAddrs()
132 assert.True(t, abs(delta) <= 1)
133}
134
135func abs(x int) int {
136 if x >= 0 {
137 return x
138 }
139 return -x
140}
141