Files
pkgstash/handler_test.go
T
2026-05-05 15:01:41 -06:00

69 lines
1.6 KiB
Go

package main
import (
"fmt"
"io"
"log/slog"
"net/http"
"net/http/httptest"
"testing"
"github.com/ewpt3ch/pkgstash/internal/cache"
)
func newTestServer(t *testing.T) (*httptest.Server, *Server) {
t.Helper()
mirror := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
fmt.Fprint(w, "fake pkg data")
}))
t.Cleanup(func() { mirror.Close() })
c := cache.NewCache(t.TempDir(), []string{mirror.URL + "/"}, []string{"core"})
cfg := &Config{
Port: "0",
Auth: AuthConfig{Token: "testtoken"},
}
logLevel := new(slog.LevelVar)
srv := &Server{
cfg: cfg,
c: c,
logLevel: logLevel,
}
mux := http.NewServeMux()
mux.HandleFunc("GET /{repo}/os/{arch}/{file}", srv.handlerPackage)
mux.HandleFunc("POST /api/refresh", srv.handlerRefresh)
mux.HandleFunc("POST /api/loglevel", srv.handlerLogLevel)
ts := httptest.NewServer(mux)
t.Cleanup(ts.Close)
return ts, srv
}
func TestHandlerPkgsExist(t *testing.T) {
const expected = "fake pkg data"
const expectedFile = "attachment; filename=somepkg.tar.zst"
ts, _ := newTestServer(t)
resp, err := http.Get(ts.URL + "/core/os/x86_64/somepkg.tar.zst")
respFile := resp.Header.Get("Content-Disposition")
if resp.ContentLength != int64(len(expected)) {
t.Errorf("expected %d got %d", len(expected), resp.ContentLength)
}
if respFile != expectedFile {
t.Errorf("expected %s got %s", expectedFile, respFile)
}
data, err := io.ReadAll(resp.Body)
if err != nil {
t.Fatalf("err reading body: %v", err)
}
if string(data) != expected {
t.Errorf("expected %s got %s", expected, string(data))
}
}