From 05202cf99481e4b005d766a1a5fdec5d2889396b Mon Sep 17 00:00:00 2001 From: Ophestra Date: Sat, 3 Jan 2026 23:53:52 +0900 Subject: [PATCH] internal/pkg: pass context in request wrapper This method is for the most common use case, and in actual use there will always be an associated context. Signed-off-by: Ophestra --- internal/pkg/net.go | 10 ++++++-- internal/pkg/net_test.go | 49 ++++++++++++++++++++++++++++++++++------ 2 files changed, 50 insertions(+), 9 deletions(-) diff --git a/internal/pkg/net.go b/internal/pkg/net.go index 519a9b0..09ad7fa 100644 --- a/internal/pkg/net.go +++ b/internal/pkg/net.go @@ -1,6 +1,7 @@ package pkg import ( + "context" "crypto/sha512" "errors" "io" @@ -45,8 +46,13 @@ func (c *Cache) NewHTTP(hc *http.Client, req *http.Request, checksum Checksum) F // NewHTTPGet returns a new [File] backed by the supplied client. A GET request // is set up for url. If c is nil, [http.DefaultClient] is used instead. -func (c *Cache) NewHTTPGet(hc *http.Client, url string, checksum Checksum) (File, error) { - req, err := http.NewRequest(http.MethodGet, url, nil) +func (c *Cache) NewHTTPGet( + ctx context.Context, + hc *http.Client, + url string, + checksum Checksum, +) (File, error) { + req, err := http.NewRequestWithContext(ctx, http.MethodGet, url, nil) if err != nil { return nil, err } diff --git a/internal/pkg/net_test.go b/internal/pkg/net_test.go index 016d0de..dbd956a 100644 --- a/internal/pkg/net_test.go +++ b/internal/pkg/net_test.go @@ -34,7 +34,12 @@ func TestHTTP(t *testing.T) { checkWithCache(t, []cacheTestCase{ {"direct", nil, func(t *testing.T, base *check.Absolute, c *pkg.Cache) { var got []byte - if f, err := c.NewHTTPGet(&client, "file:///testdata", testdataChecksum); err != nil { + if f, err := c.NewHTTPGet( + t.Context(), + &client, + "file:///testdata", + testdataChecksum, + ); err != nil { t.Fatalf("NewHTTPGet: error = %v", err) } else if got, err = f.Data(); err != nil { t.Fatalf("Data: error = %v", err) @@ -48,7 +53,12 @@ func TestHTTP(t *testing.T) { wantErrMismatch := &pkg.ChecksumMismatchError{ Got: testdataChecksum, } - if f, err := c.NewHTTPGet(&client, "file:///testdata", pkg.Checksum{}); err != nil { + if f, err := c.NewHTTPGet( + t.Context(), + &client, + "file:///testdata", + pkg.Checksum{}, + ); err != nil { t.Fatalf("NewHTTPGet: error = %v", err) } else if _, err = f.Data(); !reflect.DeepEqual(err, wantErrMismatch) { t.Fatalf("Data: error = %#v, want %#v", err, wantErrMismatch) @@ -58,7 +68,12 @@ func TestHTTP(t *testing.T) { // check direct response error wantErrNotFound := pkg.ResponseStatusError(http.StatusNotFound) - if f, err := c.NewHTTPGet(&client, "file:///nonexistent", pkg.Checksum{}); err != nil { + if f, err := c.NewHTTPGet( + t.Context(), + &client, + "file:///nonexistent", + pkg.Checksum{}, + ); err != nil { t.Fatalf("NewHTTPGet: error = %v", err) } else if _, err = f.Data(); !reflect.DeepEqual(err, wantErrNotFound) { t.Fatalf("Data: error = %#v, want %#v", err, wantErrNotFound) @@ -68,7 +83,12 @@ func TestHTTP(t *testing.T) { }, pkg.MustDecode("E4vEZKhCcL2gPZ2Tt59FS3lDng-d_2SKa2i5G_RbDfwGn6EemptFaGLPUDiOa94C")}, {"load or store", nil, func(t *testing.T, base *check.Absolute, c *pkg.Cache) { - f, err := c.NewHTTPGet(&client, "file:///testdata", testdataChecksum) + f, err := c.NewHTTPGet( + t.Context(), + &client, + "file:///testdata", + testdataChecksum, + ) if err != nil { t.Fatalf("NewHTTPGet: error = %v", err) } @@ -101,7 +121,12 @@ func TestHTTP(t *testing.T) { } // check load from cache - if f, err = c.NewHTTPGet(&client, "file:///testdata", testdataChecksum); err != nil { + if f, err = c.NewHTTPGet( + t.Context(), + &client, + "file:///testdata", + testdataChecksum, + ); err != nil { t.Fatalf("NewHTTPGet: error = %v", err) } else if got, err = f.Data(); err != nil { t.Fatalf("Data: error = %v", err) @@ -113,7 +138,12 @@ func TestHTTP(t *testing.T) { // check error passthrough wantErrNotFound := pkg.ResponseStatusError(http.StatusNotFound) - if f, err = c.NewHTTPGet(&client, "file:///nonexistent", pkg.Checksum{}); err != nil { + if f, err = c.NewHTTPGet( + t.Context(), + &client, + "file:///nonexistent", + pkg.Checksum{}, + ); err != nil { t.Fatalf("NewHTTPGet: error = %v", err) } else if _, err = f.Pathname(); !reflect.DeepEqual(err, wantErrNotFound) { t.Fatalf("Pathname: error = %#v, want %#v", err, wantErrNotFound) @@ -132,7 +162,12 @@ func TestHTTP(t *testing.T) { "identifier", testdataChecksumString, ) - if f, err := c.NewHTTPGet(&client, "file:///testdata", testdataChecksum); err != nil { + if f, err := c.NewHTTPGet( + t.Context(), + &client, + "file:///testdata", + testdataChecksum, + ); err != nil { t.Fatalf("NewHTTPGet: error = %v", err) } else if got, err = f.Data(); err != nil { t.Fatalf("Data: error = %v", err)