diff --git a/codersdk/workspaces_test.go b/codersdk/workspaces_test.go index ee03c88643..63cb99e062 100644 --- a/codersdk/workspaces_test.go +++ b/codersdk/workspaces_test.go @@ -13,8 +13,10 @@ import ( "github.com/google/uuid" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + "golang.org/x/xerrors" "github.com/coder/coder/v2/codersdk" + "github.com/coder/coder/v2/testutil" ) func TestResolveWorkspace(t *testing.T) { @@ -271,13 +273,13 @@ func TestResolveWorkspace(t *testing.T) { t.Run("TransportError", func(t *testing.T) { t.Parallel() - // Close the server immediately so the transport layer fails. - srv := httptest.NewServer(http.NotFoundHandler()) - srvURL, err := url.Parse(srv.URL) + baseURL, err := url.Parse("http://example.com") require.NoError(t, err) - srv.Close() - - client := codersdk.New(srvURL) + client := codersdk.New(baseURL, codersdk.WithHTTPClient(&http.Client{ + Transport: testutil.RoundTripperFunc(func(*http.Request) (*http.Response, error) { + return nil, xerrors.New("transport error") + }), + })) _, err = client.ResolveWorkspace(t.Context(), uuid.NewString()) require.Error(t, err) diff --git a/testutil/http.go b/testutil/http.go index 653c8f642c..0a764b46a9 100644 --- a/testutil/http.go +++ b/testutil/http.go @@ -9,6 +9,15 @@ import ( "github.com/stretchr/testify/require" ) +// RoundTripperFunc adapts a function to an http.RoundTripper. +type RoundTripperFunc func(*http.Request) (*http.Response, error) + +var _ http.RoundTripper = RoundTripperFunc(nil) + +func (f RoundTripperFunc) RoundTrip(req *http.Request) (*http.Response, error) { + return f(req) +} + // RequireEventuallyResponseOK makes HTTP GET requests to the given endpoint until it returns // 200 OK with a valid JSON response that can be decoded into target, or until the context // times out. This is useful for waiting for HTTP servers to become ready during tests,