aboutsummaryrefslogtreecommitdiffhomepage
path: root/internal/pkg/net_test.go
diff options
context:
space:
mode:
authorOphestra <cat@gensokyo.uk>2026-01-25 16:07:07 +0900
committerOphestra <cat@gensokyo.uk>2026-01-25 16:10:34 +0900
commit861801597d800661b26ca03e503cc571537e1304 (patch)
tree5b4777b7b160811c2a70f10ddcdd0c931af8567a /internal/pkg/net_test.go
parent334578fddeda6c952b1c2e35829c91c9da72747e (diff)
internal/pkg: expose response body
This uses the new measured reader provided by Cache. This should make httpArtifact zero-copy. Signed-off-by: Ophestra <cat@gensokyo.uk>
Diffstat (limited to 'internal/pkg/net_test.go')
-rw-r--r--internal/pkg/net_test.go51
1 files changed, 42 insertions, 9 deletions
diff --git a/internal/pkg/net_test.go b/internal/pkg/net_test.go
index c7c49061..afabcbad 100644
--- a/internal/pkg/net_test.go
+++ b/internal/pkg/net_test.go
@@ -8,6 +8,7 @@ import (
"testing"
"testing/fstest"
"unique"
+ "unsafe"
"hakurei.app/container/check"
"hakurei.app/internal/pkg"
@@ -32,6 +33,12 @@ func TestHTTPGet(t *testing.T) {
checkWithCache(t, []cacheTestCase{
{"direct", nil, func(t *testing.T, base *check.Absolute, c *pkg.Cache) {
+ var r pkg.RContext
+ rCacheVal := reflect.ValueOf(&r).Elem().FieldByName("cache")
+ reflect.NewAt(
+ rCacheVal.Type(),
+ unsafe.Pointer(rCacheVal.UnsafeAddr()),
+ ).Elem().Set(reflect.ValueOf(c))
f := pkg.NewHTTPGet(
&client,
@@ -39,12 +46,14 @@ func TestHTTPGet(t *testing.T) {
testdataChecksum.Value(),
)
var got []byte
- if r, err := f.Cure(t.Context()); err != nil {
+ if rc, err := f.Cure(&r); err != nil {
t.Fatalf("Cure: error = %v", err)
- } else if got, err = io.ReadAll(r); err != nil {
+ } else if got, err = io.ReadAll(rc); err != nil {
t.Fatalf("ReadAll: error = %v", err)
} else if string(got) != testdata {
t.Fatalf("Cure: %x, want %x", got, testdata)
+ } else if err = rc.Close(); err != nil {
+ t.Fatalf("Close: error = %v", err)
}
// check direct validation
@@ -56,8 +65,21 @@ func TestHTTPGet(t *testing.T) {
wantErrMismatch := &pkg.ChecksumMismatchError{
Got: testdataChecksum.Value(),
}
- if _, err := f.Cure(t.Context()); !reflect.DeepEqual(err, wantErrMismatch) {
- t.Fatalf("Cure: error = %#v, want %#v", err, wantErrMismatch)
+ if rc, err := f.Cure(&r); err != nil {
+ t.Fatalf("Cure: error = %v", err)
+ } else if got, err = io.ReadAll(rc); err != nil {
+ t.Fatalf("ReadAll: error = %v", err)
+ } else if string(got) != testdata {
+ t.Fatalf("Cure: %x, want %x", got, testdata)
+ } else if err = rc.Close(); !reflect.DeepEqual(err, wantErrMismatch) {
+ t.Fatalf("Close: error = %#v, want %#v", err, wantErrMismatch)
+ }
+
+ // check fallback validation
+ if rc, err := f.Cure(&r); err != nil {
+ t.Fatalf("Cure: error = %v", err)
+ } else if err = rc.Close(); !reflect.DeepEqual(err, wantErrMismatch) {
+ t.Fatalf("Close: error = %#v, want %#v", err, wantErrMismatch)
}
// check direct response error
@@ -67,12 +89,19 @@ func TestHTTPGet(t *testing.T) {
pkg.Checksum{},
)
wantErrNotFound := pkg.ResponseStatusError(http.StatusNotFound)
- if _, err := f.Cure(t.Context()); !reflect.DeepEqual(err, wantErrNotFound) {
+ if _, err := f.Cure(&r); !reflect.DeepEqual(err, wantErrNotFound) {
t.Fatalf("Cure: error = %#v, want %#v", err, wantErrNotFound)
}
}, pkg.MustDecode("E4vEZKhCcL2gPZ2Tt59FS3lDng-d_2SKa2i5G_RbDfwGn6EemptFaGLPUDiOa94C")},
{"cure", nil, func(t *testing.T, base *check.Absolute, c *pkg.Cache) {
+ var r pkg.RContext
+ rCacheVal := reflect.ValueOf(&r).Elem().FieldByName("cache")
+ reflect.NewAt(
+ rCacheVal.Type(),
+ unsafe.Pointer(rCacheVal.UnsafeAddr()),
+ ).Elem().Set(reflect.ValueOf(c))
+
f := pkg.NewHTTPGet(
&client,
"file:///testdata",
@@ -91,12 +120,14 @@ func TestHTTPGet(t *testing.T) {
}
var got []byte
- if r, err := f.Cure(t.Context()); err != nil {
+ if rc, err := f.Cure(&r); err != nil {
t.Fatalf("Cure: error = %v", err)
- } else if got, err = io.ReadAll(r); err != nil {
+ } else if got, err = io.ReadAll(rc); err != nil {
t.Fatalf("ReadAll: error = %v", err)
} else if string(got) != testdata {
t.Fatalf("Cure: %x, want %x", got, testdata)
+ } else if err = rc.Close(); err != nil {
+ t.Fatalf("Close: error = %v", err)
}
// check load from cache
@@ -105,12 +136,14 @@ func TestHTTPGet(t *testing.T) {
"file:///testdata",
testdataChecksum.Value(),
)
- if r, err := f.Cure(t.Context()); err != nil {
+ if rc, err := f.Cure(&r); err != nil {
t.Fatalf("Cure: error = %v", err)
- } else if got, err = io.ReadAll(r); err != nil {
+ } else if got, err = io.ReadAll(rc); err != nil {
t.Fatalf("ReadAll: error = %v", err)
} else if string(got) != testdata {
t.Fatalf("Cure: %x, want %x", got, testdata)
+ } else if err = rc.Close(); err != nil {
+ t.Fatalf("Close: error = %v", err)
}
// check error passthrough