package handlers import ( "net/http" "net/http/httptest" "os" "testing" "time" ) func TestFavicon(t *testing.T) { s := httptest.NewServer(FaviconHandlerFunc( func(w http.ResponseWriter, r *http.Request) { w.Write([]byte("ok")) }, "./testdata/favicon.ico", time.Second)) defer s.Close() res, err := http.Get(s.URL + "/favicon.ico") if err != nil { panic(err) } defer res.Body.Close() assertStatus(http.StatusOK, res.StatusCode, t) assertHeader("Content-Type", "image/x-icon", res, t) assertHeader("Cache-Control", "public, max-age=1", res, t) assertHeader("Content-Length", "1406", res, t) } func TestFaviconInvalidPath(t *testing.T) { s := httptest.NewServer(FaviconHandlerFunc( func(w http.ResponseWriter, r *http.Request) { w.Write([]byte("ok")) }, "./testdata/xfavicon.ico", time.Second)) defer s.Close() res, err := http.Get(s.URL + "/favicon.ico") if err != nil { panic(err) } defer res.Body.Close() assertStatus(http.StatusNotFound, res.StatusCode, t) } func TestFaviconFromCache(t *testing.T) { s := httptest.NewServer(FaviconHandlerFunc( func(w http.ResponseWriter, r *http.Request) { w.Write([]byte("ok")) }, "./testdata/favicon.ico", time.Second)) defer s.Close() res, err := http.Get(s.URL + "/favicon.ico") if err != nil { panic(err) } defer res.Body.Close() // Rename the file temporarily err = os.Rename("./testdata/favicon.ico", "./testdata/xfavicon.ico") if err != nil { panic(err) } defer os.Rename("./testdata/xfavicon.ico", "./testdata/favicon.ico") res, err = http.Get(s.URL + "/favicon.ico") if err != nil { panic(err) } defer res.Body.Close() assertStatus(http.StatusOK, res.StatusCode, t) assertHeader("Content-Type", "image/x-icon", res, t) assertHeader("Cache-Control", "public, max-age=1", res, t) assertHeader("Content-Length", "1406", res, t) }