redis 2.1.1 → 2.2.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 (79) hide show
  1. data/.gitignore +8 -0
  2. data/CHANGELOG.md +34 -0
  3. data/README.md +190 -0
  4. data/Rakefile +194 -79
  5. data/benchmarking/logging.rb +62 -0
  6. data/benchmarking/pipeline.rb +51 -0
  7. data/benchmarking/speed.rb +21 -0
  8. data/benchmarking/suite.rb +24 -0
  9. data/benchmarking/thread_safety.rb +38 -0
  10. data/benchmarking/worker.rb +71 -0
  11. data/examples/basic.rb +15 -0
  12. data/examples/dist_redis.rb +43 -0
  13. data/examples/incr-decr.rb +17 -0
  14. data/examples/list.rb +26 -0
  15. data/examples/pubsub.rb +31 -0
  16. data/examples/sets.rb +36 -0
  17. data/examples/unicorn/config.ru +3 -0
  18. data/examples/unicorn/unicorn.rb +20 -0
  19. data/lib/redis.rb +612 -156
  20. data/lib/redis/client.rb +98 -57
  21. data/lib/redis/connection.rb +9 -134
  22. data/lib/redis/connection/command_helper.rb +45 -0
  23. data/lib/redis/connection/hiredis.rb +49 -0
  24. data/lib/redis/connection/registry.rb +12 -0
  25. data/lib/redis/connection/ruby.rb +131 -0
  26. data/lib/redis/connection/synchrony.rb +125 -0
  27. data/lib/redis/distributed.rb +161 -5
  28. data/lib/redis/pipeline.rb +6 -0
  29. data/lib/redis/version.rb +3 -0
  30. data/redis.gemspec +24 -0
  31. data/test/commands_on_hashes_test.rb +32 -0
  32. data/test/commands_on_lists_test.rb +60 -0
  33. data/test/commands_on_sets_test.rb +78 -0
  34. data/test/commands_on_sorted_sets_test.rb +109 -0
  35. data/test/commands_on_strings_test.rb +80 -0
  36. data/test/commands_on_value_types_test.rb +88 -0
  37. data/test/connection_handling_test.rb +87 -0
  38. data/test/db/.gitignore +1 -0
  39. data/test/distributed_blocking_commands_test.rb +53 -0
  40. data/test/distributed_commands_on_hashes_test.rb +12 -0
  41. data/test/distributed_commands_on_lists_test.rb +24 -0
  42. data/test/distributed_commands_on_sets_test.rb +85 -0
  43. data/test/distributed_commands_on_strings_test.rb +50 -0
  44. data/test/distributed_commands_on_value_types_test.rb +73 -0
  45. data/test/distributed_commands_requiring_clustering_test.rb +148 -0
  46. data/test/distributed_connection_handling_test.rb +25 -0
  47. data/test/distributed_internals_test.rb +18 -0
  48. data/test/distributed_key_tags_test.rb +53 -0
  49. data/test/distributed_persistence_control_commands_test.rb +24 -0
  50. data/test/distributed_publish_subscribe_test.rb +101 -0
  51. data/test/distributed_remote_server_control_commands_test.rb +31 -0
  52. data/test/distributed_sorting_test.rb +21 -0
  53. data/test/distributed_test.rb +60 -0
  54. data/test/distributed_transactions_test.rb +34 -0
  55. data/test/encoding_test.rb +16 -0
  56. data/test/error_replies_test.rb +53 -0
  57. data/test/helper.rb +145 -0
  58. data/test/internals_test.rb +157 -0
  59. data/test/lint/hashes.rb +114 -0
  60. data/test/lint/internals.rb +41 -0
  61. data/test/lint/lists.rb +93 -0
  62. data/test/lint/sets.rb +66 -0
  63. data/test/lint/sorted_sets.rb +167 -0
  64. data/test/lint/strings.rb +137 -0
  65. data/test/lint/value_types.rb +84 -0
  66. data/test/persistence_control_commands_test.rb +22 -0
  67. data/test/pipelining_commands_test.rb +123 -0
  68. data/test/publish_subscribe_test.rb +158 -0
  69. data/test/redis_mock.rb +80 -0
  70. data/test/remote_server_control_commands_test.rb +63 -0
  71. data/test/sorting_test.rb +44 -0
  72. data/test/synchrony_driver.rb +57 -0
  73. data/test/test.conf +8 -0
  74. data/test/thread_safety_test.rb +30 -0
  75. data/test/transactions_test.rb +100 -0
  76. data/test/unknown_commands_test.rb +14 -0
  77. data/test/url_param_test.rb +60 -0
  78. metadata +128 -19
  79. data/README.markdown +0 -129
