fs_test.go 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. package fs
  2. import (
  3. "net/http"
  4. "os"
  5. "path/filepath"
  6. "testing"
  7. "github.com/stretchr/testify/require"
  8. "github.com/stretchr/testify/suite"
  9. "github.com/imgproxy/imgproxy/v3/config"
  10. )
  11. type FsTestSuite struct {
  12. suite.Suite
  13. transport http.RoundTripper
  14. etag string
  15. }
  16. func (s *FsTestSuite) SetupSuite() {
  17. wd, err := os.Getwd()
  18. require.Nil(s.T(), err)
  19. config.LocalFileSystemRoot = filepath.Join(wd, "..", "..", "testdata")
  20. fi, err := os.Stat(filepath.Join(config.LocalFileSystemRoot, "test1.png"))
  21. require.Nil(s.T(), err)
  22. s.etag = BuildEtag("/test1.png", fi)
  23. s.transport = New()
  24. }
  25. func (s *FsTestSuite) TestRoundTripWithETagDisabledReturns200() {
  26. config.ETagEnabled = false
  27. request, _ := http.NewRequest("GET", "local:///test1.png", nil)
  28. response, err := s.transport.RoundTrip(request)
  29. require.Nil(s.T(), err)
  30. require.Equal(s.T(), 200, response.StatusCode)
  31. }
  32. func (s *FsTestSuite) TestRoundTripWithETagEnabled() {
  33. config.ETagEnabled = true
  34. request, _ := http.NewRequest("GET", "local:///test1.png", nil)
  35. response, err := s.transport.RoundTrip(request)
  36. require.Nil(s.T(), err)
  37. require.Equal(s.T(), 200, response.StatusCode)
  38. require.Equal(s.T(), s.etag, response.Header.Get("ETag"))
  39. }
  40. func (s *FsTestSuite) TestRoundTripWithIfNoneMatchReturns304() {
  41. config.ETagEnabled = true
  42. request, _ := http.NewRequest("GET", "local:///test1.png", nil)
  43. request.Header.Set("If-None-Match", s.etag)
  44. response, err := s.transport.RoundTrip(request)
  45. require.Nil(s.T(), err)
  46. require.Equal(s.T(), http.StatusNotModified, response.StatusCode)
  47. }
  48. func (s *FsTestSuite) TestRoundTripWithUpdatedETagReturns200() {
  49. config.ETagEnabled = true
  50. request, _ := http.NewRequest("GET", "local:///test1.png", nil)
  51. request.Header.Set("If-None-Match", s.etag+"_wrong")
  52. response, err := s.transport.RoundTrip(request)
  53. require.Nil(s.T(), err)
  54. require.Equal(s.T(), http.StatusOK, response.StatusCode)
  55. }
  56. func TestS3Transport(t *testing.T) {
  57. suite.Run(t, new(FsTestSuite))
  58. }