git.iko.soy/typeable/oauth2-proxy
on v1.1 help sign in
typeable/oauth2-proxy/oauthproxy_test.go
64 lines 1.8 kB history raw
1package main
3import (
4 "io/ioutil"
5 "net"
6 "net/http"
7 "net/http/httptest"
8 "net/url"
9 "testing"
12func TestNewReverseProxy(t *testing.T) {
13 backend := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
14 w.WriteHeader(200)
15 hostname, _, _ := net.SplitHostPort(r.Host)
16 w.Write([]byte(hostname))
17 }))
18 defer backend.Close()
20 backendURL, _ := url.Parse(backend.URL)
21 backendHostname := "upstream.127.0.0.1.xip.io"
22 _, backendPort, _ := net.SplitHostPort(backendURL.Host)
23 backendHost := net.JoinHostPort(backendHostname, backendPort)
24 proxyURL, _ := url.Parse(backendURL.Scheme + "://" + backendHost + "/")
26 proxyHandler := NewReverseProxy(proxyURL)
27 setProxyUpstreamHostHeader(proxyHandler, proxyURL)
28 frontend := httptest.NewServer(proxyHandler)
29 defer frontend.Close()
31 getReq, _ := http.NewRequest("GET", frontend.URL, nil)
32 res, _ := http.DefaultClient.Do(getReq)
33 bodyBytes, _ := ioutil.ReadAll(res.Body)
34 if g, e := string(bodyBytes), backendHostname; g != e {
35 t.Errorf("got body %q; expected %q", g, e)
36 }
39func TestEncodedSlashes(t *testing.T) {
40 var seen string
41 backend := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
42 w.WriteHeader(200)
43 seen = r.RequestURI
44 }))
45 defer backend.Close()
47 b, _ := url.Parse(backend.URL)
48 proxyHandler := NewReverseProxy(b)
49 setProxyDirector(proxyHandler)
50 frontend := httptest.NewServer(proxyHandler)
51 defer frontend.Close()
53 f, _ := url.Parse(frontend.URL)
54 encodedPath := "/a%2Fb/"
55 getReq := &http.Request{URL: &url.URL{Scheme: "http", Host: f.Host, Opaque: encodedPath}}
56 _, err := http.DefaultClient.Do(getReq)
57 if err != nil {
58 t.Fatalf("err %s", err)
59 }
60 expected := backend.URL + encodedPath
61 if seen != expected {
62 t.Errorf("got bad request %q expected %q", seen, expected)
63 }