internal: Use provided context in subsequent request

Currently the HTTP request does not set the given context.
This change sets the context (if not nil) on the request.

Change-Id: I4bb21636d05050a68ba70ce92f9bf9ba608fbfad
Reviewed-on: https://go-review.googlesource.com/45370
Run-TryBot: Chris Broadfoot <cbro@golang.org>
Reviewed-by: Jaana Burcu Dogan <jbd@google.com>
Reviewed-by: Chris Broadfoot <cbro@golang.org>
This commit is contained in:
Bastian Ike 2017-06-28 10:57:20 +02:00 committed by Chris Broadfoot
parent 5432cc9688
commit 626d87b993
2 changed files with 26 additions and 1 deletions

View File

@ -18,6 +18,7 @@ import (
"time" "time"
"golang.org/x/net/context" "golang.org/x/net/context"
"golang.org/x/net/context/ctxhttp"
) )
// Token represents the crendentials used to authorize // Token represents the crendentials used to authorize
@ -189,7 +190,7 @@ func RetrieveToken(ctx context.Context, clientID, clientSecret, tokenURL string,
if !bustedAuth { if !bustedAuth {
req.SetBasicAuth(clientID, clientSecret) req.SetBasicAuth(clientID, clientSecret)
} }
r, err := hc.Do(req) r, err := ctxhttp.Do(ctx, hc, req)
if err != nil { if err != nil {
return nil, err return nil, err
} }

View File

@ -79,3 +79,27 @@ func TestProviderAuthHeaderWorksDomain(t *testing.T) {
} }
} }
} }
func TestRetrieveTokenWithContexts(t *testing.T) {
const clientID = "client-id"
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {}))
defer ts.Close()
_, err := RetrieveToken(context.Background(), clientID, "", ts.URL, url.Values{})
if err != nil {
t.Errorf("RetrieveToken (with background context) = %v; want no error", err)
}
ctx, cancelfunc := context.WithCancel(context.Background())
cancellingts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
cancelfunc()
}))
defer cancellingts.Close()
_, err = RetrieveToken(ctx, clientID, "", cancellingts.URL, url.Values{})
if err == nil {
t.Errorf("RetrieveToken (with cancelled context) = nil; want error")
}
}