azure_test.go 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. package azure
  2. import (
  3. "net/http"
  4. "net/http/httptest"
  5. "os"
  6. "testing"
  7. "time"
  8. "github.com/sirupsen/logrus"
  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. lastModified time.Time
  18. }
  19. func (s *AzureTestSuite) SetupSuite() {
  20. data := make([]byte, 32)
  21. logrus.SetOutput(os.Stdout)
  22. config.IgnoreSslVerification = true
  23. s.etag = "testetag"
  24. s.lastModified, _ = time.Parse(http.TimeFormat, "Wed, 21 Oct 2015 07:28:00 GMT")
  25. s.server = httptest.NewTLSServer(http.HandlerFunc(func(rw http.ResponseWriter, r *http.Request) {
  26. s.Require().Equal("/test/foo/test.png", r.URL.Path)
  27. rw.Header().Set("Etag", s.etag)
  28. rw.Header().Set("Last-Modified", s.lastModified.Format(http.TimeFormat))
  29. rw.WriteHeader(200)
  30. rw.Write(data)
  31. }))
  32. config.ABSEnabled = true
  33. config.ABSEndpoint = s.server.URL
  34. config.ABSName = "testname"
  35. config.ABSKey = "dGVzdGtleQ=="
  36. var err error
  37. s.transport, err = New()
  38. s.Require().NoError(err)
  39. }
  40. func (s *AzureTestSuite) TearDownSuite() {
  41. s.server.Close()
  42. config.IgnoreSslVerification = false
  43. }
  44. func (s *AzureTestSuite) TestRoundTripWithETagDisabledReturns200() {
  45. config.ETagEnabled = false
  46. request, _ := http.NewRequest("GET", "abs://test/foo/test.png", nil)
  47. response, err := s.transport.RoundTrip(request)
  48. s.Require().NoError(err)
  49. s.Require().Equal(200, response.StatusCode)
  50. }
  51. func (s *AzureTestSuite) TestRoundTripWithETagEnabled() {
  52. config.ETagEnabled = true
  53. request, _ := http.NewRequest("GET", "abs://test/foo/test.png", nil)
  54. response, err := s.transport.RoundTrip(request)
  55. s.Require().NoError(err)
  56. s.Require().Equal(200, response.StatusCode)
  57. s.Require().Equal(s.etag, response.Header.Get("ETag"))
  58. }
  59. func (s *AzureTestSuite) TestRoundTripWithIfNoneMatchReturns304() {
  60. config.ETagEnabled = true
  61. request, _ := http.NewRequest("GET", "abs://test/foo/test.png", nil)
  62. request.Header.Set("If-None-Match", s.etag)
  63. response, err := s.transport.RoundTrip(request)
  64. s.Require().NoError(err)
  65. s.Require().Equal(http.StatusNotModified, response.StatusCode)
  66. }
  67. func (s *AzureTestSuite) TestRoundTripWithUpdatedETagReturns200() {
  68. config.ETagEnabled = true
  69. request, _ := http.NewRequest("GET", "abs://test/foo/test.png", nil)
  70. request.Header.Set("If-None-Match", s.etag+"_wrong")
  71. response, err := s.transport.RoundTrip(request)
  72. s.Require().NoError(err)
  73. s.Require().Equal(http.StatusOK, response.StatusCode)
  74. }
  75. func (s *AzureTestSuite) TestRoundTripWithLastModifiedDisabledReturns200() {
  76. config.LastModifiedEnabled = false
  77. request, _ := http.NewRequest("GET", "abs://test/foo/test.png", nil)
  78. response, err := s.transport.RoundTrip(request)
  79. s.Require().NoError(err)
  80. s.Require().Equal(200, response.StatusCode)
  81. }
  82. func (s *AzureTestSuite) TestRoundTripWithLastModifiedEnabled() {
  83. config.LastModifiedEnabled = true
  84. request, _ := http.NewRequest("GET", "abs://test/foo/test.png", nil)
  85. response, err := s.transport.RoundTrip(request)
  86. s.Require().NoError(err)
  87. s.Require().Equal(200, response.StatusCode)
  88. s.Require().Equal(s.lastModified.Format(http.TimeFormat), response.Header.Get("Last-Modified"))
  89. }
  90. func (s *AzureTestSuite) TestRoundTripWithIfModifiedSinceReturns304() {
  91. config.LastModifiedEnabled = true
  92. request, _ := http.NewRequest("GET", "abs://test/foo/test.png", nil)
  93. request.Header.Set("If-Modified-Since", s.lastModified.Format(http.TimeFormat))
  94. response, err := s.transport.RoundTrip(request)
  95. s.Require().NoError(err)
  96. s.Require().Equal(http.StatusNotModified, response.StatusCode)
  97. }
  98. func (s *AzureTestSuite) TestRoundTripWithUpdatedLastModifiedReturns200() {
  99. config.LastModifiedEnabled = true
  100. request, _ := http.NewRequest("GET", "abs://test/foo/test.png", nil)
  101. request.Header.Set("If-Modified-Since", s.lastModified.Add(-24*time.Hour).Format(http.TimeFormat))
  102. response, err := s.transport.RoundTrip(request)
  103. s.Require().NoError(err)
  104. s.Require().Equal(http.StatusOK, response.StatusCode)
  105. }
  106. func TestAzureTransport(t *testing.T) {
  107. suite.Run(t, new(AzureTestSuite))
  108. }