cassilds 0.9.1
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.
- data/CHANGELOG +53 -0
- data/LICENSE +202 -0
- data/Manifest +45 -0
- data/README.rdoc +83 -0
- data/Rakefile +9 -0
- data/bin/cassandra_helper +16 -0
- data/cassandra.gemspec +46 -0
- data/conf/cassandra.in.sh +47 -0
- data/conf/cassandra.yaml +113 -0
- data/conf/log4j.properties +38 -0
- data/conf/storage-conf.xml +342 -0
- data/lib/cassandra/0.6/cassandra.rb +68 -0
- data/lib/cassandra/0.6/columns.rb +35 -0
- data/lib/cassandra/0.6/protocol.rb +92 -0
- data/lib/cassandra/0.6.rb +7 -0
- data/lib/cassandra/0.7/cassandra.rb +272 -0
- data/lib/cassandra/0.7/column_family.rb +3 -0
- data/lib/cassandra/0.7/columns.rb +67 -0
- data/lib/cassandra/0.7/keyspace.rb +3 -0
- data/lib/cassandra/0.7/protocol.rb +139 -0
- data/lib/cassandra/0.7.rb +7 -0
- data/lib/cassandra/array.rb +8 -0
- data/lib/cassandra/cassandra.rb +302 -0
- data/lib/cassandra/columns.rb +79 -0
- data/lib/cassandra/comparable.rb +28 -0
- data/lib/cassandra/constants.rb +11 -0
- data/lib/cassandra/debug.rb +9 -0
- data/lib/cassandra/helpers.rb +40 -0
- data/lib/cassandra/long.rb +58 -0
- data/lib/cassandra/mock.rb +326 -0
- data/lib/cassandra/ordered_hash.rb +200 -0
- data/lib/cassandra/time.rb +11 -0
- data/lib/cassandra.rb +39 -0
- data/test/cassandra_client_test.rb +20 -0
- data/test/cassandra_mock_test.rb +73 -0
- data/test/cassandra_test.rb +412 -0
- data/test/comparable_types_test.rb +45 -0
- data/test/eventmachine_test.rb +42 -0
- data/test/ordered_hash_test.rb +380 -0
- data/test/test_helper.rb +14 -0
- data/vendor/0.6/gen-rb/cassandra.rb +1481 -0
- data/vendor/0.6/gen-rb/cassandra_constants.rb +12 -0
- data/vendor/0.6/gen-rb/cassandra_types.rb +482 -0
- data/vendor/0.7/gen-rb/cassandra.rb +1937 -0
- data/vendor/0.7/gen-rb/cassandra_constants.rb +12 -0
- data/vendor/0.7/gen-rb/cassandra_types.rb +679 -0
- metadata +176 -0
@@ -0,0 +1,380 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/test_helper')
|
2
|
+
|
3
|
+
class OrderedHashTestInt < Test::Unit::TestCase
|
4
|
+
def setup
|
5
|
+
@keys = %w( blue green red pink orange )
|
6
|
+
@values = %w( 000099 009900 aa0000 cc0066 cc6633 )
|
7
|
+
@hash = Hash.new
|
8
|
+
@ordered_hash = Cassandra::OrderedHash.new
|
9
|
+
|
10
|
+
@keys.each_with_index do |key, index|
|
11
|
+
@hash[key] = @values[index]
|
12
|
+
@ordered_hash[key] = @values[index]
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_order
|
17
|
+
assert_equal @keys, @ordered_hash.keys
|
18
|
+
assert_equal @values, @ordered_hash.values
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_access
|
22
|
+
assert @hash.all? { |k, v| @ordered_hash[k] == v }
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_assignment
|
26
|
+
key, value = 'purple', '5422a8'
|
27
|
+
|
28
|
+
@ordered_hash[key] = value
|
29
|
+
assert_equal @keys.length + 1, @ordered_hash.length
|
30
|
+
assert_equal key, @ordered_hash.keys.last
|
31
|
+
assert_equal value, @ordered_hash.values.last
|
32
|
+
assert_equal value, @ordered_hash[key]
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_delete
|
36
|
+
key, value = 'white', 'ffffff'
|
37
|
+
bad_key = 'black'
|
38
|
+
|
39
|
+
@ordered_hash[key] = value
|
40
|
+
assert_equal @keys.length + 1, @ordered_hash.length
|
41
|
+
assert_equal @ordered_hash.keys.length, @ordered_hash.length
|
42
|
+
|
43
|
+
assert_equal value, @ordered_hash.delete(key)
|
44
|
+
assert_equal @keys.length, @ordered_hash.length
|
45
|
+
assert_equal @ordered_hash.keys.length, @ordered_hash.length
|
46
|
+
|
47
|
+
assert_nil @ordered_hash.delete(bad_key)
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_to_hash
|
51
|
+
assert_same @ordered_hash, @ordered_hash.to_hash
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_to_a
|
55
|
+
assert_equal @keys.zip(@values), @ordered_hash.to_a
|
56
|
+
end
|
57
|
+
|
58
|
+
def test_has_key
|
59
|
+
assert_equal true, @ordered_hash.has_key?('blue')
|
60
|
+
assert_equal true, @ordered_hash.key?('blue')
|
61
|
+
assert_equal true, @ordered_hash.include?('blue')
|
62
|
+
assert_equal true, @ordered_hash.member?('blue')
|
63
|
+
|
64
|
+
assert_equal false, @ordered_hash.has_key?('indigo')
|
65
|
+
assert_equal false, @ordered_hash.key?('indigo')
|
66
|
+
assert_equal false, @ordered_hash.include?('indigo')
|
67
|
+
assert_equal false, @ordered_hash.member?('indigo')
|
68
|
+
end
|
69
|
+
|
70
|
+
def test_has_value
|
71
|
+
assert_equal true, @ordered_hash.has_value?('000099')
|
72
|
+
assert_equal true, @ordered_hash.value?('000099')
|
73
|
+
assert_equal false, @ordered_hash.has_value?('ABCABC')
|
74
|
+
assert_equal false, @ordered_hash.value?('ABCABC')
|
75
|
+
end
|
76
|
+
|
77
|
+
def test_each_key
|
78
|
+
keys = []
|
79
|
+
@ordered_hash.each_key { |k| keys << k }
|
80
|
+
assert_equal @keys, keys
|
81
|
+
end
|
82
|
+
|
83
|
+
def test_each_value
|
84
|
+
values = []
|
85
|
+
@ordered_hash.each_value { |v| values << v }
|
86
|
+
assert_equal @values, values
|
87
|
+
end
|
88
|
+
|
89
|
+
def test_each
|
90
|
+
values = []
|
91
|
+
@ordered_hash.each {|key, value| values << value}
|
92
|
+
assert_equal @values, values
|
93
|
+
end
|
94
|
+
|
95
|
+
def test_each_with_index
|
96
|
+
@ordered_hash.each_with_index { |pair, index| assert_equal [@keys[index], @values[index]], pair}
|
97
|
+
end
|
98
|
+
|
99
|
+
def test_each_pair
|
100
|
+
values = []
|
101
|
+
keys = []
|
102
|
+
@ordered_hash.each_pair do |key, value|
|
103
|
+
keys << key
|
104
|
+
values << value
|
105
|
+
end
|
106
|
+
assert_equal @values, values
|
107
|
+
assert_equal @keys, keys
|
108
|
+
end
|
109
|
+
|
110
|
+
def test_delete_if
|
111
|
+
copy = @ordered_hash.dup
|
112
|
+
copy.delete('pink')
|
113
|
+
assert_equal copy, @ordered_hash.delete_if { |k, _| k == 'pink' }
|
114
|
+
assert !@ordered_hash.keys.include?('pink')
|
115
|
+
end
|
116
|
+
|
117
|
+
def test_reject!
|
118
|
+
(copy = @ordered_hash.dup).delete('pink')
|
119
|
+
@ordered_hash.reject! { |k, _| k == 'pink' }
|
120
|
+
assert_equal copy, @ordered_hash
|
121
|
+
assert !@ordered_hash.keys.include?('pink')
|
122
|
+
end
|
123
|
+
|
124
|
+
def test_reject
|
125
|
+
copy = @ordered_hash.dup
|
126
|
+
new_ordered_hash = @ordered_hash.reject { |k, _| k == 'pink' }
|
127
|
+
assert_equal copy, @ordered_hash
|
128
|
+
assert !new_ordered_hash.keys.include?('pink')
|
129
|
+
assert @ordered_hash.keys.include?('pink')
|
130
|
+
end
|
131
|
+
|
132
|
+
def test_clear
|
133
|
+
@ordered_hash.clear
|
134
|
+
assert_equal [], @ordered_hash.keys
|
135
|
+
end
|
136
|
+
|
137
|
+
def test_merge
|
138
|
+
other_hash = Cassandra::OrderedHash.new
|
139
|
+
other_hash['purple'] = '800080'
|
140
|
+
other_hash['violet'] = 'ee82ee'
|
141
|
+
merged = @ordered_hash.merge other_hash
|
142
|
+
assert_equal merged.length, @ordered_hash.length + other_hash.length
|
143
|
+
assert_equal @keys + ['purple', 'violet'], merged.keys
|
144
|
+
|
145
|
+
@ordered_hash.merge! other_hash
|
146
|
+
assert_equal @ordered_hash, merged
|
147
|
+
assert_equal @ordered_hash.keys, merged.keys
|
148
|
+
end
|
149
|
+
|
150
|
+
def test_shift
|
151
|
+
pair = @ordered_hash.shift
|
152
|
+
assert_equal [@keys.first, @values.first], pair
|
153
|
+
assert !@ordered_hash.keys.include?(pair.first)
|
154
|
+
end
|
155
|
+
|
156
|
+
def test_keys
|
157
|
+
original = @ordered_hash.keys.dup
|
158
|
+
@ordered_hash.keys.pop
|
159
|
+
assert_equal original, @ordered_hash.keys
|
160
|
+
end
|
161
|
+
|
162
|
+
def test_inspect
|
163
|
+
assert @ordered_hash.inspect.include?(@hash.inspect)
|
164
|
+
end
|
165
|
+
|
166
|
+
def test_alternate_initialization_with_splat
|
167
|
+
alternate = Cassandra::OrderedHash[1,2,3,4]
|
168
|
+
assert_kind_of Cassandra::OrderedHash, alternate
|
169
|
+
assert_equal [1, 3], alternate.keys
|
170
|
+
end
|
171
|
+
|
172
|
+
def test_alternate_initialization_with_array
|
173
|
+
alternate = Cassandra::OrderedHash[ [
|
174
|
+
[1, 2],
|
175
|
+
[3, 4],
|
176
|
+
"bad key value pair",
|
177
|
+
[ 'missing value' ]
|
178
|
+
]]
|
179
|
+
|
180
|
+
assert_kind_of Cassandra::OrderedHash, alternate
|
181
|
+
assert_equal [1, 3, 'missing value'], alternate.keys
|
182
|
+
assert_equal [2, 4, nil ], alternate.values
|
183
|
+
end
|
184
|
+
|
185
|
+
def test_alternate_initialization_raises_exception_on_odd_length_args
|
186
|
+
begin
|
187
|
+
alternate = Cassandra::OrderedHash[1,2,3,4,5]
|
188
|
+
flunk "Hash::[] should have raised an exception on initialization " +
|
189
|
+
"with an odd number of parameters"
|
190
|
+
rescue
|
191
|
+
assert_equal "odd number of arguments for Hash", $!.message
|
192
|
+
end
|
193
|
+
end
|
194
|
+
|
195
|
+
def test_replace_updates_keys
|
196
|
+
@other_ordered_hash = Cassandra::OrderedHash[:black, '000000', :white, '000000']
|
197
|
+
original = @ordered_hash.replace(@other_ordered_hash)
|
198
|
+
assert_same original, @ordered_hash
|
199
|
+
assert_equal @other_ordered_hash.keys, @ordered_hash.keys
|
200
|
+
end
|
201
|
+
end
|
202
|
+
|
203
|
+
class OrderedHashTest < Test::Unit::TestCase
|
204
|
+
def setup
|
205
|
+
@keys = %w( blue green red pink orange )
|
206
|
+
@values = %w( 000099 009900 aa0000 cc0066 cc6633 )
|
207
|
+
@timestamps = %w( 12 34 56 78 90 )
|
208
|
+
@hash = Hash.new
|
209
|
+
@timestamps_hash = Hash.new
|
210
|
+
@ordered_hash = Cassandra::OrderedHash.new
|
211
|
+
|
212
|
+
@keys.each_with_index do |key, index|
|
213
|
+
@hash[key] = @values[index]
|
214
|
+
@timestamps_hash[key] = @timestamps[index]
|
215
|
+
@ordered_hash.[]=(key, @values[index], @timestamps[index])
|
216
|
+
end
|
217
|
+
end
|
218
|
+
|
219
|
+
def test_order
|
220
|
+
assert_equal @keys, @ordered_hash.keys
|
221
|
+
assert_equal @values, @ordered_hash.values
|
222
|
+
assert_equal @timestamps_hash, @ordered_hash.timestamps
|
223
|
+
end
|
224
|
+
|
225
|
+
def test_access
|
226
|
+
assert @hash.all? { |k, v| @ordered_hash[k] == v }
|
227
|
+
assert @timestamps_hash.all? { |k, v| @ordered_hash.timestamps[k] == v }
|
228
|
+
end
|
229
|
+
|
230
|
+
def test_assignment
|
231
|
+
key, value, timestamp = 'purple', '5422a8', '1234'
|
232
|
+
|
233
|
+
@ordered_hash.[]=(key, value, timestamp)
|
234
|
+
|
235
|
+
assert_equal @keys.length + 1, @ordered_hash.length
|
236
|
+
assert_equal key, @ordered_hash.keys.last
|
237
|
+
assert_equal value, @ordered_hash.values.last
|
238
|
+
assert_equal value, @ordered_hash[key]
|
239
|
+
|
240
|
+
assert_equal @keys.length + 1, @ordered_hash.timestamps.length
|
241
|
+
assert_equal key, @ordered_hash.timestamps.keys.last
|
242
|
+
assert_equal timestamp, @ordered_hash.timestamps.values.last
|
243
|
+
assert_equal timestamp, @ordered_hash.timestamps[key]
|
244
|
+
end
|
245
|
+
|
246
|
+
def test_delete
|
247
|
+
key, value, timestamp = 'white', 'ffffff', '999'
|
248
|
+
bad_key = 'black'
|
249
|
+
|
250
|
+
@ordered_hash.[]=(key, value, timestamp)
|
251
|
+
assert_equal @keys.length + 1, @ordered_hash.length
|
252
|
+
assert_equal @ordered_hash.keys.length, @ordered_hash.length
|
253
|
+
|
254
|
+
assert_equal value, @ordered_hash.delete(key)
|
255
|
+
assert_equal @keys.length, @ordered_hash.length
|
256
|
+
assert_equal @ordered_hash.keys.length, @ordered_hash.length
|
257
|
+
|
258
|
+
assert_nil @ordered_hash.delete(bad_key)
|
259
|
+
|
260
|
+
@ordered_hash.[]=(key, value, timestamp)
|
261
|
+
assert_equal @keys.length + 1, @ordered_hash.timestamps.length
|
262
|
+
assert_equal @ordered_hash.keys.length, @ordered_hash.timestamps.length
|
263
|
+
|
264
|
+
assert_equal value, @ordered_hash.delete(key)
|
265
|
+
assert_equal @keys.length, @ordered_hash.timestamps.length
|
266
|
+
assert_equal @ordered_hash.keys.length, @ordered_hash.timestamps.length
|
267
|
+
|
268
|
+
assert_nil @ordered_hash.delete(bad_key)
|
269
|
+
end
|
270
|
+
|
271
|
+
def test_to_a
|
272
|
+
assert_equal @keys.zip(@timestamps).sort, @ordered_hash.timestamps.sort.to_a
|
273
|
+
end
|
274
|
+
|
275
|
+
def test_has_key
|
276
|
+
assert_equal true, @ordered_hash.timestamps.has_key?('blue')
|
277
|
+
assert_equal true, @ordered_hash.timestamps.key?('blue')
|
278
|
+
assert_equal true, @ordered_hash.timestamps.include?('blue')
|
279
|
+
assert_equal true, @ordered_hash.timestamps.member?('blue')
|
280
|
+
|
281
|
+
assert_equal false, @ordered_hash.timestamps.has_key?('indigo')
|
282
|
+
assert_equal false, @ordered_hash.timestamps.key?('indigo')
|
283
|
+
assert_equal false, @ordered_hash.timestamps.include?('indigo')
|
284
|
+
assert_equal false, @ordered_hash.timestamps.member?('indigo')
|
285
|
+
end
|
286
|
+
|
287
|
+
def test_has_value
|
288
|
+
assert_equal true, @ordered_hash.timestamps.has_value?('12')
|
289
|
+
assert_equal true, @ordered_hash.timestamps.value?('12')
|
290
|
+
assert_equal false, @ordered_hash.timestamps.has_value?('99')
|
291
|
+
assert_equal false, @ordered_hash.timestamps.value?('99')
|
292
|
+
end
|
293
|
+
|
294
|
+
def test_each_key
|
295
|
+
keys = []
|
296
|
+
@ordered_hash.timestamps.each_key { |k| keys << k }
|
297
|
+
assert_equal @keys.sort, keys.sort
|
298
|
+
end
|
299
|
+
|
300
|
+
def test_each_value
|
301
|
+
values = []
|
302
|
+
@ordered_hash.timestamps.each_value { |v| values << v }
|
303
|
+
assert_equal @timestamps.sort, values.sort
|
304
|
+
end
|
305
|
+
|
306
|
+
def test_each
|
307
|
+
values = []
|
308
|
+
@ordered_hash.timestamps.each {|key, value| values << value}
|
309
|
+
assert_equal @timestamps.sort, values.sort
|
310
|
+
end
|
311
|
+
|
312
|
+
def test_delete_if
|
313
|
+
copy = @ordered_hash.dup
|
314
|
+
copy.delete('pink')
|
315
|
+
assert_equal copy, @ordered_hash.delete_if { |k, _| k == 'pink' }
|
316
|
+
assert !@ordered_hash.timestamps.keys.include?('pink')
|
317
|
+
end
|
318
|
+
|
319
|
+
def test_reject!
|
320
|
+
(copy = @ordered_hash.dup).delete('pink')
|
321
|
+
@ordered_hash.reject! { |k, _| k == 'pink' }
|
322
|
+
assert_equal copy, @ordered_hash
|
323
|
+
assert !@ordered_hash.keys.include?('pink')
|
324
|
+
end
|
325
|
+
|
326
|
+
def test_reject
|
327
|
+
copy = @ordered_hash.dup
|
328
|
+
new_ordered_hash = @ordered_hash.reject { |k, _| k == 'pink' }
|
329
|
+
assert_equal copy, @ordered_hash
|
330
|
+
assert !new_ordered_hash.timestamps.keys.include?('pink')
|
331
|
+
assert @ordered_hash.timestamps.keys.include?('pink')
|
332
|
+
end
|
333
|
+
|
334
|
+
def test_clear
|
335
|
+
@ordered_hash.clear
|
336
|
+
assert_equal [], @ordered_hash.timestamps.keys
|
337
|
+
end
|
338
|
+
|
339
|
+
def test_merge
|
340
|
+
other_hash = Cassandra::OrderedHash.new
|
341
|
+
other_hash['purple'] = '800080'
|
342
|
+
other_hash['violet'] = 'ee82ee'
|
343
|
+
merged = @ordered_hash.merge other_hash
|
344
|
+
assert_equal merged.timestamps.length, @ordered_hash.timestamps.length + other_hash.timestamps.length
|
345
|
+
assert_equal (@keys + ['purple', 'violet']).sort, merged.timestamps.keys.sort
|
346
|
+
|
347
|
+
@ordered_hash.merge! other_hash
|
348
|
+
assert_equal @ordered_hash.timestamps, merged.timestamps
|
349
|
+
assert_equal @ordered_hash.timestamps.keys.sort, merged.timestamps.keys.sort
|
350
|
+
end
|
351
|
+
|
352
|
+
def test_shift
|
353
|
+
pair = @ordered_hash.shift
|
354
|
+
assert_equal [@keys.first, @values.first], pair
|
355
|
+
assert !@ordered_hash.timestamps.keys.include?(pair.first)
|
356
|
+
end
|
357
|
+
|
358
|
+
def test_keys
|
359
|
+
original = @ordered_hash.keys.dup
|
360
|
+
@ordered_hash.keys.pop
|
361
|
+
assert_equal original.sort, @ordered_hash.timestamps.keys.sort
|
362
|
+
end
|
363
|
+
|
364
|
+
def test_inspect
|
365
|
+
assert @ordered_hash.timestamps.sort.inspect.include?(@timestamps_hash.sort.inspect)
|
366
|
+
end
|
367
|
+
|
368
|
+
def test_alternate_initialization_with_splat
|
369
|
+
alternate = Cassandra::OrderedHash[1,2,3,4]
|
370
|
+
assert_kind_of Cassandra::OrderedHash, alternate
|
371
|
+
assert_equal [1, 3], alternate.timestamps.keys
|
372
|
+
end
|
373
|
+
|
374
|
+
def test_replace_updates_keys
|
375
|
+
@other_ordered_hash = Cassandra::OrderedHash[:black, '000000', :white, '000000']
|
376
|
+
original = @ordered_hash.replace(@other_ordered_hash)
|
377
|
+
assert_equal original.timestamps, @ordered_hash.timestamps
|
378
|
+
assert_equal @other_ordered_hash.timestamps.keys, @ordered_hash.timestamps.keys
|
379
|
+
end
|
380
|
+
end
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
|
2
|
+
require 'test/unit'
|
3
|
+
require "#{File.expand_path(File.dirname(__FILE__))}/../lib/cassandra"
|
4
|
+
begin; require 'ruby-debug'; rescue LoadError; end
|
5
|
+
|
6
|
+
begin
|
7
|
+
@test_client = Cassandra.new('Twitter', 'localhost:9160', {:exception_classes => []})
|
8
|
+
rescue Thrift::TransportException => e
|
9
|
+
#FIXME Make server automatically start if not running
|
10
|
+
if e.message =~ /Could not connect/
|
11
|
+
puts "*** Please start the Cassandra server by running 'rake cassandra'. ***"
|
12
|
+
exit 1
|
13
|
+
end
|
14
|
+
end
|