31
31
client = MockRequest.new("OPTIONS * HTTP/1.1\r\n" \
32
32
"Host: foo\r\n\r\n")
34
assert_nothing_raised { env = @request.read(client) }
33
env = @request.read(client)
35
34
assert_equal '', env['REQUEST_PATH']
36
35
assert_equal '', env['PATH_INFO']
37
36
assert_equal '*', env['REQUEST_URI']
38
assert_nothing_raised { res = @lint.call(env) }
41
40
def test_absolute_uri_with_query
42
41
client = MockRequest.new("GET http://e:3/x?y=z HTTP/1.1\r\n" \
43
42
"Host: foo\r\n\r\n")
45
assert_nothing_raised { env = @request.read(client) }
43
env = @request.read(client)
46
44
assert_equal '/x', env['REQUEST_PATH']
47
45
assert_equal '/x', env['PATH_INFO']
48
46
assert_equal 'y=z', env['QUERY_STRING']
49
assert_nothing_raised { res = @lint.call(env) }
52
50
def test_absolute_uri_with_fragment
53
51
client = MockRequest.new("GET http://e:3/x#frag HTTP/1.1\r\n" \
54
52
"Host: foo\r\n\r\n")
56
assert_nothing_raised { env = @request.read(client) }
53
env = @request.read(client)
57
54
assert_equal '/x', env['REQUEST_PATH']
58
55
assert_equal '/x', env['PATH_INFO']
59
56
assert_equal '', env['QUERY_STRING']
60
57
assert_equal 'frag', env['FRAGMENT']
61
assert_nothing_raised { res = @lint.call(env) }
64
61
def test_absolute_uri_with_query_and_fragment
65
62
client = MockRequest.new("GET http://e:3/x?a=b#frag HTTP/1.1\r\n" \
66
63
"Host: foo\r\n\r\n")
68
assert_nothing_raised { env = @request.read(client) }
64
env = @request.read(client)
69
65
assert_equal '/x', env['REQUEST_PATH']
70
66
assert_equal '/x', env['PATH_INFO']
71
67
assert_equal 'a=b', env['QUERY_STRING']
72
68
assert_equal 'frag', env['FRAGMENT']
73
assert_nothing_raised { res = @lint.call(env) }
76
72
def test_absolute_uri_unsupported_schemes
84
80
def test_x_forwarded_proto_https
86
81
client = MockRequest.new("GET / HTTP/1.1\r\n" \
87
82
"X-Forwarded-Proto: https\r\n" \
88
83
"Host: foo\r\n\r\n")
89
assert_nothing_raised { env = @request.read(client) }
84
env = @request.read(client)
90
85
assert_equal "https", env['rack.url_scheme']
91
assert_nothing_raised { res = @lint.call(env) }
94
89
def test_x_forwarded_proto_http
96
90
client = MockRequest.new("GET / HTTP/1.1\r\n" \
97
91
"X-Forwarded-Proto: http\r\n" \
98
92
"Host: foo\r\n\r\n")
99
assert_nothing_raised { env = @request.read(client) }
93
env = @request.read(client)
100
94
assert_equal "http", env['rack.url_scheme']
101
assert_nothing_raised { res = @lint.call(env) }
104
98
def test_x_forwarded_proto_invalid
106
99
client = MockRequest.new("GET / HTTP/1.1\r\n" \
107
100
"X-Forwarded-Proto: ftp\r\n" \
108
101
"Host: foo\r\n\r\n")
109
assert_nothing_raised { env = @request.read(client) }
102
env = @request.read(client)
110
103
assert_equal "http", env['rack.url_scheme']
111
assert_nothing_raised { res = @lint.call(env) }
104
res = @lint.call(env)
114
107
def test_rack_lint_get
115
108
client = MockRequest.new("GET / HTTP/1.1\r\nHost: foo\r\n\r\n")
117
assert_nothing_raised { env = @request.read(client) }
109
env = @request.read(client)
118
110
assert_equal "http", env['rack.url_scheme']
119
111
assert_equal '127.0.0.1', env['REMOTE_ADDR']
120
assert_nothing_raised { res = @lint.call(env) }
112
res = @lint.call(env)
123
115
def test_no_content_stringio
124
116
client = MockRequest.new("GET / HTTP/1.1\r\nHost: foo\r\n\r\n")
126
assert_nothing_raised { env = @request.read(client) }
117
env = @request.read(client)
127
118
assert_equal StringIO, env['rack.input'].class
131
122
client = MockRequest.new("PUT / HTTP/1.1\r\n" \
132
123
"Content-Length: 0\r\n" \
133
124
"Host: foo\r\n\r\n")
135
assert_nothing_raised { env = @request.read(client) }
125
env = @request.read(client)
136
126
assert_equal StringIO, env['rack.input'].class
140
130
client = MockRequest.new("PUT / HTTP/1.1\r\n" \
141
131
"Content-Length: 1\r\n" \
142
132
"Host: foo\r\n\r\n")
144
assert_nothing_raised { env = @request.read(client) }
133
env = @request.read(client)
145
134
assert_equal Unicorn::TeeInput, env['rack.input'].class
152
141
"Content-Length: 5\r\n" \
156
assert_nothing_raised { env = @request.read(client) }
144
env = @request.read(client)
157
145
assert ! env.include?(:http_body)
158
assert_nothing_raised { res = @lint.call(env) }
146
res = @lint.call(env)
161
149
def test_rack_lint_big_put
180
168
count.times { assert_equal bs, client.syswrite(buf) }
181
169
assert_equal 0, client.sysseek(0)
183
assert_nothing_raised { env = @request.read(client) }
170
env = @request.read(client)
184
171
assert ! env.include?(:http_body)
185
172
assert_equal length, env['rack.input'].size