redis 4.1.0.beta1 → 4.1.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.
Files changed (142) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +13 -2
  3. data/README.md +45 -0
  4. data/lib/redis.rb +497 -20
  5. data/lib/redis/client.rb +14 -6
  6. data/lib/redis/cluster.rb +1 -0
  7. data/lib/redis/cluster/command_loader.rb +2 -0
  8. data/lib/redis/cluster/node_loader.rb +2 -0
  9. data/lib/redis/cluster/option.rb +1 -0
  10. data/lib/redis/cluster/slot_loader.rb +2 -0
  11. data/lib/redis/distributed.rb +3 -4
  12. data/lib/redis/version.rb +1 -1
  13. metadata +20 -243
  14. data/.gitignore +0 -19
  15. data/.travis.yml +0 -61
  16. data/.travis/Gemfile +0 -18
  17. data/.yardopts +0 -3
  18. data/Gemfile +0 -8
  19. data/benchmarking/logging.rb +0 -71
  20. data/benchmarking/pipeline.rb +0 -51
  21. data/benchmarking/speed.rb +0 -21
  22. data/benchmarking/suite.rb +0 -24
  23. data/benchmarking/worker.rb +0 -71
  24. data/bin/build +0 -71
  25. data/bors.toml +0 -14
  26. data/examples/basic.rb +0 -15
  27. data/examples/consistency.rb +0 -114
  28. data/examples/dist_redis.rb +0 -43
  29. data/examples/incr-decr.rb +0 -17
  30. data/examples/list.rb +0 -26
  31. data/examples/pubsub.rb +0 -37
  32. data/examples/sentinel.rb +0 -41
  33. data/examples/sentinel/start +0 -49
  34. data/examples/sets.rb +0 -36
  35. data/examples/unicorn/config.ru +0 -3
  36. data/examples/unicorn/unicorn.rb +0 -20
  37. data/makefile +0 -74
  38. data/redis.gemspec +0 -42
  39. data/test/bitpos_test.rb +0 -63
  40. data/test/blocking_commands_test.rb +0 -40
  41. data/test/client_test.rb +0 -76
  42. data/test/cluster_abnormal_state_test.rb +0 -38
  43. data/test/cluster_blocking_commands_test.rb +0 -15
  44. data/test/cluster_client_internals_test.rb +0 -77
  45. data/test/cluster_client_key_hash_tags_test.rb +0 -88
  46. data/test/cluster_client_options_test.rb +0 -147
  47. data/test/cluster_client_pipelining_test.rb +0 -59
  48. data/test/cluster_client_replicas_test.rb +0 -36
  49. data/test/cluster_client_slots_test.rb +0 -94
  50. data/test/cluster_client_transactions_test.rb +0 -71
  51. data/test/cluster_commands_on_cluster_test.rb +0 -165
  52. data/test/cluster_commands_on_connection_test.rb +0 -40
  53. data/test/cluster_commands_on_geo_test.rb +0 -74
  54. data/test/cluster_commands_on_hashes_test.rb +0 -11
  55. data/test/cluster_commands_on_hyper_log_log_test.rb +0 -17
  56. data/test/cluster_commands_on_keys_test.rb +0 -134
  57. data/test/cluster_commands_on_lists_test.rb +0 -15
  58. data/test/cluster_commands_on_pub_sub_test.rb +0 -101
  59. data/test/cluster_commands_on_scripting_test.rb +0 -56
  60. data/test/cluster_commands_on_server_test.rb +0 -221
  61. data/test/cluster_commands_on_sets_test.rb +0 -39
  62. data/test/cluster_commands_on_sorted_sets_test.rb +0 -35
  63. data/test/cluster_commands_on_streams_test.rb +0 -196
  64. data/test/cluster_commands_on_strings_test.rb +0 -15
  65. data/test/cluster_commands_on_transactions_test.rb +0 -41
  66. data/test/cluster_commands_on_value_types_test.rb +0 -14
  67. data/test/command_map_test.rb +0 -28
  68. data/test/commands_on_geo_test.rb +0 -116
  69. data/test/commands_on_hashes_test.rb +0 -7
  70. data/test/commands_on_hyper_log_log_test.rb +0 -7
  71. data/test/commands_on_lists_test.rb +0 -7
  72. data/test/commands_on_sets_test.rb +0 -7
  73. data/test/commands_on_sorted_sets_test.rb +0 -7
  74. data/test/commands_on_strings_test.rb +0 -7
  75. data/test/commands_on_value_types_test.rb +0 -207
  76. data/test/connection_handling_test.rb +0 -275
  77. data/test/connection_test.rb +0 -57
  78. data/test/distributed_blocking_commands_test.rb +0 -52
  79. data/test/distributed_commands_on_hashes_test.rb +0 -21
  80. data/test/distributed_commands_on_hyper_log_log_test.rb +0 -26
  81. data/test/distributed_commands_on_lists_test.rb +0 -19
  82. data/test/distributed_commands_on_sets_test.rb +0 -105
  83. data/test/distributed_commands_on_sorted_sets_test.rb +0 -59
  84. data/test/distributed_commands_on_strings_test.rb +0 -79
  85. data/test/distributed_commands_on_value_types_test.rb +0 -129
  86. data/test/distributed_commands_requiring_clustering_test.rb +0 -162
  87. data/test/distributed_connection_handling_test.rb +0 -21
  88. data/test/distributed_internals_test.rb +0 -68
  89. data/test/distributed_key_tags_test.rb +0 -50
  90. data/test/distributed_persistence_control_commands_test.rb +0 -24
  91. data/test/distributed_publish_subscribe_test.rb +0 -90
  92. data/test/distributed_remote_server_control_commands_test.rb +0 -64
  93. data/test/distributed_scripting_test.rb +0 -100
  94. data/test/distributed_sorting_test.rb +0 -18
  95. data/test/distributed_test.rb +0 -56
  96. data/test/distributed_transactions_test.rb +0 -30
  97. data/test/encoding_test.rb +0 -14
  98. data/test/error_replies_test.rb +0 -57
  99. data/test/fork_safety_test.rb +0 -60
  100. data/test/helper.rb +0 -344
  101. data/test/helper_test.rb +0 -22
  102. data/test/internals_test.rb +0 -395
  103. data/test/lint/blocking_commands.rb +0 -174
  104. data/test/lint/hashes.rb +0 -203
  105. data/test/lint/hyper_log_log.rb +0 -74
  106. data/test/lint/lists.rb +0 -159
  107. data/test/lint/sets.rb +0 -282
  108. data/test/lint/sorted_sets.rb +0 -497
  109. data/test/lint/strings.rb +0 -348
  110. data/test/lint/value_types.rb +0 -130
  111. data/test/persistence_control_commands_test.rb +0 -24
  112. data/test/pipelining_commands_test.rb +0 -246
  113. data/test/publish_subscribe_test.rb +0 -280
  114. data/test/remote_server_control_commands_test.rb +0 -175
  115. data/test/scanning_test.rb +0 -407
  116. data/test/scripting_test.rb +0 -76
  117. data/test/sentinel_command_test.rb +0 -78
  118. data/test/sentinel_test.rb +0 -253
  119. data/test/sorting_test.rb +0 -57
  120. data/test/ssl_test.rb +0 -69
  121. data/test/support/cluster/orchestrator.rb +0 -199
  122. data/test/support/connection/hiredis.rb +0 -1
  123. data/test/support/connection/ruby.rb +0 -1
  124. data/test/support/connection/synchrony.rb +0 -17
  125. data/test/support/redis_mock.rb +0 -130
  126. data/test/support/ssl/gen_certs.sh +0 -31
  127. data/test/support/ssl/trusted-ca.crt +0 -25
  128. data/test/support/ssl/trusted-ca.key +0 -27
  129. data/test/support/ssl/trusted-cert.crt +0 -81
  130. data/test/support/ssl/trusted-cert.key +0 -28
  131. data/test/support/ssl/untrusted-ca.crt +0 -26
  132. data/test/support/ssl/untrusted-ca.key +0 -27
  133. data/test/support/ssl/untrusted-cert.crt +0 -82
  134. data/test/support/ssl/untrusted-cert.key +0 -28
  135. data/test/support/wire/synchrony.rb +0 -24
  136. data/test/support/wire/thread.rb +0 -5
  137. data/test/synchrony_driver.rb +0 -85
  138. data/test/test.conf.erb +0 -9
  139. data/test/thread_safety_test.rb +0 -60
  140. data/test/transactions_test.rb +0 -272
  141. data/test/unknown_commands_test.rb +0 -12
  142. data/test/url_param_test.rb +0 -136
