resourceful 0.3.1 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Manifest +24 -28
- data/Rakefile +44 -14
- data/lib/resourceful.rb +11 -21
- data/lib/resourceful/authentication_manager.rb +3 -2
- data/lib/resourceful/cache_manager.rb +58 -1
- data/lib/resourceful/exceptions.rb +34 -0
- data/lib/resourceful/header.rb +95 -0
- data/lib/resourceful/http_accessor.rb +0 -2
- data/lib/resourceful/memcache_cache_manager.rb +3 -13
- data/lib/resourceful/net_http_adapter.rb +15 -5
- data/lib/resourceful/request.rb +180 -18
- data/lib/resourceful/resource.rb +38 -141
- data/lib/resourceful/response.rb +142 -95
- data/resourceful.gemspec +9 -7
- data/spec/acceptance/authorization_spec.rb +16 -0
- data/spec/acceptance/caching_spec.rb +192 -0
- data/spec/acceptance/header_spec.rb +24 -0
- data/spec/acceptance/redirecting_spec.rb +12 -0
- data/spec/acceptance/resource_spec.rb +84 -0
- data/spec/acceptance_shared_specs.rb +12 -17
- data/spec/{acceptance_spec.rb → old_acceptance_specs.rb} +27 -57
- data/spec/simple_sinatra_server.rb +74 -0
- data/spec/simple_sinatra_server_spec.rb +98 -0
- data/spec/spec_helper.rb +21 -7
- metadata +50 -42
- data/spec/resourceful/authentication_manager_spec.rb +0 -249
- data/spec/resourceful/cache_manager_spec.rb +0 -223
- data/spec/resourceful/header_spec.rb +0 -38
- data/spec/resourceful/http_accessor_spec.rb +0 -164
- data/spec/resourceful/memcache_cache_manager_spec.rb +0 -111
- data/spec/resourceful/net_http_adapter_spec.rb +0 -96
- data/spec/resourceful/options_interpreter_spec.rb +0 -102
- data/spec/resourceful/request_spec.rb +0 -186
- data/spec/resourceful/resource_spec.rb +0 -600
- data/spec/resourceful/response_spec.rb +0 -238
- data/spec/resourceful/stubbed_resource_proxy_spec.rb +0 -58
- data/spec/simple_http_server_shared_spec.rb +0 -162
- data/spec/simple_http_server_shared_spec_spec.rb +0 -212
@@ -1,212 +0,0 @@
|
|
1
|
-
require 'pathname'
|
2
|
-
require Pathname(__FILE__).dirname + 'spec_helper'
|
3
|
-
require 'rubygems'
|
4
|
-
require 'addressable/uri'
|
5
|
-
|
6
|
-
require 'resourceful/net_http_adapter'
|
7
|
-
|
8
|
-
describe 'http server' do
|
9
|
-
it_should_behave_like 'simple http server'
|
10
|
-
|
11
|
-
it 'should have a response code of 200 if the path is /get' do
|
12
|
-
Resourceful::NetHttpAdapter.make_request(:get, 'http://localhost:3000/get')[0].should == 200
|
13
|
-
end
|
14
|
-
|
15
|
-
it 'should reply with the posted document in the body if the path is /post' do
|
16
|
-
resp = Resourceful::NetHttpAdapter.make_request(:get, 'http://localhost:3000/post', 'Hello from POST!')
|
17
|
-
resp[2].should == 'Hello from POST!'
|
18
|
-
resp[0].should == 201
|
19
|
-
end
|
20
|
-
|
21
|
-
it 'should reply with the puted document in the body if the path is /put' do
|
22
|
-
resp = Resourceful::NetHttpAdapter.make_request(:put, 'http://localhost:3000/put', 'Hello from PUT!')
|
23
|
-
resp[2].should == 'Hello from PUT!'
|
24
|
-
resp[0].should == 200
|
25
|
-
end
|
26
|
-
|
27
|
-
it 'should reply with "KABOOM!" in the body if the path is /delete' do
|
28
|
-
resp = Resourceful::NetHttpAdapter.make_request(:delete, 'http://localhost:3000/delete')
|
29
|
-
resp[2].should == 'KABOOM!'
|
30
|
-
resp[0].should == 200
|
31
|
-
end
|
32
|
-
|
33
|
-
it 'should have a response code of whatever the path is' do
|
34
|
-
Resourceful::NetHttpAdapter.make_request(:get, 'http://localhost:3000/code/304')[0].should == 304
|
35
|
-
end
|
36
|
-
|
37
|
-
it 'should redirect to a given url' do
|
38
|
-
resp = Resourceful::NetHttpAdapter.make_request(:get, 'http://localhost:3000/redirect/301?http://localhost:3000/get')
|
39
|
-
|
40
|
-
resp[0].should == 301
|
41
|
-
resp[1]['Location'].should == ['http://localhost:3000/get']
|
42
|
-
end
|
43
|
-
|
44
|
-
it 'should respond with the request method in the body' do
|
45
|
-
resp = Resourceful::NetHttpAdapter.make_request(:delete, 'http://localhost:3000/method')
|
46
|
-
|
47
|
-
resp[0].should == 200
|
48
|
-
resp[2].should == "DELETE"
|
49
|
-
end
|
50
|
-
|
51
|
-
it 'should respond with the header set from the query string' do
|
52
|
-
uri = URI.escape('http://localhost:3000/header?{Foo: "bar"}')
|
53
|
-
resp = Resourceful::NetHttpAdapter.make_request(:get, uri)
|
54
|
-
|
55
|
-
resp[1].should have_key('Foo')
|
56
|
-
resp[1]['Foo'].should == ['bar']
|
57
|
-
end
|
58
|
-
|
59
|
-
it 'should allow the Date header to be overridden' do
|
60
|
-
uri = URI.escape("http://localhost:3000/header?{Date: \"Thu, 21 Aug 2008 20:00:00 GMT\"}")
|
61
|
-
resp = Resourceful::NetHttpAdapter.make_request(:get, uri)
|
62
|
-
|
63
|
-
resp[1].should have_key('Date')
|
64
|
-
resp[1]['Date'].should == ['Thu, 21 Aug 2008 20:00:00 GMT']
|
65
|
-
end
|
66
|
-
|
67
|
-
|
68
|
-
it 'should parse escaped uris properly' do
|
69
|
-
uri = URI.escape("http://localhost:3000/header?{Expire: \"#{Time.now.httpdate}\"}")
|
70
|
-
|
71
|
-
resp = Resourceful::NetHttpAdapter.make_request(:get, uri)
|
72
|
-
|
73
|
-
resp[1].should have_key('Expire')
|
74
|
-
resp[1]['Expire'].first.should_not =~ /%/
|
75
|
-
end
|
76
|
-
|
77
|
-
it 'should echo the request header in the response body' do
|
78
|
-
uri = URI.escape("http://localhost:3000/echo_header")
|
79
|
-
|
80
|
-
resp = Resourceful::NetHttpAdapter.make_request(:get, uri)
|
81
|
-
|
82
|
-
resp[2].should =~ /HTTP_HOST/
|
83
|
-
end
|
84
|
-
|
85
|
-
describe '/modified' do
|
86
|
-
it 'should be 200 if no I-M-S header' do
|
87
|
-
uri = URI.escape("http://localhost:3000/modified?#{(Time.now + 3600).httpdate}")
|
88
|
-
|
89
|
-
resp = Resourceful::NetHttpAdapter.make_request(:get, uri)
|
90
|
-
|
91
|
-
resp[0].should == 200
|
92
|
-
end
|
93
|
-
|
94
|
-
it 'should be 304 if I-M-S header is set' do
|
95
|
-
now = Time.utc(2008,5,29,12,00)
|
96
|
-
uri = URI.escape("http://localhost:3000/modified?#{(now + 3600).httpdate}")
|
97
|
-
|
98
|
-
resp = Resourceful::NetHttpAdapter.make_request(:get, uri, nil, {'If-Modified-Since' => now.httpdate})
|
99
|
-
|
100
|
-
resp[0].should == 304
|
101
|
-
end
|
102
|
-
|
103
|
-
end
|
104
|
-
|
105
|
-
describe '/auth' do
|
106
|
-
before do
|
107
|
-
@uri = "http://localhost:3000/auth?basic"
|
108
|
-
end
|
109
|
-
|
110
|
-
it 'should return a 401 if no auth info is provided' do
|
111
|
-
resp = Resourceful::NetHttpAdapter.make_request(:get, @uri)
|
112
|
-
resp[0].should == 401
|
113
|
-
end
|
114
|
-
|
115
|
-
describe 'basic' do
|
116
|
-
before do
|
117
|
-
@uri = "http://localhost:3000/auth?basic"
|
118
|
-
end
|
119
|
-
|
120
|
-
it 'should return a 401 if no auth info is provided' do
|
121
|
-
resp = Resourceful::NetHttpAdapter.make_request(:get, @uri)
|
122
|
-
resp[0].should == 401
|
123
|
-
end
|
124
|
-
|
125
|
-
it 'should provide a WWW-Authenticate header when 401' do
|
126
|
-
resp = Resourceful::NetHttpAdapter.make_request(:get, @uri)
|
127
|
-
header = resp[1]
|
128
|
-
header.should have_key('WWW-Authenticate')
|
129
|
-
end
|
130
|
-
|
131
|
-
it 'should set the scheme to "Basic"' do
|
132
|
-
resp = Resourceful::NetHttpAdapter.make_request(:get, @uri)
|
133
|
-
auth = resp[1]['WWW-Authenticate'].first
|
134
|
-
auth.should =~ /^Basic/
|
135
|
-
end
|
136
|
-
|
137
|
-
it 'should set the realm to "Test Auth"' do
|
138
|
-
resp = Resourceful::NetHttpAdapter.make_request(:get, @uri)
|
139
|
-
auth = resp[1]['WWW-Authenticate'].first
|
140
|
-
auth.should =~ /realm="Test Auth"/
|
141
|
-
end
|
142
|
-
|
143
|
-
it 'should authorize on u/p:admin/secret' do
|
144
|
-
creds = HTTPAuth::Basic.pack_authorization('admin', 'secret')
|
145
|
-
header = {'Authorization' => creds}
|
146
|
-
resp = Resourceful::NetHttpAdapter.make_request(:get, @uri, nil, header)
|
147
|
-
resp[0].should == 200
|
148
|
-
end
|
149
|
-
|
150
|
-
it 'should authorize if u/p is incorrect' do
|
151
|
-
creds = HTTPAuth::Basic.pack_authorization('admin', 'not secret')
|
152
|
-
header = {'Authorization' => creds}
|
153
|
-
resp = Resourceful::NetHttpAdapter.make_request(:get, @uri, nil, header)
|
154
|
-
resp[0].should == 401
|
155
|
-
end
|
156
|
-
|
157
|
-
end
|
158
|
-
|
159
|
-
describe 'digest' do
|
160
|
-
before do
|
161
|
-
@uri = "http://localhost:3000/auth?digest"
|
162
|
-
end
|
163
|
-
|
164
|
-
it 'should return a 401 if no auth info is provided' do
|
165
|
-
resp = Resourceful::NetHttpAdapter.make_request(:get, @uri)
|
166
|
-
resp[0].should == 401
|
167
|
-
end
|
168
|
-
|
169
|
-
it 'should provide a WWW-Authenticate header when 401' do
|
170
|
-
resp = Resourceful::NetHttpAdapter.make_request(:get, @uri)
|
171
|
-
header = resp[1]
|
172
|
-
header.should have_key('WWW-Authenticate')
|
173
|
-
end
|
174
|
-
|
175
|
-
it 'should set the scheme to "Digest"' do
|
176
|
-
resp = Resourceful::NetHttpAdapter.make_request(:get, @uri)
|
177
|
-
auth = resp[1]['WWW-Authenticate'].first
|
178
|
-
auth.should =~ /^Digest/
|
179
|
-
end
|
180
|
-
|
181
|
-
it 'should set the realm to "Test Auth"' do
|
182
|
-
resp = Resourceful::NetHttpAdapter.make_request(:get, @uri)
|
183
|
-
auth = resp[1]['WWW-Authenticate'].first
|
184
|
-
auth.should =~ /realm="Test Auth"/
|
185
|
-
end
|
186
|
-
|
187
|
-
def challenge
|
188
|
-
resp = Resourceful::NetHttpAdapter.make_request(:get, @uri)
|
189
|
-
HTTPAuth::Digest::Challenge.from_header(resp[1]['WWW-Authenticate'].first)
|
190
|
-
end
|
191
|
-
|
192
|
-
it 'should authorize on u/p:admin/secret' do
|
193
|
-
creds = HTTPAuth::Digest::Credentials.from_challenge(challenge, :username => 'admin', :password => 'secret', :uri => @uri)
|
194
|
-
header = {'Authorization' => creds.to_header}
|
195
|
-
resp = Resourceful::NetHttpAdapter.make_request(:get, @uri, nil, header)
|
196
|
-
resp[0].should == 200
|
197
|
-
end
|
198
|
-
|
199
|
-
it 'should not authorize if u/p is incorrect' do
|
200
|
-
pending
|
201
|
-
creds = HTTPAuth::Digest::Credentials.from_challenge(challenge, :username => 'admin', :password => 'not secret', :uri => @uri)
|
202
|
-
header = {'Authorization' => creds.to_header}
|
203
|
-
resp = Resourceful::NetHttpAdapter.make_request(:get, @uri, nil, header)
|
204
|
-
resp[0].should == 401
|
205
|
-
end
|
206
|
-
|
207
|
-
end
|
208
|
-
|
209
|
-
end
|
210
|
-
|
211
|
-
end
|
212
|
-
|