redis 4.0.0 → 5.0.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 (137) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +252 -1
  3. data/README.md +126 -88
  4. data/lib/redis/client.rb +79 -543
  5. data/lib/redis/commands/bitmaps.rb +66 -0
  6. data/lib/redis/commands/cluster.rb +28 -0
  7. data/lib/redis/commands/connection.rb +53 -0
  8. data/lib/redis/commands/geo.rb +84 -0
  9. data/lib/redis/commands/hashes.rb +254 -0
  10. data/lib/redis/commands/hyper_log_log.rb +37 -0
  11. data/lib/redis/commands/keys.rb +437 -0
  12. data/lib/redis/commands/lists.rb +285 -0
  13. data/lib/redis/commands/pubsub.rb +54 -0
  14. data/lib/redis/commands/scripting.rb +114 -0
  15. data/lib/redis/commands/server.rb +188 -0
  16. data/lib/redis/commands/sets.rb +214 -0
  17. data/lib/redis/commands/sorted_sets.rb +818 -0
  18. data/lib/redis/commands/streams.rb +384 -0
  19. data/lib/redis/commands/strings.rb +314 -0
  20. data/lib/redis/commands/transactions.rb +115 -0
  21. data/lib/redis/commands.rb +235 -0
  22. data/lib/redis/distributed.rb +301 -109
  23. data/lib/redis/errors.rb +19 -1
  24. data/lib/redis/hash_ring.rb +34 -33
  25. data/lib/redis/pipeline.rb +69 -77
  26. data/lib/redis/subscribe.rb +26 -19
  27. data/lib/redis/version.rb +3 -1
  28. data/lib/redis.rb +109 -2728
  29. metadata +37 -229
  30. data/.gitignore +0 -16
  31. data/.travis/Gemfile +0 -13
  32. data/.travis.yml +0 -73
  33. data/.yardopts +0 -3
  34. data/Gemfile +0 -3
  35. data/benchmarking/logging.rb +0 -71
  36. data/benchmarking/pipeline.rb +0 -51
  37. data/benchmarking/speed.rb +0 -21
  38. data/benchmarking/suite.rb +0 -24
  39. data/benchmarking/worker.rb +0 -71
  40. data/bors.toml +0 -14
  41. data/examples/basic.rb +0 -15
  42. data/examples/consistency.rb +0 -114
  43. data/examples/dist_redis.rb +0 -43
  44. data/examples/incr-decr.rb +0 -17
  45. data/examples/list.rb +0 -26
  46. data/examples/pubsub.rb +0 -37
  47. data/examples/sentinel/sentinel.conf +0 -9
  48. data/examples/sentinel/start +0 -49
  49. data/examples/sentinel.rb +0 -41
  50. data/examples/sets.rb +0 -36
  51. data/examples/unicorn/config.ru +0 -3
  52. data/examples/unicorn/unicorn.rb +0 -20
  53. data/lib/redis/connection/command_helper.rb +0 -38
  54. data/lib/redis/connection/hiredis.rb +0 -66
  55. data/lib/redis/connection/registry.rb +0 -12
  56. data/lib/redis/connection/ruby.rb +0 -409
  57. data/lib/redis/connection/synchrony.rb +0 -141
  58. data/lib/redis/connection.rb +0 -9
  59. data/makefile +0 -42
  60. data/redis.gemspec +0 -42
  61. data/test/bitpos_test.rb +0 -63
  62. data/test/blocking_commands_test.rb +0 -40
  63. data/test/client_test.rb +0 -59
  64. data/test/command_map_test.rb +0 -28
  65. data/test/commands_on_hashes_test.rb +0 -19
  66. data/test/commands_on_hyper_log_log_test.rb +0 -19
  67. data/test/commands_on_lists_test.rb +0 -18
  68. data/test/commands_on_sets_test.rb +0 -75
  69. data/test/commands_on_sorted_sets_test.rb +0 -150
  70. data/test/commands_on_strings_test.rb +0 -99
  71. data/test/commands_on_value_types_test.rb +0 -131
  72. data/test/connection_handling_test.rb +0 -275
  73. data/test/db/.gitkeep +0 -0
  74. data/test/distributed_blocking_commands_test.rb +0 -44
  75. data/test/distributed_commands_on_hashes_test.rb +0 -8
  76. data/test/distributed_commands_on_hyper_log_log_test.rb +0 -31
  77. data/test/distributed_commands_on_lists_test.rb +0 -20
  78. data/test/distributed_commands_on_sets_test.rb +0 -81
  79. data/test/distributed_commands_on_sorted_sets_test.rb +0 -16
  80. data/test/distributed_commands_on_strings_test.rb +0 -57
  81. data/test/distributed_commands_on_value_types_test.rb +0 -93
  82. data/test/distributed_commands_requiring_clustering_test.rb +0 -162
  83. data/test/distributed_connection_handling_test.rb +0 -21
  84. data/test/distributed_internals_test.rb +0 -68
  85. data/test/distributed_key_tags_test.rb +0 -50
  86. data/test/distributed_persistence_control_commands_test.rb +0 -24
  87. data/test/distributed_publish_subscribe_test.rb +0 -90
  88. data/test/distributed_remote_server_control_commands_test.rb +0 -64
  89. data/test/distributed_scripting_test.rb +0 -100
  90. data/test/distributed_sorting_test.rb +0 -18
  91. data/test/distributed_test.rb +0 -56
  92. data/test/distributed_transactions_test.rb +0 -30
  93. data/test/encoding_test.rb +0 -14
  94. data/test/error_replies_test.rb +0 -57
  95. data/test/fork_safety_test.rb +0 -60
  96. data/test/helper.rb +0 -201
  97. data/test/helper_test.rb +0 -22
  98. data/test/internals_test.rb +0 -429
  99. data/test/lint/blocking_commands.rb +0 -150
  100. data/test/lint/hashes.rb +0 -162
  101. data/test/lint/hyper_log_log.rb +0 -60
  102. data/test/lint/lists.rb +0 -143
  103. data/test/lint/sets.rb +0 -140
  104. data/test/lint/sorted_sets.rb +0 -316
  105. data/test/lint/strings.rb +0 -246
  106. data/test/lint/value_types.rb +0 -130
  107. data/test/persistence_control_commands_test.rb +0 -24
  108. data/test/pipelining_commands_test.rb +0 -238
  109. data/test/publish_subscribe_test.rb +0 -280
  110. data/test/remote_server_control_commands_test.rb +0 -175
  111. data/test/scanning_test.rb +0 -407
  112. data/test/scripting_test.rb +0 -76
  113. data/test/sentinel_command_test.rb +0 -78
  114. data/test/sentinel_test.rb +0 -253
  115. data/test/sorting_test.rb +0 -57
  116. data/test/ssl_test.rb +0 -69
  117. data/test/support/connection/hiredis.rb +0 -1
  118. data/test/support/connection/ruby.rb +0 -1
  119. data/test/support/connection/synchrony.rb +0 -17
  120. data/test/support/redis_mock.rb +0 -130
  121. data/test/support/ssl/gen_certs.sh +0 -31
  122. data/test/support/ssl/trusted-ca.crt +0 -25
  123. data/test/support/ssl/trusted-ca.key +0 -27
  124. data/test/support/ssl/trusted-cert.crt +0 -81
  125. data/test/support/ssl/trusted-cert.key +0 -28
  126. data/test/support/ssl/untrusted-ca.crt +0 -26
  127. data/test/support/ssl/untrusted-ca.key +0 -27
  128. data/test/support/ssl/untrusted-cert.crt +0 -82
  129. data/test/support/ssl/untrusted-cert.key +0 -28
  130. data/test/support/wire/synchrony.rb +0 -24
  131. data/test/support/wire/thread.rb +0 -5
  132. data/test/synchrony_driver.rb +0 -85
  133. data/test/test.conf.erb +0 -9
  134. data/test/thread_safety_test.rb +0 -60
  135. data/test/transactions_test.rb +0 -262
  136. data/test/unknown_commands_test.rb +0 -12
  137. data/test/url_param_test.rb +0 -136
