Skip to content

Commit 3135a2c

Browse files
committed
Add default timeout to CA and Admin client
1 parent d8993ac commit 3135a2c

File tree

5 files changed

+33
-19
lines changed

5 files changed

+33
-19
lines changed

ca/acmeClient.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,11 @@ import (
1111
"strings"
1212

1313
"github.com/pkg/errors"
14+
15+
"go.step.sm/crypto/jose"
16+
1417
"github.com/smallstep/certificates/acme"
1518
acmeAPI "github.com/smallstep/certificates/acme/api"
16-
"go.step.sm/crypto/jose"
1719
)
1820

1921
// ACMEClient implements an HTTP client to an ACME API.
@@ -29,7 +31,7 @@ type ACMEClient struct {
2931
// NewACMEClient initializes a new ACMEClient.
3032
func NewACMEClient(endpoint string, contact []string, opts ...ClientOption) (*ACMEClient, error) {
3133
// Retrieve transport from options.
32-
o := new(clientOptions)
34+
o := defaultClientOptions()
3335
if err := o.apply(opts); err != nil {
3436
return nil, err
3537
}

ca/acmeClient_test.go

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,14 @@ import (
1212
"time"
1313

1414
"github.com/pkg/errors"
15+
1516
"github.com/smallstep/assert"
17+
"go.step.sm/crypto/jose"
18+
"go.step.sm/crypto/pemutil"
19+
1620
"github.com/smallstep/certificates/acme"
1721
acmeAPI "github.com/smallstep/certificates/acme/api"
1822
"github.com/smallstep/certificates/api/render"
19-
"go.step.sm/crypto/jose"
20-
"go.step.sm/crypto/pemutil"
2123
)
2224

2325
func TestNewACMEClient(t *testing.T) {
@@ -169,7 +171,7 @@ func TestACMEClient_GetNonce(t *testing.T) {
169171
NewNonce: srv.URL + "/foo",
170172
}
171173
// Retrieve transport from options.
172-
o := new(clientOptions)
174+
o := defaultClientOptions()
173175
assert.FatalError(t, o.apply([]ClientOption{WithTransport(http.DefaultTransport)}))
174176
tr, err := o.getTransport(srv.URL)
175177
assert.FatalError(t, err)
@@ -241,7 +243,7 @@ func TestACMEClient_post(t *testing.T) {
241243
NewNonce: srv.URL + "/foo",
242244
}
243245
// Retrieve transport from options.
244-
o := new(clientOptions)
246+
o := defaultClientOptions()
245247
assert.FatalError(t, o.apply([]ClientOption{WithTransport(http.DefaultTransport)}))
246248
tr, err := o.getTransport(srv.URL)
247249
assert.FatalError(t, err)
@@ -372,7 +374,7 @@ func TestACMEClient_NewOrder(t *testing.T) {
372374
NewOrder: srv.URL + "/bar",
373375
}
374376
// Retrieve transport from options.
375-
o := new(clientOptions)
377+
o := defaultClientOptions()
376378
assert.FatalError(t, o.apply([]ClientOption{WithTransport(http.DefaultTransport)}))
377379
tr, err := o.getTransport(srv.URL)
378380
assert.FatalError(t, err)
@@ -507,7 +509,7 @@ func TestACMEClient_GetOrder(t *testing.T) {
507509
NewNonce: srv.URL + "/foo",
508510
}
509511
// Retrieve transport from options.
510-
o := new(clientOptions)
512+
o := defaultClientOptions()
511513
assert.FatalError(t, o.apply([]ClientOption{WithTransport(http.DefaultTransport)}))
512514
tr, err := o.getTransport(srv.URL)
513515
assert.FatalError(t, err)
@@ -629,7 +631,7 @@ func TestACMEClient_GetAuthz(t *testing.T) {
629631
NewNonce: srv.URL + "/foo",
630632
}
631633
// Retrieve transport from options.
632-
o := new(clientOptions)
634+
o := defaultClientOptions()
633635
assert.FatalError(t, o.apply([]ClientOption{WithTransport(http.DefaultTransport)}))
634636
tr, err := o.getTransport(srv.URL)
635637
assert.FatalError(t, err)
@@ -751,7 +753,7 @@ func TestACMEClient_GetChallenge(t *testing.T) {
751753
NewNonce: srv.URL + "/foo",
752754
}
753755
// Retrieve transport from options.
754-
o := new(clientOptions)
756+
o := defaultClientOptions()
755757
assert.FatalError(t, o.apply([]ClientOption{WithTransport(http.DefaultTransport)}))
756758
tr, err := o.getTransport(srv.URL)
757759
assert.FatalError(t, err)
@@ -874,7 +876,7 @@ func TestACMEClient_ValidateChallenge(t *testing.T) {
874876
NewNonce: srv.URL + "/foo",
875877
}
876878
// Retrieve transport from options.
877-
o := new(clientOptions)
879+
o := defaultClientOptions()
878880
assert.FatalError(t, o.apply([]ClientOption{WithTransport(http.DefaultTransport)}))
879881
tr, err := o.getTransport(srv.URL)
880882
assert.FatalError(t, err)
@@ -1087,7 +1089,7 @@ func TestACMEClient_FinalizeOrder(t *testing.T) {
10871089
NewNonce: srv.URL + "/foo",
10881090
}
10891091
// Retrieve transport from options.
1090-
o := new(clientOptions)
1092+
o := defaultClientOptions()
10911093
assert.FatalError(t, o.apply([]ClientOption{WithTransport(http.DefaultTransport)}))
10921094
tr, err := o.getTransport(srv.URL)
10931095
assert.FatalError(t, err)
@@ -1214,7 +1216,7 @@ func TestACMEClient_GetAccountOrders(t *testing.T) {
12141216
NewNonce: srv.URL + "/foo",
12151217
}
12161218
// Retrieve transport from options.
1217-
o := new(clientOptions)
1219+
o := defaultClientOptions()
12181220
assert.FatalError(t, o.apply([]ClientOption{WithTransport(http.DefaultTransport)}))
12191221
tr, err := o.getTransport(srv.URL)
12201222
assert.FatalError(t, err)
@@ -1347,7 +1349,7 @@ func TestACMEClient_GetCertificate(t *testing.T) {
13471349
NewNonce: srv.URL + "/foo",
13481350
}
13491351
// Retrieve transport from options.
1350-
o := new(clientOptions)
1352+
o := defaultClientOptions()
13511353
assert.FatalError(t, o.apply([]ClientOption{WithTransport(http.DefaultTransport)}))
13521354
tr, err := o.getTransport(srv.URL)
13531355
assert.FatalError(t, err)

ca/adminClient.go

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,14 +60,23 @@ func (e *AdminClientError) Error() string {
6060
return e.Message
6161
}
6262

63+
// defaultClientOptions returns a new [clientOptions] with a
64+
// default timeout set.
65+
func defaultClientOptions() clientOptions {
66+
return clientOptions{
67+
timeout: 15 * time.Second,
68+
}
69+
}
70+
6371
// NewAdminClient creates a new AdminClient with the given endpoint and options.
6472
func NewAdminClient(endpoint string, opts ...ClientOption) (*AdminClient, error) {
6573
u, err := parseEndpoint(endpoint)
6674
if err != nil {
6775
return nil, err
6876
}
77+
6978
// Retrieve transport from options.
70-
o := new(clientOptions)
79+
o := defaultClientOptions()
7180
if err := o.apply(opts); err != nil {
7281
return nil, err
7382
}
@@ -124,7 +133,7 @@ func (c *AdminClient) generateAdminToken(aud *url.URL) (string, error) {
124133
func (c *AdminClient) retryOnError(r *http.Response) bool {
125134
if c.retryFunc != nil {
126135
if c.retryFunc(r.StatusCode) {
127-
o := new(clientOptions)
136+
o := defaultClientOptions()
128137
if err := o.apply(c.opts); err != nil {
129138
return false
130139
}

ca/client.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -571,8 +571,9 @@ func NewClient(endpoint string, opts ...ClientOption) (*Client, error) {
571571
if err != nil {
572572
return nil, err
573573
}
574+
574575
// Retrieve transport from options.
575-
o := new(clientOptions)
576+
o := defaultClientOptions()
576577
if err := o.apply(opts); err != nil {
577578
return nil, err
578579
}
@@ -593,7 +594,7 @@ func NewClient(endpoint string, opts ...ClientOption) (*Client, error) {
593594
func (c *Client) retryOnError(r *http.Response) bool {
594595
if c.retryFunc != nil {
595596
if c.retryFunc(r.StatusCode) {
596-
o := new(clientOptions)
597+
o := defaultClientOptions()
597598
if err := o.apply(c.opts); err != nil {
598599
return false
599600
}

ca/client_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1038,11 +1038,11 @@ func TestClient_WithTimeout(t *testing.T) {
10381038
t.Run(tt.name, func(t *testing.T) {
10391039
c, err := NewClient(srv.URL, tt.options...)
10401040
require.NoError(t, err)
1041+
assert.NotZero(t, c.timeout)
10411042
_, err = c.Health()
10421043
tt.assertion(t, err)
10431044
})
10441045
}
1045-
10461046
}
10471047

10481048
func Test_enforceRequestID(t *testing.T) {

0 commit comments

Comments
 (0)