1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
|
require 'test/unit'
require 'cgi'
class CGIModrubyTest < Test::Unit::TestCase
def setup
@environ = {
'SERVER_PROTOCOL' => 'HTTP/1.1',
'REQUEST_METHOD' => 'GET',
#'QUERY_STRING' => 'a=foo&b=bar',
}
ENV.update(@environ)
CGI.class_eval { const_set(:MOD_RUBY, true) }
Apache._reset()
#@cgi = CGI.new
#@req = Apache.request
end
def teardown
@environ.each do |key, val| ENV.delete(key) end
CGI.class_eval { remove_const(:MOD_RUBY) }
end
def test_cgi_modruby_simple
req = Apache.request
cgi = CGI.new
assert(req._setup_cgi_env_invoked?)
assert(! req._send_http_header_invoked?)
actual = cgi.http_header
assert_equal('', actual)
assert_equal('text/html', req.content_type)
assert(req._send_http_header_invoked?)
end
def test_cgi_modruby_complex
req = Apache.request
cgi = CGI.new
options = {
'status' => 'FORBIDDEN',
'location' => 'http://www.example.com/',
'type' => 'image/gif',
'content-encoding' => 'deflate',
'cookie' => [ CGI::Cookie.new('name1', 'abc', '123'),
CGI::Cookie.new('name'=>'name2', 'value'=>'value2', 'secure'=>true),
],
}
assert(req._setup_cgi_env_invoked?)
assert(! req._send_http_header_invoked?)
actual = cgi.http_header(options)
assert_equal('', actual)
assert_equal('image/gif', req.content_type)
assert_equal('403 Forbidden', req.status_line)
assert_equal(403, req.status)
assert_equal('deflate', req.content_encoding)
assert_equal('http://www.example.com/', req.headers_out['location'])
assert_equal(["name1=abc&123; path=", "name2=value2; path=; secure"],
req.headers_out['Set-Cookie'])
assert(req._send_http_header_invoked?)
end
def test_cgi_modruby_location
req = Apache.request
cgi = CGI.new
options = {
'status' => '200 OK',
'location' => 'http://www.example.com/',
}
cgi.http_header(options)
assert_equal('200 OK', req.status_line) # should be '302 Found' ?
assert_equal(302, req.status)
assert_equal('http://www.example.com/', req.headers_out['location'])
end
def test_cgi_modruby_requestparams
req = Apache.request
req.args = 'a=foo&b=bar'
cgi = CGI.new
assert_equal('foo', cgi['a'])
assert_equal('bar', cgi['b'])
end
instance_methods.each do |method|
private method if method =~ /^test_(.*)/ && $1 != ENV['TEST']
end if ENV['TEST']
end
## dummy class for mod_ruby
class Apache #:nodoc:
def self._reset
@request = Request.new
end
def self.request
return @request
end
class Request
def initialize
hash = {}
def hash.add(name, value)
(self[name] ||= []) << value
end
@http_header = nil
@headers_out = hash
@status_line = nil
@status = nil
@content_type = nil
@content_encoding = nil
end
attr_accessor :headers_out, :status_line, :status, :content_type, :content_encoding
attr_accessor :args
#def args
# return ENV['QUERY_STRING']
#end
def send_http_header
@http_header = '*invoked*'
end
def _send_http_header_invoked?
@http_header ? true : false
end
def setup_cgi_env
@cgi_env = '*invoked*'
end
def _setup_cgi_env_invoked?
@cgi_env ? true : false
end
end
end
|