openai_client_transport_test.go 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. package service
  2. import (
  3. "net/http/httptest"
  4. "testing"
  5. "github.com/gin-gonic/gin"
  6. "github.com/stretchr/testify/require"
  7. )
  8. func TestOpenAIClientTransport_SetAndGet(t *testing.T) {
  9. gin.SetMode(gin.TestMode)
  10. w := httptest.NewRecorder()
  11. c, _ := gin.CreateTestContext(w)
  12. require.Equal(t, OpenAIClientTransportUnknown, GetOpenAIClientTransport(c))
  13. SetOpenAIClientTransport(c, OpenAIClientTransportHTTP)
  14. require.Equal(t, OpenAIClientTransportHTTP, GetOpenAIClientTransport(c))
  15. SetOpenAIClientTransport(c, OpenAIClientTransportWS)
  16. require.Equal(t, OpenAIClientTransportWS, GetOpenAIClientTransport(c))
  17. }
  18. func TestOpenAIClientTransport_GetNormalizesRawContextValue(t *testing.T) {
  19. gin.SetMode(gin.TestMode)
  20. tests := []struct {
  21. name string
  22. rawValue any
  23. want OpenAIClientTransport
  24. }{
  25. {
  26. name: "type_value_ws",
  27. rawValue: OpenAIClientTransportWS,
  28. want: OpenAIClientTransportWS,
  29. },
  30. {
  31. name: "http_sse_alias",
  32. rawValue: "http_sse",
  33. want: OpenAIClientTransportHTTP,
  34. },
  35. {
  36. name: "sse_alias",
  37. rawValue: "sSe",
  38. want: OpenAIClientTransportHTTP,
  39. },
  40. {
  41. name: "websocket_alias",
  42. rawValue: "WebSocket",
  43. want: OpenAIClientTransportWS,
  44. },
  45. {
  46. name: "invalid_string",
  47. rawValue: "tcp",
  48. want: OpenAIClientTransportUnknown,
  49. },
  50. {
  51. name: "invalid_type",
  52. rawValue: 123,
  53. want: OpenAIClientTransportUnknown,
  54. },
  55. }
  56. for _, tt := range tests {
  57. t.Run(tt.name, func(t *testing.T) {
  58. w := httptest.NewRecorder()
  59. c, _ := gin.CreateTestContext(w)
  60. c.Set(openAIClientTransportContextKey, tt.rawValue)
  61. require.Equal(t, tt.want, GetOpenAIClientTransport(c))
  62. })
  63. }
  64. }
  65. func TestOpenAIClientTransport_NilAndUnknownInput(t *testing.T) {
  66. SetOpenAIClientTransport(nil, OpenAIClientTransportHTTP)
  67. require.Equal(t, OpenAIClientTransportUnknown, GetOpenAIClientTransport(nil))
  68. gin.SetMode(gin.TestMode)
  69. w := httptest.NewRecorder()
  70. c, _ := gin.CreateTestContext(w)
  71. SetOpenAIClientTransport(c, OpenAIClientTransportUnknown)
  72. _, exists := c.Get(openAIClientTransportContextKey)
  73. require.False(t, exists)
  74. SetOpenAIClientTransport(c, OpenAIClientTransport(" "))
  75. _, exists = c.Get(openAIClientTransportContextKey)
  76. require.False(t, exists)
  77. }
  78. func TestResolveOpenAIWSDecisionByClientTransport(t *testing.T) {
  79. base := OpenAIWSProtocolDecision{
  80. Transport: OpenAIUpstreamTransportResponsesWebsocketV2,
  81. Reason: "ws_v2_enabled",
  82. }
  83. httpDecision := resolveOpenAIWSDecisionByClientTransport(base, OpenAIClientTransportHTTP)
  84. require.Equal(t, OpenAIUpstreamTransportHTTPSSE, httpDecision.Transport)
  85. require.Equal(t, "client_protocol_http", httpDecision.Reason)
  86. wsDecision := resolveOpenAIWSDecisionByClientTransport(base, OpenAIClientTransportWS)
  87. require.Equal(t, base, wsDecision)
  88. unknownDecision := resolveOpenAIWSDecisionByClientTransport(base, OpenAIClientTransportUnknown)
  89. require.Equal(t, base, unknownDecision)
  90. }