@@ -0,0 +1,63 @@
1
+ # encoding: UTF-8
2
+
3
+ require File.expand_path("./helper", File.dirname(__FILE__))
4
+ require File.expand_path("./redis_mock", File.dirname(__FILE__))
5
+
6
+ include RedisMock::Helper
7
+
8
+ setup do
9
+ init Redis.new(OPTIONS)
10
+ end
11
+
12
+ test "INFO" do |r|
13
+ %w(last_save_time redis_version total_connections_received connected_clients total_commands_processed connected_slaves uptime_in_seconds used_memory uptime_in_days changes_since_last_save).each do |x|
14
+ assert r.info.keys.include?(x)
15
+ end
16
+ end
17
+
18
+ test "MONITOR" do |r|
19
+ log = []
20
+
21
+ wire = Wire.new do
22
+ Redis.new(OPTIONS).monitor do |line|
23
+ log << line
24
+ break if log.size == 3
25
+ end
26
+ end
27
+
28
+ Wire.pass while log.empty? # Faster than sleep
29
+
30
+ r.set "foo", "s1"
31
+
32
+ wire.join
33
+
34
+ assert log[-1][%q{(db 15) "set" "foo" "s1"}]
35
+ end
36
+
37
+ test "MONITOR returns value for break" do |r|
38
+ result = r.monitor do |line|
39
+ break line
40
+ end
41
+
42
+ assert result == "OK"
43
+ end
44
+
45
+ test "ECHO" do |r|
46
+ assert "foo bar baz\n" == r.echo("foo bar baz\n")
47
+ end
48
+
49
+ test "DEBUG" do |r|
50
+ r.set "foo", "s1"
51
+
52
+ assert r.debug(:object, "foo").kind_of?(String)
53
+ end
54
+
55
+ test "SYNC" do |r|
56
+ replies = {:sync => lambda { "+OK" }}
57
+
58
+ redis_mock(replies) do
59
+ redis = Redis.new(OPTIONS.merge(:port => 6380))
60
+
61
+ assert "OK" == redis.sync
62
+ end
63
+ end
@@ -0,0 +1,44 @@
1
+ # encoding: UTF-8
2
+
3
+ require File.expand_path("./helper", File.dirname(__FILE__))
4
+
5
+ setup do
6
+ init Redis.new(OPTIONS)
7
+ end
8
+
9
+ test "SORT" do |r|
10
+ r.set("foo:1", "s1")
11
+ r.set("foo:2", "s2")
12
+
13
+ r.rpush("bar", "1")
14
+ r.rpush("bar", "2")
15
+
16
+ assert ["s1"] == r.sort("bar", :get => "foo:*", :limit => [0, 1])
17
+ assert ["s2"] == r.sort("bar", :get => "foo:*", :limit => [0, 1], :order => "desc alpha")
18
+ end
19
+
20
+ test "SORT with an array of GETs" do |r|
21
+ r.set("foo:1:a", "s1a")
22
+ r.set("foo:1:b", "s1b")
23
+
24
+ r.set("foo:2:a", "s2a")
25
+ r.set("foo:2:b", "s2b")
26
+
27
+ r.rpush("bar", "1")
28
+ r.rpush("bar", "2")
29
+
30
+ assert ["s1a", "s1b"] == r.sort("bar", :get => ["foo:*:a", "foo:*:b"], :limit => [0, 1])
31
+ assert ["s2a", "s2b"] == r.sort("bar", :get => ["foo:*:a", "foo:*:b"], :limit => [0, 1], :order => "desc alpha")
32
+ end
33
+
34
+ test "SORT with STORE" do |r|
35
+ r.set("foo:1", "s1")
36
+ r.set("foo:2", "s2")
37
+
38
+ r.rpush("bar", "1")
39
+ r.rpush("bar", "2")
40
+
41
+ r.sort("bar", :get => "foo:*", :store => "baz")
42
+ assert ["s1", "s2"] == r.lrange("baz", 0, -1)
43
+ end
44
+
@@ -0,0 +1,57 @@
1
+ # encoding: UTF-8
2
+
3
+ require 'em-synchrony'
4
+
5
+ require 'redis'
6
+ require 'redis/connection/synchrony'
7
+
8
+ require File.expand_path("./helper", File.dirname(__FILE__))
9
+
10
+ #
11
+ # if running under Eventmachine + Synchrony (Ruby 1.9+), then
12
+ # we can simulate the blocking API while performing the network
13
+ # IO via the EM reactor.
14
+ #
15
+
16
+ EM.synchrony do
17
+ r = Redis.new
18
+ r.flushdb
19
+
20
+ r.rpush "foo", "s1"
21
+ r.rpush "foo", "s2"
22
+
23
+ assert 2 == r.llen("foo")
24
+ assert "s2" == r.rpop("foo")
25
+
26
+ r.set("foo", "bar")
27
+
28
+ assert "bar" == r.getset("foo", "baz")
29
+ assert "baz" == r.get("foo")
30
+
31
+ r.set("foo", "a")
32
+
33
+ assert_equal 1, r.getbit("foo", 1)
34
+ assert_equal 1, r.getbit("foo", 2)
35
+ assert_equal 0, r.getbit("foo", 3)
36
+ assert_equal 0, r.getbit("foo", 4)
37
+ assert_equal 0, r.getbit("foo", 5)
38
+ assert_equal 0, r.getbit("foo", 6)
39
+ assert_equal 1, r.getbit("foo", 7)
40
+
41
+ r.flushdb
42
+
43
+ # command pipelining
44
+ r.pipelined do
45
+ r.lpush "foo", "s1"
46
+ r.lpush "foo", "s2"
47
+ end
48
+
49
+ assert 2 == r.llen("foo")
50
+ assert "s2" == r.lpop("foo")
51
+ assert "s1" == r.lpop("foo")
52
+
53
+ assert "OK" == r.client.call(:quit)
54
+ assert "PONG" == r.ping
55
+
56
+ EM.stop
57
+ end
@@ -0,0 +1,8 @@
1
+ dir ./test/db
2
+ pidfile ./redis.pid
3
+ port 6379
4
+ timeout 300
5
+ loglevel debug
6
+ logfile stdout
7
+ databases 16
8
+ daemonize yes
@@ -0,0 +1,30 @@
1
+ # encoding: UTF-8
2
+
3
+ require File.expand_path("./helper", File.dirname(__FILE__))
4
+
5
+ setup do
6
+ init Redis.new(OPTIONS)
7
+ end
8
+
9
+ test "thread safety" do
10
+ redis = Redis.connect(OPTIONS.merge(:thread_safe => true))
11
+
12
+ redis.set "foo", 1
13
+ redis.set "bar", 2
14
+
15
+ sample = 100
16
+
17
+ t1 = Thread.new do
18
+ $foos = Array.new(sample) { redis.get "foo" }
19
+ end
20
+
21
+ t2 = Thread.new do
22
+ $bars = Array.new(sample) { redis.get "bar" }
23
+ end
24
+
25
+ t1.join
26
+ t2.join
27
+
28
+ assert_equal ["1"], $foos.uniq
29
+ assert_equal ["2"], $bars.uniq
30
+ end
@@ -0,0 +1,100 @@
1
+ # encoding: UTF-8
2
+
3
+ require File.expand_path("./helper", File.dirname(__FILE__))
4
+
5
+ setup do
6
+ init Redis.new(OPTIONS)
7
+ end
8
+
9
+ test "MULTI/DISCARD" do |r|
10
+ r.multi
11
+
12
+ assert "QUEUED" == r.set("foo", "1")
13
+ assert "QUEUED" == r.get("foo")
14
+
15
+ r.discard
16
+
17
+ assert nil == r.get("foo")
18
+ end
19
+
20
+ test "MULTI/EXEC with a block" do |r|
21
+ r.multi do |multi|
22
+ multi.set "foo", "s1"
23
+ end
24
+
25
+ assert "s1" == r.get("foo")
26
+
27
+ assert_raise(RuntimeError) do
28
+ r.multi do |multi|
29
+ multi.set "bar", "s2"
30
+ raise "Some error"
31
+ multi.set "baz", "s3"
32
+ end
33
+ end
34
+
35
+ assert nil == r.get("bar")
36
+ assert nil == r.get("baz")
37
+ end
38
+
39
+ test "Don't raise (and ignore) immediate error in MULTI/EXEC" do |r|
40
+ result = r.multi do |m|
41
+ m.set("foo", "s1")
42
+ m.unknown_command
43
+ end
44
+
45
+ assert 1 == result.size
46
+ assert "OK" == result.first
47
+ assert "s1" == r.get("foo")
48
+ end
49
+
50
+ test "Don't raise delayed error in MULTI/EXEC" do |r|
51
+ result = r.multi do |m|
52
+ m.set("foo", "s1")
53
+ m.incr("foo") # not an integer
54
+ m.lpush("foo", "value") # wrong kind of value
55
+ end
56
+
57
+ assert result[1].message =~ /not an integer/i
58
+ assert result[2].message =~ /wrong kind of value/i
59
+ assert "s1" == r.get("foo")
60
+ end
61
+
62
+ test "MULTI with a block yielding the client" do |r|
63
+ r.multi do |multi|
64
+ multi.set "foo", "s1"
65
+ end
66
+
67
+ assert "s1" == r.get("foo")
68
+ end
69
+
70
+ test "WATCH with an unmodified key" do |r|
71
+ r.watch "foo"
72
+ r.multi do |multi|
73
+ multi.set "foo", "s1"
74
+ end
75
+
76
+ assert "s1" == r.get("foo")
77
+ end
78
+
79
+ test "WATCH with a modified key" do |r|
80
+ r.watch "foo"
81
+ r.set "foo", "s1"
82
+ res = r.multi do |multi|
83
+ multi.set "foo", "s2"
84
+ end
85
+
86
+ assert nil == res
87
+ assert "s1" == r.get("foo")
88
+ end
89
+
90
+ test "UNWATCH with a modified key" do |r|
91
+ r.watch "foo"
92
+ r.set "foo", "s1"
93
+ r.unwatch
94
+ r.multi do |multi|
95
+ multi.set "foo", "s2"
96
+ end
97
+
98
+ assert "s2" == r.get("foo")
99
+ end
100
+
@@ -0,0 +1,14 @@
1
+ # encoding: UTF-8
2
+
3
+ require File.expand_path("./helper", File.dirname(__FILE__))
4
+
5
+ setup do
6
+ init Redis.new(OPTIONS)
7
+ end
8
+
9
+ test "should try to work" do |r|
10
+ assert_raise RuntimeError do
11
+ r.not_yet_implemented_command
12
+ end
13
+ end
14
+
@@ -0,0 +1,60 @@
1
+ # encoding: UTF-8
2
+
3
+ require File.expand_path("./helper", File.dirname(__FILE__))
4
+
5
+ test "URL defaults to 127.0.0.1:6379" do
6
+ redis = Redis.connect
7
+
8
+ assert "127.0.0.1" == redis.client.host
9
+ assert 6379 == redis.client.port
10
+ assert 0 == redis.client.db
11
+ assert nil == redis.client.password
12
+ end
13
+
14
+ test "allows to pass in a URL" do
15
+ redis = Redis.connect :url => "redis://:secr3t@foo.com:999/2"
16
+
17
+ assert "foo.com" == redis.client.host
18
+ assert 999 == redis.client.port
19
+ assert 2 == redis.client.db
20
+ assert "secr3t" == redis.client.password
21
+ end
22
+
23
+ test "override URL if path option is passed" do
24
+ redis = Redis.connect :url => "redis://:secr3t@foo.com/foo:999/2", :path => "/tmp/redis.sock"
25
+
26
+ assert "/tmp/redis.sock" == redis.client.path
27
+ assert nil == redis.client.host
28
+ assert nil == redis.client.port
29
+ end
30
+
31
+ test "overrides URL if another connection option is passed" do
32
+ redis = Redis.connect :url => "redis://:secr3t@foo.com:999/2", :port => 1000
33
+
34
+ assert "foo.com" == redis.client.host
35
+ assert 1000 == redis.client.port
36
+ assert 2 == redis.client.db
37
+ assert "secr3t" == redis.client.password
38
+ end
39
+
40
+ test "does not modify the passed options" do
41
+ options = { :url => "redis://:secr3t@foo.com:999/2" }
42
+
43
+ redis = Redis.connect(options)
44
+
45
+ assert({ :url => "redis://:secr3t@foo.com:999/2" } == options)
46
+ end
47
+
48
+ test "uses REDIS_URL over default if available" do
49
+ ENV["REDIS_URL"] = "redis://:secr3t@foo.com:999/2"
50
+
51
+ redis = Redis.connect
52
+
53
+ assert "foo.com" == redis.client.host
54
+ assert 999 == redis.client.port
55
+ assert 2 == redis.client.db
56
+ assert "secr3t" == redis.client.password
57
+
58
+ ENV.delete("REDIS_URL")
59
+ end
60
+
metadata CHANGED
@@ -1,12 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: redis
3
3
  version: !ruby/object:Gem::Version
4
- prerelease: false
5
- segments:
6
- - 2
7
- - 1
8
- - 1
9
- version: 2.1.1
4
+ prerelease:
5
+ version: 2.2.0
10
6
  platform: ruby
11
7
  authors:
12
8
  - Ezra Zygmuntowicz
@@ -17,11 +13,12 @@ authors:
17
13
  - Luca Guidi
18
14
  - Michel Martens
19
15
  - Damian Janowski
16
+ - Pieter Noordhuis
20
17
  autorequire: redis
21
18
  bindir: bin
22
19
  cert_chain: []
23
20
 
24
- date: 2010-11-05 00:00:00 -03:00
21
+ date: 2011-03-29 00:00:00 -03:00
25
22
  default_executable:
26
23
  dependencies: []
27
24
 
@@ -31,20 +28,90 @@ executables: []
31
28
 
32
29
  extensions: []
33
30
 
34
- extra_rdoc_files:
35
- - LICENSE
31
+ extra_rdoc_files: []
32
+
36
33
  files:
34
+ - .gitignore
35
+ - CHANGELOG.md
37
36
  - LICENSE
38
- - README.markdown
37
+ - README.md
39
38
  - Rakefile
39
+ - benchmarking/logging.rb
40
+ - benchmarking/pipeline.rb
41
+ - benchmarking/speed.rb
42
+ - benchmarking/suite.rb
43
+ - benchmarking/thread_safety.rb
44
+ - benchmarking/worker.rb
45
+ - examples/basic.rb
46
+ - examples/dist_redis.rb
47
+ - examples/incr-decr.rb
48
+ - examples/list.rb
49
+ - examples/pubsub.rb
50
+ - examples/sets.rb
51
+ - examples/unicorn/config.ru
52
+ - examples/unicorn/unicorn.rb
53
+ - lib/redis.rb
40
54
  - lib/redis/client.rb
