ops_metrics_collector_test.go 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. package service
  2. import (
  3. "context"
  4. "net/http"
  5. "net/http/httptest"
  6. "testing"
  7. "time"
  8. "github.com/DATA-DOG/go-sqlmock"
  9. "github.com/gin-gonic/gin"
  10. "github.com/stretchr/testify/require"
  11. )
  12. func TestWriteOpenAIFastPolicyBlockedResponseMarksBusinessLimited(t *testing.T) {
  13. gin.SetMode(gin.TestMode)
  14. rec := httptest.NewRecorder()
  15. c, _ := gin.CreateTestContext(rec)
  16. writeOpenAIFastPolicyBlockedResponse(c, &OpenAIFastBlockedError{Message: "custom fast policy block"})
  17. require.Equal(t, http.StatusForbidden, rec.Code)
  18. require.True(t, HasOpsClientBusinessLimited(c))
  19. reason, ok := c.Get(OpsClientBusinessLimitedReasonKey)
  20. require.True(t, ok)
  21. require.Equal(t, OpsClientBusinessLimitedReasonLocalPolicyDenied, reason)
  22. }
  23. func TestOpsMetricsCollectorQueryErrorCountsExcludesCountTokens(t *testing.T) {
  24. db, mock, err := sqlmock.New()
  25. require.NoError(t, err)
  26. collector := &OpsMetricsCollector{db: db}
  27. start := time.Date(2026, 5, 26, 10, 0, 0, 0, time.UTC)
  28. end := start.Add(time.Hour)
  29. mock.ExpectQuery(`(?s)FROM ops_error_logs\s+WHERE created_at >= \$1 AND created_at < \$2\s+AND is_count_tokens = FALSE`).
  30. WithArgs(start, end).
  31. WillReturnRows(sqlmock.NewRows([]string{
  32. "error_total",
  33. "business_limited",
  34. "error_sla",
  35. "upstream_excl",
  36. "upstream_429",
  37. "upstream_529",
  38. }).AddRow(int64(5), int64(2), int64(3), int64(1), int64(1), int64(1)))
  39. errorTotal, businessLimited, errorSLA, upstreamExcl429529, upstream429, upstream529, err := collector.queryErrorCounts(context.Background(), start, end)
  40. require.NoError(t, err)
  41. require.Equal(t, int64(5), errorTotal)
  42. require.Equal(t, int64(2), businessLimited)
  43. require.Equal(t, int64(3), errorSLA)
  44. require.Equal(t, int64(1), upstreamExcl429529)
  45. require.Equal(t, int64(1), upstream429)
  46. require.Equal(t, int64(1), upstream529)
  47. require.NoError(t, mock.ExpectationsWereMet())
  48. mock.ExpectClose()
  49. require.NoError(t, db.Close())
  50. require.NoError(t, mock.ExpectationsWereMet())
  51. }