2026-11-07 18:02:59 +01:00
|
|
|
package npm
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"bytes"
|
2026-11-08 19:03:21 +01:00
|
|
|
"io"
|
|
|
|
|
"os"
|
2026-11-07 18:02:59 +01:00
|
|
|
"testing"
|
|
|
|
|
|
|
|
|
|
"github.com/git-pkgs/proxy/internal/metadata/npm/npmbench"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
func BenchmarkScanPackument(b *testing.B) {
|
|
|
|
|
body := npmbench.Packument(5000)
|
|
|
|
|
b.SetBytes(int64(len(body)))
|
|
|
|
|
b.ReportAllocs()
|
|
|
|
|
for b.Loop() {
|
|
|
|
|
if _, err := ScanPackument(bytes.NewReader(body)); err != nil {
|
|
|
|
|
b.Fatal(err)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func BenchmarkLookupVersion(b *testing.B) {
|
|
|
|
|
body := npmbench.Packument(5000)
|
|
|
|
|
b.SetBytes(int64(len(body)))
|
|
|
|
|
b.ReportAllocs()
|
|
|
|
|
for b.Loop() {
|
|
|
|
|
entry, err := LookupVersion(bytes.NewReader(body), "1.0.2500")
|
|
|
|
|
if err != nil || entry.Entry == nil || entry.Published == "" {
|
|
|
|
|
b.Fatalf("LookupVersion = %+v, %v", entry, err)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2026-11-08 19:03:21 +01:00
|
|
|
|
|
|
|
|
// BenchmarkRewriteStream times RewriteStream's second pass, the copy, over
|
|
|
|
|
// the 5,000-version packument, or the one NPM_PACKUMENT_BENCH names.
|
|
|
|
|
func BenchmarkRewriteStream(b *testing.B) {
|
|
|
|
|
body := npmbench.Packument(5000)
|
|
|
|
|
name := "big"
|
|
|
|
|
if path := os.Getenv("NPM_PACKUMENT_BENCH"); path != "" {
|
|
|
|
|
var err error
|
|
|
|
|
if body, err = os.ReadFile(path); err != nil {
|
|
|
|
|
b.Fatal(err)
|
|
|
|
|
}
|
|
|
|
|
name = os.Getenv("NPM_PACKUMENT_BENCH_NAME")
|
|
|
|
|
}
|
|
|
|
|
scan, err := ScanPackument(bytes.NewReader(body))
|
|
|
|
|
if err != nil {
|
|
|
|
|
b.Fatal(err)
|
|
|
|
|
}
|
|
|
|
|
options := Options{ProxyURL: "http://proxy.example"}
|
|
|
|
|
b.SetBytes(int64(len(body)))
|
|
|
|
|
b.ReportAllocs()
|
|
|
|
|
for b.Loop() {
|
|
|
|
|
if _, err := RewriteStream(name, scan, bytes.NewReader(body), io.Discard, options); err != nil {
|
|
|
|
|
b.Fatal(err)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|