dalli 2.7.2 → 3.2.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (60) hide show
  1. checksums.yaml +5 -5
  2. data/{History.md → CHANGELOG.md} +231 -0
  3. data/Gemfile +14 -5
  4. data/LICENSE +1 -1
  5. data/README.md +33 -201
  6. data/lib/dalli/cas/client.rb +2 -57
  7. data/lib/dalli/client.rb +259 -254
  8. data/lib/dalli/compressor.rb +13 -2
  9. data/lib/dalli/key_manager.rb +121 -0
  10. data/lib/dalli/options.rb +7 -7
  11. data/lib/dalli/pid_cache.rb +40 -0
  12. data/lib/dalli/pipelined_getter.rb +177 -0
  13. data/lib/dalli/protocol/base.rb +239 -0
  14. data/lib/dalli/protocol/binary/request_formatter.rb +117 -0
  15. data/lib/dalli/protocol/binary/response_header.rb +36 -0
  16. data/lib/dalli/protocol/binary/response_processor.rb +239 -0
  17. data/lib/dalli/protocol/binary/sasl_authentication.rb +60 -0
  18. data/lib/dalli/protocol/binary.rb +173 -0
  19. data/lib/dalli/protocol/connection_manager.rb +254 -0
  20. data/lib/dalli/protocol/meta/key_regularizer.rb +31 -0
  21. data/lib/dalli/protocol/meta/request_formatter.rb +121 -0
  22. data/lib/dalli/protocol/meta/response_processor.rb +211 -0
  23. data/lib/dalli/protocol/meta.rb +178 -0
  24. data/lib/dalli/protocol/response_buffer.rb +54 -0
  25. data/lib/dalli/protocol/server_config_parser.rb +86 -0
  26. data/lib/dalli/protocol/ttl_sanitizer.rb +45 -0
  27. data/lib/dalli/protocol/value_compressor.rb +85 -0
  28. data/lib/dalli/protocol/value_marshaller.rb +59 -0
  29. data/lib/dalli/protocol/value_serializer.rb +91 -0
  30. data/lib/dalli/protocol.rb +8 -0
  31. data/lib/dalli/ring.rb +97 -86
  32. data/lib/dalli/server.rb +4 -694
  33. data/lib/dalli/servers_arg_normalizer.rb +54 -0
  34. data/lib/dalli/socket.rb +122 -80
  35. data/lib/dalli/version.rb +5 -1
  36. data/lib/dalli.rb +45 -14
  37. data/lib/rack/session/dalli.rb +162 -42
  38. metadata +40 -96
  39. data/Performance.md +0 -42
  40. data/Rakefile +0 -42
  41. data/dalli.gemspec +0 -29
  42. data/lib/action_dispatch/middleware/session/dalli_store.rb +0 -81
  43. data/lib/active_support/cache/dalli_store.rb +0 -363
  44. data/lib/dalli/railtie.rb +0 -7
  45. data/test/benchmark_test.rb +0 -242
  46. data/test/helper.rb +0 -55
  47. data/test/memcached_mock.rb +0 -121
  48. data/test/sasldb +0 -1
  49. data/test/test_active_support.rb +0 -439
  50. data/test/test_cas_client.rb +0 -107
  51. data/test/test_compressor.rb +0 -53
  52. data/test/test_dalli.rb +0 -625
  53. data/test/test_encoding.rb +0 -32
  54. data/test/test_failover.rb +0 -128
  55. data/test/test_network.rb +0 -54
  56. data/test/test_rack_session.rb +0 -341
  57. data/test/test_ring.rb +0 -85
  58. data/test/test_sasl.rb +0 -110
  59. data/test/test_serializer.rb +0 -30
  60. data/test/test_server.rb +0 -80
data/test/test_sasl.rb DELETED
@@ -1,110 +0,0 @@
1
- require 'helper'
2
-
3
- describe 'Sasl' do
4
-
5
- # https://github.com/seattlerb/minitest/issues/298
6
- def self.xit(msg, &block)
7
- end
8
-
9
- describe 'a server requiring authentication' do
10
- before do
11
- @server = mock()
12
- @server.stubs(:request).returns(true)
13
- @server.stubs(:weight).returns(1)
14
- @server.stubs(:hostname).returns("localhost")
15
- @server.stubs(:port).returns("19124")
16
- end
17
-
18
- describe 'without authentication credentials' do
19
- before do
20
- ENV['MEMCACHE_USERNAME'] = 'foo'
21
- ENV['MEMCACHE_PASSWORD'] = 'wrongpwd'
22
- end
23
-
24
- after do
25
- ENV['MEMCACHE_USERNAME'] = nil
26
- ENV['MEMCACHE_PASSWORD'] = nil
27
- end
28
-
29
- it 'provide one test that passes' do
30
- assert true
31
- end
32
-
33
- it 'gracefully handle authentication failures' do
34
- memcached(19124, '-S') do |dc|
35
- assert_error Dalli::DalliError, /32/ do
36
- dc.set('abc', 123)
37
- end
38
- end
39
- end
40
- end
41
-
42
- it 'fail SASL authentication with wrong options' do
43
- memcached(19124, '-S') do |dc|
44
- dc = Dalli::Client.new('localhost:19124', :username => 'foo', :password => 'wrongpwd')
45
- assert_error Dalli::DalliError, /32/ do
46
- dc.set('abc', 123)
47
- end
48
- end
49
- end
50
-
51
- # OSX: Create a SASL user for the memcached application like so:
52
- #
53
- # saslpasswd2 -a memcached -c testuser
54
- #
55
- # with password 'testtest'
56
- describe 'in an authenticated environment' do
57
- before do
58
- ENV['MEMCACHE_USERNAME'] = 'testuser'
59
- ENV['MEMCACHE_PASSWORD'] = 'testtest'
60
- end
61
-
62
- after do
63
- ENV['MEMCACHE_USERNAME'] = nil
64
- ENV['MEMCACHE_PASSWORD'] = nil
65
- end
66
-
67
- xit 'pass SASL authentication' do
68
- memcached(19124, '-S') do |dc|
69
- # I get "Dalli::DalliError: Error authenticating: 32" in OSX
70
- # but SASL works on Heroku servers. YMMV.
71
- assert_equal true, dc.set('abc', 123)
72
- assert_equal 123, dc.get('abc')
73
- results = dc.stats
74
- assert_equal 1, results.size
75
- assert_equal 38, results.values.first.size
76
- end
77
- end
78
- end
79
-
80
- xit 'pass SASL authentication with options' do
81
- memcached(19124, '-S') do |dc|
82
- dc = Dalli::Client.new('localhost:19124', :username => 'testuser', :password => 'testtest')
83
- # I get "Dalli::DalliError: Error authenticating: 32" in OSX
84
- # but SASL works on Heroku servers. YMMV.
85
- assert_equal true, dc.set('abc', 123)
86
- assert_equal 123, dc.get('abc')
87
- results = dc.stats
88
- assert_equal 1, results.size
89
- assert_equal 38, results.values.first.size
90
- end
91
- end
92
-
93
- it 'pass SASL as URI' do
94
- Dalli::Server.expects(:new).with("localhost:19124",
95
- :username => "testuser", :password => "testtest").returns(@server)
96
- dc = Dalli::Client.new('memcached://testuser:testtest@localhost:19124')
97
- dc.flush_all
98
- end
99
-
100
- it 'pass SASL as ring of URIs' do
101
- Dalli::Server.expects(:new).with("localhost:19124",
102
- :username => "testuser", :password => "testtest").returns(@server)
103
- Dalli::Server.expects(:new).with("otherhost:19125",
104
- :username => "testuser2", :password => "testtest2").returns(@server)
105
- dc = Dalli::Client.new(['memcached://testuser:testtest@localhost:19124',
106
- 'memcached://testuser2:testtest2@otherhost:19125'])
107
- dc.flush_all
108
- end
109
- end
110
- end
@@ -1,30 +0,0 @@
1
- # encoding: utf-8
2
- require 'helper'
3
- require 'json'
4
- require 'memcached_mock'
5
-
6
- describe 'Serializer' do
7
-
8
- it 'default to Marshal' do
9
- memcached_kill(29198) do |dc|
10
- memcache = Dalli::Client.new('127.0.0.1:29198')
11
- memcache.set 1,2
12
- assert_equal Marshal, memcache.instance_variable_get('@ring').servers.first.serializer
13
- end
14
- end
15
-
16
- it 'support a custom serializer' do
17
- memcached_kill(29198) do |dc|
18
- memcache = Dalli::Client.new('127.0.0.1:29198', :serializer => JSON)
19
- memcache.set 1,2
20
- begin
21
- assert_equal JSON, memcache.instance_variable_get('@ring').servers.first.serializer
22
-
23
- memcached(19128) do |newdc|
24
- assert newdc.set("json_test", {"foo" => "bar"})
25
- assert_equal({"foo" => "bar"}, newdc.get("json_test"))
26
- end
27
- end
28
- end
29
- end
30
- end
data/test/test_server.rb DELETED
@@ -1,80 +0,0 @@
1
- require 'helper'
2
-
3
- describe Dalli::Server do
4
- describe 'hostname parsing' do
5
- it 'handles no port or weight' do
6
- s = Dalli::Server.new('localhost')
7
- assert_equal 'localhost', s.hostname
8
- assert_equal 11211, s.port
9
- assert_equal 1, s.weight
10
- end
11
-
12
- it 'handles a port, but no weight' do
13
- s = Dalli::Server.new('localhost:11212')
14
- assert_equal 'localhost', s.hostname
15
- assert_equal 11212, s.port
16
- assert_equal 1, s.weight
17
- end
18
-
19
- it 'handles a port and a weight' do
20
- s = Dalli::Server.new('localhost:11212:2')
21
- assert_equal 'localhost', s.hostname
22
- assert_equal 11212, s.port
23
- assert_equal 2, s.weight
24
- end
25
-
26
- it 'handles ipv4 addresses' do
27
- s = Dalli::Server.new('127.0.0.1')
28
- assert_equal '127.0.0.1', s.hostname
29
- assert_equal 11211, s.port
30
- assert_equal 1, s.weight
31
- end
32
-
33
- it 'handles ipv6 addresses' do
34
- s = Dalli::Server.new('[::1]')
35
- assert_equal '::1', s.hostname
36
- assert_equal 11211, s.port
37
- assert_equal 1, s.weight
38
- end
39
-
40
- it 'handles ipv6 addresses with port' do
41
- s = Dalli::Server.new('[::1]:11212')
42
- assert_equal '::1', s.hostname
43
- assert_equal 11212, s.port
44
- assert_equal 1, s.weight
45
- end
46
-
47
- it 'handles ipv6 addresses with port and weight' do
48
- s = Dalli::Server.new('[::1]:11212:2')
49
- assert_equal '::1', s.hostname
50
- assert_equal 11212, s.port
51
- assert_equal 2, s.weight
52
- end
53
-
54
- it 'handles a FQDN' do
55
- s = Dalli::Server.new('my.fqdn.com')
56
- assert_equal 'my.fqdn.com', s.hostname
57
- assert_equal 11211, s.port
58
- assert_equal 1, s.weight
59
- end
60
-
61
- it 'handles a FQDN with port and weight' do
62
- s = Dalli::Server.new('my.fqdn.com:11212:2')
63
- assert_equal 'my.fqdn.com', s.hostname
64
- assert_equal 11212, s.port
65
- assert_equal 2, s.weight
66
- end
67
- end
68
-
69
- describe 'ttl translation' do
70
- it 'does not translate ttls under 30 days' do
71
- s = Dalli::Server.new('localhost')
72
- assert_equal s.send(:sanitize_ttl, 30*24*60*60), 30*24*60*60
73
- end
74
-
75
- it 'translates ttls over 30 days into timestamps' do
76
- s = Dalli::Server.new('localhost')
77
- assert_equal s.send(:sanitize_ttl, 30*24*60*60 + 1), Time.now.to_i + 30*24*60*60+1
78
- end
79
- end
80
- end