86 lines
2.1 KiB
Go
86 lines
2.1 KiB
Go
package delivery
|
|
|
|
import (
|
|
"crypto/sha256"
|
|
"encoding/hex"
|
|
"fmt"
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
internalbuild "gitea.maximumdirect.net/eric/ReleaseKit/internal/build"
|
|
"gitea.maximumdirect.net/eric/ReleaseKit/internal/gitea"
|
|
)
|
|
|
|
const performanceArtifactSize = 16 << 20
|
|
|
|
func BenchmarkPerformanceAssetPreflight(b *testing.B) {
|
|
result, totalBytes := performanceBuildResult(b)
|
|
declarations, err := declaredBuildAssets(result)
|
|
if err != nil {
|
|
b.Fatal(err)
|
|
}
|
|
|
|
b.Run("Declarations", func(b *testing.B) {
|
|
b.ReportAllocs()
|
|
b.SetBytes(totalBytes)
|
|
b.ResetTimer()
|
|
b.ReportMetric(float64(totalBytes), "bytes/op")
|
|
for i := 0; i < b.N; i++ {
|
|
assets, err := declaredBuildAssets(result)
|
|
if err != nil || len(assets) != len(declarations) {
|
|
b.Fatalf("declaredBuildAssets() returned %d assets, err %v", len(assets), err)
|
|
}
|
|
}
|
|
})
|
|
|
|
b.Run("DeclarationsAndLocalVerification", func(b *testing.B) {
|
|
b.ReportAllocs()
|
|
b.SetBytes(totalBytes)
|
|
b.ResetTimer()
|
|
b.ReportMetric(float64(totalBytes), "bytes/op")
|
|
for i := 0; i < b.N; i++ {
|
|
assets, err := declaredBuildAssets(result)
|
|
if err != nil {
|
|
b.Fatal(err)
|
|
}
|
|
if err := gitea.VerifyLocalAssets(assets); err != nil {
|
|
b.Fatal(err)
|
|
}
|
|
}
|
|
})
|
|
}
|
|
|
|
func performanceBuildResult(b *testing.B) (internalbuild.Result, int64) {
|
|
b.Helper()
|
|
outputDir := b.TempDir()
|
|
data := make([]byte, performanceArtifactSize)
|
|
for i := range data {
|
|
data[i] = byte((i*31 + i/251 + 17) % 251)
|
|
}
|
|
digest := sha256.Sum256(data)
|
|
result := internalbuild.Result{
|
|
Version: "v1.2.3",
|
|
BinaryName: "releasekit",
|
|
Targets: []internalbuild.Target{
|
|
{OS: "linux", Arch: "amd64"},
|
|
{OS: "windows", Arch: "amd64"},
|
|
},
|
|
}
|
|
for _, target := range result.Targets {
|
|
name := fmt.Sprintf("releasekit-v1.2.3-%s-%s", target.OS, target.Arch)
|
|
if target.OS == "windows" {
|
|
name += ".exe"
|
|
}
|
|
path := filepath.Join(outputDir, name)
|
|
if err := os.WriteFile(path, data, 0o600); err != nil {
|
|
b.Fatal(err)
|
|
}
|
|
result.Artifacts = append(result.Artifacts, internalbuild.Artifact{
|
|
Path: path, Filename: name, Target: target,
|
|
SHA256: hex.EncodeToString(digest[:]),
|
|
})
|
|
}
|
|
return result, 2 * performanceArtifactSize
|
|
}
|