(t *testing.T)
| 176 | } |
| 177 | |
| 178 | func 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 | |
| 235 | func (s *tunnelServer) client() *http.Client { |
no test coverage detected