77 "net/http"
88 "net/http/httptest"
99 "net/url"
10+ "os"
1011 "testing"
1112 "time"
1213
@@ -158,17 +159,29 @@ func TestUserAgent(t *testing.T) {
158159}
159160
160161func TestWithLogger (t * testing.T ) {
162+ newJSONHandler := func () slog.Handler {
163+ return slog .NewJSONHandler (
164+ os .Stdout ,
165+ & slog.HandlerOptions {
166+ AddSource : true ,
167+ Level : slog .LevelError ,
168+ },
169+ )
170+ }
161171 t .Run ("WithLogger(nil) sets a discard logger on raw httpClientOption" , func (t * testing.T ) {
162172 opts := httpClientOption {}
163173 WithLogger (nil )(& opts )
164174 require .NotNil (t , opts .logger , "WithLogger(nil) should set a discard logger, not leave it nil" )
175+ assert .Equal (t , slog .DiscardHandler , opts .logger .Handler (), "WithLogger(nil) should set a discard logger handler" )
165176 })
166177
167178 t .Run ("WithLogger(customLogger) assigns the provided logger" , func (t * testing.T ) {
168- customLogger := slog .New (slog .DiscardHandler )
179+ handler := newJSONHandler ()
180+ customLogger := slog .New (handler )
169181 opts := httpClientOption {}
170182 WithLogger (customLogger )(& opts )
171183 require .Equal (t , customLogger , opts .logger , "WithLogger should assign the provided logger" )
184+ assert .Equal (t , handler , opts .logger .Handler (), "WithLogger should set the provided logger handler" )
172185 })
173186
174187 t .Run ("WithLogger(nil) propagates discard logger to retryable HTTP client" , func (t * testing.T ) {
@@ -177,59 +190,18 @@ func TestWithLogger(t *testing.T) {
177190 client , err := opts .newRetryableHTTPClient ()
178191 require .NoError (t , err )
179192 assert .NotNil (t , client .Logger , "retryable client should have logger set from WithLogger(nil)" )
193+ assert .Equal (t , slog .DiscardHandler , opts .logger .Handler (), "retryable client logger should be a discard logger from WithLogger(nil)" )
180194 })
181195
182196 t .Run ("WithLogger(customLogger) propagates custom logger to retryable HTTP client" , func (t * testing.T ) {
183- customLogger := slog .New (slog .DiscardHandler )
197+ handler := newJSONHandler ()
198+ customLogger := slog .New (handler )
184199 opts := httpClientOption {}
185200 WithLogger (customLogger )(& opts )
186201 client , err := opts .newRetryableHTTPClient ()
187202 require .NoError (t , err )
188203 assert .NotNil (t , client .Logger , "retryable client should have logger set" )
189- })
190-
191- t .Run ("WithLogger(customLogger) propagates to custom retryable HTTP client" , func (t * testing.T ) {
192- providedLogger := slog .New (slog .DiscardHandler )
193- customRetryClient := retryablehttp .NewClient ()
194- customRetryClient .Logger = nil
195-
196- opts := httpClientOption {}
197- WithRetryableHTTPClint (customRetryClient )(& opts )
198- WithLogger (providedLogger )(& opts )
199-
200- retrievedRetryClient , err := opts .newRetryableHTTPClient ()
201- require .NoError (t , err )
202- require .Equal (t , customRetryClient , retrievedRetryClient , "should use the provided custom retryable client" )
203- assert .Equal (t , providedLogger , retrievedRetryClient .Logger , "custom retryable client logger should be set from WithLogger" )
204- })
205-
206- t .Run ("WithLogger(nil) with custom retryable HTTP client is order-invariant" , func (t * testing.T ) {
207- customRetryClientA := retryablehttp .NewClient ()
208- customRetryClientA .Logger = nil
209- optsA := httpClientOption {}
210- WithLogger (nil )(& optsA )
211- WithRetryableHTTPClint (customRetryClientA )(& optsA )
212-
213- retrievedA , err := optsA .newRetryableHTTPClient ()
214- require .NoError (t , err )
215- require .Equal (t , customRetryClientA , retrievedA )
216- require .NotNil (t , optsA .logger , "WithLogger(nil) should assign discard logger" )
217- assert .Equal (t , optsA .logger , retrievedA .Logger , "custom retryable client should receive logger from options" )
218-
219- customRetryClientB := retryablehttp .NewClient ()
220- customRetryClientB .Logger = nil
221- optsB := httpClientOption {}
222- WithRetryableHTTPClint (customRetryClientB )(& optsB )
223- WithLogger (nil )(& optsB )
224-
225- retrievedB , err := optsB .newRetryableHTTPClient ()
226- require .NoError (t , err )
227- require .Equal (t , customRetryClientB , retrievedB )
228- require .NotNil (t , optsB .logger , "WithLogger(nil) should assign discard logger" )
229- assert .Equal (t , optsB .logger , retrievedB .Logger , "custom retryable client should receive logger from options" )
230-
231- assert .NotNil (t , retrievedA .Logger )
232- assert .NotNil (t , retrievedB .Logger )
204+ assert .Equal (t , handler , client .Logger .(* slog.Logger ).Handler (), "retryable client logger should be the custom logger from WithLogger" )
233205 })
234206}
235207
0 commit comments