Vendor Rack 1.1
Also clean up some View stuff.
This commit is contained in:
parent
77014652a3
commit
a705709f9a
74 changed files with 3080 additions and 608 deletions
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue