integration: Add https redirect tests

This commit is contained in:
Tatsuhiro Tsujikawa 2017-02-18 21:47:01 +09:00
parent a7c780a732
commit 9f1543f81e
3 changed files with 94 additions and 4 deletions

View File

@ -533,6 +533,49 @@ func TestH1H1RespPhaseReturn(t *testing.T) {
} }
} }
// TestH1H1HTTPSRedirect tests that the request to the backend which
// requires TLS is redirected to https URI.
func TestH1H1HTTPSRedirect(t *testing.T) {
st := newServerTester([]string{"--redirect-if-not-tls"}, t, noopHandler)
defer st.Close()
res, err := st.http1(requestParam{
name: "TestH1H1HTTPSRedirect",
})
if err != nil {
t.Fatalf("Error st.http1() = %v", err)
}
if got, want := res.status, 308; got != want {
t.Errorf("status = %v; want %v", got, want)
}
if got, want := res.header.Get("location"), "https://127.0.0.1/"; got != want {
t.Errorf("location: %v; want %v", got, want)
}
}
// TestH1H1HTTPSRedirectPort tests that the request to the backend
// which requires TLS is redirected to https URI with given port.
func TestH1H1HTTPSRedirectPort(t *testing.T) {
st := newServerTester([]string{"--redirect-if-not-tls", "--redirect-https-port=8443"}, t, noopHandler)
defer st.Close()
res, err := st.http1(requestParam{
path: "/foo?bar",
name: "TestH1H1HTTPSRedirectPort",
})
if err != nil {
t.Fatalf("Error st.http1() = %v", err)
}
if got, want := res.status, 308; got != want {
t.Errorf("status = %v; want %v", got, want)
}
if got, want := res.header.Get("location"), "https://127.0.0.1:8443/foo?bar"; got != want {
t.Errorf("location: %v; want %v", got, want)
}
}
// // TestH1H2ConnectFailure tests that server handles the situation that // // TestH1H2ConnectFailure tests that server handles the situation that
// // connection attempt to HTTP/2 backend failed. // // connection attempt to HTTP/2 backend failed.
// func TestH1H2ConnectFailure(t *testing.T) { // func TestH1H2ConnectFailure(t *testing.T) {

View File

@ -1405,6 +1405,49 @@ func TestH2H1DNS(t *testing.T) {
} }
} }
// TestH2H1HTTPSRedirect tests that the request to the backend which
// requires TLS is redirected to https URI.
func TestH2H1HTTPSRedirect(t *testing.T) {
st := newServerTester([]string{"--redirect-if-not-tls"}, t, noopHandler)
defer st.Close()
res, err := st.http2(requestParam{
name: "TestH2H1HTTPSRedirect",
})
if err != nil {
t.Fatalf("Error st.http2() = %v", err)
}
if got, want := res.status, 308; got != want {
t.Errorf("status = %v; want %v", got, want)
}
if got, want := res.header.Get("location"), "https://127.0.0.1/"; got != want {
t.Errorf("location: %v; want %v", got, want)
}
}
// TestH2H1HTTPSRedirectPort tests that the request to the backend
// which requires TLS is redirected to https URI with given port.
func TestH2H1HTTPSRedirectPort(t *testing.T) {
st := newServerTester([]string{"--redirect-if-not-tls", "--redirect-https-port=8443"}, t, noopHandler)
defer st.Close()
res, err := st.http2(requestParam{
path: "/foo?bar",
name: "TestH2H1HTTPSRedirectPort",
})
if err != nil {
t.Fatalf("Error st.http2() = %v", err)
}
if got, want := res.status, 308; got != want {
t.Errorf("status = %v; want %v", got, want)
}
if got, want := res.header.Get("location"), "https://127.0.0.1:8443/foo?bar"; got != want {
t.Errorf("location: %v; want %v", got, want)
}
}
// TestH2H1GracefulShutdown tests graceful shutdown. // TestH2H1GracefulShutdown tests graceful shutdown.
func TestH2H1GracefulShutdown(t *testing.T) { func TestH2H1GracefulShutdown(t *testing.T) {
st := newServerTester(nil, t, noopHandler) st := newServerTester(nil, t, noopHandler)

View File

@ -101,10 +101,8 @@ func newServerTesterInternal(src_args []string, t *testing.T, handler http.Handl
args := []string{} args := []string{}
backendTLS := false var backendTLS, dns, externalDNS, acceptProxyProtocol, redirectIfNotTLS bool
dns := false
externalDNS := false
acceptProxyProtocol := false
for _, k := range src_args { for _, k := range src_args {
switch k { switch k {
case "--http2-bridge": case "--http2-bridge":
@ -116,6 +114,8 @@ func newServerTesterInternal(src_args []string, t *testing.T, handler http.Handl
externalDNS = true externalDNS = true
case "--accept-proxy-protocol": case "--accept-proxy-protocol":
acceptProxyProtocol = true acceptProxyProtocol = true
case "--redirect-if-not-tls":
redirectIfNotTLS = true
default: default:
args = append(args, k) args = append(args, k)
} }
@ -164,6 +164,10 @@ func newServerTesterInternal(src_args []string, t *testing.T, handler http.Handl
b += ";dns" b += ";dns"
} }
if redirectIfNotTLS {
b += ";redirect-if-not-tls"
}
noTLS := ";no-tls" noTLS := ";no-tls"
if frontendTLS { if frontendTLS {
noTLS = "" noTLS = ""