package server import ( "fmt" "net/http" "net/http/httptest" "testing" . "gopkg.in/check.v1" ) // Hook up gocheck into the "go test" runner. func Test(t *testing.T) { TestingT(t) } var ( _ = Suite(&SuiteRedirectWithForceHTTPs{}) _ = Suite(&SuiteRedirectWithoutForceHTTPs{}) ) type SuiteRedirectWithForceHTTPs struct { handler http.HandlerFunc } func (s *SuiteRedirectWithForceHTTPs) SetUpTest(c *C) { srvr, err := New(ForceHTTPs()) c.Assert(err, IsNil) handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { fmt.Fprintln(w, "Hello, client") }) s.handler = srvr.RedirectHandler(handler) } func (s *SuiteRedirectWithForceHTTPs) TestHTTPs(c *C) { req := httptest.NewRequest("GET", "https://test/test", nil) w := httptest.NewRecorder() s.handler(w, req) resp := w.Result() c.Assert(resp.StatusCode, Equals, http.StatusOK) } func (s *SuiteRedirectWithForceHTTPs) TestOnion(c *C) { req := httptest.NewRequest("GET", "http://test.onion/test", nil) w := httptest.NewRecorder() s.handler(w, req) resp := w.Result() c.Assert(resp.StatusCode, Equals, http.StatusOK) } func (s *SuiteRedirectWithForceHTTPs) TestXForwardedFor(c *C) { req := httptest.NewRequest("GET", "http://127.0.0.1/test", nil) req.Header.Set("X-Forwarded-Proto", "https") w := httptest.NewRecorder() s.handler(w, req) resp := w.Result() c.Assert(resp.StatusCode, Equals, http.StatusOK) } func (s *SuiteRedirectWithForceHTTPs) TestHTTP(c *C) { req := httptest.NewRequest("GET", "http://127.0.0.1/test", nil) w := httptest.NewRecorder() s.handler(w, req) resp := w.Result() c.Assert(resp.StatusCode, Equals, http.StatusPermanentRedirect) c.Assert(resp.Header.Get("Location"), Equals, "https://127.0.0.1/test") } type SuiteRedirectWithoutForceHTTPs struct { handler http.HandlerFunc } func (s *SuiteRedirectWithoutForceHTTPs) SetUpTest(c *C) { srvr, err := New() c.Assert(err, IsNil) handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { fmt.Fprintln(w, "Hello, client") }) s.handler = srvr.RedirectHandler(handler) } func (s *SuiteRedirectWithoutForceHTTPs) TestHTTP(c *C) { req := httptest.NewRequest("GET", "http://127.0.0.1/test", nil) w := httptest.NewRecorder() s.handler(w, req) resp := w.Result() c.Assert(resp.StatusCode, Equals, http.StatusOK) } func (s *SuiteRedirectWithoutForceHTTPs) TestHTTPs(c *C) { req := httptest.NewRequest("GET", "https://127.0.0.1/test", nil) w := httptest.NewRecorder() s.handler(w, req) resp := w.Result() c.Assert(resp.StatusCode, Equals, http.StatusOK) }