60 lines
1.3 KiB
Go
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
|
|
}
|
|
}
|
|
})
|
|
}
|