fetch_ml/tests/benchmarks/config_parsing_bench_test.go
Jeremie Fraeys be67cb77d3
test(benchmarks): update benchmark tests with job cleanup and improvements
**Payload Performance Test:**
- Add job cleanup after each iteration using DeleteJob()
- Ensure isolated memory measurements between test runs

**All Benchmark Tests:**
- General improvements and maintenance updates
2026-02-23 18:03:54 -05:00

174 lines
4.2 KiB
Go

package benchmarks
import (
"testing"
"gopkg.in/yaml.v3"
)
// Sample server config YAML for benchmarking
const sampleServerConfig = `
base_path: /api/v1
data_dir: /data/fetchml
auth:
type: jwt
secret: "super-secret-key-for-benchmarking-only"
token_ttl: 3600
server:
address: :8080
tls:
enabled: true
cert_file: /etc/ssl/certs/server.crt
key_file: /etc/ssl/private/server.key
security:
max_request_size: 1048576
rate_limit: 100
cors_origins:
- https://app.fetchml.com
- https://admin.fetchml.com
queue:
backend: redis
sqlite_path: /data/queue.db
filesystem_path: /data/queue
fallback_to_filesystem: true
redis:
addr: localhost:6379
password: ""
db: 0
pool_size: 50
database:
driver: postgres
dsn: postgres://user:pass@localhost/fetchml?sslmode=disable
max_connections: 100
logging:
level: info
format: json
output: stdout
resources:
max_cpu_per_task: 8
max_memory_per_task: 32
max_gpu_per_task: 1
monitoring:
enabled: true
prometheus_port: 9090
`
type BenchmarkServerConfig struct {
BasePath string `yaml:"base_path"`
DataDir string `yaml:"data_dir"`
Auth BenchmarkAuthConfig `yaml:"auth"`
Server BenchmarkServerSection `yaml:"server"`
Security BenchmarkSecurityConfig `yaml:"security"`
Queue BenchmarkQueueConfig `yaml:"queue"`
Redis BenchmarkRedisConfig `yaml:"redis"`
Database BenchmarkDatabaseConfig `yaml:"database"`
Logging BenchmarkLoggingConfig `yaml:"logging"`
Resources BenchmarkResourceConfig `yaml:"resources"`
Monitoring BenchmarkMonitoringConfig `yaml:"monitoring"`
}
type BenchmarkAuthConfig struct {
Type string `yaml:"type"`
Secret string `yaml:"secret"`
TokenTTL int `yaml:"token_ttl"`
}
type BenchmarkServerSection struct {
Address string `yaml:"address"`
TLS BenchmarkTLSConfig `yaml:"tls"`
}
type BenchmarkTLSConfig struct {
Enabled bool `yaml:"enabled"`
CertFile string `yaml:"cert_file"`
KeyFile string `yaml:"key_file"`
}
type BenchmarkSecurityConfig struct {
MaxRequestSize int `yaml:"max_request_size"`
RateLimit int `yaml:"rate_limit"`
CORSOrigins []string `yaml:"cors_origins"`
}
type BenchmarkQueueConfig struct {
Backend string `yaml:"backend"`
SQLitePath string `yaml:"sqlite_path"`
FilesystemPath string `yaml:"filesystem_path"`
FallbackToFilesystem bool `yaml:"fallback_to_filesystem"`
}
type BenchmarkRedisConfig struct {
Addr string `yaml:"addr"`
Password string `yaml:"password"`
DB int `yaml:"db"`
PoolSize int `yaml:"pool_size"`
}
type BenchmarkDatabaseConfig struct {
Driver string `yaml:"driver"`
DSN string `yaml:"dsn"`
MaxConnections int `yaml:"max_connections"`
}
type BenchmarkLoggingConfig struct {
Level string `yaml:"level"`
Format string `yaml:"format"`
Output string `yaml:"output"`
}
type BenchmarkResourceConfig struct {
MaxCPUPerTask int `yaml:"max_cpu_per_task"`
MaxMemoryPerTask int `yaml:"max_memory_per_task"`
MaxGPUPerTask int `yaml:"max_gpu_per_task"`
}
type BenchmarkMonitoringConfig struct {
Enabled bool `yaml:"enabled"`
PrometheusPort int `yaml:"prometheus_port"`
}
// BenchmarkConfigYAMLUnmarshal profiles YAML config parsing
// Tier 3 C++ candidate: Fast binary config format
func BenchmarkConfigYAMLUnmarshal(b *testing.B) {
data := []byte(sampleServerConfig)
b.ReportAllocs()
for b.Loop() {
var cfg BenchmarkServerConfig
err := yaml.Unmarshal(data, &cfg)
if err != nil {
b.Fatal(err)
}
}
}
// BenchmarkConfigYAMLUnmarshalLarge profiles large config parsing
func BenchmarkConfigYAMLUnmarshalLarge(b *testing.B) {
// Create larger config with more nested data
largeConfig := sampleServerConfig + `
extra_section:
items:
- id: item1
name: "First Item"
value: 100
- id: item2
name: "Second Item"
value: 200
- id: item3
name: "Third Item"
value: 300
`
data := []byte(largeConfig)
b.ResetTimer()
b.ReportAllocs()
for i := 0; i < b.N; i++ {
var cfg BenchmarkServerConfig
err := yaml.Unmarshal(data, &cfg)
if err != nil {
b.Fatal(err)
}
}
}