fix: WithContext had no effect (#1337)
Fix usage of an outdated request in RequestWithLockedBucket after applying WithContext option --------- Co-authored-by: Fedor Lapshin <fe.lap.prog@gmail.com>
This commit is contained in:
parent
ba97131805
commit
58ea3535b0
2 changed files with 41 additions and 0 deletions
|
@ -223,6 +223,7 @@ func (s *Session) RequestWithLockedBucket(method, urlStr, contentType string, b
|
||||||
for _, opt := range options {
|
for _, opt := range options {
|
||||||
opt(cfg)
|
opt(cfg)
|
||||||
}
|
}
|
||||||
|
req = cfg.Request
|
||||||
|
|
||||||
if s.Debug {
|
if s.Debug {
|
||||||
for k, v := range req.Header {
|
for k, v := range req.Header {
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
package discordgo
|
package discordgo
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"context"
|
||||||
"errors"
|
"errors"
|
||||||
|
"net/http"
|
||||||
"testing"
|
"testing"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -235,3 +237,41 @@ func Test_unmarshal(t *testing.T) {
|
||||||
t.Errorf("Unexpected error type: %T", err)
|
t.Errorf("Unexpected error type: %T", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestWithContext(t *testing.T) {
|
||||||
|
// Set up a test context.
|
||||||
|
type key struct{}
|
||||||
|
ctx := context.WithValue(context.Background(), key{}, "value")
|
||||||
|
|
||||||
|
// Set up a test client.
|
||||||
|
session, err := New("")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
testErr := errors.New("test")
|
||||||
|
|
||||||
|
// Intercept the request to assert the context.
|
||||||
|
session.Client.Transport = roundTripperFunc(func(r *http.Request) (*http.Response, error) {
|
||||||
|
val, _ := r.Context().Value(key{}).(string)
|
||||||
|
if val != "value" {
|
||||||
|
t.Errorf("missing value in context (got %q, wanted %q)", val, "value")
|
||||||
|
}
|
||||||
|
return nil, testErr
|
||||||
|
})
|
||||||
|
|
||||||
|
// Run any client method using WithContext.
|
||||||
|
_, err = session.User("", WithContext(ctx))
|
||||||
|
|
||||||
|
// Verify that the assertion code was actually run.
|
||||||
|
if !errors.Is(err, testErr) {
|
||||||
|
t.Errorf("unexpected error %v returned from client", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// roundTripperFunc implements http.RoundTripper.
|
||||||
|
type roundTripperFunc func(*http.Request) (*http.Response, error)
|
||||||
|
|
||||||
|
func (f roundTripperFunc) RoundTrip(req *http.Request) (*http.Response, error) {
|
||||||
|
return f(req)
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue