check / check (push) Failing after 2s
script/loadtest [duration [clients]] (make loadtest, defaults 10s and 4) measures pixad in three scenarios: hit (one cached image), miss (a new source image every request) and herd (each new source image asked for by all clients at once). For each it prints vegeta's report (requests per second, p50/p95/p99 latency, status codes), pixad's peak resident memory and how many requests reached the origin. It is a benchmark, not run by script/check. The origin it uses, internal/loadtestorigin behind cmd/loadtest-origin, answers every path with one generated JPEG. Bad arguments are refused before the build. README.md says how to run and read it and keeps 1-5k r/s as a target not yet measured at scale. Model: opus-5-5
52 lines
1.3 KiB
Go
52 lines
1.3 KiB
Go
package loadtestorigin
|
|
|
|
import (
|
|
"bytes"
|
|
"image/jpeg"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"testing"
|
|
)
|
|
|
|
// TestEveryPathServesTheSameJPEG checks that the origin answers any path with
|
|
// 200 and the same JPEG, so every new path script/loadtest asks pixad for is
|
|
// a valid source image.
|
|
func TestEveryPathServesTheSameJPEG(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
photo, err := makeJPEG()
|
|
if err != nil {
|
|
t.Fatalf("makeJPEG: %v", err)
|
|
}
|
|
|
|
size, err := jpeg.DecodeConfig(bytes.NewReader(photo))
|
|
if err != nil {
|
|
t.Fatalf("the image does not decode as a JPEG: %v", err)
|
|
}
|
|
|
|
if size.Width != imageWidth || size.Height != imageHeight {
|
|
t.Errorf("the image is %dx%d, want %dx%d",
|
|
size.Width, size.Height, imageWidth, imageHeight)
|
|
}
|
|
|
|
handler := newHandler(photo)
|
|
|
|
for _, path := range []string{"/", "/miss/1.jpg", "/herd/2.jpg"} {
|
|
rec := httptest.NewRecorder()
|
|
handler.ServeHTTP(rec, httptest.NewRequestWithContext(
|
|
t.Context(), http.MethodGet, path, nil))
|
|
|
|
if rec.Code != http.StatusOK {
|
|
t.Errorf("%s: status = %d, want %d", path, rec.Code, http.StatusOK)
|
|
}
|
|
|
|
if ct := rec.Header().Get("Content-Type"); ct != "image/jpeg" {
|
|
t.Errorf("%s: Content-Type = %q, want image/jpeg", path, ct)
|
|
}
|
|
|
|
if !bytes.Equal(rec.Body.Bytes(), photo) {
|
|
t.Errorf("%s: the body is not the image", path)
|
|
}
|
|
}
|
|
}
|