From 7c3a7f9e4c277d8d354d76dd597869eaa65ea1da Mon Sep 17 00:00:00 2001 From: Quentin Renard Date: Tue, 3 Dec 2024 14:32:02 +0100 Subject: [PATCH] Added context to http json sender --- http.go | 9 ++++++++- http_test.go | 11 +++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/http.go b/http.go index 143c905..1cded75 100644 --- a/http.go +++ b/http.go @@ -200,6 +200,7 @@ type HTTPSendJSONOptions struct { BodyError interface{} BodyIn interface{} BodyOut interface{} + Context context.Context HeadersIn map[string]string HeadersOut HTTPSenderHeaderFunc Host string @@ -222,9 +223,15 @@ func (s *HTTPSender) SendJSON(o HTTPSendJSONOptions) (err error) { bi = bb } + // Get context + ctx := o.Context + if ctx == nil { + ctx = context.Background() + } + // Create request var req *http.Request - if req, err = http.NewRequest(o.Method, o.URL, bi); err != nil { + if req, err = http.NewRequestWithContext(ctx, o.Method, o.URL, bi); err != nil { err = fmt.Errorf("astikit: creating request failed: %w", err) return } diff --git a/http_test.go b/http_test.go index 3239a44..4589b93 100644 --- a/http_test.go +++ b/http_test.go @@ -212,6 +212,17 @@ func TestHTTPSender(t *testing.T) { }); err != nil { t.Fatalf("expected no error, got %s", err) } + + // Context + ctx, cancel := context.WithCancel(context.Background()) + cancel() + ctxCheckerMockedHTTPClient := mockedHTTPClient(func(req *http.Request) (resp *http.Response, err error) { + return &http.Response{}, req.Context().Err() + }) + s5 := NewHTTPSender(HTTPSenderOptions{Client: ctxCheckerMockedHTTPClient}) + if err := s5.SendJSON(HTTPSendJSONOptions{Context: ctx}); !errors.Is(err, context.Canceled) { + t.Fatalf("expected context cancelled error, got %s", err) + } } func TestHTTPDownloader(t *testing.T) {