@@ -1,348 +0,0 @@
1
- module Lint
2
-
3
- module Strings
4
- def mock(*args, &block)
5
- redis_mock(*args, &block)
6
- end
7
-
8
- def test_set_and_get
9
- r.set("foo", "s1")
10
-
11
- assert_equal "s1", r.get("foo")
12
- end
13
-
14
- def test_set_and_get_with_newline_characters
15
- r.set("foo", "1\n")
16
-
17
- assert_equal "1\n", r.get("foo")
18
- end
19
-
20
- def test_set_and_get_with_non_string_value
21
- value = ["a", "b"]
22
-
23
- r.set("foo", value)
24
-
25
- assert_equal value.to_s, r.get("foo")
26
- end
27
-
28
- def test_set_and_get_with_ascii_characters
29
- with_external_encoding("ASCII-8BIT") do
30
- (0..255).each do |i|
31
- str = "#{i.chr}---#{i.chr}"
32
- r.set("foo", str)
33
-
34
- assert_equal str, r.get("foo")
35
- end
36
- end
37
- end
38
-
39
- def test_set_with_ex
40
- target_version "2.6.12" do
41
- r.set("foo", "bar", :ex => 2)
42
- assert_in_range 0..2, r.ttl("foo")
43
- end
44
- end
45
-
46
- def test_set_with_px
47
- target_version "2.6.12" do
48
- r.set("foo", "bar", :px => 2000)
49
- assert_in_range 0..2, r.ttl("foo")
50
- end
51
- end
52
-
53
- def test_set_with_nx
54
- target_version "2.6.12" do
55
- r.set("foo", "qux", :nx => true)
56
- assert !r.set("foo", "bar", :nx => true)
57
- assert_equal "qux", r.get("foo")
58
-
59
- r.del("foo")
60
- assert r.set("foo", "bar", :nx => true)
61
- assert_equal "bar", r.get("foo")
62
- end
63
- end
64
-
65
- def test_set_with_xx
66
- target_version "2.6.12" do
67
- r.set("foo", "qux")
68
- assert r.set("foo", "bar", :xx => true)
69
- assert_equal "bar", r.get("foo")
70
-
71
- r.del("foo")
72
- assert !r.set("foo", "bar", :xx => true)
73
- end
74
- end
75
-
76
- def test_setex
77
- assert r.setex("foo", 1, "bar")
78
- assert_equal "bar", r.get("foo")
79
- assert [0, 1].include? r.ttl("foo")
80
- end
81
-
82
- def test_setex_with_non_string_value
83
- value = ["b", "a", "r"]
84
-
85
- assert r.setex("foo", 1, value)
86
- assert_equal value.to_s, r.get("foo")
87
- assert [0, 1].include? r.ttl("foo")
88
- end
89
-
90
- def test_psetex
91
- target_version "2.5.4" do
92
- assert r.psetex("foo", 1000, "bar")
93
- assert_equal "bar", r.get("foo")
94
- assert [0, 1].include? r.ttl("foo")
95
- end
96
- end
97
-
98
- def test_psetex_with_non_string_value
99
- target_version "2.5.4" do
100
- value = ["b", "a", "r"]
101
-
102
- assert r.psetex("foo", 1000, value)
103
- assert_equal value.to_s, r.get("foo")
104
- assert [0, 1].include? r.ttl("foo")
105
- end
106
- end
107
-
108
- def test_getset
109
- r.set("foo", "bar")
110
-
111
- assert_equal "bar", r.getset("foo", "baz")
112
- assert_equal "baz", r.get("foo")
113
- end
114
-
115
- def test_getset_with_non_string_value
116
- r.set("foo", "zap")
117
-
118
- value = ["b", "a", "r"]
119
-
120
- assert_equal "zap", r.getset("foo", value)
121
- assert_equal value.to_s, r.get("foo")
122
- end
123
-
124
- def test_setnx
125
- r.set("foo", "qux")
126
- assert !r.setnx("foo", "bar")
127
- assert_equal "qux", r.get("foo")
128
-
129
- r.del("foo")
130
- assert r.setnx("foo", "bar")
131
- assert_equal "bar", r.get("foo")
132
- end
133
-
134
- def test_setnx_with_non_string_value
135
- value = ["b", "a", "r"]
136
-
137
- r.set("foo", "qux")
138
- assert !r.setnx("foo", value)
139
- assert_equal "qux", r.get("foo")
140
-
141
- r.del("foo")
142
- assert r.setnx("foo", value)
143
- assert_equal value.to_s, r.get("foo")
144
- end
145
-
146
- def test_incr
147
- assert_equal 1, r.incr("foo")
148
- assert_equal 2, r.incr("foo")
149
- assert_equal 3, r.incr("foo")
150
- end
151
-
152
- def test_incrby
153
- assert_equal 1, r.incrby("foo", 1)
154
- assert_equal 3, r.incrby("foo", 2)
155
- assert_equal 6, r.incrby("foo", 3)
156
- end
157
-
158
- def test_incrbyfloat
159
- target_version "2.5.4" do
160
- assert_equal 1.23, r.incrbyfloat("foo", 1.23)
161
- assert_equal 2 , r.incrbyfloat("foo", 0.77)
162
- assert_equal 1.9 , r.incrbyfloat("foo", -0.1)
163
- end
164
- end
165
-
166
- def test_decr
167
- r.set("foo", 3)
168
-
169
- assert_equal 2, r.decr("foo")
170
- assert_equal 1, r.decr("foo")
171
- assert_equal 0, r.decr("foo")
172
- end
173
-
174
- def test_decrby
175
- r.set("foo", 6)
176
-
177
- assert_equal 3, r.decrby("foo", 3)
178
- assert_equal 1, r.decrby("foo", 2)
179
- assert_equal 0, r.decrby("foo", 1)
180
- end
181
-
182
- def test_append
183
- r.set "foo", "s"
184
- r.append "foo", "1"
185
-
186
- assert_equal "s1", r.get("foo")
187
- end
188
-
189
- def test_getbit
190
- r.set("foo", "a")
191
-
192
- assert_equal 1, r.getbit("foo", 1)
193
- assert_equal 1, r.getbit("foo", 2)
194
- assert_equal 0, r.getbit("foo", 3)
195
- assert_equal 0, r.getbit("foo", 4)
196
- assert_equal 0, r.getbit("foo", 5)
197
- assert_equal 0, r.getbit("foo", 6)
198
- assert_equal 1, r.getbit("foo", 7)
199
- end
200
-
201
- def test_setbit
202
- r.set("foo", "a")
203
-
204
- r.setbit("foo", 6, 1)
205
-
206
- assert_equal "c", r.get("foo")
207
- end
208
-
209
- def test_bitcount
210
- target_version "2.5.10" do
211
- r.set("foo", "abcde")
212
-
213
- assert_equal 10, r.bitcount("foo", 1, 3)
214
- assert_equal 17, r.bitcount("foo", 0, -1)
215
- end
216
- end
217
-
218
- def test_getrange
219
- r.set("foo", "abcde")
220
-
221
- assert_equal "bcd", r.getrange("foo", 1, 3)
222
- assert_equal "abcde", r.getrange("foo", 0, -1)
223
- end
224
-
225
- def test_setrange
226
- r.set("foo", "abcde")
227
-
228
- r.setrange("foo", 1, "bar")
229
-
230
- assert_equal "abare", r.get("foo")
231
- end
232
-
233
- def test_setrange_with_non_string_value
234
- r.set("foo", "abcde")
235
-
236
- value = ["b", "a", "r"]
237
-
238
- r.setrange("foo", 2, value)
239
-
240
- assert_equal "ab#{value.to_s}", r.get("foo")
241
- end
242
-
243
- def test_strlen
244
- r.set "foo", "lorem"
245
-
246
- assert_equal 5, r.strlen("foo")
247
- end
248
-
249
- def test_bitfield
250
- target_version('3.2.0') do
251
- mock(bitfield: ->(*_) { "*2\r\n:1\r\n:0\r\n" }) do |redis|
252
- assert_equal [1, 0], redis.bitfield('foo', 'INCRBY', 'i5', 100, 1, 'GET', 'u4', 0)
253
- end
254
- end
255
- end
256
-
257
- def test_mget
258
- r.set('{1}foo', 's1')
259
- r.set('{1}bar', 's2')
260
-
261
- assert_equal %w[s1 s2], r.mget('{1}foo', '{1}bar')
262
- assert_equal ['s1', 's2', nil], r.mget('{1}foo', '{1}bar', '{1}baz')
263
- end
264
-
265
- def test_mget_mapped
266
- r.set('{1}foo', 's1')
267
- r.set('{1}bar', 's2')
268
-
269
- response = r.mapped_mget('{1}foo', '{1}bar')
270
-
271
- assert_equal 's1', response['{1}foo']
272
- assert_equal 's2', response['{1}bar']
273
-
274
- response = r.mapped_mget('{1}foo', '{1}bar', '{1}baz')
275
-
276
- assert_equal 's1', response['{1}foo']
277
- assert_equal 's2', response['{1}bar']
278
- assert_equal nil, response['{1}baz']
279
- end
280
-
281
- def test_mapped_mget_in_a_pipeline_returns_hash
282
- r.set('{1}foo', 's1')
283
- r.set('{1}bar', 's2')
284
-
285
- result = r.pipelined do
286
- r.mapped_mget('{1}foo', '{1}bar')
287
- end
288
-
289
- assert_equal({ '{1}foo' => 's1', '{1}bar' => 's2' }, result[0])
290
- end
291
-
292
- def test_mset
293
- r.mset('{1}foo', 's1', '{1}bar', 's2')
294
-
295
- assert_equal 's1', r.get('{1}foo')
296
- assert_equal 's2', r.get('{1}bar')
297
- end
298
-
299
- def test_mset_mapped
300
- r.mapped_mset('{1}foo' => 's1', '{1}bar' => 's2')
301
-
302
- assert_equal 's1', r.get('{1}foo')
303
- assert_equal 's2', r.get('{1}bar')
304
- end
305
-
306
- def test_msetnx
307
- r.set('{1}foo', 's1')
308
- assert_equal false, r.msetnx('{1}foo', 's2', '{1}bar', 's3')
309
- assert_equal 's1', r.get('{1}foo')
310
- assert_equal nil, r.get('{1}bar')
311
-
312
- r.del('{1}foo')
313
- assert_equal true, r.msetnx('{1}foo', 's2', '{1}bar', 's3')
314
- assert_equal 's2', r.get('{1}foo')
315
- assert_equal 's3', r.get('{1}bar')
316
- end
317
-
318
- def test_msetnx_mapped
319
- r.set('{1}foo', 's1')
320
- assert_equal false, r.mapped_msetnx('{1}foo' => 's2', '{1}bar' => 's3')
321
- assert_equal 's1', r.get('{1}foo')
322
- assert_equal nil, r.get('{1}bar')
323
-
324
- r.del('{1}foo')
325
- assert_equal true, r.mapped_msetnx('{1}foo' => 's2', '{1}bar' => 's3')
326
- assert_equal 's2', r.get('{1}foo')
327
- assert_equal 's3', r.get('{1}bar')
328
- end
329
-
330
- def test_bitop
331
- with_external_encoding('UTF-8') do
332
- target_version '2.5.10' do
333
- r.set('foo{1}', 'a')
334
- r.set('bar{1}', 'b')
335
-
336
- r.bitop(:and, 'foo&bar{1}', 'foo{1}', 'bar{1}')
337
- assert_equal "\x60", r.get('foo&bar{1}')
338
- r.bitop(:or, 'foo|bar{1}', 'foo{1}', 'bar{1}')
339
- assert_equal "\x63", r.get('foo|bar{1}')
340
- r.bitop(:xor, 'foo^bar{1}', 'foo{1}', 'bar{1}')
341
- assert_equal "\x03", r.get('foo^bar{1}')
342
- r.bitop(:not, '~foo{1}', 'foo{1}')
343
- assert_equal "\x9E", r.get('~foo{1}')
344
- end
345
- end
346
- end
347
- end
348
- end
@@ -1,130 +0,0 @@
1
- module Lint
2
-
3
- module ValueTypes
4
-
5
- def test_exists
6
- assert_equal false, r.exists("foo")
7
-
8
- r.set("foo", "s1")
9
-
10
- assert_equal true, r.exists("foo")
11
- end
12
-
13
- def test_type
14
- assert_equal "none", r.type("foo")
15
-
16
- r.set("foo", "s1")
17
-
18
- assert_equal "string", r.type("foo")
19
- end
20
-
21
- def test_keys
22
- r.set("f", "s1")
23
- r.set("fo", "s2")
24
- r.set("foo", "s3")
25
-
26
- assert_equal ["f","fo", "foo"], r.keys("f*").sort
27
- end
28
-
29
- def test_expire
30
- r.set("foo", "s1")
31
- assert r.expire("foo", 2)
32
- assert_in_range 0..2, r.ttl("foo")
33
- end
34
-
35
- def test_pexpire
36
- target_version "2.5.4" do
37
- r.set("foo", "s1")
38
- assert r.pexpire("foo", 2000)
39
- assert_in_range 0..2, r.ttl("foo")
40
- end
41
- end
42
-
43
- def test_expireat
44
- r.set("foo", "s1")
45
- assert r.expireat("foo", (Time.now + 2).to_i)
46
- assert_in_range 0..2, r.ttl("foo")
47
- end
48
-
49
- def test_pexpireat
50
- target_version "2.5.4" do
51
- r.set("foo", "s1")
52
- assert r.pexpireat("foo", (Time.now + 2).to_i * 1_000)
53
- assert_in_range 0..2, r.ttl("foo")
54
- end
55
- end
56
-
57
- def test_persist
58
- r.set("foo", "s1")
59
- r.expire("foo", 1)
60
- r.persist("foo")
61
-
62
- assert(-1 == r.ttl("foo"))
63
- end
64
-
65
- def test_ttl
66
- r.set("foo", "s1")
67
- r.expire("foo", 2)
68
- assert_in_range 0..2, r.ttl("foo")
69
- end
70
-
71
- def test_pttl
72
- target_version "2.5.4" do
73
- r.set("foo", "s1")
74
- r.expire("foo", 2)
75
- assert_in_range 1..2000, r.pttl("foo")
76
- end
77
- end
78
-
79
- def test_dump_and_restore
80
- target_version "2.5.7" do
81
- r.set("foo", "a")
82
- v = r.dump("foo")
83
- r.del("foo")
84
-
85
- assert r.restore("foo", 1000, v)
86
- assert_equal "a", r.get("foo")
87
- assert [0, 1].include? r.ttl("foo")
88
-
89
- r.rpush("bar", ["b", "c", "d"])
90
- w = r.dump("bar")
91
- r.del("bar")
92
-
93
- assert r.restore("bar", 1000, w)
94
- assert_equal ["b", "c", "d"], r.lrange("bar", 0, -1)
95
- assert [0, 1].include? r.ttl("bar")
96
-
97
- r.set("bar", "somethingelse")
98
- assert_raises(Redis::CommandError) { r.restore("bar", 1000, w) } # ensure by default replace is false
99
- assert_raises(Redis::CommandError) { r.restore("bar", 1000, w, :replace => false) }
100
- assert_equal "somethingelse", r.get("bar")
101
- assert r.restore("bar", 1000, w, :replace => true)
102
- assert_equal ["b", "c", "d"], r.lrange("bar", 0, -1)
103
- assert [0, 1].include? r.ttl("bar")
104
- end
105
- end
106
-
107
- def test_move
108
- r.select 14
109
- r.flushdb
110
-
111
- r.set "bar", "s3"
112
-
113
- r.select 15
114
-
115
- r.set "foo", "s1"
116
- r.set "bar", "s2"
117
-
118
- assert r.move("foo", 14)
119
- assert_equal nil, r.get("foo")
120
-
121
- assert !r.move("bar", 14)
122
- assert_equal "s2", r.get("bar")
123
-
124
- r.select 14
125
-
126
- assert_equal "s1", r.get("foo")
127
- assert_equal "s3", r.get("bar")
128
- end
129
- end
130
- end