You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

111 lines
2.5 KiB

  1. package server
  2. import (
  3. "fmt"
  4. "net/http"
  5. "net/http/httptest"
  6. "testing"
  7. . "gopkg.in/check.v1"
  8. )
  9. // Hook up gocheck into the "go test" runner.
  10. func Test(t *testing.T) { TestingT(t) }
  11. var (
  12. _ = Suite(&SuiteRedirectWithForceHTTPs{})
  13. _ = Suite(&SuiteRedirectWithoutForceHTTPs{})
  14. )
  15. type SuiteRedirectWithForceHTTPs struct {
  16. handler http.HandlerFunc
  17. }
  18. func (s *SuiteRedirectWithForceHTTPs) SetUpTest(c *C) {
  19. srvr, err := New(ForceHTTPs())
  20. c.Assert(err, IsNil)
  21. handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
  22. fmt.Fprintln(w, "Hello, client")
  23. })
  24. s.handler = srvr.RedirectHandler(handler)
  25. }
  26. func (s *SuiteRedirectWithForceHTTPs) TestHTTPs(c *C) {
  27. req := httptest.NewRequest("GET", "https://test/test", nil)
  28. w := httptest.NewRecorder()
  29. s.handler(w, req)
  30. resp := w.Result()
  31. c.Assert(resp.StatusCode, Equals, http.StatusOK)
  32. }
  33. func (s *SuiteRedirectWithForceHTTPs) TestOnion(c *C) {
  34. req := httptest.NewRequest("GET", "http://test.onion/test", nil)
  35. w := httptest.NewRecorder()
  36. s.handler(w, req)
  37. resp := w.Result()
  38. c.Assert(resp.StatusCode, Equals, http.StatusOK)
  39. }
  40. func (s *SuiteRedirectWithForceHTTPs) TestXForwardedFor(c *C) {
  41. req := httptest.NewRequest("GET", "http://127.0.0.1/test", nil)
  42. req.Header.Set("X-Forwarded-Proto", "https")
  43. w := httptest.NewRecorder()
  44. s.handler(w, req)
  45. resp := w.Result()
  46. c.Assert(resp.StatusCode, Equals, http.StatusOK)
  47. }
  48. func (s *SuiteRedirectWithForceHTTPs) TestHTTP(c *C) {
  49. req := httptest.NewRequest("GET", "http://127.0.0.1/test", nil)
  50. w := httptest.NewRecorder()
  51. s.handler(w, req)
  52. resp := w.Result()
  53. c.Assert(resp.StatusCode, Equals, http.StatusPermanentRedirect)
  54. c.Assert(resp.Header.Get("Location"), Equals, "https://127.0.0.1/test")
  55. }
  56. type SuiteRedirectWithoutForceHTTPs struct {
  57. handler http.HandlerFunc
  58. }
  59. func (s *SuiteRedirectWithoutForceHTTPs) SetUpTest(c *C) {
  60. srvr, err := New()
  61. c.Assert(err, IsNil)
  62. handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
  63. fmt.Fprintln(w, "Hello, client")
  64. })
  65. s.handler = srvr.RedirectHandler(handler)
  66. }
  67. func (s *SuiteRedirectWithoutForceHTTPs) TestHTTP(c *C) {
  68. req := httptest.NewRequest("GET", "http://127.0.0.1/test", nil)
  69. w := httptest.NewRecorder()
  70. s.handler(w, req)
  71. resp := w.Result()
  72. c.Assert(resp.StatusCode, Equals, http.StatusOK)
  73. }
  74. func (s *SuiteRedirectWithoutForceHTTPs) TestHTTPs(c *C) {
  75. req := httptest.NewRequest("GET", "https://127.0.0.1/test", nil)
  76. w := httptest.NewRecorder()
  77. s.handler(w, req)
  78. resp := w.Result()
  79. c.Assert(resp.StatusCode, Equals, http.StatusOK)
  80. }