Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

improvement: Add WithBaseURL param to avoid struct literals in WithBaseURLs #697

Open
wants to merge 2 commits into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions changelog/@unreleased/pr-697.v2.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
type: improvement
improvement:
description: Add WithBaseURL param to avoid struct literals in WithBaseURLs
links:
- https://github.com/palantir/conjure-go-runtime/pull/697
6 changes: 3 additions & 3 deletions conjure-go-client/httpclient/authn_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ func TestRoundTripperWithToken(t *testing.T) {
client, err := httpclient.NewClient(
httpclient.WithHTTPTimeout(time.Minute),
httpclient.WithAuthTokenProvider(tokenProvider),
httpclient.WithBaseURLs([]string{server.URL}))
httpclient.WithBaseURL(server.URL))
require.NoError(t, err)

resp, err := client.Do(context.Background(), httpclient.WithRequestMethod(http.MethodGet))
Expand Down Expand Up @@ -71,7 +71,7 @@ func TestRoundTripperWithBasicAuth(t *testing.T) {
client, err := httpclient.NewClient(
httpclient.WithHTTPTimeout(time.Minute),
httpclient.WithBasicAuth(expected.User, expected.Password),
httpclient.WithBaseURLs([]string{server.URL}))
httpclient.WithBaseURL(server.URL))
require.NoError(t, err)

resp, err := client.Do(context.Background(), httpclient.WithRequestMethod(http.MethodGet))
Expand Down Expand Up @@ -106,7 +106,7 @@ func TestRoundTripperWithBasicAuthProvider(t *testing.T) {
Password: "password",
}, nil
}),
httpclient.WithBaseURLs([]string{server.URL}))
httpclient.WithBaseURL(server.URL))
require.NoError(t, err)

resp, err := client.Do(context.Background(), httpclient.WithRequestMethod(http.MethodGet))
Expand Down
8 changes: 4 additions & 4 deletions conjure-go-client/httpclient/body_handler_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ func TestJSONBody(t *testing.T) {

client, err := httpclient.NewClient(
httpclient.WithUserAgent("TestNewRequest"),
httpclient.WithBaseURLs([]string{server.URL}),
httpclient.WithBaseURL(server.URL),
)
require.NoError(t, err)

Expand Down Expand Up @@ -80,7 +80,7 @@ func TestRawBody(t *testing.T) {

client, err := httpclient.NewClient(
httpclient.WithUserAgent("TestNewRequest"),
httpclient.WithBaseURLs([]string{server.URL}),
httpclient.WithBaseURL(server.URL),
)
require.NoError(t, err)

Expand Down Expand Up @@ -119,7 +119,7 @@ func TestRawRequestRetry(t *testing.T) {
}))
defer server.Close()

client, err := httpclient.NewClient(httpclient.WithBaseURLs([]string{server.URL}))
client, err := httpclient.NewClient(httpclient.WithBaseURL(server.URL))
assert.NoError(t, err)

_, err = client.Do(
Expand Down Expand Up @@ -154,7 +154,7 @@ func TestRedirectWithBodyAndBytesBuffer(t *testing.T) {

client, err := httpclient.NewClient(
httpclient.WithUserAgent("TestNewRequest"),
httpclient.WithBaseURLs([]string{server.URL}),
httpclient.WithBaseURL(server.URL),
httpclient.WithBytesBufferPool(bytesbuffers.NewSizedPool(1, 10)),
)
require.NoError(t, err)
Expand Down
2 changes: 1 addition & 1 deletion conjure-go-client/httpclient/client_builder_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ func TestWrapTransport(t *testing.T) {
httpclient.WithMiddleware(middleware(1)),
httpclient.WithMiddleware(middleware(2)),
httpclient.WithMiddleware(middleware(3)),
httpclient.WithBaseURLs([]string{server.URL}),
httpclient.WithBaseURL(server.URL),
)
require.NoError(t, err)

Expand Down
5 changes: 5 additions & 0 deletions conjure-go-client/httpclient/client_params.go
Original file line number Diff line number Diff line change
Expand Up @@ -450,6 +450,11 @@ func WithKeepAlive(keepAlive time.Duration) ClientOrHTTPClientParam {
})
}

// WithBaseURL is a variadic-argument alias for WithBaseURLs. Any previous base URLs will be overwritten.
func WithBaseURL(urls ...string) ClientParam {
return WithBaseURLs(urls)
}

