Files

60 lines
1.3 KiB
Go

package api
import (
"bytes"
"encoding/json"
"net/http"
"net/http/httptest"
"os"
"path/filepath"
"testing"
"time"
"git.quad4.io/quad4-software/osv-server/internal/config"
"git.quad4.io/quad4-software/osv-server/internal/indexer"
"git.quad4.io/quad4-software/osv-server/internal/osv"
"git.quad4.io/quad4-software/osv-server/internal/query"
)
func BenchmarkAPIServer(b *testing.B) {
dbPath := "../../data"
if _, err := os.Stat(filepath.Join(dbPath, indexer.IndexDBName)); os.IsNotExist(err) {
b.Skip("Real database not found at data/osv.db, skipping high-load benchmark")
}
cfg := &config.Config{
DataDir: dbPath,
UpdateInterval: 24 * time.Hour,
MaxRetries: 1,
RetryDelay: 1 * time.Second,
}
m, err := osv.NewManager(cfg)
if err != nil {
b.Fatalf("Failed to create manager: %v", err)
}
server := NewServer(m, cfg)
queryReq := query.QueryRequest{
Package: &query.PackageQuery{
Name: "requests",
Ecosystem: "PyPI",
},
Version: "2.28.0",
}
body, _ := json.Marshal(queryReq)
b.ResetTimer()
b.RunParallel(func(pb *testing.PB) {
for pb.Next() {
req := httptest.NewRequest("POST", "/v1/query", bytes.NewBuffer(body))
rr := httptest.NewRecorder()
server.ServeHTTP(rr, req)
if rr.Code != http.StatusOK {
// We expect 200 since data/osv.db exists
}
}
})
}