1
0
Fork 1
mirror of https://github.com/git-pkgs/proxy.git synced 2026-06-02 00:38:16 -04:00
pkg-proxy/internal/server/browse_bench_test.go
Andrew Nesbitt e912227e3b
Use archives.OpenBytes in browse handler to cut buffer copies (#107)
* Use archives.OpenBytes in openArchive to avoid redundant buffer copies

* Bump git-pkgs/archives to v0.3.0
2026-05-03 09:29:42 +01:00

57 lines
1.2 KiB
Go

package server
import (
"archive/tar"
"bytes"
"compress/gzip"
"fmt"
"math/rand"
"testing"
)
func createBenchTarGz(prefix string, fileCount, fileSize int) []byte {
rnd := rand.New(rand.NewSource(1)) //nolint:gosec
buf := new(bytes.Buffer)
gw := gzip.NewWriter(buf)
tw := tar.NewWriter(gw)
payload := make([]byte, fileSize)
for i := range fileCount {
rnd.Read(payload)
_ = tw.WriteHeader(&tar.Header{
Name: fmt.Sprintf("%sfile%04d.dat", prefix, i),
Size: int64(fileSize),
Mode: 0644,
})
_, _ = tw.Write(payload)
}
_ = tw.Close()
_ = gw.Close()
return buf.Bytes()
}
func BenchmarkOpenArchive(b *testing.B) {
cases := []struct {
name string
ecosystem string
filename string
data []byte
}{
{"npm", "npm", "pkg.tgz", createBenchTarGz("package/", 64, 16*1024)},
{"go", "go", "v1.2.3.tar.gz", createBenchTarGz("repo-abc123/", 64, 16*1024)},
}
for _, tc := range cases {
b.Run(tc.name, func(b *testing.B) {
b.SetBytes(int64(len(tc.data)))
b.ReportAllocs()
for b.Loop() {
r, err := openArchive(tc.filename, bytes.NewReader(tc.data), tc.ecosystem)
if err != nil {
b.Fatal(err)
}
_ = r.Close()
}
})
}
}