azure_test.go 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. package azure
  2. import (
  3. "net/http"
  4. "net/http/httptest"
  5. "os"
  6. "testing"
  7. "github.com/sirupsen/logrus"
  8. "github.com/stretchr/testify/require"
  9. "github.com/stretchr/testify/suite"
  10. "github.com/imgproxy/imgproxy/v3/config"
  11. )
  12. type AzureTestSuite struct {
  13. suite.Suite
  14. server *httptest.Server
  15. transport http.RoundTripper
  16. etag string
  17. }
  18. func (s *AzureTestSuite) SetupSuite() {
  19. data := make([]byte, 32)
  20. logrus.SetOutput(os.Stdout)
  21. s.etag = "testetag"
  22. s.server = httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, r *http.Request) {
  23. require.Equal(s.T(), "/test/foo/test.png", r.URL.Path)
  24. rw.Header().Set("Etag", s.etag)
  25. rw.WriteHeader(200)
  26. rw.Write(data)
  27. }))
  28. config.ABSEnabled = true
  29. config.ABSEndpoint = s.server.URL
  30. config.ABSName = "testname"
  31. config.ABSKey = "dGVzdGtleQ=="
  32. var err error
  33. s.transport, err = New()
  34. require.Nil(s.T(), err)
  35. }
  36. func (s *AzureTestSuite) TearDownSuite() {
  37. s.server.Close()
  38. }
  39. func (s *AzureTestSuite) TestRoundTripWithETagDisabledReturns200() {
  40. config.ETagEnabled = false
  41. request, _ := http.NewRequest("GET", "abs://test/foo/test.png", nil)
  42. response, err := s.transport.RoundTrip(request)
  43. require.Nil(s.T(), err)
  44. require.Equal(s.T(), 200, response.StatusCode)
  45. }
  46. func (s *AzureTestSuite) TestRoundTripWithETagEnabled() {
  47. config.ETagEnabled = true
  48. request, _ := http.NewRequest("GET", "abs://test/foo/test.png", nil)
  49. response, err := s.transport.RoundTrip(request)
  50. require.Nil(s.T(), err)
  51. require.Equal(s.T(), 200, response.StatusCode)
  52. require.Equal(s.T(), s.etag, response.Header.Get("ETag"))
  53. }
  54. func (s *AzureTestSuite) TestRoundTripWithIfNoneMatchReturns304() {
  55. config.ETagEnabled = true
  56. request, _ := http.NewRequest("GET", "abs://test/foo/test.png", nil)
  57. request.Header.Set("If-None-Match", s.etag)
  58. response, err := s.transport.RoundTrip(request)
  59. require.Nil(s.T(), err)
  60. require.Equal(s.T(), http.StatusNotModified, response.StatusCode)
  61. }
  62. func (s *AzureTestSuite) TestRoundTripWithUpdatedETagReturns200() {
  63. config.ETagEnabled = true
  64. request, _ := http.NewRequest("GET", "abs://test/foo/test.png", nil)
  65. request.Header.Set("If-None-Match", s.etag+"_wrong")
  66. response, err := s.transport.RoundTrip(request)
  67. require.Nil(s.T(), err)
  68. require.Equal(s.T(), http.StatusOK, response.StatusCode)
  69. }
  70. func TestS3Transport(t *testing.T) {
  71. suite.Run(t, new(AzureTestSuite))
  72. }