mirror of
https://github.com/cexll/myclaude.git
synced 2026-02-05 02:30:26 +08:00
- Move all source files to internal/{app,backend,config,executor,logger,parser,utils}
- Integrate third-party libraries: zerolog, goccy/go-json, gopsutil, cobra/viper
- Add comprehensive unit tests for utils package (94.3% coverage)
- Add performance benchmarks for string operations
- Fix error display: cleanup warnings no longer pollute Recent Errors
- Add GitHub Actions CI workflow
- Add Makefile for build automation
- Add README documentation
Generated with SWE-Agent.ai
Co-Authored-By: SWE-Agent.ai <noreply@swe-agent.ai>
104 lines
2.4 KiB
Go
104 lines
2.4 KiB
Go
package wrapper
|
|
|
|
import (
|
|
"bytes"
|
|
"os"
|
|
"testing"
|
|
|
|
config "codeagent-wrapper/internal/config"
|
|
)
|
|
|
|
var (
|
|
benchCmdSink any
|
|
benchConfigSink *Config
|
|
benchMessageSink string
|
|
benchThreadIDSink string
|
|
)
|
|
|
|
// BenchmarkStartup_NewRootCommand measures CLI startup overhead (command+flags construction).
|
|
func BenchmarkStartup_NewRootCommand(b *testing.B) {
|
|
b.ReportAllocs()
|
|
for i := 0; i < b.N; i++ {
|
|
benchCmdSink = newRootCommand()
|
|
}
|
|
}
|
|
|
|
// BenchmarkConfigParse_ParseArgs measures config parsing from argv/env (steady-state).
|
|
func BenchmarkConfigParse_ParseArgs(b *testing.B) {
|
|
home := b.TempDir()
|
|
b.Setenv("HOME", home)
|
|
b.Setenv("USERPROFILE", home)
|
|
|
|
config.ResetModelsConfigCacheForTest()
|
|
b.Cleanup(config.ResetModelsConfigCacheForTest)
|
|
|
|
origArgs := os.Args
|
|
os.Args = []string{"codeagent-wrapper", "--agent", "develop", "task"}
|
|
b.Cleanup(func() { os.Args = origArgs })
|
|
|
|
if _, err := parseArgs(); err != nil {
|
|
b.Fatalf("warmup parseArgs() error: %v", err)
|
|
}
|
|
|
|
b.ReportAllocs()
|
|
b.ResetTimer()
|
|
for i := 0; i < b.N; i++ {
|
|
cfg, err := parseArgs()
|
|
if err != nil {
|
|
b.Fatalf("parseArgs() error: %v", err)
|
|
}
|
|
benchConfigSink = cfg
|
|
}
|
|
}
|
|
|
|
// BenchmarkJSONParse_ParseJSONStreamInternal measures line-delimited JSON stream parsing.
|
|
func BenchmarkJSONParse_ParseJSONStreamInternal(b *testing.B) {
|
|
stream := []byte(
|
|
`{"type":"thread.started","thread_id":"t"}` + "\n" +
|
|
`{"type":"item.completed","item":{"type":"agent_message","text":"hello"}}` + "\n" +
|
|
`{"type":"thread.completed","thread_id":"t"}` + "\n",
|
|
)
|
|
b.SetBytes(int64(len(stream)))
|
|
|
|
b.ReportAllocs()
|
|
for i := 0; i < b.N; i++ {
|
|
message, threadID := parseJSONStreamInternal(bytes.NewReader(stream), nil, nil, nil, nil)
|
|
benchMessageSink = message
|
|
benchThreadIDSink = threadID
|
|
}
|
|
}
|
|
|
|
// BenchmarkLoggerWrite 测试日志写入性能
|
|
func BenchmarkLoggerWrite(b *testing.B) {
|
|
logger, err := NewLogger()
|
|
if err != nil {
|
|
b.Fatal(err)
|
|
}
|
|
defer logger.Close()
|
|
|
|
b.ResetTimer()
|
|
for i := 0; i < b.N; i++ {
|
|
logger.Info("benchmark log message")
|
|
}
|
|
b.StopTimer()
|
|
logger.Flush()
|
|
}
|
|
|
|
// BenchmarkLoggerConcurrentWrite 测试并发日志写入性能
|
|
func BenchmarkLoggerConcurrentWrite(b *testing.B) {
|
|
logger, err := NewLogger()
|
|
if err != nil {
|
|
b.Fatal(err)
|
|
}
|
|
defer logger.Close()
|
|
|
|
b.ResetTimer()
|
|
b.RunParallel(func(pb *testing.PB) {
|
|
for pb.Next() {
|
|
logger.Info("concurrent benchmark log message")
|
|
}
|
|
})
|
|
b.StopTimer()
|
|
logger.Flush()
|
|
}
|