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  }