moneta 1.5.2 → 1.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGES +12 -0
- data/CONTRIBUTORS +1 -0
- data/LICENSE +1 -1
- data/lib/active_support/cache/moneta_store.rb +32 -6
- data/lib/moneta/adapters/activerecord/backend.rb +50 -0
- data/lib/moneta/adapters/activerecord/v5_backend.rb +80 -0
- data/lib/moneta/adapters/activerecord.rb +50 -95
- data/lib/moneta/adapters/activesupportcache.rb +69 -14
- data/lib/moneta/adapters/client.rb +1 -1
- data/lib/moneta/adapters/hbase.rb +1 -1
- data/lib/moneta/adapters/redis.rb +2 -1
- data/lib/moneta/adapters/sequel/mysql.rb +6 -18
- data/lib/moneta/adapters/sequel/postgres_hstore.rb +8 -1
- data/lib/moneta/adapters/sqlite.rb +4 -2
- data/lib/moneta/adapters/tokyotyrant.rb +1 -1
- data/lib/moneta/adapters/yaml.rb +7 -1
- data/lib/moneta/pool.rb +16 -18
- data/lib/moneta/server.rb +9 -11
- data/lib/moneta/transformer/config.rb +4 -4
- data/lib/moneta/transformer.rb +4 -0
- data/lib/moneta/version.rb +1 -1
- metadata +9 -452
- data/.github/workflows/ruby.yml +0 -425
- data/.gitignore +0 -15
- data/.rspec +0 -4
- data/.rubocop.yml +0 -194
- data/.yardopts +0 -6
- data/Gemfile +0 -206
- data/feature_matrix.yaml +0 -227
- data/moneta.gemspec +0 -36
- data/script/benchmarks +0 -605
- data/script/contributors +0 -12
- data/script/memusage +0 -40
- data/script/parallel-tests +0 -82
- data/script/start-couchdb +0 -27
- data/script/start-hbase +0 -47
- data/script/start-services +0 -10
- data/script/travis-logs +0 -14
- data/script/update-feature-matrix +0 -148
- data/spec/active_support/cache_moneta_store_spec.rb +0 -282
- data/spec/features/concurrent_create.rb +0 -42
- data/spec/features/concurrent_increment.rb +0 -39
- data/spec/features/create.rb +0 -25
- data/spec/features/create_expires.rb +0 -19
- data/spec/features/default_expires.rb +0 -14
- data/spec/features/each_key.rb +0 -119
- data/spec/features/expires.rb +0 -296
- data/spec/features/features.rb +0 -16
- data/spec/features/increment.rb +0 -98
- data/spec/features/marshallable_key.rb +0 -43
- data/spec/features/marshallable_value.rb +0 -7
- data/spec/features/multiprocess.rb +0 -8
- data/spec/features/not_create.rb +0 -7
- data/spec/features/not_each_key.rb +0 -7
- data/spec/features/not_increment.rb +0 -13
- data/spec/features/not_persist.rb +0 -9
- data/spec/features/null.rb +0 -66
- data/spec/features/persist.rb +0 -14
- data/spec/features/returndifferent.rb +0 -9
- data/spec/features/returnsame.rb +0 -9
- data/spec/features/store.rb +0 -261
- data/spec/features/store_large.rb +0 -13
- data/spec/features/transform_value.rb +0 -44
- data/spec/features/transform_value_expires.rb +0 -41
- data/spec/helper.rb +0 -445
- data/spec/moneta/adapters/activerecord/adapter_activerecord_existing_connection_spec.rb +0 -62
- data/spec/moneta/adapters/activerecord/adapter_activerecord_spec.rb +0 -128
- data/spec/moneta/adapters/activerecord/standard_activerecord_spec.rb +0 -22
- data/spec/moneta/adapters/activerecord/standard_activerecord_with_expires_spec.rb +0 -28
- data/spec/moneta/adapters/activesupportcache/adapter_activesupportcache_spec.rb +0 -54
- data/spec/moneta/adapters/activesupportcache/adapter_activesupportcache_with_default_expires_spec.rb +0 -54
- data/spec/moneta/adapters/activesupportcache/standard_activesupportcache_spec.rb +0 -14
- data/spec/moneta/adapters/cassandra/adapter_cassandra_spec.rb +0 -17
- data/spec/moneta/adapters/cassandra/adapter_cassandra_with_default_expires_spec.rb +0 -18
- data/spec/moneta/adapters/cassandra/helper.rb +0 -18
- data/spec/moneta/adapters/cassandra/standard_cassandra_spec.rb +0 -18
- data/spec/moneta/adapters/client/adapter_client_spec.rb +0 -11
- data/spec/moneta/adapters/client/client_helper.rb +0 -25
- data/spec/moneta/adapters/client/standard_client_tcp_spec.rb +0 -23
- data/spec/moneta/adapters/client/standard_client_unix_spec.rb +0 -28
- data/spec/moneta/adapters/cookie/adapter_cookie_spec.rb +0 -7
- data/spec/moneta/adapters/couch/adapter_couch_spec.rb +0 -204
- data/spec/moneta/adapters/couch/standard_couch_spec.rb +0 -15
- data/spec/moneta/adapters/couch/standard_couch_with_expires_spec.rb +0 -19
- data/spec/moneta/adapters/datamapper/adapter_datamapper_spec.rb +0 -64
- data/spec/moneta/adapters/datamapper/standard_datamapper_spec.rb +0 -21
- data/spec/moneta/adapters/datamapper/standard_datamapper_with_expires_spec.rb +0 -26
- data/spec/moneta/adapters/datamapper/standard_datamapper_with_repository_spec.rb +0 -22
- data/spec/moneta/adapters/daybreak/adapter_daybreak_spec.rb +0 -7
- data/spec/moneta/adapters/daybreak/standard_daybreak_spec.rb +0 -7
- data/spec/moneta/adapters/daybreak/standard_daybreak_with_expires_spec.rb +0 -11
- data/spec/moneta/adapters/dbm/adapter_dbm_spec.rb +0 -7
- data/spec/moneta/adapters/dbm/standard_dbm_spec.rb +0 -7
- data/spec/moneta/adapters/dbm/standard_dbm_with_expires_spec.rb +0 -12
- data/spec/moneta/adapters/faraday_helper.rb +0 -10
- data/spec/moneta/adapters/file/adapter_file_spec.rb +0 -7
- data/spec/moneta/adapters/file/standard_file_spec.rb +0 -7
- data/spec/moneta/adapters/file/standard_file_with_expires_spec.rb +0 -11
- data/spec/moneta/adapters/fog/adapter_fog_spec.rb +0 -16
- data/spec/moneta/adapters/fog/standard_fog_spec.rb +0 -15
- data/spec/moneta/adapters/fog/standard_fog_with_expires_spec.rb +0 -20
- data/spec/moneta/adapters/gdbm/adapter_gdbm_spec.rb +0 -7
- data/spec/moneta/adapters/gdbm/standard_gdbm_spec.rb +0 -7
- data/spec/moneta/adapters/gdbm/standard_gdbm_with_expires_spec.rb +0 -11
- data/spec/moneta/adapters/hashfile/standard_hashfile_spec.rb +0 -7
- data/spec/moneta/adapters/hashfile/standard_hashfile_with_expires_spec.rb +0 -12
- data/spec/moneta/adapters/hbase/adapter_hbase_spec.rb +0 -7
- data/spec/moneta/adapters/hbase/standard_hbase_spec.rb +0 -4
- data/spec/moneta/adapters/hbase/standard_hbase_with_expires_spec.rb +0 -8
- data/spec/moneta/adapters/kyotocabinet/adapter_kyotocabinet_spec.rb +0 -7
- data/spec/moneta/adapters/kyotocabinet/standard_kyotocabinet_spec.rb +0 -7
- data/spec/moneta/adapters/kyotocabinet/standard_kyotocabinet_with_expires_spec.rb +0 -14
- data/spec/moneta/adapters/leveldb/adapter_leveldb_spec.rb +0 -7
- data/spec/moneta/adapters/leveldb/standard_leveldb_spec.rb +0 -7
- data/spec/moneta/adapters/leveldb/standard_leveldb_with_expires_spec.rb +0 -11
- data/spec/moneta/adapters/lmdb/adapter_lmdb_spec.rb +0 -7
- data/spec/moneta/adapters/lmdb/adapter_lmdb_with_db_spec.rb +0 -7
- data/spec/moneta/adapters/lmdb/standard_lmdb_spec.rb +0 -7
- data/spec/moneta/adapters/lmdb/standard_lmdb_with_expires_spec.rb +0 -11
- data/spec/moneta/adapters/localmemcache/adapter_localmemcache_spec.rb +0 -7
- data/spec/moneta/adapters/localmemcache/standard_localmemcache_spec.rb +0 -7
- data/spec/moneta/adapters/localmemcache/standard_localmemcache_with_expires_spec.rb +0 -11
- data/spec/moneta/adapters/lruhash/adapter_lruhash_spec.rb +0 -118
- data/spec/moneta/adapters/lruhash/standard_lruhash_spec.rb +0 -4
- data/spec/moneta/adapters/lruhash/standard_lruhash_with_expires_spec.rb +0 -8
- data/spec/moneta/adapters/memcached/adapter_memcached_spec.rb +0 -13
- data/spec/moneta/adapters/memcached/dalli/adapter_memcached_dalli_spec.rb +0 -25
- data/spec/moneta/adapters/memcached/dalli/standard_memcached_dalli_spec.rb +0 -11
- data/spec/moneta/adapters/memcached/native/adapter_memcached_native_spec.rb +0 -25
- data/spec/moneta/adapters/memcached/native/standard_memcached_native_spec.rb +0 -11
- data/spec/moneta/adapters/memcached/standard_memcached_spec.rb +0 -17
- data/spec/moneta/adapters/memcached_helper.rb +0 -20
- data/spec/moneta/adapters/memory/adapter_memory_spec.rb +0 -7
- data/spec/moneta/adapters/memory/standard_memory_spec.rb +0 -4
- data/spec/moneta/adapters/memory/standard_memory_with_compress_spec.rb +0 -9
- data/spec/moneta/adapters/memory/standard_memory_with_expires_spec.rb +0 -8
- data/spec/moneta/adapters/memory/standard_memory_with_json_key_serializer_spec.rb +0 -4
- data/spec/moneta/adapters/memory/standard_memory_with_json_serializer_spec.rb +0 -9
- data/spec/moneta/adapters/memory/standard_memory_with_json_value_serializer_spec.rb +0 -9
- data/spec/moneta/adapters/memory/standard_memory_with_prefix_spec.rb +0 -41
- data/spec/moneta/adapters/memory/standard_memory_with_snappy_compress_spec.rb +0 -9
- data/spec/moneta/adapters/mongo/adapter_mongo_spec.rb +0 -41
- data/spec/moneta/adapters/mongo/adapter_mongo_with_default_expires_spec.rb +0 -14
- data/spec/moneta/adapters/mongo/standard_mongo_spec.rb +0 -7
- data/spec/moneta/adapters/null/null_adapter_spec.rb +0 -7
- data/spec/moneta/adapters/null/standard_null_spec.rb +0 -9
- data/spec/moneta/adapters/pstore/adapter_pstore_spec.rb +0 -7
- data/spec/moneta/adapters/pstore/standard_pstore_spec.rb +0 -9
- data/spec/moneta/adapters/pstore/standard_pstore_with_expires_spec.rb +0 -13
- data/spec/moneta/adapters/redis/adapter_redis_spec.rb +0 -20
- data/spec/moneta/adapters/redis/standard_redis_spec.rb +0 -14
- data/spec/moneta/adapters/restclient/adapter_restclient_spec.rb +0 -13
- data/spec/moneta/adapters/restclient/helper.rb +0 -12
- data/spec/moneta/adapters/restclient/standard_restclient_spec.rb +0 -13
- data/spec/moneta/adapters/riak/adapter_riak_spec.rb +0 -14
- data/spec/moneta/adapters/riak/standard_riak_spec.rb +0 -10
- data/spec/moneta/adapters/riak/standard_riak_with_expires_spec.rb +0 -14
- data/spec/moneta/adapters/sdbm/adapter_sdbm_spec.rb +0 -7
- data/spec/moneta/adapters/sdbm/standard_sdbm_spec.rb +0 -7
- data/spec/moneta/adapters/sdbm/standard_sdbm_with_expires_spec.rb +0 -11
- data/spec/moneta/adapters/sequel/adapter_sequel_spec.rb +0 -133
- data/spec/moneta/adapters/sequel/helper.rb +0 -83
- data/spec/moneta/adapters/sequel/standard_sequel_spec.rb +0 -8
- data/spec/moneta/adapters/sequel/standard_sequel_with_expires_spec.rb +0 -18
- data/spec/moneta/adapters/sqlite/adapter_sqlite_spec.rb +0 -7
- data/spec/moneta/adapters/sqlite/standard_sqlite_spec.rb +0 -7
- data/spec/moneta/adapters/sqlite/standard_sqlite_with_expires_spec.rb +0 -15
- data/spec/moneta/adapters/tdb/adapter_tdb_spec.rb +0 -7
- data/spec/moneta/adapters/tdb/standard_tdb_spec.rb +0 -7
- data/spec/moneta/adapters/tdb/standard_tdb_with_expires_spec.rb +0 -11
- data/spec/moneta/adapters/tokyocabinet/adapter_tokyocabinet_bdb_spec.rb +0 -7
- data/spec/moneta/adapters/tokyocabinet/adapter_tokyocabinet_hdb_spec.rb +0 -7
- data/spec/moneta/adapters/tokyocabinet/standard_tokyocabinet_spec.rb +0 -7
- data/spec/moneta/adapters/tokyocabinet/standard_tokyocabinet_with_expires_spec.rb +0 -11
- data/spec/moneta/adapters/tokyotyrant/adapter_tokyotyrant_spec.rb +0 -11
- data/spec/moneta/adapters/tokyotyrant/helper.rb +0 -12
- data/spec/moneta/adapters/tokyotyrant/standard_tokyotyrant_spec.rb +0 -7
- data/spec/moneta/adapters/tokyotyrant/standard_tokyotyrant_with_expires_spec.rb +0 -12
- data/spec/moneta/adapters/yaml/adapter_yaml_spec.rb +0 -7
- data/spec/moneta/adapters/yaml/standard_yaml_spec.rb +0 -9
- data/spec/moneta/adapters/yaml/standard_yaml_with_expires_spec.rb +0 -13
- data/spec/moneta/builder_spec.rb +0 -50
- data/spec/moneta/config_spec.rb +0 -219
- data/spec/moneta/mutex_spec.rb +0 -55
- data/spec/moneta/proxies/cache/cache_file_memory_spec.rb +0 -24
- data/spec/moneta/proxies/cache/cache_memory_null_spec.rb +0 -12
- data/spec/moneta/proxies/enumerable/enumerable_spec.rb +0 -26
- data/spec/moneta/proxies/expires/expires_file_spec.rb +0 -28
- data/spec/moneta/proxies/expires/expires_memory_spec.rb +0 -15
- data/spec/moneta/proxies/expires/expires_memory_with_default_expires_spec.rb +0 -16
- data/spec/moneta/proxies/fallback/fallback_spec.rb +0 -42
- data/spec/moneta/proxies/lock/lock_spec.rb +0 -10
- data/spec/moneta/proxies/optionmerger/optionmerger_spec.rb +0 -96
- data/spec/moneta/proxies/pool/pool_spec.rb +0 -353
- data/spec/moneta/proxies/proxy/proxy_expires_memory_spec.rb +0 -16
- data/spec/moneta/proxies/shared/shared_tcp_spec.rb +0 -59
- data/spec/moneta/proxies/shared/shared_unix_spec.rb +0 -58
- data/spec/moneta/proxies/transformer/transformer_bencode_spec.rb +0 -19
- data/spec/moneta/proxies/transformer/transformer_bert_spec.rb +0 -19
- data/spec/moneta/proxies/transformer/transformer_bson_spec.rb +0 -25
- data/spec/moneta/proxies/transformer/transformer_bzip2_spec.rb +0 -19
- data/spec/moneta/proxies/transformer/transformer_json_spec.rb +0 -19
- data/spec/moneta/proxies/transformer/transformer_key_inspect_spec.rb +0 -17
- data/spec/moneta/proxies/transformer/transformer_key_marshal_spec.rb +0 -17
- data/spec/moneta/proxies/transformer/transformer_key_to_s_spec.rb +0 -17
- data/spec/moneta/proxies/transformer/transformer_key_yaml_spec.rb +0 -17
- data/spec/moneta/proxies/transformer/transformer_lz4_spec.rb +0 -19
- data/spec/moneta/proxies/transformer/transformer_lzma_spec.rb +0 -19
- data/spec/moneta/proxies/transformer/transformer_lzo_spec.rb +0 -19
- data/spec/moneta/proxies/transformer/transformer_marshal_base64_spec.rb +0 -20
- data/spec/moneta/proxies/transformer/transformer_marshal_city128_spec.rb +0 -15
- data/spec/moneta/proxies/transformer/transformer_marshal_city32_spec.rb +0 -15
- data/spec/moneta/proxies/transformer/transformer_marshal_city64_spec.rb +0 -15
- data/spec/moneta/proxies/transformer/transformer_marshal_escape_spec.rb +0 -21
- data/spec/moneta/proxies/transformer/transformer_marshal_hex_spec.rb +0 -20
- data/spec/moneta/proxies/transformer/transformer_marshal_hmac_spec.rb +0 -19
- data/spec/moneta/proxies/transformer/transformer_marshal_md5_spec.rb +0 -15
- data/spec/moneta/proxies/transformer/transformer_marshal_md5_spread_spec.rb +0 -15
- data/spec/moneta/proxies/transformer/transformer_marshal_prefix_base64_spec.rb +0 -33
- data/spec/moneta/proxies/transformer/transformer_marshal_prefix_spec.rb +0 -15
- data/spec/moneta/proxies/transformer/transformer_marshal_qp_spec.rb +0 -20
- data/spec/moneta/proxies/transformer/transformer_marshal_rmd160_spec.rb +0 -15
- data/spec/moneta/proxies/transformer/transformer_marshal_sha1_spec.rb +0 -15
- data/spec/moneta/proxies/transformer/transformer_marshal_sha256_spec.rb +0 -15
- data/spec/moneta/proxies/transformer/transformer_marshal_sha384_spec.rb +0 -15
- data/spec/moneta/proxies/transformer/transformer_marshal_sha512_spec.rb +0 -15
- data/spec/moneta/proxies/transformer/transformer_marshal_spec.rb +0 -19
- data/spec/moneta/proxies/transformer/transformer_marshal_truncate_spec.rb +0 -15
- data/spec/moneta/proxies/transformer/transformer_marshal_urlsafe_base64_spec.rb +0 -20
- data/spec/moneta/proxies/transformer/transformer_marshal_uuencode_spec.rb +0 -19
- data/spec/moneta/proxies/transformer/transformer_msgpack_spec.rb +0 -19
- data/spec/moneta/proxies/transformer/transformer_ox_spec.rb +0 -19
- data/spec/moneta/proxies/transformer/transformer_php_spec.rb +0 -19
- data/spec/moneta/proxies/transformer/transformer_quicklz_spec.rb +0 -19
- data/spec/moneta/proxies/transformer/transformer_snappy_spec.rb +0 -19
- data/spec/moneta/proxies/transformer/transformer_tnet_spec.rb +0 -19
- data/spec/moneta/proxies/transformer/transformer_value_marshal_spec.rb +0 -19
- data/spec/moneta/proxies/transformer/transformer_value_yaml_spec.rb +0 -19
- data/spec/moneta/proxies/transformer/transformer_yaml_spec.rb +0 -19
- data/spec/moneta/proxies/transformer/transformer_zlib_spec.rb +0 -19
- data/spec/moneta/proxies/weak_create/weak_create_spec.rb +0 -21
- data/spec/moneta/proxies/weak_each_key/weak_each_key_spec.rb +0 -22
- data/spec/moneta/proxies/weak_increment/weak_increment_spec.rb +0 -21
- data/spec/moneta/semaphore_spec.rb +0 -68
- data/spec/moneta/stack_file_memory_spec.rb +0 -15
- data/spec/moneta/stack_memory_file_spec.rb +0 -13
- data/spec/rack/cache_moneta_spec.rb +0 -355
- data/spec/rack/moneta_cookies_spec.rb +0 -83
- data/spec/rack/moneta_store_spec.rb +0 -83
- data/spec/rack/session_moneta_spec.rb +0 -350
- data/spec/restserver.rb +0 -44
- data/test/action_dispatch/fixtures/session_autoload_test/foo.rb +0 -10
- data/test/action_dispatch/session_moneta_store_test.rb +0 -204
@@ -1,83 +0,0 @@
|
|
1
|
-
require 'helper'
|
2
|
-
require 'rack/mock'
|
3
|
-
require 'rack/moneta_store'
|
4
|
-
|
5
|
-
describe Rack::MonetaStore do
|
6
|
-
def config(store_arg = nil, options = nil, &block)
|
7
|
-
@store_arg = store_arg
|
8
|
-
@options = options
|
9
|
-
@block = block
|
10
|
-
end
|
11
|
-
|
12
|
-
def app(&block)
|
13
|
-
@app_block ||= block
|
14
|
-
end
|
15
|
-
|
16
|
-
def middleware
|
17
|
-
@middleware ||= Rack::MonetaStore.new(lambda do |env|
|
18
|
-
@store = env['rack.moneta_store']
|
19
|
-
app.call(env) if app
|
20
|
-
[200,{},[]]
|
21
|
-
end, @store_arg, @options || {}, &@block)
|
22
|
-
end
|
23
|
-
|
24
|
-
def backend
|
25
|
-
@backend ||= Rack::MockRequest.new(middleware)
|
26
|
-
end
|
27
|
-
|
28
|
-
def get(&block)
|
29
|
-
app(&block)
|
30
|
-
@response = backend.get('/')
|
31
|
-
end
|
32
|
-
|
33
|
-
def uncached_store
|
34
|
-
middleware.instance_variable_get(:@store)
|
35
|
-
end
|
36
|
-
|
37
|
-
it 'should be able to get a key without caching' do
|
38
|
-
config :Memory
|
39
|
-
uncached_store['key'] = 'value'
|
40
|
-
get do
|
41
|
-
expect(@store['key']).to eql('value')
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
it 'should be able to get a key with caching' do
|
46
|
-
config :Memory, :cache => true
|
47
|
-
uncached_store['key'] = 'value'
|
48
|
-
get do
|
49
|
-
expect(@store['key']).to eql('value')
|
50
|
-
expect(@store.adapter).to equal(uncached_store)
|
51
|
-
expect(@store.cache['key']).to eql('value')
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
it 'should be able to set a key' do
|
56
|
-
config :Memory
|
57
|
-
get do
|
58
|
-
@store['key'] = 'value'
|
59
|
-
end
|
60
|
-
expect( @store['key'] ).to eql('value')
|
61
|
-
expect(uncached_store['key']).to eql('value')
|
62
|
-
end
|
63
|
-
|
64
|
-
it 'should be able to get a remove a key' do
|
65
|
-
config :Memory
|
66
|
-
uncached_store['key'] = 'value'
|
67
|
-
get do
|
68
|
-
expect(@store.delete('key')).to eql('value')
|
69
|
-
end
|
70
|
-
expect(uncached_store.key?('key')).to be false
|
71
|
-
end
|
72
|
-
|
73
|
-
it 'should accept a config block' do
|
74
|
-
config do
|
75
|
-
use :Transformer, :key => :prefix, :prefix => 'moneta.'
|
76
|
-
adapter :Memory
|
77
|
-
end
|
78
|
-
uncached_store['key'] = 'value'
|
79
|
-
get do
|
80
|
-
expect(@store['key']).to eql('value')
|
81
|
-
end
|
82
|
-
end
|
83
|
-
end
|
@@ -1,350 +0,0 @@
|
|
1
|
-
require 'rack/session/moneta'
|
2
|
-
require 'rack/lint'
|
3
|
-
require 'rack/mock'
|
4
|
-
require 'thread'
|
5
|
-
|
6
|
-
describe Rack::Session::Moneta do
|
7
|
-
use_timecop
|
8
|
-
|
9
|
-
let(:session_key) { Rack::Session::Moneta::DEFAULT_OPTIONS[:key] }
|
10
|
-
let(:session_match) { /#{session_key}=([0-9a-fA-F]+);/ }
|
11
|
-
|
12
|
-
let :incrementor_proc do
|
13
|
-
lambda do |env|
|
14
|
-
env["rack.session"]["counter"] ||= 0
|
15
|
-
env["rack.session"]["counter"] += 1
|
16
|
-
Rack::Response.new(env["rack.session"].inspect).to_a
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
let :drop_session do
|
21
|
-
Rack::Lint.new(proc do |env|
|
22
|
-
env['rack.session.options'][:drop] = true
|
23
|
-
incrementor_proc.call(env)
|
24
|
-
end)
|
25
|
-
end
|
26
|
-
|
27
|
-
let :renew_session do
|
28
|
-
Rack::Lint.new(proc do |env|
|
29
|
-
env['rack.session.options'][:renew] = true
|
30
|
-
incrementor_proc.call(env)
|
31
|
-
end)
|
32
|
-
end
|
33
|
-
|
34
|
-
let :defer_session do
|
35
|
-
Rack::Lint.new(proc do |env|
|
36
|
-
env['rack.session.options'][:defer] = true
|
37
|
-
incrementor_proc.call(env)
|
38
|
-
end)
|
39
|
-
end
|
40
|
-
|
41
|
-
let :skip_session do
|
42
|
-
Rack::Lint.new(proc do |env|
|
43
|
-
env['rack.session.options'][:skip] = true
|
44
|
-
incrementor_proc.call(env)
|
45
|
-
end)
|
46
|
-
end
|
47
|
-
|
48
|
-
let :incrementor do
|
49
|
-
Rack::Lint.new(incrementor_proc)
|
50
|
-
end
|
51
|
-
|
52
|
-
it 'supports different constructors' do
|
53
|
-
Rack::Session::Moneta.new(incrementor, :store => :Memory)
|
54
|
-
Rack::Session::Moneta.new(incrementor, :store => Moneta.new(:Memory, :expires => true))
|
55
|
-
Rack::Session::Moneta.new(incrementor) do
|
56
|
-
use :Expires
|
57
|
-
adapter :Memory
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
it "creates a new cookie" do
|
62
|
-
pool = Rack::Session::Moneta.new(incrementor, :store => :Memory)
|
63
|
-
res = Rack::MockRequest.new(pool).get("/")
|
64
|
-
res["Set-Cookie"].should include("#{session_key}=")
|
65
|
-
res.body.should == '{"counter"=>1}'
|
66
|
-
end
|
67
|
-
|
68
|
-
it "determines session from a cookie" do
|
69
|
-
pool = Rack::Session::Moneta.new(incrementor, :store => :Memory)
|
70
|
-
req = Rack::MockRequest.new(pool)
|
71
|
-
res = req.get("/")
|
72
|
-
cookie = res["Set-Cookie"]
|
73
|
-
req.get("/", "HTTP_COOKIE" => cookie).
|
74
|
-
body.should == '{"counter"=>2}'
|
75
|
-
req.get("/", "HTTP_COOKIE" => cookie).
|
76
|
-
body.should == '{"counter"=>3}'
|
77
|
-
end
|
78
|
-
|
79
|
-
it "determines session only from a cookie by default" do
|
80
|
-
pool = Rack::Session::Moneta.new(incrementor, :store => :Memory)
|
81
|
-
req = Rack::MockRequest.new(pool)
|
82
|
-
res = req.get("/")
|
83
|
-
sid = res["Set-Cookie"][session_match, 1]
|
84
|
-
req.get("/?rack.session=#{sid}").
|
85
|
-
body.should == '{"counter"=>1}'
|
86
|
-
req.get("/?rack.session=#{sid}").
|
87
|
-
body.should == '{"counter"=>1}'
|
88
|
-
end
|
89
|
-
|
90
|
-
it "determines session from params" do
|
91
|
-
pool = Rack::Session::Moneta.new(incrementor, :cookie_only => false, :store => :Memory)
|
92
|
-
req = Rack::MockRequest.new(pool)
|
93
|
-
res = req.get("/")
|
94
|
-
sid = res["Set-Cookie"][session_match, 1]
|
95
|
-
req.get("/?rack.session=#{sid}").
|
96
|
-
body.should == '{"counter"=>2}'
|
97
|
-
req.get("/?rack.session=#{sid}").
|
98
|
-
body.should == '{"counter"=>3}'
|
99
|
-
end
|
100
|
-
|
101
|
-
it "survives nonexistant cookies" do
|
102
|
-
bad_cookie = "rack.session=blarghfasel"
|
103
|
-
pool = Rack::Session::Moneta.new(incrementor, :store => :Memory)
|
104
|
-
res = Rack::MockRequest.new(pool).
|
105
|
-
get("/", "HTTP_COOKIE" => bad_cookie)
|
106
|
-
res.body.should == '{"counter"=>1}'
|
107
|
-
cookie = res["Set-Cookie"][session_match]
|
108
|
-
cookie.should_not match(/#{bad_cookie}/)
|
109
|
-
end
|
110
|
-
|
111
|
-
it "maintains freshness" do
|
112
|
-
pool = Rack::Session::Moneta.new(incrementor, :expire_after => 3, :store => :Memory)
|
113
|
-
res = Rack::MockRequest.new(pool).get('/')
|
114
|
-
res.body.should include '"counter"=>1'
|
115
|
-
cookie = res["Set-Cookie"]
|
116
|
-
res = Rack::MockRequest.new(pool).get('/', "HTTP_COOKIE" => cookie)
|
117
|
-
res["Set-Cookie"].should == cookie
|
118
|
-
res.body.should include '"counter"=>2'
|
119
|
-
advance 4
|
120
|
-
res = Rack::MockRequest.new(pool).get('/', "HTTP_COOKIE" => cookie)
|
121
|
-
res["Set-Cookie"].should_not == cookie
|
122
|
-
res.body.should include '"counter"=>1'
|
123
|
-
end
|
124
|
-
|
125
|
-
it "does not send the same session id if it did not change" do
|
126
|
-
pool = Rack::Session::Moneta.new(incrementor, :store => :Memory)
|
127
|
-
req = Rack::MockRequest.new(pool)
|
128
|
-
|
129
|
-
res0 = req.get("/")
|
130
|
-
cookie = res0["Set-Cookie"][session_match]
|
131
|
-
res0.body.should == '{"counter"=>1}'
|
132
|
-
|
133
|
-
res1 = req.get("/", "HTTP_COOKIE" => cookie)
|
134
|
-
res1["Set-Cookie"].should be_nil
|
135
|
-
res1.body.should == '{"counter"=>2}'
|
136
|
-
|
137
|
-
res2 = req.get("/", "HTTP_COOKIE" => cookie)
|
138
|
-
res2["Set-Cookie"].should be_nil
|
139
|
-
res2.body.should == '{"counter"=>3}'
|
140
|
-
end
|
141
|
-
|
142
|
-
it "deletes cookies with :drop option" do
|
143
|
-
pool = Rack::Session::Moneta.new(incrementor, :store => :Memory)
|
144
|
-
req = Rack::MockRequest.new(pool)
|
145
|
-
drop = Rack::Utils::Context.new(pool, drop_session)
|
146
|
-
dreq = Rack::MockRequest.new(drop)
|
147
|
-
|
148
|
-
res1 = req.get("/")
|
149
|
-
session = (cookie = res1["Set-Cookie"])[session_match]
|
150
|
-
res1.body.should == '{"counter"=>1}'
|
151
|
-
|
152
|
-
res2 = dreq.get("/", "HTTP_COOKIE" => cookie)
|
153
|
-
res2["Set-Cookie"].should == nil
|
154
|
-
res2.body.should == '{"counter"=>2}'
|
155
|
-
|
156
|
-
res3 = req.get("/", "HTTP_COOKIE" => cookie)
|
157
|
-
res3["Set-Cookie"][session_match].should_not == session
|
158
|
-
res3.body.should == '{"counter"=>1}'
|
159
|
-
end
|
160
|
-
|
161
|
-
it "provides new session id with :renew option" do
|
162
|
-
pool = Rack::Session::Moneta.new(incrementor, :store => :Memory)
|
163
|
-
req = Rack::MockRequest.new(pool)
|
164
|
-
renew = Rack::Utils::Context.new(pool, renew_session)
|
165
|
-
rreq = Rack::MockRequest.new(renew)
|
166
|
-
|
167
|
-
res1 = req.get("/")
|
168
|
-
session = (cookie = res1["Set-Cookie"])[session_match]
|
169
|
-
res1.body.should == '{"counter"=>1}'
|
170
|
-
|
171
|
-
res2 = rreq.get("/", "HTTP_COOKIE" => cookie)
|
172
|
-
new_cookie = res2["Set-Cookie"]
|
173
|
-
new_session = new_cookie[session_match]
|
174
|
-
new_session.should_not == session
|
175
|
-
res2.body.should == '{"counter"=>2}'
|
176
|
-
|
177
|
-
res3 = req.get("/", "HTTP_COOKIE" => new_cookie)
|
178
|
-
res3.body.should == '{"counter"=>3}'
|
179
|
-
|
180
|
-
# Old cookie was deleted
|
181
|
-
res4 = req.get("/", "HTTP_COOKIE" => cookie)
|
182
|
-
res4.body.should == '{"counter"=>1}'
|
183
|
-
end
|
184
|
-
|
185
|
-
it "omits cookie with :defer option but still updates the state" do
|
186
|
-
pool = Rack::Session::Moneta.new(incrementor, :store => :Memory)
|
187
|
-
count = Rack::Utils::Context.new(pool, incrementor)
|
188
|
-
defer = Rack::Utils::Context.new(pool, defer_session)
|
189
|
-
dreq = Rack::MockRequest.new(defer)
|
190
|
-
creq = Rack::MockRequest.new(count)
|
191
|
-
|
192
|
-
res0 = dreq.get("/")
|
193
|
-
res0["Set-Cookie"].should == nil
|
194
|
-
res0.body.should == '{"counter"=>1}'
|
195
|
-
|
196
|
-
res0 = creq.get("/")
|
197
|
-
res1 = dreq.get("/", "HTTP_COOKIE" => res0["Set-Cookie"])
|
198
|
-
res1.body.should == '{"counter"=>2}'
|
199
|
-
res2 = dreq.get("/", "HTTP_COOKIE" => res0["Set-Cookie"])
|
200
|
-
res2.body.should == '{"counter"=>3}'
|
201
|
-
end
|
202
|
-
|
203
|
-
it "omits cookie and state update with :skip option" do
|
204
|
-
pool = Rack::Session::Moneta.new(incrementor, :store => :Memory)
|
205
|
-
count = Rack::Utils::Context.new(pool, incrementor)
|
206
|
-
skip = Rack::Utils::Context.new(pool, skip_session)
|
207
|
-
sreq = Rack::MockRequest.new(skip)
|
208
|
-
creq = Rack::MockRequest.new(count)
|
209
|
-
|
210
|
-
res0 = sreq.get("/")
|
211
|
-
res0["Set-Cookie"].should == nil
|
212
|
-
res0.body.should == '{"counter"=>1}'
|
213
|
-
|
214
|
-
res0 = creq.get("/")
|
215
|
-
res1 = sreq.get("/", "HTTP_COOKIE" => res0["Set-Cookie"])
|
216
|
-
res1.body.should == '{"counter"=>2}'
|
217
|
-
res2 = sreq.get("/", "HTTP_COOKIE" => res0["Set-Cookie"])
|
218
|
-
res2.body.should == '{"counter"=>2}'
|
219
|
-
end
|
220
|
-
|
221
|
-
it "updates deep hashes correctly" do
|
222
|
-
hash_check = proc do |env|
|
223
|
-
session = env['rack.session']
|
224
|
-
unless session.include? 'test'
|
225
|
-
session.update :a => :b, :c => { :d => :e },
|
226
|
-
:f => { :g => { :h => :i} }, 'test' => true
|
227
|
-
else
|
228
|
-
session[:f][:g][:h] = :j
|
229
|
-
end
|
230
|
-
[200, {}, [session.inspect]]
|
231
|
-
end
|
232
|
-
pool = Rack::Session::Moneta.new(hash_check, :store => :Memory)
|
233
|
-
req = Rack::MockRequest.new(pool)
|
234
|
-
|
235
|
-
res0 = req.get("/")
|
236
|
-
session_id = (cookie = res0["Set-Cookie"])[session_match, 1]
|
237
|
-
ses0 = pool.pool[session_id]
|
238
|
-
|
239
|
-
req.get("/", "HTTP_COOKIE" => cookie)
|
240
|
-
ses1 = pool.pool[session_id]
|
241
|
-
|
242
|
-
ses1.should_not == ses0
|
243
|
-
end
|
244
|
-
|
245
|
-
# anyone know how to do this better?
|
246
|
-
it "cleanly merges sessions when multithreaded" do
|
247
|
-
unless $DEBUG
|
248
|
-
1.should == 1 # fake assertion to appease the mighty bacon
|
249
|
-
next
|
250
|
-
end
|
251
|
-
warn 'Running multithread test for Session::Memcache'
|
252
|
-
pool = Rack::Session::Moneta.new(incrementor, :store => :Memory)
|
253
|
-
req = Rack::MockRequest.new(pool)
|
254
|
-
|
255
|
-
res = req.get('/')
|
256
|
-
res.body.should == '{"counter"=>1}'
|
257
|
-
cookie = res["Set-Cookie"]
|
258
|
-
session_id = cookie[session_match, 1]
|
259
|
-
|
260
|
-
delta_incrementor = lambda do |env|
|
261
|
-
# emulate disconjoinment of threading
|
262
|
-
env['rack.session'] = env['rack.session'].dup
|
263
|
-
Thread.stop
|
264
|
-
env['rack.session'][(Time.now.usec*rand).to_i] = true
|
265
|
-
incrementor.call(env)
|
266
|
-
end
|
267
|
-
tses = Rack::Utils::Context.new pool, delta_incrementor
|
268
|
-
treq = Rack::MockRequest.new(tses)
|
269
|
-
tnum = rand(7).to_i+5
|
270
|
-
r = Array.new(tnum) do
|
271
|
-
Thread.new(treq) do |run|
|
272
|
-
run.get('/', "HTTP_COOKIE" => cookie, 'rack.multithread' => true)
|
273
|
-
end
|
274
|
-
end.reverse.map{|t| t.run.join.value }
|
275
|
-
r.each do |request|
|
276
|
-
request['Set-Cookie'].should == cookie
|
277
|
-
request.body.should include '"counter"=>2'
|
278
|
-
end
|
279
|
-
|
280
|
-
session = pool.pool[session_id]
|
281
|
-
session.size.should == tnum+1 # counter
|
282
|
-
session['counter'].should == 2 # meeeh
|
283
|
-
|
284
|
-
tnum = rand(7).to_i+5
|
285
|
-
r = Array.new(tnum) do |i|
|
286
|
-
app = Rack::Utils::Context.new pool, time_delta
|
287
|
-
req = Rack::MockRequest.new app
|
288
|
-
Thread.new(req) do |run|
|
289
|
-
run.get('/', "HTTP_COOKIE" => cookie, 'rack.multithread' => true)
|
290
|
-
end
|
291
|
-
end.reverse.map{|t| t.run.join.value }
|
292
|
-
r.each do |request|
|
293
|
-
request['Set-Cookie'].should == cookie
|
294
|
-
request.body.should include '"counter"=>3'
|
295
|
-
end
|
296
|
-
|
297
|
-
session = pool.pool[session_id]
|
298
|
-
session.size.should.be tnum+1
|
299
|
-
session['counter'].should.be 3
|
300
|
-
|
301
|
-
drop_counter = proc do |env|
|
302
|
-
env['rack.session'].delete 'counter'
|
303
|
-
env['rack.session']['foo'] = 'bar'
|
304
|
-
[200, {'Content-Type'=>'text/plain'}, env['rack.session'].inspect]
|
305
|
-
end
|
306
|
-
tses = Rack::Utils::Context.new pool, drop_counter
|
307
|
-
treq = Rack::MockRequest.new(tses)
|
308
|
-
tnum = rand(7).to_i+5
|
309
|
-
r = Array.new(tnum) do
|
310
|
-
Thread.new(treq) do |run|
|
311
|
-
run.get('/', "HTTP_COOKIE" => cookie, 'rack.multithread' => true)
|
312
|
-
end
|
313
|
-
end.reverse.map{|t| t.run.join.value }
|
314
|
-
r.each do |request|
|
315
|
-
request['Set-Cookie'].should == cookie
|
316
|
-
request.body.should include '"foo"=>"bar"'
|
317
|
-
end
|
318
|
-
|
319
|
-
session = pool.pool[session_id]
|
320
|
-
session.size.should.be r.size+1
|
321
|
-
session['counter'].should.be.nil?
|
322
|
-
session['foo'].should == 'bar'
|
323
|
-
end
|
324
|
-
|
325
|
-
it "does not suffer a race-condition in get_session" do
|
326
|
-
# By lying about existence of a key this proxy tricks the session
|
327
|
-
# to overwrite values when it wouldn't normally.
|
328
|
-
broken_key = Class.new(::Moneta::Proxy) do
|
329
|
-
def key?(key, *args)
|
330
|
-
false
|
331
|
-
end
|
332
|
-
end
|
333
|
-
|
334
|
-
pool = Rack::Session::Moneta.new(incrementor) do
|
335
|
-
use broken_key
|
336
|
-
adapter :Memory
|
337
|
-
end
|
338
|
-
|
339
|
-
# Override the SID generator with one that returns predefined values.
|
340
|
-
def pool.generate_sid(*)
|
341
|
-
@fake_sid ||= %w(deadbeef deadbeef caffee)
|
342
|
-
@fake_sid.shift || raise('Empty!')
|
343
|
-
end
|
344
|
-
|
345
|
-
req = Rack::MockRequest.new(pool)
|
346
|
-
req.get('/')
|
347
|
-
res = req.get('/')
|
348
|
-
res['Set-Cookie'].should =~ /\Arack.session=caffee; /
|
349
|
-
end
|
350
|
-
end
|
data/spec/restserver.rb
DELETED
@@ -1,44 +0,0 @@
|
|
1
|
-
require 'faraday'
|
2
|
-
require 'rack'
|
3
|
-
require 'rack/moneta_rest'
|
4
|
-
require 'webrick'
|
5
|
-
|
6
|
-
class MonetaRestServerShutdown < StandardError; end
|
7
|
-
|
8
|
-
def start_restserver(port)
|
9
|
-
server = Rack::Server.new(
|
10
|
-
:app => Rack::Builder.app do
|
11
|
-
use Rack::Lint
|
12
|
-
map '/moneta' do
|
13
|
-
run Rack::MonetaRest.new(:Memory)
|
14
|
-
end
|
15
|
-
end,
|
16
|
-
:environment => 'none',
|
17
|
-
:server => :webrick,
|
18
|
-
:Port => port,
|
19
|
-
:AccessLog => [],
|
20
|
-
:Logger => WEBrick::Log.new($stderr, WEBrick::BasicLog::ERROR)
|
21
|
-
)
|
22
|
-
|
23
|
-
Thread.start { server.start }
|
24
|
-
|
25
|
-
begin
|
26
|
-
Faraday.get("http://127.0.0.1:#{port}")
|
27
|
-
rescue Faraday::ConnectionFailed
|
28
|
-
tries ||= 5
|
29
|
-
tries -= 1
|
30
|
-
if tries > 0
|
31
|
-
sleep 0.1
|
32
|
-
retry
|
33
|
-
else
|
34
|
-
raise
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
server
|
39
|
-
end
|
40
|
-
|
41
|
-
def stop_restserver(server)
|
42
|
-
server.server.shutdown
|
43
|
-
end
|
44
|
-
|
@@ -1,204 +0,0 @@
|
|
1
|
-
require 'action_dispatch'
|
2
|
-
require 'action_controller'
|
3
|
-
require 'action_dispatch/middleware/session/moneta_store'
|
4
|
-
require 'minitest/autorun'
|
5
|
-
|
6
|
-
class MonetaStoreTest < ActionDispatch::IntegrationTest
|
7
|
-
class TestController < ActionController::Base
|
8
|
-
def no_session_access
|
9
|
-
head :ok
|
10
|
-
end
|
11
|
-
|
12
|
-
def set_session_value
|
13
|
-
session[:foo] = "bar"
|
14
|
-
head :ok
|
15
|
-
end
|
16
|
-
|
17
|
-
def set_serialized_session_value
|
18
|
-
session[:foo] = SessionAutoloadTest::Foo.new
|
19
|
-
head :ok
|
20
|
-
end
|
21
|
-
|
22
|
-
def get_session_value
|
23
|
-
render plain: "foo: #{session[:foo].inspect}"
|
24
|
-
end
|
25
|
-
|
26
|
-
def get_session_id
|
27
|
-
render plain: request.cookies['_session_id'].to_s
|
28
|
-
end
|
29
|
-
|
30
|
-
def call_reset_session
|
31
|
-
session[:bar]
|
32
|
-
reset_session
|
33
|
-
session[:bar] = "baz"
|
34
|
-
head :ok
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
def test_setting_and_getting_session_value
|
39
|
-
with_test_route_set do
|
40
|
-
get '/set_session_value'
|
41
|
-
assert_response :success
|
42
|
-
assert cookies['_session_id']
|
43
|
-
|
44
|
-
get '/get_session_value'
|
45
|
-
assert_response :success
|
46
|
-
assert_equal 'foo: "bar"', response.body
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
def test_getting_nil_session_value
|
51
|
-
with_test_route_set do
|
52
|
-
get '/get_session_value'
|
53
|
-
assert_response :success
|
54
|
-
assert_equal 'foo: nil', response.body
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
def test_getting_session_value_after_session_reset
|
59
|
-
with_test_route_set do
|
60
|
-
get '/set_session_value'
|
61
|
-
assert_response :success
|
62
|
-
assert cookies['_session_id']
|
63
|
-
session_cookie = cookies.to_hash['_session_id']
|
64
|
-
|
65
|
-
get '/call_reset_session'
|
66
|
-
assert_response :success
|
67
|
-
assert_not_equal [], headers['Set-Cookie']
|
68
|
-
|
69
|
-
cookies.merge(session_cookie) # replace our new session_id with our old, pre-reset session_id
|
70
|
-
|
71
|
-
get '/get_session_value'
|
72
|
-
assert_response :success
|
73
|
-
assert_equal 'foo: nil', response.body, "data for this session should have been obliterated from cache"
|
74
|
-
end
|
75
|
-
end
|
76
|
-
|
77
|
-
def test_getting_from_nonexistent_session
|
78
|
-
with_test_route_set do
|
79
|
-
get '/get_session_value'
|
80
|
-
assert_response :success
|
81
|
-
assert_equal 'foo: nil', response.body
|
82
|
-
assert_nil cookies['_session_id'], "should only create session on write, not read"
|
83
|
-
end
|
84
|
-
end
|
85
|
-
|
86
|
-
def test_setting_session_value_after_session_reset
|
87
|
-
with_test_route_set do
|
88
|
-
get '/set_session_value'
|
89
|
-
assert_response :success
|
90
|
-
assert cookies['_session_id']
|
91
|
-
session_id = cookies['_session_id']
|
92
|
-
|
93
|
-
get '/call_reset_session'
|
94
|
-
assert_response :success
|
95
|
-
assert_not_equal [], headers['Set-Cookie']
|
96
|
-
|
97
|
-
get '/get_session_value'
|
98
|
-
assert_response :success
|
99
|
-
assert_equal 'foo: nil', response.body
|
100
|
-
|
101
|
-
get '/get_session_id'
|
102
|
-
assert_response :success
|
103
|
-
assert_not_equal session_id, response.body
|
104
|
-
end
|
105
|
-
end
|
106
|
-
|
107
|
-
def test_getting_session_id
|
108
|
-
with_test_route_set do
|
109
|
-
get '/set_session_value'
|
110
|
-
assert_response :success
|
111
|
-
assert cookies['_session_id']
|
112
|
-
session_id = cookies['_session_id']
|
113
|
-
|
114
|
-
get '/get_session_id'
|
115
|
-
assert_response :success
|
116
|
-
assert_equal session_id, response.body, "should be able to read session id without accessing the session hash"
|
117
|
-
end
|
118
|
-
end
|
119
|
-
|
120
|
-
def test_deserializes_unloaded_class
|
121
|
-
with_test_route_set do
|
122
|
-
with_autoload_path do
|
123
|
-
get '/set_serialized_session_value'
|
124
|
-
assert_response :success
|
125
|
-
assert cookies['_session_id']
|
126
|
-
end
|
127
|
-
with_autoload_path do
|
128
|
-
get '/get_session_id'
|
129
|
-
assert_response :success
|
130
|
-
end
|
131
|
-
with_autoload_path do
|
132
|
-
get '/get_session_value'
|
133
|
-
assert_response :success
|
134
|
-
assert_equal 'foo: #<SessionAutoloadTest::Foo bar:"baz">', response.body, "should auto-load unloaded class"
|
135
|
-
end
|
136
|
-
end
|
137
|
-
end
|
138
|
-
|
139
|
-
def test_doesnt_write_session_cookie_if_session_id_is_already_exists
|
140
|
-
with_test_route_set do
|
141
|
-
get '/set_session_value'
|
142
|
-
assert_response :success
|
143
|
-
assert cookies['_session_id']
|
144
|
-
|
145
|
-
get '/get_session_value'
|
146
|
-
assert_response :success
|
147
|
-
assert_nil headers['Set-Cookie'], "should not resend the cookie again if session_id cookie is already exists"
|
148
|
-
end
|
149
|
-
end
|
150
|
-
|
151
|
-
def test_prevents_session_fixation
|
152
|
-
with_test_route_set do
|
153
|
-
get '/get_session_value'
|
154
|
-
assert_response :success
|
155
|
-
assert_equal 'foo: nil', response.body
|
156
|
-
session_id = cookies['_session_id']
|
157
|
-
|
158
|
-
reset!
|
159
|
-
|
160
|
-
get "/set_session_value?_session_id=#{session_id}"
|
161
|
-
assert_response :success
|
162
|
-
assert_not_equal session_id, cookies['_session_id']
|
163
|
-
end
|
164
|
-
end
|
165
|
-
|
166
|
-
private
|
167
|
-
|
168
|
-
def with_autoload_path
|
169
|
-
path = File.join(File.dirname(__FILE__), 'fixtures')
|
170
|
-
if ActiveSupport::Dependencies.autoload_paths.include?(path)
|
171
|
-
yield
|
172
|
-
else
|
173
|
-
begin
|
174
|
-
ActiveSupport::Dependencies.autoload_paths << path
|
175
|
-
yield
|
176
|
-
ensure
|
177
|
-
ActiveSupport::Dependencies.autoload_paths.reject! { |p| p == path }
|
178
|
-
ActiveSupport::Dependencies.clear
|
179
|
-
end
|
180
|
-
end
|
181
|
-
end
|
182
|
-
|
183
|
-
def with_test_route_set
|
184
|
-
with_routing do |set|
|
185
|
-
set.draw do
|
186
|
-
scope module: "moneta_store_test" do
|
187
|
-
controller "test" do
|
188
|
-
get 'set_session_value'
|
189
|
-
get 'get_session_value'
|
190
|
-
get 'call_reset_session'
|
191
|
-
get 'get_session_id'
|
192
|
-
get 'set_serialized_session_value'
|
193
|
-
end
|
194
|
-
end
|
195
|
-
end
|
196
|
-
|
197
|
-
@app = ActionDispatch::MiddlewareStack.new do |middleware|
|
198
|
-
middleware.use ActionDispatch::Session::MonetaStore, key: '_session_id', store: :Memory
|
199
|
-
end.build(set)
|
200
|
-
|
201
|
-
yield
|
202
|
-
end
|
203
|
-
end
|
204
|
-
end
|