41
55
  - lib/redis/compat.rb
42
56
  - lib/redis/connection.rb
57
+ - lib/redis/connection/command_helper.rb
58
+ - lib/redis/connection/hiredis.rb
59
+ - lib/redis/connection/registry.rb
60
+ - lib/redis/connection/ruby.rb
61
+ - lib/redis/connection/synchrony.rb
43
62
  - lib/redis/distributed.rb
44
63
  - lib/redis/hash_ring.rb
45
64
  - lib/redis/pipeline.rb
46
65
  - lib/redis/subscribe.rb
47
- - lib/redis.rb
66
+ - lib/redis/version.rb
67
+ - redis.gemspec
68
+ - test/commands_on_hashes_test.rb
69
+ - test/commands_on_lists_test.rb
70
+ - test/commands_on_sets_test.rb
71
+ - test/commands_on_sorted_sets_test.rb
72
+ - test/commands_on_strings_test.rb
73
+ - test/commands_on_value_types_test.rb
74
+ - test/connection_handling_test.rb
75
+ - test/db/.gitignore
76
+ - test/distributed_blocking_commands_test.rb
77
+ - test/distributed_commands_on_hashes_test.rb
78
+ - test/distributed_commands_on_lists_test.rb
79
+ - test/distributed_commands_on_sets_test.rb
80
+ - test/distributed_commands_on_strings_test.rb
81
+ - test/distributed_commands_on_value_types_test.rb
82
+ - test/distributed_commands_requiring_clustering_test.rb
83
+ - test/distributed_connection_handling_test.rb
84
+ - test/distributed_internals_test.rb
85
+ - test/distributed_key_tags_test.rb
86
+ - test/distributed_persistence_control_commands_test.rb
87
+ - test/distributed_publish_subscribe_test.rb
88
+ - test/distributed_remote_server_control_commands_test.rb
89
+ - test/distributed_sorting_test.rb
90
+ - test/distributed_test.rb
91
+ - test/distributed_transactions_test.rb
92
+ - test/encoding_test.rb
93
+ - test/error_replies_test.rb
94
+ - test/helper.rb
95
+ - test/internals_test.rb
96
+ - test/lint/hashes.rb
97
+ - test/lint/internals.rb
98
+ - test/lint/lists.rb
99
+ - test/lint/sets.rb
100
+ - test/lint/sorted_sets.rb
101
+ - test/lint/strings.rb
102
+ - test/lint/value_types.rb
103
+ - test/persistence_control_commands_test.rb
104
+ - test/pipelining_commands_test.rb
105
+ - test/publish_subscribe_test.rb
106
+ - test/redis_mock.rb
107
+ - test/remote_server_control_commands_test.rb
108
+ - test/sorting_test.rb
109
+ - test/synchrony_driver.rb
110
+ - test/test.conf
111
+ - test/thread_safety_test.rb
112
+ - test/transactions_test.rb
113
+ - test/unknown_commands_test.rb
114
+ - test/url_param_test.rb
48
115
  has_rdoc: true
