jruby-memcached-thoughtworks 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,247 @@
1
+ require 'spec_helper'
2
+
3
+ describe Memcached do
4
+ context "localhost" do
5
+ before(:all) { @memcached = Memcached.new(["127.0.0.1:11211"]) }
6
+ after(:all) { @memcached.quit }
7
+
8
+ it "should get all servers" do
9
+ @memcached.set "foo", "bar"
10
+ @memcached.servers.should == ["127.0.0.1:11211"]
11
+ end
12
+
13
+ context "initialize" do
14
+ it "should connect to 127.0.0.1:11211 if no server defined" do
15
+ memcached = Memcached.new
16
+ memcached.set "foo", "bar"
17
+ memcached.servers.should == ["127.0.0.1:11211"]
18
+ memcached.shutdown
19
+ end
20
+
21
+ it "should raise error with unsupported option hash" do
22
+ expect { Memcached.new("127.0.0.1:11211", :hash => :unknown) }.to raise_error(Memcached::NotSupport)
23
+ end
24
+
25
+ it "should raise error with unsupported option distribution" do
26
+ expect { Memcached.new("127.0.0.1:11211", :distribution => :unknown) }.to raise_error(Memcached::NotSupport)
27
+ end
28
+
29
+ it "should ignore nil value" do
30
+ expect { Memcached.new("127.0.0.1:11211", :prefix => nil) }.not_to raise_error
31
+ end
32
+ end
33
+
34
+ context "set/get" do
35
+ it "should set/get with plain text" do
36
+ @memcached.set "key", "value"
37
+ @memcached.get("key").should == "value"
38
+ end
39
+
40
+ it "should set/get with compressed text" do
41
+ @memcached.set "key", "x\234c?P?*?/?I\001\000\b8\002a"
42
+ @memcached.get("key").should == "x\234c?P?*?/?I\001\000\b8\002a"
43
+ end
44
+ end
45
+
46
+ context "get" do
47
+ it "should get nil" do
48
+ @memcached.set "key", nil, 0
49
+ @memcached.get("key").should be_nil
50
+ end
51
+
52
+ it "should get missing" do
53
+ @memcached.delete "key" rescue nil
54
+ expect { @memcached.get "key" }.to raise_error(Memcached::NotFound)
55
+ end
56
+
57
+ context "multiget" do
58
+ it "should get hash containing multiple key/value pairs" do
59
+ @memcached.set "key1", "value1"
60
+ @memcached.set "key2", "value2"
61
+ @memcached.get(["key1", "key2"]).should == {"key1" => "value1", "key2" => "value2"}
62
+ end
63
+
64
+ it "should get hash containing nil value" do
65
+ @memcached.set "key", nil, 0
66
+ @memcached.get(["key"]).should == {"key" => nil}
67
+ end
68
+
69
+ it "should get empty hash" do
70
+ @memcached.delete "key" rescue nil
71
+ @memcached.get(["key"]).should be_empty
72
+ end
73
+ end
74
+ end
75
+
76
+ context "set" do
77
+ it "should set expiry" do
78
+ @memcached.set "key", "value", 1
79
+ @memcached.get("key").should == "value"
80
+ sleep 1
81
+ expect { @memcached.get("key") }.to raise_error(Memcached::NotFound)
82
+ end
83
+ end
84
+
85
+ context "add" do
86
+ it "should add new key" do
87
+ @memcached.delete "key" rescue nil
88
+ @memcached.add "key", "value"
89
+ @memcached.get("key").should == "value"
90
+ end
91
+
92
+ it "should not add existing key" do
93
+ @memcached.set "key", "value"
94
+ expect { @memcached.add "key", "value" }.to raise_error(Memcached::NotStored)
95
+ end
96
+
97
+ it "should add expiry" do
98
+ @memcached.delete "key" rescue nil
99
+ @memcached.add "key", "value", 1
100
+ @memcached.get "key"
101
+ sleep 1
102
+ expect { @memcached.get "key" }.to raise_error(Memcached::NotFound)
103
+ end
104
+ end
105
+
106
+ context "replace" do
107
+ it "should replace existing key" do
108
+ @memcached.set "key", nil
109
+ @memcached.replace "key", "value"
110
+ @memcached.get("key").should == "value"
111
+ end
112
+
113
+ it "should not replace with new key" do
114
+ @memcached.delete "key" rescue nil
115
+ expect { @memcached.replace "key", "value" }.to raise_error(Memcached::NotStored)
116
+ expect { @memcached.get "key" }.to raise_error(Memcached::NotFound)
117
+ end
118
+ end
119
+
120
+ context "delete" do
121
+ it "should delete with existing key" do
122
+ @memcached.set "key", "value"
123
+ @memcached.delete "key"
124
+ expect { @memcached.get "key" }.to raise_error(Memcached::NotFound)
125
+ end
126
+
127
+ it "should not delete with new key" do
128
+ @memcached.delete "key" rescue nil
129
+ expect { @memcached.delete "key" }.to raise_error(Memcached::NotFound)
130
+ end
131
+ end
132
+
133
+ context "increment" do
134
+ it "should increment to default value" do
135
+ @memcached.delete "intkey" rescue nil
136
+ @memcached.increment "intkey"
137
+ @memcached.get("intkey").should == 1
138
+ end
139
+
140
+ it "should increment by 1" do
141
+ @memcached.delete "intkey" rescue nil
142
+ @memcached.increment "intkey"
143
+ @memcached.increment "intkey"
144
+ @memcached.get("intkey").should == 2
145
+ end
146
+
147
+ it "should increment by 10" do
148
+ @memcached.delete "intkey" rescue nil
149
+ @memcached.increment "intkey"
150
+ @memcached.increment "intkey", 10
151
+ @memcached.get("intkey").should == 11
152
+ end
153
+ end
154
+
155
+ context "decrement" do
156
+ it "should decrement to default value" do
157
+ @memcached.delete "intkey" rescue nil
158
+ @memcached.decrement "intkey"
159
+ @memcached.get("intkey").should == 0
160
+ end
161
+
162
+ it "should decrement by 1" do
163
+ @memcached.delete "intkey" rescue nil
164
+ 2.times { @memcached.increment "intkey" }
165
+ @memcached.decrement "intkey"
166
+ @memcached.get("intkey").should == 1
167
+ end
168
+
169
+ it "should decrement by 10" do
170
+ @memcached.delete "intkey" rescue nil
171
+ @memcached.increment "intkey"
172
+ @memcached.increment "intkey", 20
173
+ @memcached.decrement "intkey", 10
174
+ @memcached.get("intkey").should == 11
175
+ end
176
+ end
177
+
178
+ context "flush" do
179
+ it "should flush all keys" do
180
+ @memcached.set "key1", "value2"
181
+ @memcached.set "key2", "value2"
182
+ @memcached.flush
183
+ expect { @memcached.get "key1" }.to raise_error(Memcached::NotFound)
184
+ expect { @memcached.get "key2" }.to raise_error(Memcached::NotFound)
185
+ end
186
+ end
187
+
188
+ context "namespace/prefix_key" do
189
+ it "should get/set with namespace" do
190
+ memcached = Memcached.new("127.0.0.1:11211", :namespace => "jruby")
191
+ memcached.set "key", "value"
192
+ memcached.get("key").should == "value"
193
+ memcached.shutdown
194
+ @memcached.get("jrubykey").should == "value"
195
+ end
196
+
197
+ context "prefix_key" do
198
+ before(:all) { @prefix_memcached = Memcached.new("127.0.0.1:11211", :prefix_key => "jruby") }
199
+ after(:all) { @prefix_memcached.shutdown }
200
+
201
+ it "should get/set with prefix_key" do
202
+ @prefix_memcached.set "key", "value"
203
+ @prefix_memcached.get("key").should == "value"
204
+ @memcached.get("jrubykey").should == "value"
205
+ end
206
+
207
+ it "should add/replace with prefix_key" do
208
+ @prefix_memcached.add "newkey", "value"
209
+ @prefix_memcached.replace "newkey", "new_value"
210
+ @memcached.get("jrubynewkey").should == "new_value"
211
+ end
212
+
213
+ it "should delete with prefix_key" do
214
+ @prefix_memcached.set "key", "value"
215
+ @prefix_memcached.delete "key"
216
+ expect { @memcached.get("jrubykey") }.to raise_error(Memcached::NotFound)
217
+ end
218
+
219
+ it "should multiget with prefix_key" do
220
+ @prefix_memcached.set "key1", "value1"
221
+ @prefix_memcached.set "key2", "value2"
222
+ @prefix_memcached.get(["key1", "key2"]).should == {"key1" => "value1", "key2" => "value2"}
223
+ end
224
+
225
+ it "should increment/decrement with prefix_key" do
226
+ @prefix_memcached.delete "intkey" rescue nil
227
+ @prefix_memcached.increment "intkey"
228
+ @prefix_memcached.increment "intkey", 10
229
+ @prefix_memcached.decrement "intkey", 5
230
+ @memcached.get("jrubyintkey").should == 6
231
+ end
232
+ end
233
+ end
234
+
235
+ context "active?" do
236
+ it "should be true if has available servers" do
237
+ expect(@memcached.active?).to eq(true)
238
+ end
239
+
240
+ it "should be false if hasn't available servers" do
241
+ @memcached_bad = Memcached.new(["127.0.0.1:22121"])
242
+ expect(@memcached_bad.active?).to eq(false)
243
+ @memcached_bad.quit
244
+ end
245
+ end
246
+ end
247
+ end
@@ -0,0 +1,181 @@
1
+ require 'spec_helper'
2
+
3
+ describe Memcached::Rails do
4
+ context "localhost" do
5
+ before(:all) { @memcached = Memcached::Rails.new(:servers => ["127.0.0.1:11211"]) }
6
+ after(:all) { @memcached.shutdown }
7
+
8
+ it "should get all servers" do
9
+ @memcached.set "foo", "bar"
10
+ @memcached.servers.should == ["127.0.0.1:11211"]
11
+ end
12
+
13
+ it "should get logger" do
14
+ require 'logger'
15
+ @memcached.logger = Logger.new(STDOUT)
16
+ @memcached.logger.should_not be_nil
17
+ end
18
+
19
+ it "should be active" do
20
+ @memcached.should be_active
21
+ end
22
+
23
+ context "get" do
24
+ it "should get value" do
25
+ @memcached.set "key", "value"
26
+ @memcached.get("key").should == "value"
27
+ end
28
+
29
+ it "should get nil if key is missing" do
30
+ @memcached.delete "key" rescue nil
31
+ @memcached.get("key").should be_nil
32
+ end
33
+ end
34
+
35
+ context "read" do
36
+ it "should get value" do
37
+ @memcached.set "key", "value"
38
+ @memcached.get("key").should == "value"
39
+ end
40
+
41
+ it "should get nil if key is missing" do
42
+ @memcached.delete "key" rescue nil
43
+ @memcached.get("key").should be_nil
44
+ end
45
+ end
46
+
47
+ context "exist?" do
48
+ it "should return true if key exists" do
49
+ @memcached.set "key", "value"
50
+ @memcached.exist?("key").should be_true
51
+ end
52
+
53
+ it "should return false if key is missing" do
54
+ @memcached.delete "key" rescue nil
55
+ @memcached.exist?("key").should be_false
56
+ end
57
+ end
58
+
59
+ context "get_multi" do
60
+ it "should get hash containing multiple key/value pairs" do
61
+ @memcached.set "key1", "value1"
62
+ @memcached.set "key2", "value2"
63
+ @memcached.get(["key1", "key2"]).should == {"key1" => "value1", "key2" => "value2"}
64
+ end
65
+
66
+ it "should get hash containing nil value" do
67
+ @memcached.set "key", nil, 0
68
+ @memcached.get(["key"]).should == {"key" => nil}
69
+ end
70
+
71
+ it "should get empty hash" do
72
+ @memcached.delete "key" rescue nil
73
+ @memcached.get(["key"]).should be_empty
74
+ end
75
+ end
76
+
77
+ context "set" do
78
+ it "should set successfully" do
79
+ @memcached.set("key", "value").should be_true
80
+ @memcached.get("key").should == "value"
81
+ end
82
+ end
83
+
84
+ context "write" do
85
+ it "should write successfully" do
86
+ @memcached.write("key", "value").should be_true
87
+ @memcached.read("key").should == "value"
88
+ end
89
+
90
+ it "should expire" do
91
+ @memcached.write("key", "value", :expires_in => 1)
92
+ @memcached.read("key").should == "value"
93
+ sleep 1
94
+ @memcached.read("key").should be_nil
95
+ end
96
+ end
97
+
98
+ context "fetch" do
99
+ it "should read if key exists" do
100
+ @memcached.write("key", "value")
101
+ @memcached.fetch("key") { "new value" }.should == "value"
102
+ end
103
+
104
+ it "should write if key is missing" do
105
+ @memcached.delete "key" rescue nil
106
+ @memcached.fetch("key") { "new value" }.should == "new value"
107
+ end
108
+ end
109
+
110
+ context "add" do
111
+ it "should add if key is missing" do
112
+ @memcached.delete "key" rescue nil
113
+ @memcached.add("key", "value").should be_true
114
+ end
115
+
116
+ it "should do nothing if key exists" do
117
+ @memcached.set "key", "value"
118
+ @memcached.add("key", "value").should be_false
119
+ end
120
+
121
+ context "with string_return_types" do
122
+ before(:all) { @string_memcached = Memcached::Rails.new("127.0.0.1:11211", :string_return_types => true) }
123
+ after(:all) { @string_memcached.quit }
124
+
125
+ it "should add if key is missing" do
126
+ @string_memcached.delete "key" rescue nil
127
+ @string_memcached.add("key", "value").should == "STORED\r\n"
128
+ end
129
+
130
+ it "should do nothing if key exists" do
131
+ @string_memcached.set "key", "value"
132
+ @string_memcached.add("key", "value").should == "NOT STORED\r\n"
133
+ end
134
+ end
135
+ end
136
+
137
+ context "delete" do
138
+ it "should delete existing key" do
139
+ @memcached.set "key", "value"
140
+ @memcached.delete "key"
141
+ @memcached.get("key").should be_nil
142
+ end
143
+
144
+ it "should do nothing if delete missing key" do
145
+ @memcached.delete "key" rescue nil
146
+ @memcached.delete "key"
147
+ @memcached.get("key").should be_nil
148
+ end
149
+ end
150
+
151
+ context "alias" do
152
+ it "should respond_to? flush_all" do
153
+ @memcached.should be_respond_to(:flush_all)
154
+ end
155
+
156
+ it "should respond_to? clear" do
157
+ @memcached.should be_respond_to(:clear)
158
+ end
159
+
160
+ it "should respond_to? :[]" do
161
+ @memcached.should be_respond_to(:"[]")
162
+ end
163
+
164
+ it "should respond_to? :[]=" do
165
+ @memcached.should be_respond_to(:"[]=")
166
+ end
167
+ end
168
+
169
+ context "read_multi" do
170
+ it "should read hash containing multiple key/value pairs" do
171
+ @memcached.write "key1", "value1"
172
+ @memcached.write "key2", "value2"
173
+ @memcached.read_multi(["key1", "key2"]).should == {"key1" => "value1", "key2" => "value2"}
174
+ end
175
+
176
+ it "should read empty hash without params" do
177
+ @memcached.read_multi.should be_empty
178
+ end
179
+ end
180
+ end
181
+ end
@@ -0,0 +1,12 @@
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+ require 'rspec'
4
+ require 'rspec/autorun'
5
+
6
+ require 'memcached'
7
+
8
+ RSpec.configure do |config|
9
+ config.mock_framework = :mocha
10
+ config.filter_run :focus => true
11
+ config.run_all_when_everything_filtered = true
12
+ end
@@ -0,0 +1,103 @@
1
+ require 'spec_helper'
2
+
3
+ # This is a stupid way to test timeout cases.
4
+ #
5
+ # Originally, I want to mock MemcachedClient methods to throw OperationTimeout, like
6
+ #
7
+ # MemcachedClient.any_instance.stubs(:get).raises(OperationTimeout)
8
+ # lambda { @timeout_memcached.get "key" }.should raise_error(Memcached::ATimeoutOccurred)
9
+ #
10
+ # But it doesn't work.
11
+ #
12
+ # The current solution is to call @timeout_memcahced.get in an infinite loop until a
13
+ # Memcached::ATimeoutOccurred raised. It works, but really slow down the tests, I hate it.
14
+ #
15
+ # If you have a better solution, please let me know flyerhzm at gmail dot com, thanks.
16
+ describe Memcached do
17
+ before(:all) do
18
+ @memcached = Memcached.new("127.0.0.1:11211")
19
+ @timeout_memcached = Memcached.new("127.0.0.1:11211", :timeout => 1, :exception_retry_limit => 0)
20
+ end
21
+
22
+ after(:all) do
23
+ @timeout_memcached.quit
24
+ @memcached.quit
25
+ end
26
+
27
+ describe "Rails" do
28
+ before(:all) do
29
+ @timeout_rails = Memcached::Rails.new("127.0.0.1:11211", :timeout => 1, :exception_retry_limit => 0)
30
+ end
31
+
32
+ after(:all) do
33
+ @timeout_rails.quit
34
+ end
35
+
36
+ it "should return nil when got timeout" do
37
+ @memcached.set "a-key", "value"
38
+ while true
39
+ break if @timeout_rails.get("a-key").nil?
40
+ end
41
+ end
42
+ end
43
+
44
+ it "should set timeout" do
45
+ lambda {
46
+ while true
47
+ @timeout_memcached.set "key", "new_value"
48
+ end
49
+ }.should raise_error(Memcached::ATimeoutOccurred)
50
+ end
51
+
52
+ it "should add timeout" do
53
+ lambda {
54
+ while true
55
+ @memcached.delete "key" rescue nil
56
+ @timeout_memcached.add "key", "new_value"
57
+ end
58
+ }.should raise_error(Memcached::ATimeoutOccurred)
59
+ end
60
+
61
+ it "should replace timeout" do
62
+ @memcached.set "key", "value"
63
+ lambda {
64
+ while true
65
+ @timeout_memcached.replace "key", "new_value"
66
+ end
67
+ }.should raise_error(Memcached::ATimeoutOccurred)
68
+ end
69
+
70
+ it "should delete timeout" do
71
+ lambda {
72
+ while true
73
+ @memcached.set "key", "value"
74
+ @timeout_memcached.delete "key"
75
+ end
76
+ }.should raise_error(Memcached::ATimeoutOccurred)
77
+ end
78
+
79
+ it "should get timeout" do
80
+ @memcached.set "key", "value"
81
+ lambda {
82
+ while true
83
+ @timeout_memcached.get "key"
84
+ end
85
+ }.should raise_error(Memcached::ATimeoutOccurred)
86
+ end
87
+
88
+ it "should increment timeout" do
89
+ lambda {
90
+ while true
91
+ @timeout_memcached.increment "intkey"
92
+ end
93
+ }.should raise_error(Memcached::ATimeoutOccurred)
94
+ end
95
+
96
+ it "should decrement timeout" do
97
+ lambda {
98
+ while true
99
+ @timeout_memcached.decrement "intkey"
100
+ end
101
+ }.should raise_error(Memcached::ATimeoutOccurred)
102
+ end
103
+ end