dalli 2.6.4 → 2.7.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of dalli might be problematic. Click here for more details.
- checksums.yaml +7 -0
- data/Gemfile +1 -0
- data/History.md +26 -2
- data/LICENSE +1 -1
- data/README.md +21 -9
- data/dalli.gemspec +1 -1
- data/lib/active_support/cache/dalli_store.rb +79 -19
- data/lib/dalli/cas/client.rb +58 -0
- data/lib/dalli/client.rb +148 -108
- data/lib/dalli/server.rb +45 -28
- data/lib/dalli/version.rb +1 -1
- data/test/benchmark_test.rb +1 -1
- data/test/helper.rb +15 -0
- data/test/memcached_mock.rb +11 -1
- data/test/sasldb +1 -0
- data/test/test_active_support.rb +47 -9
- data/test/test_cas_client.rb +107 -0
- data/test/test_dalli.rb +70 -22
- data/test/test_sasl.rb +4 -4
- metadata +18 -21
data/test/test_dalli.rb
CHANGED
@@ -99,11 +99,34 @@ describe 'Dalli' do
|
|
99
99
|
val2 = dc.get('a')
|
100
100
|
assert_equal val1, val2
|
101
101
|
|
102
|
-
|
102
|
+
assert op_addset_succeeds(dc.set('a', nil))
|
103
103
|
assert_nil dc.get('a')
|
104
104
|
end
|
105
105
|
end
|
106
106
|
|
107
|
+
it 'supports delete' do
|
108
|
+
memcached do |dc|
|
109
|
+
dc.set('some_key', 'some_value')
|
110
|
+
assert_equal 'some_value', dc.get('some_key')
|
111
|
+
|
112
|
+
dc.delete('some_key')
|
113
|
+
assert_nil dc.get('some_key')
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
it 'returns nil for nonexist key' do
|
118
|
+
memcached do |dc|
|
119
|
+
assert_equal nil, dc.get('notexist')
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
it 'allows "Not found" as value' do
|
124
|
+
memcached do |dc|
|
125
|
+
dc.set('key1', 'Not found')
|
126
|
+
assert_equal 'Not found', dc.get('key1')
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
107
130
|
it "support stats" do
|
108
131
|
memcached do |dc|
|
109
132
|
# make sure that get_hits would not equal 0
|
@@ -198,7 +221,7 @@ describe 'Dalli' do
|
|
198
221
|
assert_equal expected, value
|
199
222
|
mutated
|
200
223
|
end
|
201
|
-
|
224
|
+
assert op_cas_succeeds(resp)
|
202
225
|
|
203
226
|
resp = dc.get('cas_key')
|
204
227
|
assert_equal mutated, resp
|
@@ -215,8 +238,17 @@ describe 'Dalli' do
|
|
215
238
|
dc.set('a', 'foo')
|
216
239
|
dc.set('b', 123)
|
217
240
|
dc.set('c', %w(a b c))
|
241
|
+
# Invocation without block
|
218
242
|
resp = dc.get_multi(%w(a b c d e f))
|
219
|
-
|
243
|
+
expected_resp = { 'a' => 'foo', 'b' => 123, 'c' => %w(a b c) }
|
244
|
+
assert_equal(expected_resp, resp)
|
245
|
+
|
246
|
+
# Invocation with block
|
247
|
+
dc.get_multi(%w(a b c d e f)) do |k, v|
|
248
|
+
assert(expected_resp.has_key?(k) && expected_resp[k] == v)
|
249
|
+
expected_resp.delete(k)
|
250
|
+
end
|
251
|
+
assert expected_resp.empty?
|
220
252
|
|
221
253
|
# Perform a big multi-get with 1000 elements.
|
222
254
|
arr = []
|
@@ -237,7 +269,7 @@ describe 'Dalli' do
|
|
237
269
|
memcached do |client|
|
238
270
|
client.flush
|
239
271
|
|
240
|
-
|
272
|
+
assert op_addset_succeeds(client.set('fakecounter', 0, 0, :raw => true))
|
241
273
|
assert_equal 1, client.incr('fakecounter', 1)
|
242
274
|
assert_equal 2, client.incr('fakecounter', 1)
|
243
275
|
assert_equal 3, client.incr('fakecounter', 1)
|
@@ -253,7 +285,7 @@ describe 'Dalli' do
|
|
253
285
|
assert_equal 3, resp
|
254
286
|
|
255
287
|
resp = client.set('rawcounter', 10, 0, :raw => true)
|
256
|
-
|
288
|
+
assert op_cas_succeeds(resp)
|
257
289
|
|
258
290
|
resp = client.get('rawcounter', :raw => true)
|
259
291
|
assert_equal '10', resp
|
@@ -314,7 +346,7 @@ describe 'Dalli' do
|
|
314
346
|
it 'support the append and prepend operations' do
|
315
347
|
memcached do |dc|
|
316
348
|
dc.flush
|
317
|
-
|
349
|
+
assert op_addset_succeeds(dc.set('456', 'xyz', 0, :raw => true))
|
318
350
|
assert_equal true, dc.prepend('456', '0')
|
319
351
|
assert_equal true, dc.append('456', '9')
|
320
352
|
assert_equal '0xyz9', dc.get('456', :raw => true)
|
@@ -325,6 +357,16 @@ describe 'Dalli' do
|
|
325
357
|
end
|
326
358
|
end
|
327
359
|
|
360
|
+
it 'supports replace operation' do
|
361
|
+
memcached do |dc|
|
362
|
+
dc.flush
|
363
|
+
dc.set('key', 'value')
|
364
|
+
assert op_replace_succeeds(dc.replace('key', 'value2'))
|
365
|
+
|
366
|
+
assert_equal 'value2', dc.get('key')
|
367
|
+
end
|
368
|
+
end
|
369
|
+
|
328
370
|
it 'support touch operation' do
|
329
371
|
memcached do |dc|
|
330
372
|
begin
|
@@ -341,6 +383,16 @@ describe 'Dalli' do
|
|
341
383
|
end
|
342
384
|
end
|
343
385
|
|
386
|
+
it 'support version operation' do
|
387
|
+
memcached do |dc|
|
388
|
+
v = dc.version
|
389
|
+
servers = v.keys
|
390
|
+
assert(servers.any? do |s|
|
391
|
+
v[s] != nil
|
392
|
+
end, "version failed")
|
393
|
+
end
|
394
|
+
end
|
395
|
+
|
344
396
|
it 'allow TCP connections to be configured for keepalive' do
|
345
397
|
memcached(19122, '', :keepalive => true) do |dc|
|
346
398
|
dc.set(:a, 1)
|
@@ -361,20 +413,18 @@ describe 'Dalli' do
|
|
361
413
|
refute_nil resp
|
362
414
|
assert_equal [true, true], resp
|
363
415
|
|
364
|
-
|
416
|
+
assert op_addset_succeeds(dc.set(:foo, 'bar'))
|
365
417
|
assert_equal 'bar', dc.get(:foo)
|
366
418
|
|
367
419
|
resp = dc.get('123')
|
368
420
|
assert_equal nil, resp
|
369
421
|
|
370
|
-
|
371
|
-
assert_equal true, resp
|
422
|
+
assert op_addset_succeeds(dc.set('123', 'xyz'))
|
372
423
|
|
373
424
|
resp = dc.get('123')
|
374
425
|
assert_equal 'xyz', resp
|
375
426
|
|
376
|
-
|
377
|
-
assert_equal true, resp
|
427
|
+
assert op_addset_succeeds(dc.set('123', 'abc'))
|
378
428
|
|
379
429
|
dc.prepend('123', '0')
|
380
430
|
dc.append('123', '0')
|
@@ -388,8 +438,7 @@ describe 'Dalli' do
|
|
388
438
|
|
389
439
|
dc = Dalli::Client.new('localhost:19122')
|
390
440
|
|
391
|
-
|
392
|
-
assert_equal true, resp
|
441
|
+
assert op_addset_succeeds(dc.set('456', 'xyz', 0, :raw => true))
|
393
442
|
|
394
443
|
resp = dc.prepend '456', '0'
|
395
444
|
assert_equal true, resp
|
@@ -400,8 +449,7 @@ describe 'Dalli' do
|
|
400
449
|
resp = dc.get('456', :raw => true)
|
401
450
|
assert_equal '0xyz9', resp
|
402
451
|
|
403
|
-
|
404
|
-
assert_equal true, resp
|
452
|
+
assert op_addset_succeeds(dc.set('456', false))
|
405
453
|
|
406
454
|
resp = dc.get('456')
|
407
455
|
assert_equal false, resp
|
@@ -419,9 +467,9 @@ describe 'Dalli' do
|
|
419
467
|
workers = []
|
420
468
|
|
421
469
|
cache.set('f', 'zzz')
|
422
|
-
|
470
|
+
assert op_cas_succeeds((cache.cas('f') do |value|
|
423
471
|
value << 'z'
|
424
|
-
end)
|
472
|
+
end))
|
425
473
|
assert_equal 'zzzz', cache.get('f')
|
426
474
|
|
427
475
|
# Have a bunch of threads perform a bunch of operations at the same time.
|
@@ -469,11 +517,11 @@ describe 'Dalli' do
|
|
469
517
|
|
470
518
|
it 'truncate cache keys that are too long' do
|
471
519
|
memcached do
|
472
|
-
|
520
|
+
dc = Dalli::Client.new('localhost:19122', :namespace => 'some:namspace')
|
473
521
|
key = "this cache key is far too long so it must be hashed and truncated and stuff" * 10
|
474
522
|
value = "some value"
|
475
|
-
|
476
|
-
assert_equal value,
|
523
|
+
assert op_addset_succeeds(dc.set(key, value))
|
524
|
+
assert_equal value, dc.get(key)
|
477
525
|
end
|
478
526
|
end
|
479
527
|
|
@@ -518,7 +566,7 @@ describe 'Dalli' do
|
|
518
566
|
value = "1234567890"*100
|
519
567
|
1_000.times do |idx|
|
520
568
|
begin
|
521
|
-
|
569
|
+
assert op_addset_succeeds(dc.set(idx, value))
|
522
570
|
rescue Dalli::DalliError
|
523
571
|
failed = true
|
524
572
|
assert((800..960).include?(idx), "unexpected failure on iteration #{idx}")
|
@@ -536,7 +584,7 @@ describe 'Dalli' do
|
|
536
584
|
value = "1234567890"*1000
|
537
585
|
10_000.times do |idx|
|
538
586
|
begin
|
539
|
-
|
587
|
+
assert op_addset_succeeds(dalli.set(idx, value))
|
540
588
|
rescue Dalli::DalliError
|
541
589
|
failed = true
|
542
590
|
assert((6000..7800).include?(idx), "unexpected failure on iteration #{idx}")
|
data/test/test_sasl.rb
CHANGED
@@ -30,19 +30,19 @@ describe 'Sasl' do
|
|
30
30
|
assert true
|
31
31
|
end
|
32
32
|
|
33
|
-
|
33
|
+
it 'gracefully handle authentication failures' do
|
34
34
|
memcached(19124, '-S') do |dc|
|
35
|
-
|
35
|
+
assert_error Dalli::DalliError, /32/ do
|
36
36
|
dc.set('abc', 123)
|
37
37
|
end
|
38
38
|
end
|
39
39
|
end
|
40
40
|
end
|
41
41
|
|
42
|
-
|
42
|
+
it 'fail SASL authentication with wrong options' do
|
43
43
|
memcached(19124, '-S') do |dc|
|
44
44
|
dc = Dalli::Client.new('localhost:19124', :username => 'foo', :password => 'wrongpwd')
|
45
|
-
|
45
|
+
assert_error Dalli::DalliError, /32/ do
|
46
46
|
dc.set('abc', 123)
|
47
47
|
end
|
48
48
|
end
|
metadata
CHANGED
@@ -1,52 +1,46 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dalli
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
5
|
-
prerelease:
|
4
|
+
version: 2.7.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Mike Perham
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2014-01-07 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: minitest
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - '>='
|
20
18
|
- !ruby/object:Gem::Version
|
21
|
-
version:
|
19
|
+
version: 4.2.0
|
22
20
|
type: :development
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
|
-
- -
|
24
|
+
- - '>='
|
28
25
|
- !ruby/object:Gem::Version
|
29
|
-
version:
|
26
|
+
version: 4.2.0
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: mocha
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
|
-
- -
|
31
|
+
- - '>='
|
36
32
|
- !ruby/object:Gem::Version
|
37
33
|
version: '0'
|
38
34
|
type: :development
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
|
-
- -
|
38
|
+
- - '>='
|
44
39
|
- !ruby/object:Gem::Version
|
45
40
|
version: '0'
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
42
|
name: rails
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
44
|
requirements:
|
51
45
|
- - ~>
|
52
46
|
- !ruby/object:Gem::Version
|
@@ -54,7 +48,6 @@ dependencies:
|
|
54
48
|
type: :development
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
51
|
requirements:
|
59
52
|
- - ~>
|
60
53
|
- !ruby/object:Gem::Version
|
@@ -67,6 +60,7 @@ extra_rdoc_files: []
|
|
67
60
|
files:
|
68
61
|
- lib/action_dispatch/middleware/session/dalli_store.rb
|
69
62
|
- lib/active_support/cache/dalli_store.rb
|
63
|
+
- lib/dalli/cas/client.rb
|
70
64
|
- lib/dalli/client.rb
|
71
65
|
- lib/dalli/compressor.rb
|
72
66
|
- lib/dalli/options.rb
|
@@ -87,7 +81,9 @@ files:
|
|
87
81
|
- test/benchmark_test.rb
|
88
82
|
- test/helper.rb
|
89
83
|
- test/memcached_mock.rb
|
84
|
+
- test/sasldb
|
90
85
|
- test/test_active_support.rb
|
86
|
+
- test/test_cas_client.rb
|
91
87
|
- test/test_compressor.rb
|
92
88
|
- test/test_dalli.rb
|
93
89
|
- test/test_encoding.rb
|
@@ -100,34 +96,35 @@ files:
|
|
100
96
|
homepage: http://github.com/mperham/dalli
|
101
97
|
licenses:
|
102
98
|
- MIT
|
99
|
+
metadata: {}
|
103
100
|
post_install_message:
|
104
101
|
rdoc_options:
|
105
102
|
- --charset=UTF-8
|
106
103
|
require_paths:
|
107
104
|
- lib
|
108
105
|
required_ruby_version: !ruby/object:Gem::Requirement
|
109
|
-
none: false
|
110
106
|
requirements:
|
111
|
-
- -
|
107
|
+
- - '>='
|
112
108
|
- !ruby/object:Gem::Version
|
113
109
|
version: '0'
|
114
110
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
115
|
-
none: false
|
116
111
|
requirements:
|
117
|
-
- -
|
112
|
+
- - '>='
|
118
113
|
- !ruby/object:Gem::Version
|
119
114
|
version: '0'
|
120
115
|
requirements: []
|
121
116
|
rubyforge_project:
|
122
|
-
rubygems_version:
|
117
|
+
rubygems_version: 2.0.14
|
123
118
|
signing_key:
|
124
|
-
specification_version:
|
119
|
+
specification_version: 4
|
125
120
|
summary: High performance memcached client for Ruby
|
126
121
|
test_files:
|
127
122
|
- test/benchmark_test.rb
|
128
123
|
- test/helper.rb
|
129
124
|
- test/memcached_mock.rb
|
125
|
+
- test/sasldb
|
130
126
|
- test/test_active_support.rb
|
127
|
+
- test/test_cas_client.rb
|
131
128
|
- test/test_compressor.rb
|
132
129
|
- test/test_dalli.rb
|
133
130
|
- test/test_encoding.rb
|