usage_log_test.go 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. package service
  2. import (
  3. "testing"
  4. "github.com/stretchr/testify/require"
  5. )
  6. func TestParseUsageRequestType(t *testing.T) {
  7. t.Parallel()
  8. type testCase struct {
  9. name string
  10. input string
  11. want RequestType
  12. wantErr bool
  13. }
  14. cases := []testCase{
  15. {name: "unknown", input: "unknown", want: RequestTypeUnknown},
  16. {name: "sync", input: "sync", want: RequestTypeSync},
  17. {name: "stream", input: "stream", want: RequestTypeStream},
  18. {name: "ws_v2", input: "ws_v2", want: RequestTypeWSV2},
  19. {name: "case_insensitive", input: "WS_V2", want: RequestTypeWSV2},
  20. {name: "trim_spaces", input: " stream ", want: RequestTypeStream},
  21. {name: "invalid", input: "xxx", wantErr: true},
  22. }
  23. for _, tc := range cases {
  24. tc := tc
  25. t.Run(tc.name, func(t *testing.T) {
  26. t.Parallel()
  27. got, err := ParseUsageRequestType(tc.input)
  28. if tc.wantErr {
  29. require.Error(t, err)
  30. return
  31. }
  32. require.NoError(t, err)
  33. require.Equal(t, tc.want, got)
  34. })
  35. }
  36. }
  37. func TestRequestTypeNormalizeAndString(t *testing.T) {
  38. t.Parallel()
  39. require.Equal(t, RequestTypeUnknown, RequestType(99).Normalize())
  40. require.Equal(t, "unknown", RequestType(99).String())
  41. require.Equal(t, "sync", RequestTypeSync.String())
  42. require.Equal(t, "stream", RequestTypeStream.String())
  43. require.Equal(t, "ws_v2", RequestTypeWSV2.String())
  44. }
  45. func TestRequestTypeFromLegacy(t *testing.T) {
  46. t.Parallel()
  47. require.Equal(t, RequestTypeWSV2, RequestTypeFromLegacy(false, true))
  48. require.Equal(t, RequestTypeStream, RequestTypeFromLegacy(true, false))
  49. require.Equal(t, RequestTypeSync, RequestTypeFromLegacy(false, false))
  50. }
  51. func TestApplyLegacyRequestFields(t *testing.T) {
  52. t.Parallel()
  53. stream, ws := ApplyLegacyRequestFields(RequestTypeSync, true, true)
  54. require.False(t, stream)
  55. require.False(t, ws)
  56. stream, ws = ApplyLegacyRequestFields(RequestTypeStream, false, true)
  57. require.True(t, stream)
  58. require.False(t, ws)
  59. stream, ws = ApplyLegacyRequestFields(RequestTypeWSV2, false, false)
  60. require.True(t, stream)
  61. require.True(t, ws)
  62. stream, ws = ApplyLegacyRequestFields(RequestTypeUnknown, true, false)
  63. require.True(t, stream)
  64. require.False(t, ws)
  65. }
  66. func TestUsageLogSyncRequestTypeAndLegacyFields(t *testing.T) {
  67. t.Parallel()
  68. log := &UsageLog{RequestType: RequestTypeWSV2, Stream: false, OpenAIWSMode: false}
  69. log.SyncRequestTypeAndLegacyFields()
  70. require.Equal(t, RequestTypeWSV2, log.RequestType)
  71. require.True(t, log.Stream)
  72. require.True(t, log.OpenAIWSMode)
  73. }
  74. func TestUsageLogEffectiveRequestTypeFallback(t *testing.T) {
  75. t.Parallel()
  76. log := &UsageLog{RequestType: RequestTypeUnknown, Stream: true, OpenAIWSMode: true}
  77. require.Equal(t, RequestTypeWSV2, log.EffectiveRequestType())
  78. }
  79. func TestUsageLogEffectiveRequestTypeNilReceiver(t *testing.T) {
  80. t.Parallel()
  81. var log *UsageLog
  82. require.Equal(t, RequestTypeUnknown, log.EffectiveRequestType())
  83. }
  84. func TestUsageLogSyncRequestTypeAndLegacyFieldsNilReceiver(t *testing.T) {
  85. t.Parallel()
  86. var log *UsageLog
  87. log.SyncRequestTypeAndLegacyFields()
  88. }