git.iko.soy/typeable/oauth2-proxy
on c0fb7e8 help sign in
typeable/oauth2-proxy/http_test.go
158 lines 4.1 kB history raw
1package main
3import (
4 "net/http"
5 "net/http/httptest"
6 "testing"
8 "github.com/stretchr/testify/assert"
9)
11const localhost = "127.0.0.1"
12const host = "test-server"
14func TestGCPHealthcheckLiveness(t *testing.T) {
15 handler := func(w http.ResponseWriter, req *http.Request) {
16 w.Write([]byte("test"))
17 }
19 h := gcpHealthcheck(http.HandlerFunc(handler))
20 rw := httptest.NewRecorder()
21 r, _ := http.NewRequest("GET", "/liveness_check", nil)
22 r.RemoteAddr = localhost
23 r.Host = host
24 h.ServeHTTP(rw, r)
26 assert.Equal(t, 200, rw.Code)
27 assert.Equal(t, "OK", rw.Body.String())
30func TestGCPHealthcheckReadiness(t *testing.T) {
31 handler := func(w http.ResponseWriter, req *http.Request) {
32 w.Write([]byte("test"))
33 }
35 h := gcpHealthcheck(http.HandlerFunc(handler))
36 rw := httptest.NewRecorder()
37 r, _ := http.NewRequest("GET", "/readiness_check", nil)
38 r.RemoteAddr = localhost
39 r.Host = host
40 h.ServeHTTP(rw, r)
42 assert.Equal(t, 200, rw.Code)
43 assert.Equal(t, "OK", rw.Body.String())
46func TestGCPHealthcheckNotHealthcheck(t *testing.T) {
47 handler := func(w http.ResponseWriter, req *http.Request) {
48 w.Write([]byte("test"))
49 }
51 h := gcpHealthcheck(http.HandlerFunc(handler))
52 rw := httptest.NewRecorder()
53 r, _ := http.NewRequest("GET", "/not_any_check", nil)
54 r.RemoteAddr = localhost
55 r.Host = host
56 h.ServeHTTP(rw, r)
58 assert.Equal(t, "test", rw.Body.String())
61func TestGCPHealthcheckIngress(t *testing.T) {
62 handler := func(w http.ResponseWriter, req *http.Request) {
63 w.Write([]byte("test"))
64 }
66 h := gcpHealthcheck(http.HandlerFunc(handler))
67 rw := httptest.NewRecorder()
68 r, _ := http.NewRequest("GET", "/", nil)
69 r.RemoteAddr = localhost
70 r.Host = host
71 r.Header.Set(userAgentHeader, googleHealthCheckUserAgent)
72 h.ServeHTTP(rw, r)
74 assert.Equal(t, 200, rw.Code)
75 assert.Equal(t, "", rw.Body.String())
78func TestGCPHealthcheckNotIngress(t *testing.T) {
79 handler := func(w http.ResponseWriter, req *http.Request) {
80 w.Write([]byte("test"))
81 }
83 h := gcpHealthcheck(http.HandlerFunc(handler))
84 rw := httptest.NewRecorder()
85 r, _ := http.NewRequest("GET", "/foo", nil)
86 r.RemoteAddr = localhost
87 r.Host = host
88 r.Header.Set(userAgentHeader, googleHealthCheckUserAgent)
89 h.ServeHTTP(rw, r)
91 assert.Equal(t, "test", rw.Body.String())
94func TestGCPHealthcheckNotIngressPut(t *testing.T) {
95 handler := func(w http.ResponseWriter, req *http.Request) {
96 w.Write([]byte("test"))
97 }
99 h := gcpHealthcheck(http.HandlerFunc(handler))
100 rw := httptest.NewRecorder()
101 r, _ := http.NewRequest("PUT", "/", nil)
102 r.RemoteAddr = localhost
103 r.Host = host
104 r.Header.Set(userAgentHeader, googleHealthCheckUserAgent)
105 h.ServeHTTP(rw, r)
107 assert.Equal(t, "test", rw.Body.String())
110func TestRedirectToHTTPSTrue(t *testing.T) {
111 opts := NewOptions()
112 opts.ForceHTTPS = true
113 handler := func(w http.ResponseWriter, req *http.Request) {
114 w.Write([]byte("test"))
115 }
117 h := redirectToHTTPS(opts, http.HandlerFunc(handler))
118 rw := httptest.NewRecorder()
119 r, _ := http.NewRequest("GET", "/", nil)
120 h.ServeHTTP(rw, r)
122 assert.Equal(t, http.StatusPermanentRedirect, rw.Code, "status code should be %d, got: %d", http.StatusPermanentRedirect, rw.Code)
125func TestRedirectToHTTPSFalse(t *testing.T) {
126 opts := NewOptions()
127 handler := func(w http.ResponseWriter, req *http.Request) {
128 w.Write([]byte("test"))
129 }
131 h := redirectToHTTPS(opts, http.HandlerFunc(handler))
132 rw := httptest.NewRecorder()
133 r, _ := http.NewRequest("GET", "/", nil)
134 h.ServeHTTP(rw, r)
136 assert.Equal(t, http.StatusOK, rw.Code, "status code should be %d, got: %d", http.StatusOK, rw.Code)
139func TestRedirectNotWhenHTTPS(t *testing.T) {
140 opts := NewOptions()
141 opts.ForceHTTPS = true
142 handler := func(w http.ResponseWriter, req *http.Request) {
143 w.Write([]byte("test"))
144 }
146 h := redirectToHTTPS(opts, http.HandlerFunc(handler))
147 s := httptest.NewTLSServer(h)
148 defer s.Close()
150 opts.HTTPSAddress = s.URL
151 client := s.Client()
152 res, err := client.Get(s.URL)
153 if err != nil {
154 t.Fatalf("request to test server failed with error: %v", err)
155 }
157 assert.Equal(t, http.StatusOK, res.StatusCode, "status code should be %d, got: %d", http.StatusOK, res.StatusCode)