github.com/pf-qiu/concourse/v6@v6.7.3-0.20201207032516-1f455d73275f/web/publichandler/cache_handler_test.go (about)

     1  package publichandler_test
     2  
     3  import (
     4  	"compress/gzip"
     5  	"fmt"
     6  	"io/ioutil"
     7  	"net/http"
     8  	"net/http/httptest"
     9  	"strings"
    10  
    11  	. "github.com/onsi/ginkgo"
    12  	. "github.com/onsi/gomega"
    13  
    14  	"github.com/pf-qiu/concourse/v6/web/publichandler"
    15  )
    16  
    17  var _ = Describe("CacheNearlyForever", func() {
    18  	It("adds a cache control header to the wrapped handler", func() {
    19  		insideHandler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
    20  			fmt.Fprint(w, "The wrapped handler was called!")
    21  		})
    22  
    23  		wrappedHandler := publichandler.CacheNearlyForever(insideHandler)
    24  		recorder := httptest.NewRecorder()
    25  		request, err := http.NewRequest("GET", "/", nil)
    26  		Expect(err).ToNot(HaveOccurred())
    27  
    28  		wrappedHandler.ServeHTTP(recorder, request) // request is never used
    29  
    30  		Expect(recorder.Body.String()).To(Equal("The wrapped handler was called!"))
    31  		Expect(recorder.Header().Get("Cache-Control")).To(Equal("max-age=31536000, private"))
    32  		Expect(recorder.Header().Get("Content-Encoding")).ToNot(Equal("gzip"))
    33  	})
    34  
    35  	Context("when accept encoding uses gzip", func() {
    36  		It("returns a gzipped asset", func() {
    37  
    38  			insideHandler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
    39  				fmt.Fprint(w, strings.Repeat("abc123", 1000))
    40  			})
    41  
    42  			wrappedHandler := publichandler.CacheNearlyForever(insideHandler)
    43  			recorder := httptest.NewRecorder()
    44  			request, err := http.NewRequest("GET", "/", nil)
    45  			Expect(err).ToNot(HaveOccurred())
    46  			request.Header["Accept-Encoding"] = []string{"gzip, deflate, br"}
    47  
    48  			wrappedHandler.ServeHTTP(recorder, request) // request is never used
    49  
    50  			reader, err := gzip.NewReader(recorder.Body)
    51  			Expect(err).ToNot(HaveOccurred())
    52  			body, err := ioutil.ReadAll(reader)
    53  			Expect(err).ToNot(HaveOccurred())
    54  
    55  			Expect(string(body)).To(Equal(strings.Repeat("abc123", 1000)))
    56  			Expect(recorder.Header().Get("Content-Encoding")).To(Equal("gzip"))
    57  		})
    58  	})
    59  })