fakeredis 0.5.0 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +4 -0
- data/.travis.yml +16 -5
- data/LICENSE +1 -1
- data/README.md +18 -2
- data/fakeredis.gemspec +1 -1
- data/gemfiles/redisrb-master.gemfile +14 -0
- data/lib/fakeredis/bitop_command.rb +56 -0
- data/lib/fakeredis/expiring_hash.rb +1 -1
- data/lib/fakeredis/minitest.rb +24 -0
- data/lib/fakeredis/rspec.rb +1 -0
- data/lib/fakeredis/sort_method.rb +3 -2
- data/lib/fakeredis/transaction_commands.rb +1 -1
- data/lib/fakeredis/version.rb +1 -1
- data/lib/fakeredis/zset.rb +7 -1
- data/lib/redis/connection/memory.rb +424 -38
- data/spec/bitop_command_spec.rb +209 -0
- data/spec/compatibility_spec.rb +1 -1
- data/spec/connection_spec.rb +20 -20
- data/spec/hashes_spec.rb +123 -57
- data/spec/keys_spec.rb +197 -80
- data/spec/lists_spec.rb +61 -34
- data/spec/memory_spec.rb +60 -7
- data/spec/server_spec.rb +24 -24
- data/spec/sets_spec.rb +95 -46
- data/spec/sort_method_spec.rb +6 -0
- data/spec/sorted_sets_spec.rb +288 -150
- data/spec/spec_helper.rb +1 -0
- data/spec/strings_spec.rb +83 -78
- data/spec/subscription_spec.rb +107 -0
- data/spec/support/shared_examples/bitwise_operation.rb +59 -0
- data/spec/support/shared_examples/sortable.rb +20 -16
- data/spec/transactions_spec.rb +20 -12
- data/spec/upcase_method_name_spec.rb +2 -2
- metadata +14 -5
data/spec/keys_spec.rb
CHANGED
@@ -12,7 +12,7 @@ module FakeRedis
|
|
12
12
|
@client.set("key2", "2")
|
13
13
|
@client.del("key1", "key2")
|
14
14
|
|
15
|
-
@client.get("key1").
|
15
|
+
expect(@client.get("key1")).to eq(nil)
|
16
16
|
end
|
17
17
|
|
18
18
|
it "should delete multiple keys" do
|
@@ -20,43 +20,69 @@ module FakeRedis
|
|
20
20
|
@client.set("key2", "2")
|
21
21
|
@client.del(["key1", "key2"])
|
22
22
|
|
23
|
-
@client.get("key1").
|
24
|
-
@client.get("key2").
|
23
|
+
expect(@client.get("key1")).to eq(nil)
|
24
|
+
expect(@client.get("key2")).to eq(nil)
|
25
25
|
end
|
26
26
|
|
27
27
|
it "should error deleting no keys" do
|
28
|
-
|
29
|
-
|
28
|
+
expect { @client.del }.to raise_error(Redis::CommandError, "ERR wrong number of arguments for 'del' command")
|
29
|
+
expect { @client.del [] }.to raise_error(Redis::CommandError, "ERR wrong number of arguments for 'del' command")
|
30
|
+
end
|
31
|
+
|
32
|
+
it "should return true when setnx keys that don't exist" do
|
33
|
+
expect(@client.setnx("key1", "1")).to eq(true)
|
34
|
+
end
|
35
|
+
|
36
|
+
it "should return false when setnx keys exist" do
|
37
|
+
@client.set("key1", "1")
|
38
|
+
expect(@client.setnx("key1", "1")).to eq(false)
|
30
39
|
end
|
31
40
|
|
32
41
|
it "should return true when setting expires on keys that exist" do
|
33
42
|
@client.set("key1", "1")
|
34
|
-
@client.expire("key1", 1).
|
43
|
+
expect(@client.expire("key1", 1)).to eq(true)
|
44
|
+
end
|
45
|
+
|
46
|
+
it "should return true when setting pexpires on keys that exist" do
|
47
|
+
@client.set("key1", "1")
|
48
|
+
expect(@client.pexpire("key1", 1)).to eq(true)
|
35
49
|
end
|
36
50
|
|
37
51
|
it "should return false when attempting to set expires on a key that does not exist" do
|
38
|
-
@client.expire("key1", 1).
|
52
|
+
expect(@client.expire("key1", 1)).to eq(false)
|
53
|
+
end
|
54
|
+
|
55
|
+
it "should return false when attempting to set pexpires on a key that does not exist" do
|
56
|
+
expect(@client.pexpire("key1", 1)).to eq(false)
|
39
57
|
end
|
40
58
|
|
41
59
|
it "should determine if a key exists" do
|
42
60
|
@client.set("key1", "1")
|
43
61
|
|
44
|
-
@client.exists("key1").
|
45
|
-
@client.exists("key2").
|
62
|
+
expect(@client.exists("key1")).to eq(true)
|
63
|
+
expect(@client.exists("key2")).to eq(false)
|
46
64
|
end
|
47
65
|
|
48
66
|
it "should set a key's time to live in seconds" do
|
49
67
|
@client.set("key1", "1")
|
50
68
|
@client.expire("key1", 1)
|
51
69
|
|
52
|
-
@client.ttl("key1").
|
70
|
+
expect(@client.ttl("key1")).to eq(1)
|
71
|
+
end
|
72
|
+
|
73
|
+
it "should set a key's time to live in miliseconds" do
|
74
|
+
allow(Time).to receive(:now).and_return(1000)
|
75
|
+
@client.set("key1", "1")
|
76
|
+
@client.pexpire("key1", 2200)
|
77
|
+
expect(@client.pttl("key1")).to be_within(0.1).of(2200)
|
78
|
+
allow(Time).to receive(:now).and_call_original
|
53
79
|
end
|
54
80
|
|
55
81
|
it "should set the expiration for a key as a UNIX timestamp" do
|
56
82
|
@client.set("key1", "1")
|
57
83
|
@client.expireat("key1", Time.now.to_i + 2)
|
58
84
|
|
59
|
-
@client.ttl("key1").
|
85
|
+
expect(@client.ttl("key1")).to eq(2)
|
60
86
|
end
|
61
87
|
|
62
88
|
it "should not have an expiration after re-set" do
|
@@ -64,21 +90,21 @@ module FakeRedis
|
|
64
90
|
@client.expireat("key1", Time.now.to_i + 2)
|
65
91
|
@client.set("key1", "1")
|
66
92
|
|
67
|
-
@client.ttl("key1").
|
93
|
+
expect(@client.ttl("key1")).to eq(-1)
|
68
94
|
end
|
69
95
|
|
70
96
|
it "should not have a ttl if expired (and thus key does not exist)" do
|
71
97
|
@client.set("key1", "1")
|
72
98
|
@client.expireat("key1", Time.now.to_i)
|
73
99
|
|
74
|
-
@client.ttl("key1").
|
100
|
+
expect(@client.ttl("key1")).to eq(-2)
|
75
101
|
end
|
76
102
|
|
77
103
|
it "should not find a key if expired" do
|
78
104
|
@client.set("key1", "1")
|
79
105
|
@client.expireat("key1", Time.now.to_i)
|
80
106
|
|
81
|
-
@client.get("key1").
|
107
|
+
expect(@client.get("key1")).to be_nil
|
82
108
|
end
|
83
109
|
|
84
110
|
it "should not find multiple keys if expired" do
|
@@ -86,7 +112,7 @@ module FakeRedis
|
|
86
112
|
@client.set("key2", "2")
|
87
113
|
@client.expireat("key1", Time.now.to_i)
|
88
114
|
|
89
|
-
@client.mget("key1", "key2").
|
115
|
+
expect(@client.mget("key1", "key2")).to eq([nil, "2"])
|
90
116
|
end
|
91
117
|
|
92
118
|
it "should only find keys that aren't expired" do
|
@@ -94,14 +120,14 @@ module FakeRedis
|
|
94
120
|
@client.set("key2", "2")
|
95
121
|
@client.expireat("key1", Time.now.to_i)
|
96
122
|
|
97
|
-
@client.keys.
|
123
|
+
expect(@client.keys).to eq(["key2"])
|
98
124
|
end
|
99
125
|
|
100
126
|
it "should not exist if expired" do
|
101
127
|
@client.set("key1", "1")
|
102
128
|
@client.expireat("key1", Time.now.to_i)
|
103
129
|
|
104
|
-
@client.exists("key1").
|
130
|
+
expect(@client.exists("key1")).to be false
|
105
131
|
end
|
106
132
|
|
107
133
|
it "should find all keys matching the given pattern" do
|
@@ -113,32 +139,32 @@ module FakeRedis
|
|
113
139
|
|
114
140
|
@client.mset("database", 1, "above", 2, "suitability", 3, "able", 4)
|
115
141
|
|
116
|
-
@client.keys("key:*").
|
117
|
-
@client.keys("ab*").
|
142
|
+
expect(@client.keys("key:*")).to match_array(["key:a", "key:b", "key:c"])
|
143
|
+
expect(@client.keys("ab*")).to match_array(["above", "able"])
|
118
144
|
end
|
119
145
|
|
120
146
|
it "should remove the expiration from a key" do
|
121
147
|
@client.set("key1", "1")
|
122
148
|
@client.expireat("key1", Time.now.to_i + 1)
|
123
|
-
@client.persist("key1").
|
124
|
-
@client.persist("key1").
|
149
|
+
expect(@client.persist("key1")).to eq(true)
|
150
|
+
expect(@client.persist("key1")).to eq(false)
|
125
151
|
|
126
|
-
@client.ttl("key1").
|
152
|
+
expect(@client.ttl("key1")).to eq(-1)
|
127
153
|
end
|
128
154
|
|
129
155
|
it "should return a random key from the keyspace" do
|
130
156
|
@client.set("key1", "1")
|
131
157
|
@client.set("key2", "2")
|
132
158
|
|
133
|
-
["key1", "key2"].include?(@client.randomkey).
|
159
|
+
expect(["key1", "key2"].include?(@client.randomkey)).to eq(true)
|
134
160
|
end
|
135
161
|
|
136
162
|
it "should rename a key" do
|
137
163
|
@client.set("key1", "2")
|
138
164
|
@client.rename("key1", "key2")
|
139
165
|
|
140
|
-
@client.get("key1").
|
141
|
-
@client.get("key2").
|
166
|
+
expect(@client.get("key1")).to eq(nil)
|
167
|
+
expect(@client.get("key2")).to eq("2")
|
142
168
|
end
|
143
169
|
|
144
170
|
it "should rename a key, only if new key does not exist" do
|
@@ -148,100 +174,100 @@ module FakeRedis
|
|
148
174
|
@client.renamenx("key1", "key2")
|
149
175
|
@client.renamenx("key3", "key4")
|
150
176
|
|
151
|
-
@client.get("key1").
|
152
|
-
@client.get("key2").
|
153
|
-
@client.get("key3").
|
154
|
-
@client.get("key4").
|
177
|
+
expect(@client.get("key1")).to eq("1")
|
178
|
+
expect(@client.get("key2")).to eq("2")
|
179
|
+
expect(@client.get("key3")).to eq(nil)
|
180
|
+
expect(@client.get("key4")).to eq("3")
|
155
181
|
end
|
156
182
|
|
157
183
|
it "should determine the type stored at key" do
|
158
184
|
# Non-existing key
|
159
|
-
@client.type("key0").
|
185
|
+
expect(@client.type("key0")).to eq("none")
|
160
186
|
|
161
187
|
# String
|
162
188
|
@client.set("key1", "1")
|
163
|
-
@client.type("key1").
|
189
|
+
expect(@client.type("key1")).to eq("string")
|
164
190
|
|
165
191
|
# List
|
166
192
|
@client.lpush("key2", "1")
|
167
|
-
@client.type("key2").
|
193
|
+
expect(@client.type("key2")).to eq("list")
|
168
194
|
|
169
195
|
# Set
|
170
196
|
@client.sadd("key3", "1")
|
171
|
-
@client.type("key3").
|
197
|
+
expect(@client.type("key3")).to eq("set")
|
172
198
|
|
173
199
|
# Sorted Set
|
174
200
|
@client.zadd("key4", 1.0, "1")
|
175
|
-
@client.type("key4").
|
201
|
+
expect(@client.type("key4")).to eq("zset")
|
176
202
|
|
177
203
|
# Hash
|
178
204
|
@client.hset("key5", "a", "1")
|
179
|
-
@client.type("key5").
|
205
|
+
expect(@client.type("key5")).to eq("hash")
|
180
206
|
end
|
181
207
|
|
182
208
|
it "should convert the value into a string before storing" do
|
183
209
|
@client.set("key1", 1)
|
184
|
-
@client.get("key1").
|
210
|
+
expect(@client.get("key1")).to eq("1")
|
185
211
|
|
186
212
|
@client.setex("key2", 30, 1)
|
187
|
-
@client.get("key2").
|
213
|
+
expect(@client.get("key2")).to eq("1")
|
188
214
|
|
189
215
|
@client.getset("key3", 1)
|
190
|
-
@client.get("key3").
|
216
|
+
expect(@client.get("key3")).to eq("1")
|
191
217
|
end
|
192
218
|
|
193
219
|
it "should return 'OK' for the setex command" do
|
194
|
-
@client.setex("key4", 30, 1).
|
220
|
+
expect(@client.setex("key4", 30, 1)).to eq("OK")
|
195
221
|
end
|
196
222
|
|
197
223
|
it "should convert the key into a string before storing" do
|
198
224
|
@client.set(123, "foo")
|
199
|
-
@client.keys.
|
200
|
-
@client.get("123").
|
225
|
+
expect(@client.keys).to include("123")
|
226
|
+
expect(@client.get("123")).to eq("foo")
|
201
227
|
|
202
228
|
@client.setex(456, 30, "foo")
|
203
|
-
@client.keys.
|
204
|
-
@client.get("456").
|
229
|
+
expect(@client.keys).to include("456")
|
230
|
+
expect(@client.get("456")).to eq("foo")
|
205
231
|
|
206
232
|
@client.getset(789, "foo")
|
207
|
-
@client.keys.
|
208
|
-
@client.get("789").
|
233
|
+
expect(@client.keys).to include("789")
|
234
|
+
expect(@client.get("789")).to eq("foo")
|
209
235
|
end
|
210
236
|
|
211
237
|
it "should only operate against keys containing string values" do
|
212
238
|
@client.sadd("key1", "one")
|
213
|
-
|
214
|
-
|
239
|
+
expect { @client.get("key1") }.to raise_error(Redis::CommandError, "WRONGTYPE Operation against a key holding the wrong kind of value")
|
240
|
+
expect { @client.getset("key1", 1) }.to raise_error(Redis::CommandError, "WRONGTYPE Operation against a key holding the wrong kind of value")
|
215
241
|
|
216
242
|
@client.hset("key2", "one", "two")
|
217
|
-
|
218
|
-
|
243
|
+
expect { @client.get("key2") }.to raise_error(Redis::CommandError, "WRONGTYPE Operation against a key holding the wrong kind of value")
|
244
|
+
expect { @client.getset("key2", 1) }.to raise_error(Redis::CommandError, "WRONGTYPE Operation against a key holding the wrong kind of value")
|
219
245
|
end
|
220
246
|
|
221
247
|
it "should move a key from one database to another successfully" do
|
222
248
|
@client.select(0)
|
223
249
|
@client.set("key1", "1")
|
224
250
|
|
225
|
-
@client.move("key1", 1).
|
251
|
+
expect(@client.move("key1", 1)).to eq(true)
|
226
252
|
|
227
253
|
@client.select(0)
|
228
|
-
@client.get("key1").
|
254
|
+
expect(@client.get("key1")).to be_nil
|
229
255
|
|
230
256
|
@client.select(1)
|
231
|
-
@client.get("key1").
|
257
|
+
expect(@client.get("key1")).to eq("1")
|
232
258
|
end
|
233
259
|
|
234
260
|
it "should fail to move a key that does not exist in the source database" do
|
235
261
|
@client.select(0)
|
236
|
-
@client.get("key1").
|
262
|
+
expect(@client.get("key1")).to be_nil
|
237
263
|
|
238
|
-
@client.move("key1", 1).
|
264
|
+
expect(@client.move("key1", 1)).to eq(false)
|
239
265
|
|
240
266
|
@client.select(0)
|
241
|
-
@client.get("key1").
|
267
|
+
expect(@client.get("key1")).to be_nil
|
242
268
|
|
243
269
|
@client.select(1)
|
244
|
-
@client.get("key1").
|
270
|
+
expect(@client.get("key1")).to be_nil
|
245
271
|
end
|
246
272
|
|
247
273
|
it "should fail to move a key that exists in the destination database" do
|
@@ -252,23 +278,23 @@ module FakeRedis
|
|
252
278
|
@client.set("key1", "2")
|
253
279
|
|
254
280
|
@client.select(0)
|
255
|
-
@client.move("key1", 1).
|
281
|
+
expect(@client.move("key1", 1)).to eq(false)
|
256
282
|
|
257
283
|
@client.select(0)
|
258
|
-
@client.get("key1").
|
284
|
+
expect(@client.get("key1")).to eq("1")
|
259
285
|
|
260
286
|
@client.select(1)
|
261
|
-
@client.get("key1").
|
287
|
+
expect(@client.get("key1")).to eq("2")
|
262
288
|
end
|
263
289
|
|
264
290
|
it "should fail to move a key to the same database" do
|
265
291
|
@client.select(0)
|
266
292
|
@client.set("key1", "1")
|
267
293
|
|
268
|
-
|
294
|
+
expect { @client.move("key1", 0) }.to raise_error(Redis::CommandError, "ERR source and destination objects are the same")
|
269
295
|
|
270
296
|
@client.select(0)
|
271
|
-
@client.get("key1").
|
297
|
+
expect(@client.get("key1")).to eq("1")
|
272
298
|
end
|
273
299
|
|
274
300
|
it "should scan all keys in the database" do
|
@@ -284,8 +310,8 @@ module FakeRedis
|
|
284
310
|
break if cursor == "0"
|
285
311
|
}
|
286
312
|
|
287
|
-
all_keys.uniq.size.
|
288
|
-
all_keys[0].
|
313
|
+
expect(all_keys.uniq.size).to eq(100)
|
314
|
+
expect(all_keys[0]).to match(/key\d+/)
|
289
315
|
end
|
290
316
|
|
291
317
|
it "should match keys to a pattern when scanning" do
|
@@ -304,7 +330,7 @@ module FakeRedis
|
|
304
330
|
break if cursor == "0"
|
305
331
|
}
|
306
332
|
|
307
|
-
all_keys.uniq.size.
|
333
|
+
expect(all_keys.uniq.size).to eq(50)
|
308
334
|
end
|
309
335
|
|
310
336
|
it "should specify doing more work when scanning" do
|
@@ -314,23 +340,23 @@ module FakeRedis
|
|
314
340
|
|
315
341
|
cursor, all_keys = @client.scan(cursor, :count => 100)
|
316
342
|
|
317
|
-
cursor.
|
318
|
-
all_keys.uniq.size.
|
343
|
+
expect(cursor).to eq("0")
|
344
|
+
expect(all_keys.uniq.size).to eq(100)
|
319
345
|
end
|
320
346
|
|
321
347
|
context "with extended options" do
|
322
348
|
it "uses ex option to set the expire time, in seconds" do
|
323
349
|
ttl = 7
|
324
350
|
|
325
|
-
@client.set("key1", "1", { :ex => ttl }).
|
326
|
-
@client.ttl("key1").
|
351
|
+
expect(@client.set("key1", "1", { :ex => ttl })).to eq("OK")
|
352
|
+
expect(@client.ttl("key1")).to eq(ttl)
|
327
353
|
end
|
328
354
|
|
329
355
|
it "uses px option to set the expire time, in miliseconds" do
|
330
356
|
ttl = 7000
|
331
357
|
|
332
|
-
@client.set("key1", "1", { :px => ttl }).
|
333
|
-
@client.ttl("key1").
|
358
|
+
expect(@client.set("key1", "1", { :px => ttl })).to eq("OK")
|
359
|
+
expect(@client.ttl("key1")).to eq(ttl / 1000)
|
334
360
|
end
|
335
361
|
|
336
362
|
# Note that the redis-rb implementation will always give PX last.
|
@@ -340,32 +366,123 @@ module FakeRedis
|
|
340
366
|
ttl_ex = 10
|
341
367
|
|
342
368
|
@client.set("key1", "1", { :px => ttl_px, :ex => ttl_ex })
|
343
|
-
@client.ttl("key1").
|
369
|
+
expect(@client.ttl("key1")).to eq(ttl_px / 1000)
|
344
370
|
|
345
371
|
@client.set("key1", "1", { :ex => ttl_ex, :px => ttl_px })
|
346
|
-
@client.ttl("key1").
|
372
|
+
expect(@client.ttl("key1")).to eq(ttl_px / 1000)
|
347
373
|
end
|
348
374
|
|
349
375
|
it "uses nx option to only set the key if it does not already exist" do
|
350
|
-
@client.set("key1", "1", { :nx => true }).
|
351
|
-
@client.set("key1", "2", { :nx => true }).
|
376
|
+
expect(@client.set("key1", "1", { :nx => true })).to eq(true)
|
377
|
+
expect(@client.set("key1", "2", { :nx => true })).to eq(false)
|
352
378
|
|
353
|
-
@client.get("key1").
|
379
|
+
expect(@client.get("key1")).to eq("1")
|
354
380
|
end
|
355
381
|
|
356
382
|
it "uses xx option to only set the key if it already exists" do
|
357
|
-
@client.set("key2", "1", { :xx => true }).
|
383
|
+
expect(@client.set("key2", "1", { :xx => true })).to eq(false)
|
358
384
|
@client.set("key2", "2")
|
359
|
-
@client.set("key2", "1", { :xx => true }).
|
385
|
+
expect(@client.set("key2", "1", { :xx => true })).to eq(true)
|
360
386
|
|
361
|
-
@client.get("key2").
|
387
|
+
expect(@client.get("key2")).to eq("1")
|
362
388
|
end
|
363
389
|
|
364
390
|
it "does not set the key if both xx and nx option are specified" do
|
365
|
-
@client.set("key2", "1", { :nx => true, :xx => true }).
|
366
|
-
@client.get("key2").
|
391
|
+
expect(@client.set("key2", "1", { :nx => true, :xx => true })).to eq(false)
|
392
|
+
expect(@client.get("key2")).to be_nil
|
367
393
|
end
|
368
394
|
end
|
395
|
+
|
396
|
+
describe "#dump" do
|
397
|
+
it "returns nil for unknown key" do
|
398
|
+
expect(@client.exists("key1")).to be false
|
399
|
+
expect(@client.dump("key1")).to be nil
|
400
|
+
end
|
401
|
+
|
402
|
+
it "dumps a single known key successfully" do
|
403
|
+
@client.set("key1", "zomgwtf")
|
404
|
+
|
405
|
+
value = @client.dump("key1")
|
406
|
+
expect(value).not_to eq nil
|
407
|
+
expect(value).to be_a_kind_of(String)
|
408
|
+
end
|
409
|
+
|
410
|
+
it "errors with more than one argument" do
|
411
|
+
expect { @client.dump("key1", "key2") }.to raise_error(ArgumentError)
|
412
|
+
end
|
413
|
+
end
|
414
|
+
|
415
|
+
describe "#restore" do
|
416
|
+
it "errors with a missing payload" do
|
417
|
+
expect do
|
418
|
+
@client.restore("key1", 0, nil)
|
419
|
+
end.to raise_error(Redis::CommandError, "ERR DUMP payload version or checksum are wrong")
|
420
|
+
end
|
421
|
+
|
422
|
+
it "errors with an invalid payload" do
|
423
|
+
expect do
|
424
|
+
@client.restore("key1", 0, "zomgwtf not valid")
|
425
|
+
end.to raise_error(Redis::CommandError, "ERR DUMP payload version or checksum are wrong")
|
426
|
+
end
|
427
|
+
|
428
|
+
describe "with a dumped value" do
|
429
|
+
before do
|
430
|
+
@client.set("key1", "original value")
|
431
|
+
@dumped_value = @client.dump("key1")
|
432
|
+
|
433
|
+
@client.del("key1")
|
434
|
+
expect(@client.exists("key1")).to be false
|
435
|
+
end
|
436
|
+
|
437
|
+
it "restores to a new key successfully" do
|
438
|
+
response = @client.restore("key1", 0, @dumped_value)
|
439
|
+
expect(response).to eq "OK"
|
440
|
+
end
|
441
|
+
|
442
|
+
it "errors trying to restore to an existing key" do
|
443
|
+
@client.set("key1", "something else")
|
444
|
+
|
445
|
+
expect do
|
446
|
+
@client.restore("key1", 0, @dumped_value)
|
447
|
+
end.to raise_error(Redis::CommandError, "ERR Target key name is busy.")
|
448
|
+
end
|
449
|
+
|
450
|
+
it "restores successfully with a given expire time" do
|
451
|
+
@client.restore("key2", 2000, @dumped_value)
|
452
|
+
|
453
|
+
expect(@client.ttl("key2")).to eq 2
|
454
|
+
end
|
455
|
+
|
456
|
+
it "restores a list successfully" do
|
457
|
+
@client.lpush("key1", "val1")
|
458
|
+
@client.lpush("key1", "val2")
|
459
|
+
|
460
|
+
expect(@client.type("key1")).to eq "list"
|
461
|
+
|
462
|
+
dumped_value = @client.dump("key1")
|
463
|
+
|
464
|
+
response = @client.restore("key2", 0, dumped_value)
|
465
|
+
expect(response).to eq "OK"
|
466
|
+
|
467
|
+
expect(@client.type("key2")).to eq "list"
|
468
|
+
end
|
469
|
+
|
470
|
+
it "restores a set successfully" do
|
471
|
+
@client.sadd("key1", "val1")
|
472
|
+
@client.sadd("key1", "val2")
|
473
|
+
|
474
|
+
expect(@client.type("key1")).to eq "set"
|
475
|
+
|
476
|
+
dumped_value = @client.dump("key1")
|
477
|
+
|
478
|
+
response = @client.restore("key2", 0, dumped_value)
|
479
|
+
expect(response).to eq "OK"
|
480
|
+
|
481
|
+
expect(@client.type("key2")).to eq "set"
|
482
|
+
end
|
483
|
+
end
|
484
|
+
end
|
485
|
+
|
369
486
|
end
|
370
487
|
end
|
371
488
|
|