diff options
| author | Ophestra <cat@gensokyo.uk> | 2026-01-25 16:07:07 +0900 |
|---|---|---|
| committer | Ophestra <cat@gensokyo.uk> | 2026-01-25 16:10:34 +0900 |
| commit | 861801597d800661b26ca03e503cc571537e1304 (patch) | |
| tree | 5b4777b7b160811c2a70f10ddcdd0c931af8567a /internal/pkg/net_test.go | |
| parent | 334578fddeda6c952b1c2e35829c91c9da72747e (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.go | 51 |
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 |
