Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.
 
 
 

73 wiersze
1.8 KiB

  1. package handlers
  2. import (
  3. "net/http"
  4. "net/http/httptest"
  5. "os"
  6. "testing"
  7. "time"
  8. )
  9. func TestFavicon(t *testing.T) {
  10. s := httptest.NewServer(FaviconHandlerFunc(
  11. func(w http.ResponseWriter, r *http.Request) {
  12. w.Write([]byte("ok"))
  13. }, "./testdata/favicon.ico", time.Second))
  14. defer s.Close()
  15. res, err := http.Get(s.URL + "/favicon.ico")
  16. if err != nil {
  17. panic(err)
  18. }
  19. defer res.Body.Close()
  20. assertStatus(http.StatusOK, res.StatusCode, t)
  21. assertHeader("Content-Type", "image/x-icon", res, t)
  22. assertHeader("Cache-Control", "public, max-age=1", res, t)
  23. assertHeader("Content-Length", "1406", res, t)
  24. }
  25. func TestFaviconInvalidPath(t *testing.T) {
  26. s := httptest.NewServer(FaviconHandlerFunc(
  27. func(w http.ResponseWriter, r *http.Request) {
  28. w.Write([]byte("ok"))
  29. }, "./testdata/xfavicon.ico", time.Second))
  30. defer s.Close()
  31. res, err := http.Get(s.URL + "/favicon.ico")
  32. if err != nil {
  33. panic(err)
  34. }
  35. defer res.Body.Close()
  36. assertStatus(http.StatusNotFound, res.StatusCode, t)
  37. }
  38. func TestFaviconFromCache(t *testing.T) {
  39. s := httptest.NewServer(FaviconHandlerFunc(
  40. func(w http.ResponseWriter, r *http.Request) {
  41. w.Write([]byte("ok"))
  42. }, "./testdata/favicon.ico", time.Second))
  43. defer s.Close()
  44. res, err := http.Get(s.URL + "/favicon.ico")
  45. if err != nil {
  46. panic(err)
  47. }
  48. defer res.Body.Close()
  49. // Rename the file temporarily
  50. err = os.Rename("./testdata/favicon.ico", "./testdata/xfavicon.ico")
  51. if err != nil {
  52. panic(err)
  53. }
  54. defer os.Rename("./testdata/xfavicon.ico", "./testdata/favicon.ico")
  55. res, err = http.Get(s.URL + "/favicon.ico")
  56. if err != nil {
  57. panic(err)
  58. }
  59. defer res.Body.Close()
  60. assertStatus(http.StatusOK, res.StatusCode, t)
  61. assertHeader("Content-Type", "image/x-icon", res, t)
  62. assertHeader("Cache-Control", "public, max-age=1", res, t)
  63. assertHeader("Content-Length", "1406", res, t)
  64. }