github.com/naoina/kocha@v0.7.1-0.20171129072645-78c7a531f799/request_test.go (about) 1 package kocha 2 3 import ( 4 "net/http" 5 "reflect" 6 "testing" 7 ) 8 9 func TestRequest_RemoteAddr(t *testing.T) { 10 for _, v := range []struct { 11 header string 12 value string 13 expect string 14 }{ 15 {"X-Forwarded-For", "192.168.0.1", "192.168.0.1"}, 16 {"X-Forwarded-For", "192.168.0.1, 192.168.0.2, 192.168.0.3", "192.168.0.3"}, 17 {"X-Forwarded-For", "", "127.0.0.1"}, 18 } { 19 r := &http.Request{Header: make(http.Header), RemoteAddr: "127.0.0.1:12345"} 20 r.Header.Set(v.header, v.value) 21 req := newRequest(r) 22 actual := req.RemoteAddr 23 expect := v.expect 24 if !reflect.DeepEqual(actual, expect) { 25 t.Errorf(`Request.RemoteAddr with "%v: %v" => %#v; want %#v`, v.header, v.value, actual, expect) 26 } 27 } 28 } 29 30 func TestRequest_Scheme(t *testing.T) { 31 for _, v := range []struct { 32 header string 33 value string 34 expect string 35 }{ 36 {"HTTPS", "on", "https"}, 37 {"X-Forwarded-SSL", "on", "https"}, 38 {"X-Forwarded-Scheme", "file", "file"}, 39 {"X-Forwarded-Proto", "gopher", "gopher"}, 40 {"X-Forwarded-Proto", "https, http, file", "https"}, 41 } { 42 req := &Request{Request: &http.Request{Header: make(http.Header)}} 43 req.Header.Set(v.header, v.value) 44 actual := req.Scheme() 45 expect := v.expect 46 if !reflect.DeepEqual(actual, expect) { 47 t.Errorf(`Request.Scheme() with "%v: %v" => %#v; want %#v`, v.header, v.value, actual, expect) 48 } 49 } 50 } 51 52 func TestRequest_IsSSL(t *testing.T) { 53 req := &Request{Request: &http.Request{Header: make(http.Header)}} 54 actual := req.IsSSL() 55 expected := false 56 if !reflect.DeepEqual(actual, expected) { 57 t.Errorf("Expect %v, but %v", expected, actual) 58 } 59 60 req.Header.Set("HTTPS", "on") 61 actual = req.IsSSL() 62 expected = true 63 if !reflect.DeepEqual(actual, expected) { 64 t.Errorf("Expect %v, but %v", expected, actual) 65 } 66 } 67 68 func TestRequest_IsXHR(t *testing.T) { 69 r, err := http.NewRequest("GET", "/", nil) 70 if err != nil { 71 t.Fatal(err) 72 } 73 req := &Request{Request: r} 74 actual := req.IsXHR() 75 expect := false 76 if !reflect.DeepEqual(actual, expect) { 77 t.Errorf(`Request.IsXHR() => %#v; want %#v`, actual, expect) 78 } 79 80 req.Request.Header.Set("X-Requested-With", "XMLHttpRequest") 81 actual = req.IsXHR() 82 expect = true 83 if !reflect.DeepEqual(actual, expect) { 84 t.Errorf(`Request.IsXHR() with "X-Requested-With: XMLHttpRequest" header => %#v; want %#v`, actual, expect) 85 } 86 }