openai_ws_pool_benchmark_test.go 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. package service
  2. import (
  3. "context"
  4. "errors"
  5. "testing"
  6. "github.com/Wei-Shaw/sub2api/internal/config"
  7. )
  8. func BenchmarkOpenAIWSPoolAcquire(b *testing.B) {
  9. cfg := &config.Config{}
  10. cfg.Gateway.OpenAIWS.MaxConnsPerAccount = 8
  11. cfg.Gateway.OpenAIWS.MinIdlePerAccount = 1
  12. cfg.Gateway.OpenAIWS.MaxIdlePerAccount = 4
  13. cfg.Gateway.OpenAIWS.QueueLimitPerConn = 256
  14. cfg.Gateway.OpenAIWS.DialTimeoutSeconds = 1
  15. pool := newOpenAIWSConnPool(cfg)
  16. pool.setClientDialerForTest(&openAIWSCountingDialer{})
  17. account := &Account{ID: 1001, Platform: PlatformOpenAI, Type: AccountTypeAPIKey}
  18. req := openAIWSAcquireRequest{
  19. Account: account,
  20. WSURL: "wss://example.com/v1/responses",
  21. }
  22. ctx := context.Background()
  23. lease, err := pool.Acquire(ctx, req)
  24. if err != nil {
  25. b.Fatalf("warm acquire failed: %v", err)
  26. }
  27. lease.Release()
  28. b.ReportAllocs()
  29. b.ResetTimer()
  30. b.RunParallel(func(pb *testing.PB) {
  31. for pb.Next() {
  32. var (
  33. got *openAIWSConnLease
  34. acquireErr error
  35. )
  36. for retry := 0; retry < 3; retry++ {
  37. got, acquireErr = pool.Acquire(ctx, req)
  38. if acquireErr == nil {
  39. break
  40. }
  41. if !errors.Is(acquireErr, errOpenAIWSConnClosed) {
  42. break
  43. }
  44. }
  45. if acquireErr != nil {
  46. b.Fatalf("acquire failed: %v", acquireErr)
  47. }
  48. got.Release()
  49. }
  50. })
  51. }