49
116
  homepage: http://github.com/ezmobius/redis-rb
50
117
  licenses: []
@@ -59,23 +126,65 @@ required_ruby_version: !ruby/object:Gem::Requirement
59
126
  requirements:
60
127
  - - ">="
61
128
  - !ruby/object:Gem::Version
62
- segments:
63
- - 0
64
129
  version: "0"
65
130
  required_rubygems_version: !ruby/object:Gem::Requirement
66
131
  none: false
67
132
  requirements:
68
133
  - - ">="
69
134
  - !ruby/object:Gem::Version
70
- segments:
71
- - 0
72
135
  version: "0"
73
136
  requirements: []
74
137
 
75
- rubyforge_project:
76
- rubygems_version: 1.3.7
138
+ rubyforge_project: redis-rb
139
+ rubygems_version: 1.5.2
77
140
  signing_key:
78
141
  specification_version: 3
79
142
  summary: Ruby client library for Redis, the key value storage server
80
- test_files: []
81
-
143
+ test_files:
144
+ - test/commands_on_hashes_test.rb
145
+ - test/commands_on_lists_test.rb
146
+ - test/commands_on_sets_test.rb
147
+ - test/commands_on_sorted_sets_test.rb
148
+ - test/commands_on_strings_test.rb
149
+ - test/commands_on_value_types_test.rb
150
+ - test/connection_handling_test.rb
151
+ - test/db/.gitignore
152
+ - test/distributed_blocking_commands_test.rb
153
+ - test/distributed_commands_on_hashes_test.rb
154
+ - test/distributed_commands_on_lists_test.rb
155
+ - test/distributed_commands_on_sets_test.rb
156
+ - test/distributed_commands_on_strings_test.rb
157
+ - test/distributed_commands_on_value_types_test.rb
158
+ - test/distributed_commands_requiring_clustering_test.rb
159
+ - test/distributed_connection_handling_test.rb
160
+ - test/distributed_internals_test.rb
161
+ - test/distributed_key_tags_test.rb
162
+ - test/distributed_persistence_control_commands_test.rb
163
+ - test/distributed_publish_subscribe_test.rb
164
+ - test/distributed_remote_server_control_commands_test.rb
165
+ - test/distributed_sorting_test.rb
166
+ - test/distributed_test.rb
167
+ - test/distributed_transactions_test.rb
168
+ - test/encoding_test.rb
169
+ - test/error_replies_test.rb
170
+ - test/helper.rb
171
+ - test/internals_test.rb
172
+ - test/lint/hashes.rb
173
+ - test/lint/internals.rb
174
+ - test/lint/lists.rb
175
+ - test/lint/sets.rb
176
+ - test/lint/sorted_sets.rb
177
+ - test/lint/strings.rb
178
+ - test/lint/value_types.rb
179
+ - test/persistence_control_commands_test.rb
180
+ - test/pipelining_commands_test.rb
181
+ - test/publish_subscribe_test.rb
182
+ - test/redis_mock.rb
183
+ - test/remote_server_control_commands_test.rb
184
+ - test/sorting_test.rb
185
+ - test/synchrony_driver.rb
186
+ - test/test.conf
187
+ - test/thread_safety_test.rb
188
+ - test/transactions_test.rb
189
+ - test/unknown_commands_test.rb
190
+ - test/url_param_test.rb