MCPcopy Index your code
hub / github.com/coder/coder / newTunnelServer

Function newTunnelServer

coderd/devtunnel/tunnel_test.go:178–233  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

176}
177
178func newTunnelServer(t *testing.T) *tunnelServer {
179 var handler http.Handler
180 srv := httptest.NewTLSServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
181 if handler != nil {
182 handler.ServeHTTP(w, r)
183 return
184 }
185
186 w.WriteHeader(http.StatusBadGateway)
187 }))
188 t.Cleanup(srv.Close)
189
190 baseURLParsed, err := url.Parse(srv.URL)
191 require.NoError(t, err)
192 require.Equal(t, "https", baseURLParsed.Scheme)
193 baseURLParsed.Host = net.JoinHostPort("tunnel.coder.com", baseURLParsed.Port())
194
195 key, err := tunnelsdk.GeneratePrivateKey()
196 require.NoError(t, err)
197
198 // Sadly the tunnel server needs to be passed a port number and can't be
199 // passed an active listener (because wireguard needs to make the listener),
200 // so we may need to try a few times to get a free port.
201 var td *tunneld.API
202 for i := 0; i < 10; i++ {
203 wireguardPort := freeUDPPort(t)
204 options := &tunneld.Options{
205 BaseURL: baseURLParsed,
206 WireguardEndpoint: fmt.Sprintf("127.0.0.1:%d", wireguardPort),
207 WireguardPort: wireguardPort,
208 WireguardKey: key,
209 WireguardMTU: tunneld.DefaultWireguardMTU,
210 WireguardServerIP: tunneld.DefaultWireguardServerIP,
211 WireguardNetworkPrefix: tunneld.DefaultWireguardNetworkPrefix,
212 }
213
214 td, err = tunneld.New(options)
215 if err == nil {
216 break
217 }
218 td = nil
219 t.Logf("failed to create tunnel server on port %d: %s", wireguardPort, err)
220 }
221 if td == nil {
222 t.Fatal("failed to create tunnel server in 10 attempts")
223 }
224 handler = td.Router()
225 t.Cleanup(func() {
226 _ = td.Close()
227 })
228
229 return &tunnelServer{
230 api: td,
231 server: srv,
232 }
233}
234
235func (s *tunnelServer) client() *http.Client {

Callers 1

TestTunnelFunction · 0.85

Calls 11

ServeHTTPMethod · 0.95
CloseMethod · 0.95
freeUDPPortFunction · 0.85
FatalMethod · 0.80
RouterMethod · 0.80
CleanupMethod · 0.65
ParseMethod · 0.65
NewMethod · 0.65
LogfMethod · 0.65
WriteHeaderMethod · 0.45
EqualMethod · 0.45

Tested by

no test coverage detected