cloudflare/cloudflared

Public

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

CodeCommitsIssuesPull requestsActionsInsightsSecurity
2020.2.1

Branches

Tags

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

Clone

HTTPS

Download ZIP

edgediscovery/edgediscovery_test.go

130lines · modecode

1package edgediscovery
2
3import (
4 "net"
5 "testing"
6
7 "github.com/sirupsen/logrus"
8 "github.com/stretchr/testify/assert"
9)
10
11var (
12 addr0 = net.TCPAddr{
13 IP: net.ParseIP("123.0.0.0"),
14 Port: 8000,
15 Zone: "",
16 }
17 addr1 = net.TCPAddr{
18 IP: net.ParseIP("123.0.0.1"),
19 Port: 8000,
20 Zone: "",
21 }
22 addr2 = net.TCPAddr{
23 IP: net.ParseIP("123.0.0.2"),
24 Port: 8000,
25 Zone: "",
26 }
27 addr3 = net.TCPAddr{
28 IP: net.ParseIP("123.0.0.3"),
29 Port: 8000,
30 Zone: "",
31 }
32)
33
34func TestGiveBack(t *testing.T) {
35 l := logrus.New()
36 edge := MockEdge(l, []*net.TCPAddr{&addr0, &addr1, &addr2, &addr3})
37
38 // Give this connection an address
39 assert.Equal(t, 4, edge.AvailableAddrs())
40 const connID = 0
41 addr, err := edge.GetAddr(connID)
42 assert.NoError(t, err)
43 assert.NotNil(t, addr)
44 assert.Equal(t, 3, edge.AvailableAddrs())
45
46 // Get it back
47 edge.GiveBack(addr)
48 assert.Equal(t, 4, edge.AvailableAddrs())
49}
50func TestGetAddrForRPC(t *testing.T) {
51 l := logrus.New()
52 edge := MockEdge(l, []*net.TCPAddr{&addr0, &addr1, &addr2, &addr3})
53
54 // Get a connection
55 assert.Equal(t, 4, edge.AvailableAddrs())
56 addr, err := edge.GetAddrForRPC()
57 assert.NoError(t, err)
58 assert.NotNil(t, addr)
59
60 // Using an address for RPC shouldn't consume it
61 assert.Equal(t, 4, edge.AvailableAddrs())
62
63 // Get it back
64 edge.GiveBack(addr)
65 assert.Equal(t, 4, edge.AvailableAddrs())
66}
67
68func TestOnlyOneAddrLeft(t *testing.T) {
69 l := logrus.New()
70
71 // Make an edge with only one address
72 edge := MockEdge(l, []*net.TCPAddr{&addr0})
73
74 // Use the only address
75 const connID = 0
76 addr, err := edge.GetAddr(connID)
77 assert.NoError(t, err)
78 assert.NotNil(t, addr)
79
80 // If that edge address is "bad", there's no alternative address.
81 _, err = edge.GetDifferentAddr(connID)
82 assert.Error(t, err)
83}
84
85func TestNoAddrsLeft(t *testing.T) {
86 l := logrus.New()
87
88 // Make an edge with no addresses
89 edge := MockEdge(l, []*net.TCPAddr{})
90
91 _, err := edge.GetAddr(2)
92 assert.Error(t, err)
93 _, err = edge.GetAddrForRPC()
94 assert.Error(t, err)
95}
96
97func TestGetAddr(t *testing.T) {
98 l := logrus.New()
99 edge := MockEdge(l, []*net.TCPAddr{&addr0, &addr1, &addr2, &addr3})
100
101 // Give this connection an address
102 const connID = 0
103 addr, err := edge.GetAddr(connID)
104 assert.NoError(t, err)
105 assert.NotNil(t, addr)
106
107 // If the same connection requests another address, it should get the same one.
108 addr2, err := edge.GetAddr(connID)
109 assert.NoError(t, err)
110 assert.Equal(t, addr, addr2)
111}
112
113func TestGetDifferentAddr(t *testing.T) {
114 l := logrus.New()
115 edge := MockEdge(l, []*net.TCPAddr{&addr0, &addr1, &addr2, &addr3})
116
117 // Give this connection an address
118 assert.Equal(t, 4, edge.AvailableAddrs())
119 const connID = 0
120 addr, err := edge.GetAddr(connID)
121 assert.NoError(t, err)
122 assert.NotNil(t, addr)
123 assert.Equal(t, 3, edge.AvailableAddrs())
124
125 // If the same connection requests another address, it should get the same one.
126 addr2, err := edge.GetDifferentAddr(connID)
127 assert.NoError(t, err)
128 assert.NotEqual(t, addr, addr2)
129 assert.Equal(t, 3, edge.AvailableAddrs())
130}
131