ssl redirect test

This commit is contained in:
Umputun
2018-11-04 13:13:56 -06:00
parent a66886a731
commit dec2d0062c
3 changed files with 41 additions and 3 deletions
+2 -3
View File
@@ -83,7 +83,7 @@ func (s *Rest) Run(port int) {
err := s.httpServer.ListenAndServe()
log.Printf("[WARN] http server terminated, %s", err)
case Static:
log.Printf("[INFO] activate rest https server in 'static' mode on port %d", s.SSLConfig.Port)
log.Printf("[INFO] activate https server in 'static' mode on port %d", s.SSLConfig.Port)
s.lock.Lock()
s.httpsServer = s.makeHTTPServer(s.SSLConfig.Port, s.routes())
@@ -92,7 +92,6 @@ func (s *Rest) Run(port int) {
go func() {
log.Printf("[INFO] activate http redirect server on port %d", port)
err := s.httpServer.ListenAndServe()
log.Printf("[WARN] http redirect server terminated, %s", err)
}()
@@ -100,7 +99,7 @@ func (s *Rest) Run(port int) {
err := s.httpsServer.ListenAndServeTLS(s.SSLConfig.Cert, s.SSLConfig.Key)
log.Printf("[WARN] https server terminated, %s", err)
case Auto:
log.Printf("[WARN] Autocert mode is not implemented yet")
log.Printf("[WARN] autocert mode is not implemented yet")
}
}
+2
View File
@@ -1,6 +1,7 @@
package api
import (
"log"
"net/http"
"time"
@@ -32,6 +33,7 @@ type SSLConfig struct {
// httpToHTTPSRouter creates new router which does redirect from http to https server
func (s *Rest) httpToHTTPSRouter() chi.Router {
log.Printf("[DEBUG] create https-to-http redirect routes")
router := chi.NewRouter()
router.Use(middleware.RealIP, Recoverer)
router.Use(middleware.Throttle(1000), middleware.Timeout(60*time.Second))
+37
View File
@@ -0,0 +1,37 @@
package api
import (
"crypto/tls"
"net/http"
"net/http/httptest"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestSSL_Redirect(t *testing.T) {
rest := Rest{RemarkURL: "https://localhost:443"}
ts := httptest.NewServer(rest.httpToHTTPSRouter())
defer ts.Close()
client := http.Client{
// prevent http redirect
CheckRedirect: func(req *http.Request, via []*http.Request) error {
return http.ErrUseLastResponse
},
// allow self-signed certificate
Transport: &http.Transport{
TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
},
}
// check http to https redirect response
resp, err := client.Get(ts.URL + "/blah?param=1")
require.Nil(t, err)
defer resp.Body.Close()
assert.Equal(t, 307, resp.StatusCode)
assert.Equal(t, "https://localhost:443/blah?param=1", resp.Header.Get("Location"))
}