right_support 2.11.3 → 2.12.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Rakefile +4 -0
- data/VERSION +1 -1
- data/lib/right_support/notifiers/airbrake.rb +194 -0
- data/lib/right_support/notifiers/base.rb +73 -0
- data/lib/right_support/notifiers/blacklisters/base.rb +48 -0
- data/lib/right_support/notifiers/blacklisters/canonical.rb +60 -0
- data/lib/right_support/notifiers/blacklisters/regular_expression.rb +86 -0
- data/{features/support/file_utils_bundler_mixin.rb → lib/right_support/notifiers/blacklisters/simple.rb} +21 -20
- data/lib/right_support/notifiers/blacklisters/snake_case.rb +60 -0
- data/lib/right_support/notifiers/blacklisters/wildcard.rb +65 -0
- data/lib/right_support/notifiers/blacklisters.rb +34 -0
- data/lib/right_support/notifiers/logger.rb +94 -0
- data/lib/right_support/notifiers/notification.rb +57 -0
- data/lib/right_support/notifiers/utilities/backtrace_decoder.rb +234 -0
- data/lib/right_support/notifiers/utilities.rb +29 -0
- data/lib/right_support/notifiers.rb +32 -0
- data/lib/right_support/rack/request_logger.rb +13 -9
- data/lib/right_support.rb +1 -0
- data/right_support.gemspec +19 -70
- metadata +17 -69
- data/.coveralls.yml +0 -2
- data/.rspec +0 -3
- data/.simplecov +0 -6
- data/.travis.yml +0 -13
- data/Gemfile +0 -51
- data/Gemfile.lock +0 -153
- data/features/balancer_error_handling.feature +0 -34
- data/features/balancer_health_check.feature +0 -33
- data/features/hash_tools.feature +0 -27
- data/features/http_client_timeout.feature +0 -19
- data/features/serialization.feature +0 -113
- data/features/step_definitions/hash_tools_steps.rb +0 -41
- data/features/step_definitions/http_client_steps.rb +0 -27
- data/features/step_definitions/request_balancer_steps.rb +0 -93
- data/features/step_definitions/ruby_steps.rb +0 -176
- data/features/step_definitions/serialization_steps.rb +0 -133
- data/features/step_definitions/server_steps.rb +0 -134
- data/features/support/env.rb +0 -148
- data/right_support.rconf +0 -9
- data/spec/config/feature_set_spec.rb +0 -83
- data/spec/crypto/signed_hash_spec.rb +0 -73
- data/spec/data/hash_tools_spec.rb +0 -602
- data/spec/data/mash_spec.rb +0 -313
- data/spec/data/token_spec.rb +0 -21
- data/spec/data/uuid_spec.rb +0 -45
- data/spec/db/cassandra_model_part1_spec.rb +0 -84
- data/spec/db/cassandra_model_part2_spec.rb +0 -73
- data/spec/db/cassandra_model_spec.rb +0 -375
- data/spec/fixtures/encrypted_priv_rsa.pem +0 -30
- data/spec/fixtures/good_priv_dsa.pem +0 -12
- data/spec/fixtures/good_priv_rsa.pem +0 -15
- data/spec/fixtures/good_pub_dsa.ssh +0 -1
- data/spec/fixtures/good_pub_rsa.pem +0 -5
- data/spec/fixtures/good_pub_rsa.ssh +0 -1
- data/spec/log/exception_logger_spec.rb +0 -76
- data/spec/log/filter_logger_spec.rb +0 -66
- data/spec/log/mixin_spec.rb +0 -141
- data/spec/log/multiplexer_spec.rb +0 -54
- data/spec/log/null_logger_spec.rb +0 -36
- data/spec/log/step_level_logger_spec.rb +0 -49
- data/spec/log/system_logger_spec.rb +0 -172
- data/spec/net/address_helper_spec.rb +0 -57
- data/spec/net/dns_spec.rb +0 -187
- data/spec/net/http_client_spec.rb +0 -181
- data/spec/net/lb/health_check_spec.rb +0 -417
- data/spec/net/lb/round_robin_spec.rb +0 -15
- data/spec/net/lb/sticky_spec.rb +0 -92
- data/spec/net/request_balancer_spec.rb +0 -690
- data/spec/net/s3_helper_spec.rb +0 -160
- data/spec/net/ssl_spec.rb +0 -42
- data/spec/net/string_encoder_spec.rb +0 -58
- data/spec/rack/log_setter_spec.rb +0 -5
- data/spec/rack/request_logger_spec.rb +0 -225
- data/spec/rack/request_tracker_spec.rb +0 -115
- data/spec/rack/runtime_spec.rb +0 -49
- data/spec/ruby/easy_singleton_spec.rb +0 -72
- data/spec/ruby/object_extensions_spec.rb +0 -27
- data/spec/ruby/string_extensions_spec.rb +0 -98
- data/spec/spec_helper.rb +0 -188
- data/spec/stats/activity_spec.rb +0 -425
- data/spec/stats/exceptions_spec.rb +0 -247
- data/spec/stats/helpers_spec.rb +0 -685
- data/spec/validation/openssl_spec.rb +0 -37
- data/spec/validation/ssh_spec.rb +0 -39
@@ -1,375 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe RightSupport::DB::CassandraModel do
|
4
|
-
let(:config) do
|
5
|
-
{
|
6
|
-
'test' => {'server' => 'connection'},
|
7
|
-
'developemnt' => {'server' => 'connection1'},
|
8
|
-
'integration' => {'server' => 'connection2', 'namespace' => 'bronze42' }
|
9
|
-
}
|
10
|
-
end
|
11
|
-
|
12
|
-
# Ensure we at try to put the class back the way it was beforehand.
|
13
|
-
# even if that prior state was invalid.
|
14
|
-
around do |example|
|
15
|
-
original = RightSupport::DB::CassandraModel.config rescue nil
|
16
|
-
RightSupport::DB::CassandraModel.config = config
|
17
|
-
example.call
|
18
|
-
RightSupport::DB::CassandraModel.config = original
|
19
|
-
end
|
20
|
-
|
21
|
-
class Cassandra
|
22
|
-
class OrderedHash < Hash
|
23
|
-
def keys
|
24
|
-
super.sort
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
def init_app_state(column_family,keyspace,server,env)
|
30
|
-
ENV["RACK_ENV"] = env
|
31
|
-
RightSupport::DB::CassandraModel.column_family = column_family
|
32
|
-
RightSupport::DB::CassandraModel.keyspace = keyspace
|
33
|
-
RightSupport::DB::CassandraModel.config = {"#{env}" => {"server" => server}}
|
34
|
-
end
|
35
|
-
|
36
|
-
context "initialization" do
|
37
|
-
# This method determines the current keyspace based on the return value of the CassandraModel.keyspace method
|
38
|
-
# which looks at the value of @@current_keyspace or @@default_keyspace to determine the keyspace it is operating
|
39
|
-
# under. If a connection already exists for the keyspace it will re-use it. If a connection does not exist,
|
40
|
-
# it will create a new persistent connection for that keyspace that can be re-used with future requests
|
41
|
-
context :conn do
|
42
|
-
let(:column_family) { 'column_family' }
|
43
|
-
let(:env) { 'test' }
|
44
|
-
let(:server) { 'localhost:9160' }
|
45
|
-
let(:keyspace) { 'SatelliteService_1' }
|
46
|
-
let(:default_keyspace) { 'SatelliteService' }
|
47
|
-
let(:current_keyspace_connection) { flexmock('cassandra') }
|
48
|
-
let(:default_keyspace_connection) { flexmock('cassandra') }
|
49
|
-
|
50
|
-
before(:each) do
|
51
|
-
ENV["RACK_ENV"] = env
|
52
|
-
RightSupport::DB::CassandraModel.column_family = column_family
|
53
|
-
RightSupport::DB::CassandraModel.keyspace = default_keyspace
|
54
|
-
RightSupport::DB::CassandraModel.config = {env => {"server" => server}}
|
55
|
-
|
56
|
-
current_keyspace_connection.should_receive(:disable_node_auto_discovery!).and_return(true)
|
57
|
-
current_keyspace_connection.should_receive(:name).and_return('connection1')
|
58
|
-
|
59
|
-
default_keyspace_connection.should_receive(:disable_node_auto_discovery!).and_return(true)
|
60
|
-
default_keyspace_connection.should_receive(:name).and_return('connection2')
|
61
|
-
|
62
|
-
flexmock(Cassandra).should_receive(:new).with(keyspace + '_' + (ENV['RACK_ENV'] || 'development') + "_testns", "localhost:9160", {:timeout=>20, :server_retry_period=>nil}).and_return(current_keyspace_connection)
|
63
|
-
flexmock(Cassandra).should_receive(:new).with(default_keyspace + '_' + (ENV['RACK_ENV'] || 'development') + "_testns", "localhost:9160", {:timeout=>20, :server_retry_period=>nil}).and_return(default_keyspace_connection)
|
64
|
-
end
|
65
|
-
|
66
|
-
it 'raises a meaningful exception when a config stanza is missing' do
|
67
|
-
old_rack_env = ENV['RACK_ENV']
|
68
|
-
|
69
|
-
begin
|
70
|
-
ENV['RACK_ENV'] = 'foobar_12345'
|
71
|
-
bad_proc = lambda { RightSupport::DB::CassandraModel.reconnect }
|
72
|
-
bad_proc.should raise_error(RightSupport::DB::MissingConfiguration)
|
73
|
-
# This must be the very first attempt to call #conn during the execution of this spec
|
74
|
-
bad_proc = lambda { RightSupport::DB::CassandraModel.conn }
|
75
|
-
bad_proc.should raise_error(RightSupport::DB::MissingConfiguration)
|
76
|
-
ensure
|
77
|
-
ENV['RACK_ENV'] = old_rack_env
|
78
|
-
end
|
79
|
-
end
|
80
|
-
|
81
|
-
# This method assumes that keyspaces being requested to connect to already exist.
|
82
|
-
# If they do not exist, it should NOT create them. If the connection is able
|
83
|
-
# to be successfully established then it should be stored in a pool of connections
|
84
|
-
it 'creates a new connection if no connection exists for provided keyspace' do
|
85
|
-
RightSupport::DB::CassandraModel.conn.name.should == default_keyspace_connection.name
|
86
|
-
end
|
87
|
-
|
88
|
-
# If a connection has already been opened for a keyspace it should be re-used
|
89
|
-
it 're-uses an existing connection if it exists for provided keyspace' do
|
90
|
-
RightSupport::DB::CassandraModel.conn.name.should == RightSupport::DB::CassandraModel.conn.name
|
91
|
-
end
|
92
|
-
|
93
|
-
# The keyspace being used for the connection should be either the current keyspace or the default keyspace
|
94
|
-
it 'uses the connection that corresponds to the provided keyspace' do
|
95
|
-
RightSupport::DB::CassandraModel.with_keyspace(keyspace) do
|
96
|
-
RightSupport::DB::CassandraModel.conn.name.should == current_keyspace_connection.name
|
97
|
-
end
|
98
|
-
end
|
99
|
-
end
|
100
|
-
end
|
101
|
-
|
102
|
-
context "use" do
|
103
|
-
|
104
|
-
before(:each) do
|
105
|
-
@column_family = "TestApp"
|
106
|
-
@keyspace = "TestAppService"
|
107
|
-
@server = "localhost:9160"
|
108
|
-
@env = "test"
|
109
|
-
@timeout = {:timeout => RightSupport::DB::CassandraModel::DEFAULT_TIMEOUT}
|
110
|
-
|
111
|
-
init_app_state(@column_family, @keyspace, @server, @env)
|
112
|
-
|
113
|
-
@key = 'key'
|
114
|
-
@value = 'foo'
|
115
|
-
@offset = 'bar'
|
116
|
-
@attrs = {@offset => @value}
|
117
|
-
@opt = {}
|
118
|
-
@get_opt = {:count => RightSupport::DB::CassandraModel::DEFAULT_COUNT}
|
119
|
-
|
120
|
-
@instance = RightSupport::DB::CassandraModel.new(@key, @attrs)
|
121
|
-
|
122
|
-
@conn = flexmock(:connection)
|
123
|
-
flexmock(RightSupport::DB::CassandraModel).should_receive(:conn).and_return(@conn)
|
124
|
-
@conn.should_receive(:insert).with(@column_family, @key, @attrs,@opt).and_return(true)
|
125
|
-
@conn.should_receive(:remove).with(@column_family, @key).and_return(true)
|
126
|
-
@conn.should_receive(:get).with(@column_family, @key, @get_opt).and_return(@attrs).by_default
|
127
|
-
@conn.should_receive(:multi_get).with(@column_family, [1,2], @opt).and_return(Hash.new)
|
128
|
-
end
|
129
|
-
|
130
|
-
describe "instance methods" do
|
131
|
-
context :save do
|
132
|
-
it 'saves the row' do
|
133
|
-
@instance.save.should be_true
|
134
|
-
end
|
135
|
-
end
|
136
|
-
|
137
|
-
context :destroy do
|
138
|
-
it 'destroys the row' do
|
139
|
-
@instance.destroy.should be_true
|
140
|
-
end
|
141
|
-
end
|
142
|
-
|
143
|
-
context :reload do
|
144
|
-
it 'returns a new object for the row' do
|
145
|
-
@instance.reload.should be_a_kind_of(RightSupport::DB::CassandraModel)
|
146
|
-
@instance.reload!.should be_a_kind_of(RightSupport::DB::CassandraModel)
|
147
|
-
end
|
148
|
-
end
|
149
|
-
end
|
150
|
-
|
151
|
-
describe "class methods" do
|
152
|
-
# We want to remain backward-compatible for existing services so we expect this call to be made
|
153
|
-
# as such: RightSupport::DB::CassandraModel.keyspace = "SatelliteService" and CassandraModel
|
154
|
-
# will append the RACK_ENV to the end of it. Ex: "SatelliteService_development"
|
155
|
-
context :keyspace= do
|
156
|
-
let(:keyspace) { 'SatelliteService' }
|
157
|
-
|
158
|
-
it 'appends the environment to the keyspace provided' do
|
159
|
-
RightSupport::DB::CassandraModel.keyspace = keyspace
|
160
|
-
RightSupport::DB::CassandraModel.send(:class_variable_get, :@@default_keyspace).should == (keyspace + "_" + (ENV['RACK_ENV'] || 'development') + "_testns")
|
161
|
-
end
|
162
|
-
end
|
163
|
-
|
164
|
-
# If a current keyspace is provided it takes precedence over the default keyspace. If none is
|
165
|
-
# provided, the default keyspace should be returned.
|
166
|
-
context :keyspace do
|
167
|
-
let(:keyspace) { 'SatelliteService_' + ENV['RACK_ENV'] + "_testns"}
|
168
|
-
|
169
|
-
it 'returns the default keyspace if no current keyspace is set' do
|
170
|
-
RightSupport::DB::CassandraModel.send(:class_variable_set, :@@current_keyspace, nil)
|
171
|
-
RightSupport::DB::CassandraModel.send(:class_variable_set, :@@default_keyspace, keyspace)
|
172
|
-
RightSupport::DB::CassandraModel.keyspace.should == keyspace
|
173
|
-
end
|
174
|
-
|
175
|
-
it 'returns the current keyspace if a current keyspace is set' do
|
176
|
-
RightSupport::DB::CassandraModel.send(:class_variable_set, :@@current_keyspace, keyspace)
|
177
|
-
RightSupport::DB::CassandraModel.send(:class_variable_set, :@@default_keyspace, nil)
|
178
|
-
RightSupport::DB::CassandraModel.keyspace.should == keyspace
|
179
|
-
end
|
180
|
-
end
|
181
|
-
|
182
|
-
# This method assumes that a valid keyspace is passed in. If the keyspace does not exist we do NOT
|
183
|
-
# want to create it. CassandraModel should use the keyspace provided for the duration of the code
|
184
|
-
# executed within the block. Any requests processed outside of the block should execute using the
|
185
|
-
# default keyspace.
|
186
|
-
context :with_keyspace do
|
187
|
-
let(:keyspace) { 'SatelliteService_1' }
|
188
|
-
let(:default_keyspace) { 'SatelliteService' }
|
189
|
-
|
190
|
-
before(:each) do
|
191
|
-
RightSupport::DB::CassandraModel.keyspace = default_keyspace
|
192
|
-
end
|
193
|
-
|
194
|
-
it 'sets the current keyspace to the keyspace provided for execution within the block' do
|
195
|
-
RightSupport::DB::CassandraModel.with_keyspace(keyspace) do
|
196
|
-
RightSupport::DB::CassandraModel.keyspace.should == keyspace + "_test_testns"
|
197
|
-
end
|
198
|
-
end
|
199
|
-
|
200
|
-
it 'resets back to the default keyspace for execution outside of the block' do
|
201
|
-
RightSupport::DB::CassandraModel.with_keyspace(keyspace) {}
|
202
|
-
RightSupport::DB::CassandraModel.keyspace.should == default_keyspace + "_test_testns"
|
203
|
-
end
|
204
|
-
context 'append_env parameter' do
|
205
|
-
it 'appends the environment by default' do
|
206
|
-
RightSupport::DB::CassandraModel.with_keyspace('Monkey') do
|
207
|
-
RightSupport::DB::CassandraModel.keyspace.should == 'Monkey_test_testns'
|
208
|
-
end
|
209
|
-
end
|
210
|
-
|
211
|
-
it 'appends the environment when append_env == true' do
|
212
|
-
RightSupport::DB::CassandraModel.with_keyspace('Monkey', true) do
|
213
|
-
RightSupport::DB::CassandraModel.keyspace.should == 'Monkey_test_testns'
|
214
|
-
end
|
215
|
-
end
|
216
|
-
|
217
|
-
it 'does NOT append the environment when append_env == false' do
|
218
|
-
RightSupport::DB::CassandraModel.with_keyspace('Monkey_notatest', false) do
|
219
|
-
RightSupport::DB::CassandraModel.keyspace.should == 'Monkey_notatest'
|
220
|
-
end
|
221
|
-
end
|
222
|
-
|
223
|
-
it 'avoids double-appending the environment' do
|
224
|
-
RightSupport::DB::CassandraModel.with_keyspace('Monkey_test_testns') do
|
225
|
-
RightSupport::DB::CassandraModel.keyspace.should == 'Monkey_test_testns'
|
226
|
-
end
|
227
|
-
end
|
228
|
-
end
|
229
|
-
end
|
230
|
-
|
231
|
-
context :namespace do
|
232
|
-
it 'returns testns for the test environment' do
|
233
|
-
RightSupport::DB::CassandraModel.namespace('test').should eq 'testns'
|
234
|
-
end
|
235
|
-
it 'uses the config-given namespace for the integration environment' do
|
236
|
-
RightSupport::DB::CassandraModel.config = config
|
237
|
-
RightSupport::DB::CassandraModel.namespace('integration').should eq 'bronze42'
|
238
|
-
end
|
239
|
-
it 'returns nil for any other environment' do
|
240
|
-
%w{production staging development frobnication}.each do |env|
|
241
|
-
RightSupport::DB::CassandraModel.namespace('production').should be(nil)
|
242
|
-
RightSupport::DB::CassandraModel.namespace('production').should be(nil)
|
243
|
-
end
|
244
|
-
end
|
245
|
-
end
|
246
|
-
context :insert do
|
247
|
-
it 'inserts a row by using the class method' do
|
248
|
-
RightSupport::DB::CassandraModel.insert(@key, @attrs, @opt).should be_true
|
249
|
-
end
|
250
|
-
end
|
251
|
-
|
252
|
-
context :remove do
|
253
|
-
it 'removes a row by using the class method' do
|
254
|
-
RightSupport::DB::CassandraModel.remove(@key).should be_true
|
255
|
-
end
|
256
|
-
end
|
257
|
-
|
258
|
-
context :all do
|
259
|
-
it 'returns all existing rows for the specified array of keys' do
|
260
|
-
RightSupport::DB::CassandraModel.all([1, 2]).should be_a_kind_of(Hash)
|
261
|
-
end
|
262
|
-
end
|
263
|
-
|
264
|
-
context :get do
|
265
|
-
it 'returns row for the specified key' do
|
266
|
-
RightSupport::DB::CassandraModel.get(@key).should be_a_kind_of(RightSupport::DB::CassandraModel)
|
267
|
-
end
|
268
|
-
|
269
|
-
it 'returns only number of columns requested' do
|
270
|
-
attrs = {@offset + '1' => @value, @offset + '2' => @value}
|
271
|
-
get_opt = {:count => 2}
|
272
|
-
@conn.should_receive(:get).with(@column_family, @key, get_opt).and_return(attrs).once
|
273
|
-
RightSupport::DB::CassandraModel.get(@key, get_opt).attributes.should == attrs
|
274
|
-
end
|
275
|
-
|
276
|
-
it 'returns all columns for the specified key if no count specified' do
|
277
|
-
pending "Unpredictable behavior on ruby < 1.9" unless RUBY_VERSION >= "1.9"
|
278
|
-
default_count = RightSupport::DB::CassandraModel::DEFAULT_COUNT
|
279
|
-
|
280
|
-
RightSupport::DB::CassandraModel.instance_eval { remove_const :DEFAULT_COUNT }
|
281
|
-
RightSupport::DB::CassandraModel.const_set(:DEFAULT_COUNT, 2)
|
282
|
-
begin
|
283
|
-
|
284
|
-
attrs1 = {@offset + '1' => @value, @offset + '2' => @value}
|
285
|
-
attrs2 = {@offset + '3' => @value}
|
286
|
-
attrs = attrs1.merge(attrs2)
|
287
|
-
get_opt1 = {:count => 2}
|
288
|
-
get_opt2 = {:count => 2, :start => @offset + '2'}
|
289
|
-
@conn.should_receive(:get).with(@column_family, @key, get_opt1).and_return(attrs1).once
|
290
|
-
@conn.should_receive(:get).with(@column_family, @key, get_opt2).and_return(attrs2).once
|
291
|
-
RightSupport::DB::CassandraModel.get(@key).attributes.should == attrs
|
292
|
-
ensure
|
293
|
-
RightSupport::DB::CassandraModel.instance_eval { remove_const :DEFAULT_COUNT }
|
294
|
-
RightSupport::DB::CassandraModel.const_set(:DEFAULT_COUNT, default_count)
|
295
|
-
end
|
296
|
-
end
|
297
|
-
|
298
|
-
it 'returns nil if key not found' do
|
299
|
-
@conn.should_receive(:get).with(@column_family, @key, @get_opt).and_return({})
|
300
|
-
RightSupport::DB::CassandraModel.get(@key).should be_nil
|
301
|
-
end
|
302
|
-
end
|
303
|
-
|
304
|
-
context :get_indexed do
|
305
|
-
|
306
|
-
before(:each) do
|
307
|
-
@column = flexmock(:column, :name => 'foo', :value => 'bar')
|
308
|
-
@column_or_super = flexmock(:column_or_super, :column => @column)
|
309
|
-
@rows = {@key => [@column_or_super]}
|
310
|
-
@index = 'index'
|
311
|
-
@index_key = 'index_key'
|
312
|
-
@start = ""
|
313
|
-
@count = RightSupport::DB::CassandraModel::DEFAULT_COUNT
|
314
|
-
@expr = flexmock(:expr)
|
315
|
-
@conn.should_receive(:create_idx_expr).and_return(@expr)
|
316
|
-
@clause = flexmock(:clause)
|
317
|
-
@conn.should_receive(:create_idx_clause).with([@expr], @start, @count).and_return(@clause).by_default
|
318
|
-
@conn.should_receive(:get_indexed_slices).with(@column_family, @clause, nil, {}).and_return(@rows).by_default
|
319
|
-
end
|
320
|
-
|
321
|
-
it 'returns row for the specified key' do
|
322
|
-
rows = RightSupport::DB::CassandraModel.get_indexed(@index, @index_key)
|
323
|
-
rows.should be_a_kind_of(Array)
|
324
|
-
rows.size.should eq 1
|
325
|
-
rows.first.should be_a_kind_of(RightSupport::DB::CassandraModel)
|
326
|
-
end
|
327
|
-
|
328
|
-
it 'returns all rows for the specified key if no count specified' do
|
329
|
-
pending "Unpredictable behavior on ruby < 1.9" unless RUBY_VERSION >= "1.9"
|
330
|
-
|
331
|
-
default_count = RightSupport::DB::CassandraModel::DEFAULT_COUNT
|
332
|
-
|
333
|
-
RightSupport::DB::CassandraModel.instance_eval { remove_const :DEFAULT_COUNT }
|
334
|
-
RightSupport::DB::CassandraModel.const_set(:DEFAULT_COUNT, 2)
|
335
|
-
begin
|
336
|
-
key1 = @key + '8'
|
337
|
-
key2 = @key + '12'
|
338
|
-
key3 = @key + '13'
|
339
|
-
cols = {'foo' => 'bar'}
|
340
|
-
rows1 = {key1 => [@column_or_super], key2 => [@column_or_super]}
|
341
|
-
rows2 = {key3 => [@column_or_super]}
|
342
|
-
@conn.should_receive(:create_idx_clause).with([@expr], @start, 2).and_return(@clause).once
|
343
|
-
@conn.should_receive(:get_indexed_slices).with(@column_family, @clause, nil, {}).and_return(rows1).once
|
344
|
-
@conn.should_receive(:create_idx_clause).with([@expr], key2, 2).and_return(@clause).once
|
345
|
-
@conn.should_receive(:get_indexed_slices).with(@column_family, @clause, nil, {}).and_return(rows2).once
|
346
|
-
rows = RightSupport::DB::CassandraModel.get_indexed(@index, @index_key)
|
347
|
-
rows.size.should eq 3
|
348
|
-
rows.inject({}) { |s, r| s[r.key] = r.attributes; s }.should == {key1 => cols, key2 => cols, key3 => cols}
|
349
|
-
ensure
|
350
|
-
RightSupport::DB::CassandraModel.instance_eval { remove_const :DEFAULT_COUNT }
|
351
|
-
RightSupport::DB::CassandraModel.const_set(:DEFAULT_COUNT, default_count)
|
352
|
-
end
|
353
|
-
end
|
354
|
-
|
355
|
-
it 'returns empty array if no rows found for key' do
|
356
|
-
@conn.should_receive(:get_indexed_slices).with(@column_family, @clause, nil, {}).and_return({}).once
|
357
|
-
RightSupport::DB::CassandraModel.get_indexed(@index, @index_key).should == []
|
358
|
-
end
|
359
|
-
end
|
360
|
-
|
361
|
-
context :stream_all_indexed_slices do
|
362
|
-
it 'streams rows in chunks'
|
363
|
-
it 'streams columns in chunks'
|
364
|
-
it 'handles timeouts'
|
365
|
-
end
|
366
|
-
end
|
367
|
-
end
|
368
|
-
|
369
|
-
context '.calculate_random_partitioner_token' do
|
370
|
-
it 'works' do
|
371
|
-
expected = 73001115008341200964825964898370608784
|
372
|
-
described_class.calculate_random_partitioner_token('71:foomonkeys').should == expected
|
373
|
-
end
|
374
|
-
end
|
375
|
-
end
|
@@ -1,30 +0,0 @@
|
|
1
|
-
-----BEGIN RSA PRIVATE KEY-----
|
2
|
-
Proc-Type: 4,ENCRYPTED
|
3
|
-
DEK-Info: DES-EDE3-CBC,61C0BBB816A708D4
|
4
|
-
|
5
|
-
SQ/Y+U7z51OL/hx4YnfVPl6uqsOjpSjU2w4NFqB6EyBtMFgOoqW6ryuIi6ycHgWJ
|
6
|
-
YabUlMPdnexU+1BGqu9P2M9kQejfVddBFmbE09s54dwamk7q6RjaARN0UvHq6Ms9
|
7
|
-
r5/nqRBrinWtOeU/+7cV5qGp2/HbWC2bHAUCCwBcq+ymEpLOw/dpHpxjuiB5ZOLt
|
8
|
-
QzcEJ8ePlNDYvPxw4Wjvb5IDjS4MSoJfA5Y2ZXwVSI1d7mhx4Cekx3CkTMWKYIU8
|
9
|
-
FS6hO39tfPTcxb4os3FYl8D8TlRHv5atrsptKqYE4DKhZhoDA5yFbFJHZlEp+G6H
|
10
|
-
t+snMyuzEWNWq3wGI/gaglatUMq6airA50qticbw8kvz+67pPh2gkAgMXBHEGgPW
|
11
|
-
m0xnqaWf+MyQCUfaxjvxAq68Ced+H9ULLYFrzWAIuSh1M+QartuvP1ZOIcDpY83i
|
12
|
-
RybTJC5MLgGE0COM7oOtPfXO/rvdf6jqTr54HhYwq18aWrqjnacZi0JzNEFRtpNa
|
13
|
-
5FNbwbQGT4Y8J1rOgbyjrd712oRhfjMAU39w4b6gEIATB4zDnMVkdb/Rde/nB7i4
|
14
|
-
CqDB9iSEbtQN4Ev5fXpIDrmhbdT/CURpzRvIt68x08qvX8KQwqDbLz39luocApxN
|
15
|
-
lnTihGiYAiNflMpDvhNL8MSLxYgL5Or2KVF/Ppc+1Qw23BEYDlaRRzc71PWdrVr8
|
16
|
-
UxEdFtqQnnthO7PabrwmLiPeArIGL4U8wrbXA3GbkbDtClftWMaC9JrzVJvXp1z7
|
17
|
-
sXZPhdZzSCg3n3ZbAGKYUx/G8AHojLKfAF3BHufnU9qM+6TS/KtTnhrvHSgYPcBn
|
18
|
-
etI7DWZ/mUnLwnsWfiQ3n5PeeUq/nU+IFJT+Y3r+TfFVCiGPW60XpfLzH1U4otKq
|
19
|
-
KaEnCQX6S7p1Jinx+FHL9fg1I50E6QUNO+N8XO4ay3Jzumz2yjZeudyt+uy954Hq
|
20
|
-
RfmDGYImqrkYrzd8d6hNUTBGnUfUTvq2k/orKhvcxtX+tr9WhNshnJcK18SgBRKT
|
21
|
-
6XLybyioikVSpUGsL95kIhrspryO8v7/M1igWWrLu9fe/jUJLCFzlbGSRYDn+QTp
|
22
|
-
z7qpbBvxHPgu1fKurZ96nCcigVxQgY5rPwpQvG+mkD6YOhgDvSAjTos7Fagz6nb6
|
23
|
-
01MufCVvFx+BBZEsol0Ag23RhXeJXvxkcF//hcPseCA/oB9Aqzyu+ml9mgp4v6P+
|
24
|
-
AgVopgGCfZR31CQ2b9AxdSARFCj2AFE9AdeNy268KSx8wLWAlzUcnGi57eK8WJM3
|
25
|
-
KTDOwJZDgZkjYyMZATpxOj8w3euAflQjQmyXpN1/Q0BW66Mj9+XzVk2yEpF2S0iE
|
26
|
-
xKzPcNEzlGMo1xo6mqVE/kIuRSodXuGp5Eoo8ITvpYWcSdtCTSKJNxAUqry/k9bg
|
27
|
-
9sf3jSmSHzUd92pdM02p8A42HcaPGLmbuFjIfZPK7KoYmIdhJqy7s08CFUlk9XI/
|
28
|
-
PxdYph5J4WkAbeomPGUTFxEWV1cM2lvW4hotrx8MS50WLVZxxY1p7D+JxN3KeJyc
|
29
|
-
mytYpg2dxr8UF64NFKuyEmunkDTdYH2Oi7B7mAcw/QlBN+qCARP+tA==
|
30
|
-
-----END RSA PRIVATE KEY-----
|
@@ -1,12 +0,0 @@
|
|
1
|
-
-----BEGIN DSA PRIVATE KEY-----
|
2
|
-
MIIBvAIBAAKBgQC1RlSYmT8VVtunF3xcpSdJfihaHAGzLH0nf2ooHcKIH6PyxjCe
|
3
|
-
Q93rFB69uyGPUJVawz3w0Y1B7B6h5eXI4SEKA4iqmSHXdFonO7wvOT5DTkzQl3yX
|
4
|
-
B1s4xU8+GW1MtUNKxHPzFpX40797Z1enO/EZRNLYt0P4IG86s/O+BqD6IwIVAJ24
|
5
|
-
m8A6ZFqsunyy2L5o9UInE+gfAoGAPuEeCrIginLFwSdwyrxEwC/gblKvOf/9+iMB
|
6
|
-
Jo+5fN2E9AHKrCsCa53E2lnUbXOdSKDR6yVmUQSB3EsBDoLqDOVJh/BWVTABebIO
|
7
|
-
WwnjQZX9UBGnsJwD4zpvtXLU4qnyFywSr1kdLDHMsGS3WVocJ9jOEH7Rh0xMM423
|
8
|
-
yYS4bUQCgYEApxLO5sTQS/Ej8+BFJQrMS3xHpONQxiMnTLE3q6qZXJRgHDgsqqwZ
|
9
|
-
pAfZCjRxvvfUfBGzjKwJlGQOLZVaGZOArGQF7NRtOfCHZtMBg1vubewXs64gmH5G
|
10
|
-
aXvJ17D6W2vCO04R/vXh43qKLDcPu7wGng+eWNaw/LkbdfC4k8uVfp4CFQCHe0yn
|
11
|
-
rgxFphSFqf8Spchmsg/coA==
|
12
|
-
-----END DSA PRIVATE KEY-----
|
@@ -1,15 +0,0 @@
|
|
1
|
-
-----BEGIN RSA PRIVATE KEY-----
|
2
|
-
MIICWwIBAAKBgQDm4VY+mDoYUsH+7idaNXP6Bq+YIXwqGNar6zgbPEe6qgpF9nSQ
|
3
|
-
B98gMObcZ9H7qGm3e/bQTCrlBAB/jMUQQbTyPsEy3pIKeWoPl7GTQpcSS9WZoHYX
|
4
|
-
yf4TN8MMOeJ3rGbyGb8Xm13R+SBpOMOZfnT3KUJLznIYVtBvv+uFz/C9ewIDAQAB
|
5
|
-
AoGAMJzLkvxsZwitziaI5KaSl9dmi4qpYRe/w40QUDO+CqCY7yg4XMc7hMSnJ0s4
|
6
|
-
3FsWf0q7qhoPgg74p+KU75pWJbEHoYor6LqDuxov4DSx/2SfqmDBIAb9IQ4KWDr2
|
7
|
-
WU/o2/ivbHJ89FxCCroMzNg+qm8pAHVYQ72E/w/1sSRuQPECQQD4fes0OrE8qlJ0
|
8
|
-
0UCxiTbotreNY7N/pKPIFqL/+ODcXJIHCyvVAMXw469r9KacrC/t8qKNatWk3mP1
|
9
|
-
uZzfoAJJAkEA7dsxOJcTqMAncOzbP2cXPkGvzyS06mUoziuZWDc+NAOy4R/V/xHW
|
10
|
-
+CUleXs06G9c/LoZ+E80MP600YvPtKUBowJAZXXMfnPkgDevGUGDX7n98IECazml
|
11
|
-
Rd3sfbs4bLmq3m7xtOyLxhnduGDO9I5dJSVtIIPseT+A4iNnvyI9elVz+QJALTBe
|
12
|
-
mpTBTGctVxv4z4Pje5V5NE6R/JI5fWn1GThtne4x9ulYe7xE7iIIi5rnw10c+nrU
|
13
|
-
4kMR9Fj/u2vnizdqJwJACb7DY5rKZa/xgzgLtE5jW60zZWvwS9LYUs+1ND6CeiFy
|
14
|
-
s3EiH2z+zbSO+cnMtCutdRKIHk3wy6tyRKOq0EMafA==
|
15
|
-
-----END RSA PRIVATE KEY-----
|
@@ -1 +0,0 @@
|
|
1
|
-
ssh-dss AAAAB3NzaC1kc3MAAACBALVGVJiZPxVW26cXfFylJ0l+KFocAbMsfSd/aigdwogfo/LGMJ5D3esUHr27IY9QlVrDPfDRjUHsHqHl5cjhIQoDiKqZIdd0Wic7vC85PkNOTNCXfJcHWzjFTz4ZbUy1Q0rEc/MWlfjTv3tnV6c78RlE0ti3Q/ggbzqz874GoPojAAAAFQCduJvAOmRarLp8sti+aPVCJxPoHwAAAIA+4R4KsiCKcsXBJ3DKvETAL+BuUq85//36IwEmj7l83YT0AcqsKwJrncTaWdRtc51IoNHrJWZRBIHcSwEOguoM5UmH8FZVMAF5sg5bCeNBlf1QEaewnAPjOm+1ctTiqfIXLBKvWR0sMcywZLdZWhwn2M4QftGHTEwzjbfJhLhtRAAAAIEApxLO5sTQS/Ej8+BFJQrMS3xHpONQxiMnTLE3q6qZXJRgHDgsqqwZpAfZCjRxvvfUfBGzjKwJlGQOLZVaGZOArGQF7NRtOfCHZtMBg1vubewXs64gmH5GaXvJ17D6W2vCO04R/vXh43qKLDcPu7wGng+eWNaw/LkbdfC4k8uVfp4= user@host
|
@@ -1 +0,0 @@
|
|
1
|
-
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEApfGJ2lzcKgWq50u4yhZyP7yDjA4CF2pV19TUOlXg4a40FCuKi7JIqPCyixmrWYrvRFz+5zY+gHWOHkCfjNaDryUgPsBMzk2DZDD8fsrJ5KU7QDAa1RMbixnWsWTDcXGhHxC7jtRV7qKFvribLYEoUfVbWZYQR3Wl9kfc78sF6Z2TZuL2Fb9YJc5f2uDz6+I6oy8LtGci4Y2hKVYxrN5tgvFcwkE8JsRaAnjWicfoHRUIBZ/tdT76EMhBEKdO63hO9AZ8phTyZoJyLzykDRaelBUYXjG0LQXTq4jiJhKa07kv0XIgNwnz4zB9qtiOHXm6KZZDxy7xnVXOFum+JqcUxQ== user@host
|
@@ -1,76 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe RightSupport::Log::ExceptionLogger do
|
4
|
-
before(:all) do
|
5
|
-
@actual_logger = Logger.new(StringIO.new)
|
6
|
-
@logger = RightSupport::Log::ExceptionLogger.new(@actual_logger)
|
7
|
-
@exception = Exception.new('message')
|
8
|
-
end
|
9
|
-
|
10
|
-
context :exception do
|
11
|
-
it 'logs an error with exception information' do
|
12
|
-
flexmock(@actual_logger).should_receive(:fatal)
|
13
|
-
@logger.exception('desc', @exception)
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
context 'class methods' do
|
18
|
-
context :format_exception do
|
19
|
-
it 'includes the description' do
|
20
|
-
RightSupport::Log::ExceptionLogger.format_exception('desc').should == 'desc'
|
21
|
-
end
|
22
|
-
|
23
|
-
it 'includes the exception message if present' do
|
24
|
-
e = ArgumentError.new("err")
|
25
|
-
RightSupport::Log::ExceptionLogger.format_exception('desc', e).should =~ /desc \(ArgumentError: err.*/
|
26
|
-
end
|
27
|
-
|
28
|
-
it 'includes the exception string if present' do
|
29
|
-
RightSupport::Log::ExceptionLogger.format_exception('desc', 'err', :no_trace).should == 'desc (err)'
|
30
|
-
end
|
31
|
-
|
32
|
-
context 'with backtrace=:no_trace' do
|
33
|
-
it 'does not include a backtrace' do
|
34
|
-
e = ArgumentError.new("err")
|
35
|
-
RightSupport::Log::ExceptionLogger.format_exception('desc', e, :no_trace).should == 'desc (ArgumentError: err)'
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
context 'with backtrace=:caller' do
|
40
|
-
it 'includes a single line of backtrace' do
|
41
|
-
begin
|
42
|
-
raise ArgumentError.new("err")
|
43
|
-
rescue Exception => e
|
44
|
-
RightSupport::Log::ExceptionLogger.format_exception('desc', e, :caller).should == "desc (ArgumentError: err IN #{e.backtrace[0]})"
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
it 'defaults to :caller trace' do
|
49
|
-
begin
|
50
|
-
raise ArgumentError.new("err")
|
51
|
-
rescue Exception => e
|
52
|
-
RightSupport::Log::ExceptionLogger.format_exception('desc', e).should == "desc (ArgumentError: err IN #{e.backtrace[0]})"
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
|
-
it 'excludes backtrace if the exception does not respond to backtrace' do
|
57
|
-
RightSupport::Log::ExceptionLogger.format_exception('desc', 'err').should == "desc (err)"
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
context 'with backtrace=:trace' do
|
62
|
-
it 'includes a full backtrace' do
|
63
|
-
begin
|
64
|
-
raise ArgumentError.new("err")
|
65
|
-
rescue Exception => e
|
66
|
-
RightSupport::Log::ExceptionLogger.format_exception('desc', e, :trace).should == "desc (ArgumentError: err IN\n " + e.backtrace.join("\n ") + ")"
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
70
|
-
it 'excludes backtrace if the exception does not respond to backtrace' do
|
71
|
-
RightSupport::Log::ExceptionLogger.format_exception('desc', 'err').should == "desc (err)"
|
72
|
-
end
|
73
|
-
end
|
74
|
-
end
|
75
|
-
end
|
76
|
-
end
|
@@ -1,66 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe RightSupport::Log::FilterLogger do
|
4
|
-
before :each do
|
5
|
-
@base_logger = mock_logger
|
6
|
-
@logger = RightSupport::Log::FilterLogger.new(@base_logger)
|
7
|
-
end
|
8
|
-
it 'does method_missing correctly'
|
9
|
-
it 'does respond_to? correctly'
|
10
|
-
|
11
|
-
context 'transparently proxies Logger severity-methods to underlying object' do
|
12
|
-
[:debug, :info, :warn, :error, :fatal].each do |method|
|
13
|
-
it ":#{method}" do
|
14
|
-
#@base_logger.should_receive(method).with('testing').once
|
15
|
-
@logger.__send__(method, "testing")
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
context 'transparently proxies Logger add method to underlying object' do
|
21
|
-
[:debug, :info, :warn, :error, :fatal].each do |method|
|
22
|
-
severity = RightSupport::Log::FilterLogger::SEVERITY_TO_METHOD.index(method)
|
23
|
-
it "add(#{method}, \t... ) With Message" do
|
24
|
-
@base_logger.should_receive(:add).with(severity, 'testing').once
|
25
|
-
@logger.add(severity, "testing")
|
26
|
-
end
|
27
|
-
it "add(#{method}, \t... ) With Block" do
|
28
|
-
@base_logger.should_receive(:add).with(severity, "testing").once
|
29
|
-
@logger.add(severity) {"testing"}
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
it 'filters log messages by severity'
|
34
|
-
it 'should always log a null or empty message' do
|
35
|
-
# Is this the behaviour we want?
|
36
|
-
@base_logger.should_receive(:info).twice
|
37
|
-
@logger.info(nil)
|
38
|
-
@logger.info("")
|
39
|
-
end
|
40
|
-
|
41
|
-
context 'filtering log messages' do
|
42
|
-
let(:logger) { flexmock(@logger) }
|
43
|
-
let(:info) { RightSupport::Log::FilterLogger::INFO }
|
44
|
-
|
45
|
-
context 'when the log message is a string' do
|
46
|
-
it 'passes the filter method the string' do
|
47
|
-
logger.should_receive(:filter).with(info, 'foo').once.pass_thru
|
48
|
-
logger.info('foo')
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
context 'when the log message is an exception' do
|
53
|
-
it 'passes the filter method a string' do
|
54
|
-
logger.should_receive(:filter).with(info, String).once.pass_thru
|
55
|
-
logger.info(StandardError.new)
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
context 'when the log message is any other object' do
|
60
|
-
it 'passes the filter method a string' do
|
61
|
-
logger.should_receive(:filter).with(info, String).once.pass_thru
|
62
|
-
logger.info(Object.new)
|
63
|
-
end
|
64
|
-
end
|
65
|
-
end
|
66
|
-
end
|