ops_query_mode_test.go 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. //go:build unit
  2. package service
  3. import (
  4. "errors"
  5. "testing"
  6. "time"
  7. "github.com/stretchr/testify/require"
  8. )
  9. func TestShouldFallbackOpsPreagg(t *testing.T) {
  10. preaggErr := ErrOpsPreaggregatedNotPopulated
  11. otherErr := errors.New("some other error")
  12. autoFilter := &OpsDashboardFilter{QueryMode: OpsQueryModeAuto}
  13. rawFilter := &OpsDashboardFilter{QueryMode: OpsQueryModeRaw}
  14. preaggFilter := &OpsDashboardFilter{QueryMode: OpsQueryModePreagg}
  15. tests := []struct {
  16. name string
  17. filter *OpsDashboardFilter
  18. err error
  19. want bool
  20. }{
  21. {"auto mode + preagg error => fallback", autoFilter, preaggErr, true},
  22. {"auto mode + other error => no fallback", autoFilter, otherErr, false},
  23. {"auto mode + nil error => no fallback", autoFilter, nil, false},
  24. {"raw mode + preagg error => no fallback", rawFilter, preaggErr, false},
  25. {"preagg mode + preagg error => no fallback", preaggFilter, preaggErr, false},
  26. {"nil filter => no fallback", nil, preaggErr, false},
  27. {"wrapped preagg error => fallback", autoFilter, errors.Join(preaggErr, otherErr), true},
  28. }
  29. for _, tc := range tests {
  30. t.Run(tc.name, func(t *testing.T) {
  31. got := shouldFallbackOpsPreagg(tc.filter, tc.err)
  32. require.Equal(t, tc.want, got)
  33. })
  34. }
  35. }
  36. func TestCloneOpsFilterWithMode(t *testing.T) {
  37. t.Run("nil filter returns nil", func(t *testing.T) {
  38. require.Nil(t, cloneOpsFilterWithMode(nil, OpsQueryModeRaw))
  39. })
  40. t.Run("cloned filter has new mode", func(t *testing.T) {
  41. groupID := int64(42)
  42. original := &OpsDashboardFilter{
  43. StartTime: time.Now(),
  44. EndTime: time.Now().Add(time.Hour),
  45. Platform: "anthropic",
  46. GroupID: &groupID,
  47. QueryMode: OpsQueryModeAuto,
  48. }
  49. cloned := cloneOpsFilterWithMode(original, OpsQueryModeRaw)
  50. require.Equal(t, OpsQueryModeRaw, cloned.QueryMode)
  51. require.Equal(t, OpsQueryModeAuto, original.QueryMode, "original should not be modified")
  52. require.Equal(t, original.Platform, cloned.Platform)
  53. require.Equal(t, original.StartTime, cloned.StartTime)
  54. require.Equal(t, original.GroupID, cloned.GroupID)
  55. })
  56. }