Vendor Rack 1.1

Also clean up some View stuff.
This commit is contained in:
Jacques Distler 2009-12-26 14:00:18 -06:00
parent 77014652a3
commit a705709f9a
74 changed files with 3080 additions and 608 deletions

View file

@ -8,7 +8,7 @@ begin
context "Rack::Session::Memcache" do
session_key = Rack::Session::Memcache::DEFAULT_OPTIONS[:key]
session_match = /#{session_key}=[0-9a-fA-F]+;/
session_match = /#{session_key}=([0-9a-fA-F]+);/
incrementor = lambda do |env|
env["rack.session"]["counter"] ||= 0
env["rack.session"]["counter"] += 1
@ -27,14 +27,20 @@ begin
incrementor.call(env)
end
specify "MemCache can connect to existing server" do
test_pool = MemCache.new :namespace => 'test:rack:session'
specify "faults on no connection" do
if RUBY_VERSION < "1.9"
lambda do
Rack::Session::Memcache.new incrementor, :memcache_server => 'nosuchserver'
end.should.raise
else
lambda do
Rack::Session::Memcache.new incrementor, :memcache_server => 'nosuchserver'
end.should.raise ArgumentError
end
end
specify "faults on no connection" do
lambda do
Rack::Session::Memcache.new(incrementor, :memcache_server => '')
end.should.raise
specify "connect to existing server" do
test_pool = MemCache.new incrementor, :namespace => 'test:rack:session'
end
specify "creates a new cookie" do
@ -151,6 +157,31 @@ begin
res3.body.should.equal '{"counter"=>4}'
end
specify "deep hashes are correctly updated" do
store = nil
hash_check = proc do |env|
session = env['rack.session']
unless session.include? 'test'
session.update :a => :b, :c => { :d => :e },
:f => { :g => { :h => :i} }, 'test' => true
else
session[:f][:g][:h] = :j
end
[200, {}, session.inspect]
end
pool = Rack::Session::Memcache.new(hash_check)
req = Rack::MockRequest.new(pool)
res0 = req.get("/")
session_id = (cookie = res0["Set-Cookie"])[session_match, 1]
ses0 = pool.pool.get(session_id, true)
res1 = req.get("/", "HTTP_COOKIE" => cookie)
ses1 = pool.pool.get(session_id, true)
ses1.should.not.equal ses0
end
# anyone know how to do this better?
specify "multithread: should cleanly merge sessions" do
next unless $DEBUG
@ -161,7 +192,7 @@ begin
res = req.get('/')
res.body.should.equal '{"counter"=>1}'
cookie = res["Set-Cookie"]
sess_id = cookie[/#{pool.key}=([^,;]+)/,1]
session_id = cookie[session_match, 1]
delta_incrementor = lambda do |env|
# emulate disconjoinment of threading
@ -178,12 +209,12 @@ begin
run.get('/', "HTTP_COOKIE" => cookie, 'rack.multithread' => true)
end
end.reverse.map{|t| t.run.join.value }
r.each do |res|
res['Set-Cookie'].should.equal cookie
res.body.should.include '"counter"=>2'
r.each do |request|
request['Set-Cookie'].should.equal cookie
request.body.should.include '"counter"=>2'
end
session = pool.pool.get(sess_id)
session = pool.pool.get(session_id)
session.size.should.be tnum+1 # counter
session['counter'].should.be 2 # meeeh
@ -202,12 +233,12 @@ begin
run.get('/', "HTTP_COOKIE" => cookie, 'rack.multithread' => true)
end
end.reverse.map{|t| t.run.join.value }
r.each do |res|
res['Set-Cookie'].should.equal cookie
res.body.should.include '"counter"=>3'
r.each do |request|
request['Set-Cookie'].should.equal cookie
request.body.should.include '"counter"=>3'
end
session = pool.pool.get(sess_id)
session = pool.pool.get(session_id)
session.size.should.be tnum+1
session['counter'].should.be 3
@ -224,17 +255,19 @@ begin
run.get('/', "HTTP_COOKIE" => cookie, 'rack.multithread' => true)
end
end.reverse.map{|t| t.run.join.value }
r.each do |res|
res['Set-Cookie'].should.equal cookie
res.body.should.include '"foo"=>"bar"'
r.each do |request|
request['Set-Cookie'].should.equal cookie
request.body.should.include '"foo"=>"bar"'
end
session = pool.pool.get(sess_id)
session = pool.pool.get(session_id)
session.size.should.be r.size+1
session['counter'].should.be.nil?
session['foo'].should.equal 'bar'
end
end
rescue RuntimeError
$stderr.puts "Skipping Rack::Session::Memcache tests. Start memcached and try again."
rescue LoadError
$stderr.puts "Skipping Rack::Session::Memcache tests (Memcache is required). `gem install memcache-client` and try again."
end