@@ -17,6 +17,7 @@ import (
1717
1818 "github.com/18F/hmacauth"
1919 "github.com/bmizerany/assert"
20+ "github.com/stretchr/testify/require"
2021
2122 "github.com/openshift/oauth-proxy/providers"
2223 "golang.org/x/net/websocket"
@@ -105,55 +106,99 @@ func TestWebSocketProxy(t *testing.T) {
105106}
106107
107108func TestNewReverseProxy (t * testing.T ) {
109+ opts := NewOptions ()
110+ opts .UpstreamFlush = 5 * time .Millisecond
111+
108112 backend := httptest .NewServer (http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
109113 w .WriteHeader (200 )
110114 hostname , _ , _ := net .SplitHostPort (r .Host )
111115 w .Write ([]byte (hostname ))
112116 }))
113117 defer backend .Close ()
114118
115- backendURL , _ := url .Parse (backend .URL )
116- backendHostname , backendPort , _ := net .SplitHostPort (backendURL .Host )
117- backendHost := net .JoinHostPort (backendHostname , backendPort )
118- proxyURL , _ := url .Parse (backendURL .Scheme + "://" + backendHost + "/" )
119+ proxyURL , err := url .Parse (backend .URL )
120+ require .NoError (t , err )
121+
122+ backendHost , _ , err := net .SplitHostPort (proxyURL .Host )
123+ require .NoError (t , err )
124+
125+ proxyHandler , err := NewReverseProxy (proxyURL , opts )
126+ require .NoError (t , err )
119127
120- proxyHandler , _ := NewReverseProxy (proxyURL , 5 * time .Millisecond , nil )
121128 setProxyUpstreamHostHeader (proxyHandler , proxyURL )
122129 frontend := httptest .NewServer (proxyHandler )
123130 defer frontend .Close ()
124131
125- getReq , _ := http .NewRequest ("GET" , frontend .URL , nil )
126- res , _ := http .DefaultClient .Do (getReq )
127- bodyBytes , _ := ioutil .ReadAll (res .Body )
128- if g , e := string (bodyBytes ), backendHostname ; g != e {
129- t .Errorf ("got body %q; expected %q" , g , e )
130- }
132+ getReq , err := http .NewRequest ("GET" , frontend .URL , nil )
133+ require .NoError (t , err )
134+
135+ res , err := http .DefaultClient .Do (getReq )
136+ require .NoError (t , err )
137+
138+ bodyBytes , err := ioutil .ReadAll (res .Body )
139+ require .NoError (t , err )
140+
141+ assert .Equal (t , backendHost , string (bodyBytes ))
131142}
132143
133144func TestEncodedSlashes (t * testing.T ) {
145+ opts := NewOptions ()
146+ opts .UpstreamFlush = 5 * time .Millisecond
147+
134148 var seen string
135149 backend := httptest .NewServer (http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
136150 w .WriteHeader (200 )
137151 seen = r .RequestURI
138152 }))
139153 defer backend .Close ()
140154
141- b , _ := url .Parse (backend .URL )
142- proxyHandler , _ := NewReverseProxy (b , 5 * time .Millisecond , nil )
155+ b , err := url .Parse (backend .URL )
156+ require .NoError (t , err )
157+
158+ proxyHandler , err := NewReverseProxy (b , opts )
159+ require .NoError (t , err )
160+
143161 setProxyDirector (proxyHandler )
144162 frontend := httptest .NewServer (proxyHandler )
145163 defer frontend .Close ()
146164
147- f , _ := url .Parse (frontend .URL )
165+ f , err := url .Parse (frontend .URL )
166+ require .NoError (t , err )
167+
148168 encodedPath := "/a%2Fb/?c=1"
149169 getReq := & http.Request {URL : & url.URL {Scheme : "http" , Host : f .Host , Opaque : encodedPath }}
150- _ , err := http .DefaultClient .Do (getReq )
151- if err != nil {
152- t .Fatalf ("err %s" , err )
153- }
154- if seen != encodedPath {
155- t .Errorf ("got bad request %q expected %q" , seen , encodedPath )
156- }
170+ _ , err = http .DefaultClient .Do (getReq )
171+ require .NoError (t , err )
172+
173+ assert .Equal (t , encodedPath , seen )
174+ }
175+
176+ func TestNewReverseProxyWithTimeOut (t * testing.T ) {
177+ opts := NewOptions ()
178+ opts .Timeout = 1 * time .Millisecond
179+
180+ backend := httptest .NewServer (http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
181+ time .Sleep (5 * time .Millisecond )
182+ }))
183+ defer backend .Close ()
184+
185+ proxyURL , err := url .Parse (backend .URL )
186+ require .NoError (t , err )
187+
188+ proxyHandler , err := NewReverseProxy (proxyURL , opts )
189+ require .NoError (t , err )
190+
191+ setProxyUpstreamHostHeader (proxyHandler , proxyURL )
192+ frontend := httptest .NewServer (proxyHandler )
193+ defer frontend .Close ()
194+
195+ getReq , err := http .NewRequest ("GET" , frontend .URL , nil )
196+ require .NoError (t , err )
197+
198+ res , err := http .DefaultClient .Do (getReq )
199+ require .NoError (t , err )
200+
201+ assert .Equal (t , "502 Bad Gateway" , res .Status )
157202}
158203
159204func TestRobotsTxt (t * testing.T ) {
0 commit comments