Micro-service for file storage and processing written in Go
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

64 lines
1.9 KiB

  1. package middlewares
  2. import (
  3. "net/http"
  4. "net/http/httptest"
  5. "testing"
  6. "github.com/stretchr/testify/assert"
  7. )
  8. func ExecuteRequest(middlewareHandler http.Handler) int {
  9. request, _ := http.NewRequest("GET", "/", nil)
  10. responseRecorder := httptest.NewRecorder()
  11. middlewareHandler.ServeHTTP(responseRecorder, request)
  12. return responseRecorder.Code
  13. }
  14. func TestRateLimiterMiddleware(t *testing.T) {
  15. handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
  16. w.WriteHeader(http.StatusOK)
  17. })
  18. t.Run("AuthorizationMiddleware returns 200 response when rate limit is not hit", func(t *testing.T) {
  19. middleware, err := CreateRateLimiterMiddleware(1, 0)
  20. assert.Nil(t, err)
  21. middlewareHandler := middleware.Middleware(handler)
  22. assert.Equal(t, 200, ExecuteRequest(middlewareHandler))
  23. })
  24. t.Run("AuthorizationMiddleware returns 429 response when rate limit is hit", func(t *testing.T) {
  25. middleware, err := CreateRateLimiterMiddleware(1, 0)
  26. assert.Nil(t, err)
  27. middlewareHandler := middleware.Middleware(handler)
  28. assert.Equal(t, 200, ExecuteRequest(middlewareHandler))
  29. assert.Equal(t, 429, ExecuteRequest(middlewareHandler))
  30. })
  31. t.Run("AuthorizationMiddleware returns 200 response when rate limit with burst is not hit", func(t *testing.T) {
  32. middleware, err := CreateRateLimiterMiddleware(1, 1)
  33. assert.Nil(t, err)
  34. middlewareHandler := middleware.Middleware(handler)
  35. assert.Equal(t, 200, ExecuteRequest(middlewareHandler))
  36. assert.Equal(t, 200, ExecuteRequest(middlewareHandler))
  37. })
  38. t.Run("AuthorizationMiddleware returns 429 response when rate limit with burst is hit", func(t *testing.T) {
  39. middleware, err := CreateRateLimiterMiddleware(1, 1)
  40. assert.Nil(t, err)
  41. middlewareHandler := middleware.Middleware(handler)
  42. assert.Equal(t, 200, ExecuteRequest(middlewareHandler))
  43. assert.Equal(t, 200, ExecuteRequest(middlewareHandler))
  44. assert.Equal(t, 429, ExecuteRequest(middlewareHandler))
  45. })
  46. }