// WithBaseURLs sets the base URLs for every request. This is meant to be used in conjunction with WithPath.
func WithBaseURLs(urls []string) ClientParam {
return clientParamFunc(func(b *clientBuilder) error {
Expand Down
3 changes: 1 addition & 2 deletions conjure-go-client/httpclient/client_params_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -145,8 +145,7 @@ func TestBuilder(t *testing.T) {
} {
t.Run(test.Name, func(t *testing.T) {
// Must provide URLs for client creation
urls := WithBaseURLs([]string{"https://localhost"})
client, err := NewClient(urls, test.Param)
client, err := NewClient(WithBaseURL("https://localhost"), test.Param)
require.NoError(t, err)
test.Test(t, client.(*clientImpl))
})
Expand Down
28 changes: 14 additions & 14 deletions conjure-go-client/httpclient/client_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ func TestCanReadBodyWithBufferPool(t *testing.T) {

client, err := httpclient.NewClient(
httpclient.WithBytesBufferPool(bytesbuffers.NewSizedPool(1, 10)),
httpclient.WithBaseURLs([]string{server.URL}),
httpclient.WithBaseURL(server.URL),
)
require.NoError(t, err)

Expand Down Expand Up @@ -89,7 +89,7 @@ func TestCanUseRelocationURI(t *testing.T) {

client, err := httpclient.NewClient(
httpclient.WithBytesBufferPool(bytesbuffers.NewSizedPool(1, 10)),
httpclient.WithBaseURLs([]string{server.URL}),
httpclient.WithBaseURL(server.URL),
)
assert.NoError(t, err)

Expand Down Expand Up @@ -122,7 +122,7 @@ func TestCanUseSimpleRelocationURI(t *testing.T) {

client, err := httpclient.NewClient(
httpclient.WithBytesBufferPool(bytesbuffers.NewSizedPool(1, 10)),
httpclient.WithBaseURLs([]string{server.URL}),
httpclient.WithBaseURL(server.URL),
)
assert.NoError(t, err)

Expand Down Expand Up @@ -169,7 +169,7 @@ func TestMiddlewareCanReadBody(t *testing.T) {
t.Run("NoByteBufferPool", func(t *testing.T) {
client, err := httpclient.NewClient(
withMiddleware,
httpclient.WithBaseURLs([]string{server.URL}),
httpclient.WithBaseURL(server.URL),
)
require.NoError(t, err)
resp, err := client.Do(context.Background(), httpclient.WithRequestBody(unencodedBody, codecs.Plain), httpclient.WithRequestMethod("GET"))
Expand All @@ -180,7 +180,7 @@ func TestMiddlewareCanReadBody(t *testing.T) {
client, err := httpclient.NewClient(
httpclient.WithBytesBufferPool(bytesbuffers.NewSizedPool(1, 10)),
withMiddleware,
httpclient.WithBaseURLs([]string{server.URL}),
httpclient.WithBaseURL(server.URL),
)
require.NoError(t, err)
resp, err := client.Do(context.Background(), httpclient.WithRequestBody(unencodedBody, codecs.Plain), httpclient.WithRequestMethod("GET"))
Expand Down Expand Up @@ -258,7 +258,7 @@ func TestTimeouts(t *testing.T) {
} {
t.Run(tt.Name, func(t *testing.T) {
clientParams := []httpclient.ClientParam{
httpclient.WithBaseURLs([]string{timeoutServer.URL}),
httpclient.WithBaseURL(timeoutServer.URL),
httpclient.WithMaxRetries(0),
}
if tt.ClientTimeout > 0 {
Expand Down Expand Up @@ -317,15 +317,15 @@ func BenchmarkAllocWithBytesBufferPool(b *testing.B) {
}
b.Run("NoByteBufferPool", func(b *testing.B) {
client, err := httpclient.NewClient(
httpclient.WithBaseURLs([]string{server.URL}),
httpclient.WithBaseURL(server.URL),
)
require.NoError(b, err)
runBench(b, client)
})
b.Run("WithByteBufferPool", func(b *testing.B) {
client, err := httpclient.NewClient(
httpclient.WithBytesBufferPool(bytesbuffers.NewSizedPool(1, 10)),
httpclient.WithBaseURLs([]string{server.URL}),
httpclient.WithBaseURL(server.URL),
)
require.NoError(b, err)
runBench(b, client)
Expand Down Expand Up @@ -376,42 +376,42 @@ func BenchmarkUnavailableURIs(b *testing.B) {
}
b.Run("OneAvailableServer", func(b *testing.B) {
client, err := httpclient.NewClient(
httpclient.WithBaseURLs([]string{server1.URL}),
httpclient.WithBaseURL(server1.URL),
)
require.NoError(b, err)
runBench(b, client)
})
b.Run("FourAvailableServers", func(b *testing.B) {
client, err := httpclient.NewClient(
httpclient.WithBaseURLs([]string{server1.URL, server2.URL, server3.URL, server4.URL}),
httpclient.WithBaseURL(server1.URL, server2.URL, server3.URL, server4.URL),
)
require.NoError(b, err)
runBench(b, client)
})
b.Run("OneOutOfFourUnavailableServers", func(b *testing.B) {
client, err := httpclient.NewClient(
httpclient.WithBaseURLs([]string{server1.URL, server2.URL, server3.URL, unavailableServer.URL}),
httpclient.WithBaseURL(server1.URL, server2.URL, server3.URL, unavailableServer.URL),
)
require.NoError(b, err)
runBench(b, client)
})
b.Run("OneOutOfThreeUnavailableServers", func(b *testing.B) {
client, err := httpclient.NewClient(
httpclient.WithBaseURLs([]string{server1.URL, server2.URL, unavailableServer.URL}),
httpclient.WithBaseURL(server1.URL, server2.URL, unavailableServer.URL),
)
require.NoError(b, err)
runBench(b, client)
})
b.Run("OneOutOfTwoUnavailableServers", func(b *testing.B) {
client, err := httpclient.NewClient(
httpclient.WithBaseURLs([]string{server1.URL, unavailableServer.URL}),
httpclient.WithBaseURL(server1.URL, unavailableServer.URL),
)
require.NoError(b, err)
runBench(b, client)
})
b.Run("OneOutOfTwoUnstartedServers", func(b *testing.B) {
client, err := httpclient.NewClient(
httpclient.WithBaseURLs([]string{server1.URL, unstartedServer.URL}),
httpclient.WithBaseURL(server1.URL, unstartedServer.URL),
)
require.NoError(b, err)
runBench(b, client)
Expand Down
12 changes: 6 additions & 6 deletions conjure-go-client/httpclient/close_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ import (
"bytes"
"context"
"fmt"
"io/ioutil"
"io"
"net/http"
"net/http/httptest"
"runtime"
Expand All @@ -38,7 +38,7 @@ func TestClose(t *testing.T) {
_, _ = fmt.Fprintln(rw, "test")
}))
client, err := httpclient.NewClient(
httpclient.WithBaseURLs([]string{ts.URL}),
httpclient.WithBaseURL(ts.URL),
httpclient.WithHTTPTimeout(5*time.Second),
)
require.NoError(t, err)
Expand All @@ -65,7 +65,7 @@ func TestCloseOnError(t *testing.T) {
before := runtime.NumGoroutine()
// create test server and client with an HTTP Timeout of 5s
client, err := httpclient.NewClient(
httpclient.WithBaseURLs([]string{ts.URL}),
httpclient.WithBaseURL(ts.URL),
httpclient.WithHTTPTimeout(5*time.Second),
)
require.NoError(t, err)
Expand Down Expand Up @@ -96,7 +96,7 @@ func TestCloseOnEmptyResponse(t *testing.T) {
before := runtime.NumGoroutine()
// create test server and client with an HTTP Timeout of 5s
client, err := httpclient.NewClient(
httpclient.WithBaseURLs([]string{ts.URL}),
httpclient.WithBaseURL(ts.URL),
httpclient.WithHTTPTimeout(5*time.Second),
)
require.NoError(t, err)
Expand Down Expand Up @@ -138,14 +138,14 @@ func TestStreamingResponse(t *testing.T) {
}))
defer ts.Close()
client, err := httpclient.NewClient(
httpclient.WithBaseURLs([]string{ts.URL}),
httpclient.WithBaseURL(ts.URL),
)
require.NoError(t, err)
ctx := context.Background()
resp, err := client.Get(ctx, httpclient.WithPath("/"), httpclient.WithRawResponseBody())
require.NoError(t, err)
close(finishResponseChan)
b, err := ioutil.ReadAll(resp.Body)
b, err := io.ReadAll(resp.Body)
require.NoError(t, err)
assert.Equal(t, firstLine+"\n"+secondLine+"\n", string(b))
}
10 changes: 5 additions & 5 deletions conjure-go-client/httpclient/error_decoder_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ func TestErrorDecoder(t *testing.T) {
defer ts.Close()
t.Run("ClientDefault", func(t *testing.T) {
client, err := httpclient.NewClient(
httpclient.WithBaseURLs([]string{ts.URL}),
httpclient.WithBaseURL(ts.URL),
)
require.NoError(t, err)
resp, err := client.Get(context.Background())
Expand All @@ -57,7 +57,7 @@ func TestErrorDecoder(t *testing.T) {
})
t.Run("ClientNoop", func(t *testing.T) {
client, err := httpclient.NewClient(
httpclient.WithBaseURLs([]string{ts.URL}),
httpclient.WithBaseURL(ts.URL),
httpclient.WithDisableRestErrors(),
)
require.NoError(t, err)
Expand All @@ -68,7 +68,7 @@ func TestErrorDecoder(t *testing.T) {
})
t.Run("ClientCustom", func(t *testing.T) {
client, err := httpclient.NewClient(
httpclient.WithBaseURLs([]string{ts.URL}),
httpclient.WithBaseURL(ts.URL),
httpclient.WithErrorDecoder(&customErrorDecoder{
statusCode: statusCode,
message: clientDecoderMsg,
Expand All @@ -81,7 +81,7 @@ func TestErrorDecoder(t *testing.T) {
})
t.Run("RequestCustom", func(t *testing.T) {
client, err := httpclient.NewClient(
httpclient.WithBaseURLs([]string{ts.URL}),
httpclient.WithBaseURL(ts.URL),
httpclient.WithErrorDecoder(&customErrorDecoder{
statusCode: statusCode,
message: clientDecoderMsg,
Expand All @@ -101,7 +101,7 @@ func TestErrorDecoder(t *testing.T) {
})
t.Run("FallbackToClient", func(t *testing.T) {
client, err := httpclient.NewClient(
httpclient.WithBaseURLs([]string{ts.URL}),
httpclient.WithBaseURL(ts.URL),
httpclient.WithErrorDecoder(&customErrorDecoder{
statusCode: statusCode,
message: clientDecoderMsg,
Expand Down
Loading