@@ -37,44 +37,27 @@ func TestMain(m *testing.M) {
37
37
38
38
func TestDERPMesh (t * testing.T ) {
39
39
t .Parallel ()
40
- t .Run ("ExchangeMessages" , func (t * testing.T ) {
41
- // This tests messages passing through multiple DERP servers.
42
- t .Parallel ()
43
- firstServer , firstServerURL , firstTLSName := startDERP (t )
44
- defer firstServer .Close ()
45
- secondServer , secondServerURL , secondTLSName := startDERP (t )
46
- firstMesh := derpmesh .New (slogtest .Make (t , nil ).Named ("first" ).Leveled (slog .LevelDebug ), firstServer , firstTLSName )
47
- firstMesh .SetAddresses ([]string {secondServerURL })
48
- secondMesh := derpmesh .New (slogtest .Make (t , nil ).Named ("second" ).Leveled (slog .LevelDebug ), secondServer , secondTLSName )
49
- secondMesh .SetAddresses ([]string {firstServerURL })
50
- defer firstMesh .Close ()
51
- defer secondMesh .Close ()
52
-
53
- first := key .NewNode ()
54
- second := key .NewNode ()
55
- firstClient , err := derphttp .NewClient (first , secondServerURL , tailnet .Logger (slogtest .Make (t , nil )))
56
- require .NoError (t , err )
57
- secondClient , err := derphttp .NewClient (second , firstServerURL , tailnet .Logger (slogtest .Make (t , nil )))
58
- require .NoError (t , err )
59
- err = secondClient .Connect (context .Background ())
60
- require .NoError (t , err )
61
-
62
- sent := []byte ("hello world" )
63
- err = firstClient .Send (second .Public (), sent )
64
- require .NoError (t , err )
40
+ commonName := "something.org"
41
+ rawCert := generateTLSCertificate (t , commonName )
42
+ certificate , err := x509 .ParseCertificate (rawCert .Certificate [0 ])
43
+ require .NoError (t , err )
44
+ pool := x509 .NewCertPool ()
45
+ pool .AddCert (certificate )
46
+ tlsConfig := & tls.Config {
47
+ ServerName : commonName ,
48
+ RootCAs : pool ,
49
+ Certificates : []tls.Certificate {rawCert },
50
+ }
65
51
66
- got := recvData (t , secondClient )
67
- require .Equal (t , sent , got )
68
- })
69
52
t .Run ("ExchangeMessages" , func (t * testing.T ) {
70
53
// This tests messages passing through multiple DERP servers.
71
54
t .Parallel ()
72
- firstServer , firstServerURL , firstTLSName := startDERP (t )
55
+ firstServer , firstServerURL := startDERP (t , tlsConfig )
73
56
defer firstServer .Close ()
74
- secondServer , secondServerURL , secondTLSName := startDERP (t )
75
- firstMesh := derpmesh .New (slogtest .Make (t , nil ).Named ("first" ).Leveled (slog .LevelDebug ), firstServer , firstTLSName )
57
+ secondServer , secondServerURL := startDERP (t , tlsConfig )
58
+ firstMesh := derpmesh .New (slogtest .Make (t , nil ).Named ("first" ).Leveled (slog .LevelDebug ), firstServer , tlsConfig )
76
59
firstMesh .SetAddresses ([]string {secondServerURL })
77
- secondMesh := derpmesh .New (slogtest .Make (t , nil ).Named ("second" ).Leveled (slog .LevelDebug ), secondServer , secondTLSName )
60
+ secondMesh := derpmesh .New (slogtest .Make (t , nil ).Named ("second" ).Leveled (slog .LevelDebug ), secondServer , tlsConfig )
78
61
secondMesh .SetAddresses ([]string {firstServerURL })
79
62
defer firstMesh .Close ()
80
63
defer secondMesh .Close ()
@@ -83,8 +66,10 @@ func TestDERPMesh(t *testing.T) {
83
66
second := key .NewNode ()
84
67
firstClient , err := derphttp .NewClient (first , secondServerURL , tailnet .Logger (slogtest .Make (t , nil )))
85
68
require .NoError (t , err )
69
+ firstClient .TLSConfig = tlsConfig
86
70
secondClient , err := derphttp .NewClient (second , firstServerURL , tailnet .Logger (slogtest .Make (t , nil )))
87
71
require .NoError (t , err )
72
+ secondClient .TLSConfig = tlsConfig
88
73
err = secondClient .Connect (context .Background ())
89
74
require .NoError (t , err )
90
75
@@ -98,8 +83,8 @@ func TestDERPMesh(t *testing.T) {
98
83
t .Run ("RemoveAddress" , func (t * testing.T ) {
99
84
// This tests messages passing through multiple DERP servers.
100
85
t .Parallel ()
101
- server , serverURL , tlsName := startDERP (t )
102
- mesh := derpmesh .New (slogtest .Make (t , nil ).Named ("first" ).Leveled (slog .LevelDebug ), server , tlsName )
86
+ server , serverURL := startDERP (t , tlsConfig )
87
+ mesh := derpmesh .New (slogtest .Make (t , nil ).Named ("first" ).Leveled (slog .LevelDebug ), server , tlsConfig )
103
88
mesh .SetAddresses ([]string {"http://fake.com" })
104
89
// This should trigger a removal...
105
90
mesh .SetAddresses ([]string {})
@@ -109,8 +94,10 @@ func TestDERPMesh(t *testing.T) {
109
94
second := key .NewNode ()
110
95
firstClient , err := derphttp .NewClient (first , serverURL , tailnet .Logger (slogtest .Make (t , nil )))
111
96
require .NoError (t , err )
97
+ firstClient .TLSConfig = tlsConfig
112
98
secondClient , err := derphttp .NewClient (second , serverURL , tailnet .Logger (slogtest .Make (t , nil )))
113
99
require .NoError (t , err )
100
+ secondClient .TLSConfig = tlsConfig
114
101
err = secondClient .Connect (context .Background ())
115
102
require .NoError (t , err )
116
103
sent := []byte ("hello world" )
@@ -124,8 +111,8 @@ func TestDERPMesh(t *testing.T) {
124
111
meshes := make ([]* derpmesh.Mesh , 0 , 20 )
125
112
serverURLs := make ([]string , 0 , 20 )
126
113
for i := 0 ; i < 20 ; i ++ {
127
- server , url , tlsName := startDERP (t )
128
- mesh := derpmesh .New (slogtest .Make (t , nil ).Named ("mesh" ).Leveled (slog .LevelDebug ), server , tlsName )
114
+ server , url := startDERP (t , tlsConfig )
115
+ mesh := derpmesh .New (slogtest .Make (t , nil ).Named ("mesh" ).Leveled (slog .LevelDebug ), server , tlsConfig )
129
116
t .Cleanup (func () {
130
117
_ = server .Close ()
131
118
_ = mesh .Close ()
@@ -141,8 +128,10 @@ func TestDERPMesh(t *testing.T) {
141
128
second := key .NewNode ()
142
129
firstClient , err := derphttp .NewClient (first , serverURLs [9 ], tailnet .Logger (slogtest .Make (t , nil )))
143
130
require .NoError (t , err )
131
+ firstClient .TLSConfig = tlsConfig
144
132
secondClient , err := derphttp .NewClient (second , serverURLs [16 ], tailnet .Logger (slogtest .Make (t , nil )))
145
133
require .NoError (t , err )
134
+ secondClient .TLSConfig = tlsConfig
146
135
err = secondClient .Connect (context .Background ())
147
136
require .NoError (t , err )
148
137
@@ -172,21 +161,18 @@ func recvData(t *testing.T, client *derphttp.Client) []byte {
172
161
}
173
162
}
174
163
175
- func startDERP (t * testing.T ) (* derp.Server , string , * tls. Config ) {
164
+ func startDERP (t * testing.T , tlsConfig * tls. Config ) (* derp.Server , string ) {
176
165
logf := tailnet .Logger (slogtest .Make (t , nil ))
177
166
d := derp .NewServer (key .NewNode (), logf )
178
167
d .SetMeshKey ("some-key" )
179
168
server := httptest .NewUnstartedServer (derphttp .Handler (d ))
180
- commonName := "something.org"
181
- server .TLS = & tls.Config {
182
- Certificates : []tls.Certificate {generateTLSCertificate (t , commonName )},
183
- }
184
- server .Start ()
169
+ server .TLS = tlsConfig
170
+ server .StartTLS ()
185
171
t .Cleanup (func () {
186
172
_ = d .Close ()
187
173
})
188
174
t .Cleanup (server .Close )
189
- return d , server .URL , server . TLS
175
+ return d , server .URL
190
176
}
191
177
192
178
func generateTLSCertificate (t testing.TB , commonName string ) tls.Certificate {
0 commit comments