http_test.go 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. package webhook
  2. import (
  3. "encoding/json"
  4. "io"
  5. "net/http"
  6. "net/http/httptest"
  7. "testing"
  8. "github.com/seaweedfs/seaweedfs/weed/pb/filer_pb"
  9. util_http "github.com/seaweedfs/seaweedfs/weed/util/http"
  10. )
  11. func init() {
  12. util_http.InitGlobalHttpClient()
  13. }
  14. func TestHttpClientSendMessage(t *testing.T) {
  15. var receivedPayload map[string]interface{}
  16. var receivedHeaders http.Header
  17. server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
  18. receivedHeaders = r.Header
  19. body, _ := io.ReadAll(r.Body)
  20. if err := json.Unmarshal(body, &receivedPayload); err != nil {
  21. w.WriteHeader(http.StatusInternalServerError)
  22. return
  23. }
  24. w.WriteHeader(http.StatusOK)
  25. }))
  26. defer server.Close()
  27. cfg := &config{
  28. endpoint: server.URL,
  29. authBearerToken: "test-token",
  30. }
  31. client, err := newHTTPClient(cfg)
  32. if err != nil {
  33. t.Fatalf("Failed to create HTTP client: %v", err)
  34. }
  35. message := &filer_pb.EventNotification{
  36. OldEntry: nil,
  37. NewEntry: &filer_pb.Entry{
  38. Name: "test.txt",
  39. IsDirectory: false,
  40. },
  41. }
  42. err = client.sendMessage(newWebhookMessage("/test/path", message))
  43. if err != nil {
  44. t.Fatalf("Failed to send message: %v", err)
  45. }
  46. if receivedPayload["key"] != "/test/path" {
  47. t.Errorf("Expected key '/test/path', got %v", receivedPayload["key"])
  48. }
  49. if receivedPayload["event_type"] != "create" {
  50. t.Errorf("Expected event_type 'create', got %v", receivedPayload["event_type"])
  51. }
  52. if receivedPayload["message"] == nil {
  53. t.Error("Expected message to be present")
  54. }
  55. if receivedHeaders.Get("Content-Type") != "application/json" {
  56. t.Errorf("Expected Content-Type 'application/json', got %s", receivedHeaders.Get("Content-Type"))
  57. }
  58. expectedAuth := "Bearer test-token"
  59. if receivedHeaders.Get("Authorization") != expectedAuth {
  60. t.Errorf("Expected Authorization '%s', got %s", expectedAuth, receivedHeaders.Get("Authorization"))
  61. }
  62. }
  63. func TestHttpClientSendMessageWithoutToken(t *testing.T) {
  64. var receivedHeaders http.Header
  65. server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
  66. receivedHeaders = r.Header
  67. w.WriteHeader(http.StatusOK)
  68. }))
  69. defer server.Close()
  70. cfg := &config{
  71. endpoint: server.URL,
  72. authBearerToken: "",
  73. }
  74. client, err := newHTTPClient(cfg)
  75. if err != nil {
  76. t.Fatalf("Failed to create HTTP client: %v", err)
  77. }
  78. message := &filer_pb.EventNotification{}
  79. err = client.sendMessage(newWebhookMessage("/test/path", message))
  80. if err != nil {
  81. t.Fatalf("Failed to send message: %v", err)
  82. }
  83. if receivedHeaders.Get("Authorization") != "" {
  84. t.Errorf("Expected no Authorization header, got %s", receivedHeaders.Get("Authorization"))
  85. }
  86. }
  87. func TestHttpClientSendMessageServerError(t *testing.T) {
  88. server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
  89. w.WriteHeader(http.StatusInternalServerError)
  90. }))
  91. defer server.Close()
  92. cfg := &config{
  93. endpoint: server.URL,
  94. authBearerToken: "test-token",
  95. }
  96. client, err := newHTTPClient(cfg)
  97. if err != nil {
  98. t.Fatalf("Failed to create HTTP client: %v", err)
  99. }
  100. message := &filer_pb.EventNotification{}
  101. err = client.sendMessage(newWebhookMessage("/test/path", message))
  102. if err == nil {
  103. t.Error("Expected error for server error response")
  104. }
  105. }
  106. func TestHttpClientSendMessageNetworkError(t *testing.T) {
  107. cfg := &config{
  108. endpoint: "http://localhost:99999",
  109. authBearerToken: "",
  110. }
  111. client, err := newHTTPClient(cfg)
  112. if err != nil {
  113. t.Fatalf("Failed to create HTTP client: %v", err)
  114. }
  115. message := &filer_pb.EventNotification{}
  116. err = client.sendMessage(newWebhookMessage("/test/path", message))
  117. if err == nil {
  118. t.Error("Expected error for network failure")
  119. }
  120. }