check / check (push) Canceled after 0s
Cached images were served until eviction, so upstream changes were missed. After 24 hours a request checks the source with upstream, sending its stored ETag and Last-Modified. A 304 renews it with no download or conversion. New bytes replace it; older variants are converted again. A failed check serves the cached image and puts the URL in the negative cache. Images not checked for 30 days are evicted. Variant rows keep the source's ETag and Last-Modified for checking a variant of an evicted source. A variant file's modification time is its source's check time when it was made or renewed. Hits read it without a database call. The ETag includes it, so new bytes get a new ETag. Model: opus-5-5
52 lines
1.2 KiB
Go
52 lines
1.2 KiB
Go
package httpfetcher
|
|
|
|
import (
|
|
"context"
|
|
"io"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"testing"
|
|
|
|
"github.com/go-chi/chi/v5/middleware"
|
|
"sneak.berlin/go/pixa/internal/imagerequest"
|
|
)
|
|
|
|
// TestFetchSendsRequestID verifies that a fetch sends the ID of the request
|
|
// it serves, which the RequestID middleware stores in the request context,
|
|
// to the upstream host as X-Request-Id, so the fetch can be found in that
|
|
// host's logs.
|
|
func TestFetchSendsRequestID(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
const requestID = "test-request-id"
|
|
|
|
received := make(chan string, 1)
|
|
|
|
srv := httptest.NewServer(http.HandlerFunc(
|
|
func(w http.ResponseWriter, r *http.Request) {
|
|
received <- r.Header.Get("X-Request-Id")
|
|
|
|
w.Header().Set("Content-Type", imagerequest.FormatJPEG.MIMEType())
|
|
_, _ = io.WriteString(w, imagePayload)
|
|
}))
|
|
t.Cleanup(srv.Close)
|
|
|
|
f, _ := newServerFetcher(t, srv, nil)
|
|
|
|
ctx := context.WithValue(testContext(t), middleware.RequestIDKey, requestID)
|
|
|
|
res, err := f.Fetch(ctx, upstreamSource("/image"), "", "")
|
|
if err != nil {
|
|
t.Fatalf("Fetch() error = %v", err)
|
|
}
|
|
|
|
_ = res.Content.Close()
|
|
|
|
got := <-received
|
|
t.Logf("upstream received X-Request-Id %q", got)
|
|
|
|
if got != requestID {
|
|
t.Errorf("upstream X-Request-Id = %q, want %q", got, requestID)
|
|
}
|
|
}
|