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
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:
@@ -1,6 +1,7 @@
|
|||||||
package pkg
|
package pkg
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"context"
|
||||||
"crypto/sha512"
|
"crypto/sha512"
|
||||||
"errors"
|
"errors"
|
||||||
"io"
|
"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
|
// 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.
|
// 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) {
|
func (c *Cache) NewHTTPGet(
|
||||||
req, err := http.NewRequest(http.MethodGet, url, nil)
|
ctx context.Context,
|
||||||
|
hc *http.Client,
|
||||||
|
url string,
|
||||||
|
checksum Checksum,
|
||||||
|
) (File, error) {
|
||||||
|
req, err := http.NewRequestWithContext(ctx, http.MethodGet, url, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,7 +34,12 @@ func TestHTTP(t *testing.T) {
|
|||||||
checkWithCache(t, []cacheTestCase{
|
checkWithCache(t, []cacheTestCase{
|
||||||
{"direct", nil, func(t *testing.T, base *check.Absolute, c *pkg.Cache) {
|
{"direct", nil, func(t *testing.T, base *check.Absolute, c *pkg.Cache) {
|
||||||
var got []byte
|
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)
|
t.Fatalf("NewHTTPGet: error = %v", err)
|
||||||
} else if got, err = f.Data(); err != nil {
|
} else if got, err = f.Data(); err != nil {
|
||||||
t.Fatalf("Data: error = %v", err)
|
t.Fatalf("Data: error = %v", err)
|
||||||
@@ -48,7 +53,12 @@ func TestHTTP(t *testing.T) {
|
|||||||
wantErrMismatch := &pkg.ChecksumMismatchError{
|
wantErrMismatch := &pkg.ChecksumMismatchError{
|
||||||
Got: testdataChecksum,
|
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)
|
t.Fatalf("NewHTTPGet: error = %v", err)
|
||||||
} else if _, err = f.Data(); !reflect.DeepEqual(err, wantErrMismatch) {
|
} else if _, err = f.Data(); !reflect.DeepEqual(err, wantErrMismatch) {
|
||||||
t.Fatalf("Data: error = %#v, want %#v", err, wantErrMismatch)
|
t.Fatalf("Data: error = %#v, want %#v", err, wantErrMismatch)
|
||||||
@@ -58,7 +68,12 @@ func TestHTTP(t *testing.T) {
|
|||||||
|
|
||||||
// check direct response error
|
// check direct response error
|
||||||
wantErrNotFound := pkg.ResponseStatusError(http.StatusNotFound)
|
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)
|
t.Fatalf("NewHTTPGet: error = %v", err)
|
||||||
} else if _, err = f.Data(); !reflect.DeepEqual(err, wantErrNotFound) {
|
} else if _, err = f.Data(); !reflect.DeepEqual(err, wantErrNotFound) {
|
||||||
t.Fatalf("Data: error = %#v, want %#v", 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")},
|
}, pkg.MustDecode("E4vEZKhCcL2gPZ2Tt59FS3lDng-d_2SKa2i5G_RbDfwGn6EemptFaGLPUDiOa94C")},
|
||||||
|
|
||||||
{"load or store", nil, func(t *testing.T, base *check.Absolute, c *pkg.Cache) {
|
{"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 {
|
if err != nil {
|
||||||
t.Fatalf("NewHTTPGet: error = %v", err)
|
t.Fatalf("NewHTTPGet: error = %v", err)
|
||||||
}
|
}
|
||||||
@@ -101,7 +121,12 @@ func TestHTTP(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// check load from cache
|
// 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)
|
t.Fatalf("NewHTTPGet: error = %v", err)
|
||||||
} else if got, err = f.Data(); err != nil {
|
} else if got, err = f.Data(); err != nil {
|
||||||
t.Fatalf("Data: error = %v", err)
|
t.Fatalf("Data: error = %v", err)
|
||||||
@@ -113,7 +138,12 @@ func TestHTTP(t *testing.T) {
|
|||||||
|
|
||||||
// check error passthrough
|
// check error passthrough
|
||||||
wantErrNotFound := pkg.ResponseStatusError(http.StatusNotFound)
|
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)
|
t.Fatalf("NewHTTPGet: error = %v", err)
|
||||||
} else if _, err = f.Pathname(); !reflect.DeepEqual(err, wantErrNotFound) {
|
} else if _, err = f.Pathname(); !reflect.DeepEqual(err, wantErrNotFound) {
|
||||||
t.Fatalf("Pathname: error = %#v, want %#v", err, wantErrNotFound)
|
t.Fatalf("Pathname: error = %#v, want %#v", err, wantErrNotFound)
|
||||||
@@ -132,7 +162,12 @@ func TestHTTP(t *testing.T) {
|
|||||||
"identifier",
|
"identifier",
|
||||||
testdataChecksumString,
|
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)
|
t.Fatalf("NewHTTPGet: error = %v", err)
|
||||||
} else if got, err = f.Data(); err != nil {
|
} else if got, err = f.Data(); err != nil {
|
||||||
t.Fatalf("Data: error = %v", err)
|
t.Fatalf("Data: error = %v", err)
|
||||||
|
|||||||
Reference in New Issue
Block a user