@@ -1,40 +0,0 @@
1
- require_relative "helper"
2
- require_relative "lint/blocking_commands"
3
-
4
- class TestBlockingCommands < Test::Unit::TestCase
5
-
6
- include Helper::Client
7
- include Lint::BlockingCommands
8
-
9
- def assert_takes_longer_than_client_timeout
10
- timeout = OPTIONS[:timeout]
11
- delay = timeout * 2
12
-
13
- mock(:delay => delay) do |r|
14
- t1 = Time.now
15
- yield(r)
16
- t2 = Time.now
17
-
18
- assert timeout == r._client.timeout
19
- assert delay <= (t2 - t1)
20
- end
21
- end
22
-
23
- def test_blpop_disable_client_timeout
24
- assert_takes_longer_than_client_timeout do |r|
25
- assert_equal ["foo", "0"], r.blpop("foo")
26
- end
27
- end
28
-
29
- def test_brpop_disable_client_timeout
30
- assert_takes_longer_than_client_timeout do |r|
31
- assert_equal ["foo", "0"], r.brpop("foo")
32
- end
33
- end
34
-
35
- def test_brpoplpush_disable_client_timeout
36
- assert_takes_longer_than_client_timeout do |r|
37
- assert_equal "0", r.brpoplpush("foo", "bar")
38
- end
39
- end
40
- end
data/test/client_test.rb DELETED
@@ -1,59 +0,0 @@
1
- require_relative "helper"
2
-
3
- class TestClient < Test::Unit::TestCase
4
-
5
- include Helper::Client
6
-
7
- def test_call
8
- result = r.call("PING")
9
- assert_equal result, "PONG"
10
- end
11
-
12
- def test_call_with_arguments
13
- result = r.call("SET", "foo", "bar")
14
- assert_equal result, "OK"
15
- end
16
-
17
- def test_call_integers
18
- result = r.call("INCR", "foo")
19
- assert_equal result, 1
20
- end
21
-
22
- def test_call_raise
23
- assert_raises(Redis::CommandError) do
24
- r.call("INCR")
25
- end
26
- end
27
-
28
- def test_queue_commit
29
- r.queue("SET", "foo", "bar")
30
- r.queue("GET", "foo")
31
- result = r.commit
32
-
33
- assert_equal result, ["OK", "bar"]
34
- end
35
-
36
- def test_commit_raise
37
- r.queue("SET", "foo", "bar")
38
- r.queue("INCR")
39
-
40
- assert_raise(Redis::CommandError) do
41
- r.commit
42
- end
43
- end
44
-
45
- def test_queue_after_error
46
- r.queue("SET", "foo", "bar")
47
- r.queue("INCR")
48
-
49
- assert_raise(Redis::CommandError) do
50
- r.commit
51
- end
52
-
53
- r.queue("SET", "foo", "bar")
54
- r.queue("INCR", "baz")
55
- result = r.commit
56
-
57
- assert_equal result, ["OK", 1]
58
- end
59
- end
@@ -1,28 +0,0 @@
1
- require_relative "helper"
2
-
3
- class TestCommandMap < Test::Unit::TestCase
4
-
5
- include Helper::Client
6
-
7
- def test_override_existing_commands
8
- r.set("counter", 1)
9
-
10
- assert_equal 2, r.incr("counter")
11
-
12
- r._client.command_map[:incr] = :decr
13
-
14
- assert_equal 1, r.incr("counter")
15
- end
16
-
17
- def test_override_non_existing_commands
18
- r.set("key", "value")
19
-
20
- assert_raise Redis::CommandError do
21
- r.idontexist("key")
22
- end
23
-
24
- r._client.command_map[:idontexist] = :get
25
-
26
- assert_equal "value", r.idontexist("key")
27
- end
28
- end
@@ -1,19 +0,0 @@
1
- require_relative "helper"
2
- require_relative "lint/hashes"
3
-
4
- class TestCommandsOnHashes < Test::Unit::TestCase
5
-
6
- include Helper::Client
7
- include Lint::Hashes
8
-
9
- def test_mapped_hmget_in_a_pipeline_returns_hash
10
- r.hset("foo", "f1", "s1")
11
- r.hset("foo", "f2", "s2")
12
-
13
- result = r.pipelined do
14
- r.mapped_hmget("foo", "f1", "f2")
15
- end
16
-
17
- assert_equal result[0], { "f1" => "s1", "f2" => "s2" }
18
- end
19
- end
@@ -1,19 +0,0 @@
1
- require_relative "helper"
2
- require_relative "lint/hyper_log_log"
3
-
4
- class TestCommandsOnHyperLogLog < Test::Unit::TestCase
5
-
6
- include Helper::Client
7
- include Lint::HyperLogLog
8
-
9
- def test_pfmerge
10
- target_version "2.8.9" do
11
- r.pfadd "foo", "s1"
12
- r.pfadd "bar", "s2"
13
-
14
- assert_equal true, r.pfmerge("res", "foo", "bar")
15
- assert_equal 2, r.pfcount("res")
16
- end
17
- end
18
-
19
- end
@@ -1,18 +0,0 @@
1
- require_relative "helper"
2
- require_relative "lint/lists"
3
-
4
- class TestCommandsOnLists < Test::Unit::TestCase
5
-
6
- include Helper::Client
7
- include Lint::Lists
8
-
9
- def test_rpoplpush
10
- r.rpush "foo", "s1"
11
- r.rpush "foo", "s2"
12
-
13
- assert_equal "s2", r.rpoplpush("foo", "bar")
14
- assert_equal ["s2"], r.lrange("bar", 0, -1)
15
- assert_equal "s1", r.rpoplpush("foo", "bar")
16
- assert_equal ["s1", "s2"], r.lrange("bar", 0, -1)
17
- end
18
- end
@@ -1,75 +0,0 @@
1
- require_relative "helper"
2
- require_relative "lint/sets"
3
-
4
- class TestCommandsOnSets < Test::Unit::TestCase
5
-
6
- include Helper::Client
7
- include Lint::Sets
8
-
9
- def test_smove
10
- r.sadd "foo", "s1"
11
- r.sadd "bar", "s2"
12
-
13
- assert r.smove("foo", "bar", "s1")
14
- assert r.sismember("bar", "s1")
15
- end
16
-
17
- def test_sinter
18
- r.sadd "foo", "s1"
19
- r.sadd "foo", "s2"
20
- r.sadd "bar", "s2"
21
-
22
- assert_equal ["s2"], r.sinter("foo", "bar")
23
- end
24
-
25
- def test_sinterstore
26
- r.sadd "foo", "s1"
27
- r.sadd "foo", "s2"
28
- r.sadd "bar", "s2"
29
-
30
- r.sinterstore("baz", "foo", "bar")
31
-
32
- assert_equal ["s2"], r.smembers("baz")
33
- end
34
-
35
- def test_sunion
36
- r.sadd "foo", "s1"
37
- r.sadd "foo", "s2"
38
- r.sadd "bar", "s2"
39
- r.sadd "bar", "s3"
40
-
41
- assert_equal ["s1", "s2", "s3"], r.sunion("foo", "bar").sort
42
- end
43
-
44
- def test_sunionstore
45
- r.sadd "foo", "s1"
46
- r.sadd "foo", "s2"
47
- r.sadd "bar", "s2"
48
- r.sadd "bar", "s3"
49
-
50
- r.sunionstore("baz", "foo", "bar")
51
-
52
- assert_equal ["s1", "s2", "s3"], r.smembers("baz").sort
53
- end
54
-
55
- def test_sdiff
56
- r.sadd "foo", "s1"
57
- r.sadd "foo", "s2"
58
- r.sadd "bar", "s2"
59
- r.sadd "bar", "s3"
60
-
61
- assert_equal ["s1"], r.sdiff("foo", "bar")
62
- assert_equal ["s3"], r.sdiff("bar", "foo")
63
- end
64
-
65
- def test_sdiffstore
66
- r.sadd "foo", "s1"
67
- r.sadd "foo", "s2"
68
- r.sadd "bar", "s2"
69
- r.sadd "bar", "s3"
70
-
71
- r.sdiffstore("baz", "foo", "bar")
72
-
73
- assert_equal ["s1"], r.smembers("baz")
74
- end
75
- end
@@ -1,150 +0,0 @@
1
- require_relative "helper"
2
- require_relative "lint/sorted_sets"
3
-
4
- class TestCommandsOnSortedSets < Test::Unit::TestCase
5
-
6
- include Helper::Client
7
- include Lint::SortedSets
8
-
9
- def test_zlexcount
10
- target_version "2.8.9" do
11
- r.zadd "foo", 0, "aaren"
12
- r.zadd "foo", 0, "abagael"
13
- r.zadd "foo", 0, "abby"
14
- r.zadd "foo", 0, "abbygail"
15
-
16
- assert_equal 4, r.zlexcount("foo", "[a", "[a\xff")
17
- assert_equal 4, r.zlexcount("foo", "[aa", "[ab\xff")
18
- assert_equal 3, r.zlexcount("foo", "(aaren", "[ab\xff")
19
- assert_equal 2, r.zlexcount("foo", "[aba", "(abbygail")
20
- assert_equal 1, r.zlexcount("foo", "(aaren", "(abby")
21
- end
22
- end
23
-
24
- def test_zrangebylex
25
- target_version "2.8.9" do
26
- r.zadd "foo", 0, "aaren"
27
- r.zadd "foo", 0, "abagael"
28
- r.zadd "foo", 0, "abby"
29
- r.zadd "foo", 0, "abbygail"
30
-
31
- assert_equal ["aaren", "abagael", "abby", "abbygail"], r.zrangebylex("foo", "[a", "[a\xff")
32
- assert_equal ["aaren", "abagael"], r.zrangebylex("foo", "[a", "[a\xff", :limit => [0, 2])
33
- assert_equal ["abby", "abbygail"], r.zrangebylex("foo", "(abb", "(abb\xff")
34
- assert_equal ["abbygail"], r.zrangebylex("foo", "(abby", "(abby\xff")
35
- end
36
- end
37
-
38
- def test_zrevrangebylex
39
- target_version "2.9.9" do
40
- r.zadd "foo", 0, "aaren"
41
- r.zadd "foo", 0, "abagael"
42
- r.zadd "foo", 0, "abby"
43
- r.zadd "foo", 0, "abbygail"
44
-
45
- assert_equal ["abbygail", "abby", "abagael", "aaren"], r.zrevrangebylex("foo", "[a\xff", "[a")
46
- assert_equal ["abbygail", "abby"], r.zrevrangebylex("foo", "[a\xff", "[a", :limit => [0, 2])
47
- assert_equal ["abbygail", "abby"], r.zrevrangebylex("foo", "(abb\xff", "(abb")
48
- assert_equal ["abbygail"], r.zrevrangebylex("foo", "(abby\xff", "(abby")
49
- end
50
- end
51
-
52
- def test_zcount
53
- r.zadd "foo", 1, "s1"
54
- r.zadd "foo", 2, "s2"
55
- r.zadd "foo", 3, "s3"
56
-
57
- assert_equal 2, r.zcount("foo", 2, 3)
58
- end
59
-
60
- def test_zunionstore
61
- r.zadd "foo", 1, "s1"
62
- r.zadd "bar", 2, "s2"
63
- r.zadd "foo", 3, "s3"
64
- r.zadd "bar", 4, "s4"
65
-
66
- assert_equal 4, r.zunionstore("foobar", ["foo", "bar"])
67
- assert_equal ["s1", "s2", "s3", "s4"], r.zrange("foobar", 0, -1)
68
- end
69
-
70
- def test_zunionstore_with_weights
71
- r.zadd "foo", 1, "s1"
72
- r.zadd "foo", 3, "s3"
73
- r.zadd "bar", 20, "s2"
74
- r.zadd "bar", 40, "s4"
75
-
76
- assert_equal 4, r.zunionstore("foobar", ["foo", "bar"])
77
- assert_equal ["s1", "s3", "s2", "s4"], r.zrange("foobar", 0, -1)
78
-
79
- assert_equal 4, r.zunionstore("foobar", ["foo", "bar"], :weights => [10, 1])
80
- assert_equal ["s1", "s2", "s3", "s4"], r.zrange("foobar", 0, -1)
81
- end
82
-
83
- def test_zunionstore_with_aggregate
84
- r.zadd "foo", 1, "s1"
85
- r.zadd "foo", 2, "s2"
86
- r.zadd "bar", 4, "s2"
87
- r.zadd "bar", 3, "s3"
88
-
89
- assert_equal 3, r.zunionstore("foobar", ["foo", "bar"])
90
- assert_equal ["s1", "s3", "s2"], r.zrange("foobar", 0, -1)
91
-
92
- assert_equal 3, r.zunionstore("foobar", ["foo", "bar"], :aggregate => :min)
93
- assert_equal ["s1", "s2", "s3"], r.zrange("foobar", 0, -1)
94
-
95
- assert_equal 3, r.zunionstore("foobar", ["foo", "bar"], :aggregate => :max)
96
- assert_equal ["s1", "s3", "s2"], r.zrange("foobar", 0, -1)
97
- end
98
-
99
- def test_zinterstore
100
- r.zadd "foo", 1, "s1"
101
- r.zadd "bar", 2, "s1"
102
- r.zadd "foo", 3, "s3"
103
- r.zadd "bar", 4, "s4"
104
-
105
- assert_equal 1, r.zinterstore("foobar", ["foo", "bar"])
106
- assert_equal ["s1"], r.zrange("foobar", 0, -1)
107
- end
108
-
109
- def test_zinterstore_with_weights
110
- r.zadd "foo", 1, "s1"
111
- r.zadd "foo", 2, "s2"
112
- r.zadd "foo", 3, "s3"
113
- r.zadd "bar", 20, "s2"
114
- r.zadd "bar", 30, "s3"
115
- r.zadd "bar", 40, "s4"
116
-
117
- assert_equal 2, r.zinterstore("foobar", ["foo", "bar"])
118
- assert_equal ["s2", "s3"], r.zrange("foobar", 0, -1)
119
-
120
- assert_equal 2, r.zinterstore("foobar", ["foo", "bar"], :weights => [10, 1])
121
- assert_equal ["s2", "s3"], r.zrange("foobar", 0, -1)
122
-
123
- assert_equal 40.0, r.zscore("foobar", "s2")
124
- assert_equal 60.0, r.zscore("foobar", "s3")
125
- end
126
-
127
- def test_zinterstore_with_aggregate
128
- r.zadd "foo", 1, "s1"
129
- r.zadd "foo", 2, "s2"
130
- r.zadd "foo", 3, "s3"
131
- r.zadd "bar", 20, "s2"
132
- r.zadd "bar", 30, "s3"
133
- r.zadd "bar", 40, "s4"
134
-
135
- assert_equal 2, r.zinterstore("foobar", ["foo", "bar"])
136
- assert_equal ["s2", "s3"], r.zrange("foobar", 0, -1)
137
- assert_equal 22.0, r.zscore("foobar", "s2")
138
- assert_equal 33.0, r.zscore("foobar", "s3")
139
-
140
- assert_equal 2, r.zinterstore("foobar", ["foo", "bar"], :aggregate => :min)
141
- assert_equal ["s2", "s3"], r.zrange("foobar", 0, -1)
142
- assert_equal 2.0, r.zscore("foobar", "s2")
143
- assert_equal 3.0, r.zscore("foobar", "s3")
144
-
145
- assert_equal 2, r.zinterstore("foobar", ["foo", "bar"], :aggregate => :max)
146
- assert_equal ["s2", "s3"], r.zrange("foobar", 0, -1)
147
- assert_equal 20.0, r.zscore("foobar", "s2")
148
- assert_equal 30.0, r.zscore("foobar", "s3")
149
- end
150
- end
@@ -1,99 +0,0 @@
1
- require_relative "helper"
2
- require_relative "lint/strings"
3
-
4
- class TestCommandsOnStrings < Test::Unit::TestCase
5
-
6
- include Helper::Client
7
- include Lint::Strings
8
-
9
- def test_mget
10
- r.set("foo", "s1")
11
- r.set("bar", "s2")
12
-
13
- assert_equal ["s1", "s2"] , r.mget("foo", "bar")
14
- assert_equal ["s1", "s2", nil], r.mget("foo", "bar", "baz")
15
- end
16
-
17
- def test_mget_mapped
18
- r.set("foo", "s1")
19
- r.set("bar", "s2")
20
-
21
- response = r.mapped_mget("foo", "bar")
22
-
23
- assert_equal "s1", response["foo"]
24
- assert_equal "s2", response["bar"]
25
-
26
- response = r.mapped_mget("foo", "bar", "baz")
27
-
28
- assert_equal "s1", response["foo"]
29
- assert_equal "s2", response["bar"]
30
- assert_equal nil , response["baz"]
31
- end
32
-
33
- def test_mapped_mget_in_a_pipeline_returns_hash
34
- r.set("foo", "s1")
35
- r.set("bar", "s2")
36
-
37
- result = r.pipelined do
38
- r.mapped_mget("foo", "bar")
39
- end
40
-
41
- assert_equal result[0], { "foo" => "s1", "bar" => "s2" }
42
- end
43
-
44
- def test_mset
45
- r.mset(:foo, "s1", :bar, "s2")
46
-
47
- assert_equal "s1", r.get("foo")
48
- assert_equal "s2", r.get("bar")
49
- end
50
-
51
- def test_mset_mapped
52
- r.mapped_mset(:foo => "s1", :bar => "s2")
53
-
54
- assert_equal "s1", r.get("foo")
55
- assert_equal "s2", r.get("bar")
56
- end
57
-
58
- def test_msetnx
59
- r.set("foo", "s1")
60
- assert_equal false, r.msetnx(:foo, "s2", :bar, "s3")
61
- assert_equal "s1", r.get("foo")
62
- assert_equal nil, r.get("bar")
63
-
64
- r.del("foo")
65
- assert_equal true, r.msetnx(:foo, "s2", :bar, "s3")
66
- assert_equal "s2", r.get("foo")
67
- assert_equal "s3", r.get("bar")
68
- end
69
-
70
- def test_msetnx_mapped
71
- r.set("foo", "s1")
72
- assert_equal false, r.mapped_msetnx(:foo => "s2", :bar => "s3")
73
- assert_equal "s1", r.get("foo")
74
- assert_equal nil, r.get("bar")
75
-
76
- r.del("foo")
77
- assert_equal true, r.mapped_msetnx(:foo => "s2", :bar => "s3")
78
- assert_equal "s2", r.get("foo")
79
- assert_equal "s3", r.get("bar")
80
- end
81
-
82
- def test_bitop
83
- with_external_encoding("UTF-8") do
84
- target_version "2.5.10" do
85
- r.set("foo", "a")
86
- r.set("bar", "b")
87
-
88
- r.bitop(:and, "foo&bar", "foo", "bar")
89
- assert_equal "\x60", r.get("foo&bar")
90
- r.bitop(:or, "foo|bar", "foo", "bar")
91
- assert_equal "\x63", r.get("foo|bar")
92
- r.bitop(:xor, "foo^bar", "foo", "bar")
93
- assert_equal "\x03", r.get("foo^bar")
94
- r.bitop(:not, "~foo", "foo")
95
- assert_equal "\x9E", r.get("~foo")
96
- end
97
- end
98
- end
99
- end
@@ -1,131 +0,0 @@
1
- require_relative "helper"
2
- require_relative "lint/value_types"
3
-
4
- class TestCommandsOnValueTypes < Test::Unit::TestCase
5
-
6
- include Helper::Client
7
- include Lint::ValueTypes
8
-
9
- def test_del
10
- r.set "foo", "s1"
11
- r.set "bar", "s2"
12
- r.set "baz", "s3"
13
-
14
- assert_equal ["bar", "baz", "foo"], r.keys("*").sort
15
-
16
- assert_equal 1, r.del("foo")
17
-
18
- assert_equal ["bar", "baz"], r.keys("*").sort
19
-
20
- assert_equal 2, r.del("bar", "baz")
21
-
22
- assert_equal [], r.keys("*").sort
23
- end
24
-
25
- def test_del_with_array_argument
26
- r.set "foo", "s1"
27
- r.set "bar", "s2"
28
- r.set "baz", "s3"
29
-
30
- assert_equal ["bar", "baz", "foo"], r.keys("*").sort
31
-
32
- assert_equal 1, r.del(["foo"])
33
-
34
- assert_equal ["bar", "baz"], r.keys("*").sort
35
-
36
- assert_equal 2, r.del(["bar", "baz"])
37
-
38
- assert_equal [], r.keys("*").sort
39
- end
40
-
41
- def test_randomkey
42
- assert r.randomkey.to_s.empty?
43
-
44
- r.set("foo", "s1")
45
-
46
- assert_equal "foo", r.randomkey
47
-
48
- r.set("bar", "s2")
49
-
50
- 4.times do
51
- assert ["foo", "bar"].include?(r.randomkey)
52
- end
53
- end
54
-
55
- def test_rename
56
- r.set("foo", "s1")
57
- r.rename "foo", "bar"
58
-
59
- assert_equal "s1", r.get("bar")
60
- assert_equal nil, r.get("foo")
61
- end
62
-
63
- def test_renamenx
64
- r.set("foo", "s1")
65
- r.set("bar", "s2")
66
-
67
- assert_equal false, r.renamenx("foo", "bar")
68
-
69
- assert_equal "s1", r.get("foo")
70
- assert_equal "s2", r.get("bar")
71
- end
72
-
73
- def test_dbsize
74
- assert_equal 0, r.dbsize
75
-
76
- r.set("foo", "s1")
77
-
78
- assert_equal 1, r.dbsize
79
- end
80
-
81
- def test_flushdb
82
- r.set("foo", "s1")
83
- r.set("bar", "s2")
84
-
85
- assert_equal 2, r.dbsize
86
-
87
- r.flushdb
88
-
89
- assert_equal 0, r.dbsize
90
- end
91
-
92
- def test_flushall
93
- redis_mock(:flushall => lambda { "+FLUSHALL" }) do |redis|
94
- assert_equal "FLUSHALL", redis.flushall
95
- end
96
- end
97
-
98
- def test_migrate
99
- redis_mock(:migrate => lambda { |*args| args }) do |redis|
100
- options = { :host => "127.0.0.1", :port => 1234 }
101
-
102
- ex = assert_raise(RuntimeError) do
103
- redis.migrate("foo", options.reject { |key, _| key == :host })
104
- end
105
- assert ex.message =~ /host not specified/
106
-
107
- ex = assert_raise(RuntimeError) do
108
- redis.migrate("foo", options.reject { |key, _| key == :port })
109
- end
110
- assert ex.message =~ /port not specified/
111
-
112
- default_db = redis._client.db.to_i
113
- default_timeout = redis._client.timeout.to_i
114
-
115
- # Test defaults
116
- actual = redis.migrate("foo", options)
117
- expected = ["127.0.0.1", "1234", "foo", default_db.to_s, default_timeout.to_s]
118
- assert_equal expected, actual
119
-
120
- # Test db override
121
- actual = redis.migrate("foo", options.merge(:db => default_db + 1))
122
- expected = ["127.0.0.1", "1234", "foo", (default_db + 1).to_s, default_timeout.to_s]
123
- assert_equal expected, actual
124
-
125
- # Test timeout override
126
- actual = redis.migrate("foo", options.merge(:timeout => default_timeout + 1))
127
- expected = ["127.0.0.1", "1234", "foo", default_db.to_s, (default_timeout + 1).to_s]
128
- assert_equal expected, actual
129
- end
130
- end
131
- end