diff --git a/integration/get_test.go b/integration/get_test.go index 1997010..8af40f0 100644 --- a/integration/get_test.go +++ b/integration/get_test.go @@ -59,6 +59,8 @@ func TestGetContent(t *testing.T) { assert.EqualValues(t, "text/html; charset=utf-8", resp.Header.Get("Content-Type")) assert.True(t, getSize(resp.Body) > 100) assert.Len(t, resp.Header.Get("ETag"), 42) + + // TODO: test get of non cachable content (content size > fileCacheSizeLimit) } func TestCustomDomain(t *testing.T) { diff --git a/server/gitea/client.go b/server/gitea/client.go index 7b5d009..3b9ad6f 100644 --- a/server/gitea/client.go +++ b/server/gitea/client.go @@ -82,7 +82,6 @@ func (client *Client) ServeRawContent(uri string) (*fasthttp.Response, error) { if err != nil { return nil, err } - // resp.SetBodyStream(&strings.Reader{}, -1) if err != nil { return nil, err diff --git a/server/upstream/upstream.go b/server/upstream/upstream.go index 7c9a035..b9fc2bc 100644 --- a/server/upstream/upstream.go +++ b/server/upstream/upstream.go @@ -181,6 +181,9 @@ func (o *Options) Upstream(ctx *fasthttp.RequestCtx, giteaClient *gitea.Client, var cacheBodyWriter bytes.Buffer if res != nil { if res.Header.ContentLength() > fileCacheSizeLimit { + // fasthttp else will set "Content-Length: 0" + ctx.Response.SetBodyStream(&strings.Reader{}, -1) + err = res.BodyWriteTo(ctx.Response.BodyWriter()) } else { // TODO: cache is half-empty if request is cancelled - does the ctx.Err() below do the trick?