internal/pkg: pass context in request wrapper
All checks were successful
Test / Create distribution (push) Successful in 42s
Test / Sandbox (push) Successful in 2m29s
Test / Hakurei (push) Successful in 3m34s
Test / ShareFS (push) Successful in 3m40s
Test / Hpkg (push) Successful in 4m32s
Test / Sandbox (race detector) (push) Successful in 4m48s
Test / Hakurei (race detector) (push) Successful in 5m49s
Test / Flake checks (push) Successful in 1m46s

This method is for the most common use case, and in actual use there will always be an associated context.

Signed-off-by: Ophestra <cat@gensokyo.uk>
This commit is contained in:
2026-01-03 23:53:52 +09:00
parent 40081e7a06
commit 05202cf994
2 changed files with 50 additions and 9 deletions

View File

@@ -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
}

View File

@@ -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)