beetle 0.3.0.rc.13 → 0.3.0.rc.14

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc CHANGED
@@ -85,7 +85,7 @@ For development, you'll need
85
85
  {Ali Jelveh}[http://github.com/dudemeister] and
86
86
  {Sebastian Roebke}[http://github.com/boosty].
87
87
 
88
- You cand find out more about our work on our {dev blog}[http://devblog.xing.com].
88
+ You can find out more about our work on our {dev blog}[http://devblog.xing.com].
89
89
 
90
90
  Copyright (c) 2010 {XING AG}[http://www.xing.com/]
91
91
 
data/Rakefile CHANGED
@@ -1,6 +1,5 @@
1
1
  require 'rake'
2
2
  require 'rake/testtask'
3
- require 'rcov/rcovtask'
4
3
  require 'bundler/gem_tasks'
5
4
 
6
5
  # rake 0.9.2 hack to supress deprecation warnings caused by cucumber
@@ -11,25 +10,35 @@ require 'cucumber/rake/task'
11
10
  $:.unshift 'lib'
12
11
  require 'beetle'
13
12
 
14
- namespace :test do
15
- namespace :coverage do
16
- desc "Delete aggregate coverage data."
17
- task(:clean) { rm_f "coverage.data" }
18
- end
13
+ if RUBY_VERSION < "1.9"
14
+ require 'rcov/rcovtask'
15
+
16
+ namespace :test do
17
+ namespace :coverage do
18
+ desc "Delete aggregate coverage data."
19
+ task(:clean) { rm_f "coverage.data" }
20
+ end
19
21
 
20
- desc 'Aggregate code coverage'
21
- task :coverage => "test:coverage:clean"
22
+ desc 'Aggregate code coverage'
23
+ task :coverage => "test:coverage:clean"
22
24
 
23
- Rcov::RcovTask.new(:coverage) do |t|
24
- t.libs << "test"
25
- t.test_files = FileList["test/**/*_test.rb"]
26
- t.output_dir = "test/coverage"
27
- t.verbose = true
28
- t.rcov_opts << "--exclude '.*' --include-file 'lib/beetle/'"
25
+ Rcov::RcovTask.new(:coverage) do |t|
26
+ t.libs << "test"
27
+ t.test_files = FileList["test/**/*_test.rb"]
28
+ t.output_dir = "test/coverage"
29
+ t.verbose = true
30
+ t.rcov_opts << "--exclude '.*' --include-file 'lib/beetle/'"
31
+ end
32
+ task :coverage do
33
+ system 'open test/coverage/index.html'
34
+ end if RUBY_PLATFORM =~ /darwin/
35
+ end
36
+ else
37
+ namespace :test do
38
+ task :coverage => :test do
39
+ system 'open coverage/index.html'
40
+ end
29
41
  end
30
- task :coverage do
31
- system 'open test/coverage/index.html'
32
- end if RUBY_PLATFORM =~ /darwin/
33
42
  end
34
43
 
35
44
  namespace :beetle do
@@ -98,7 +107,7 @@ Rake::TestTask.new do |t|
98
107
  t.verbose = true
99
108
  end
100
109
 
101
- require 'rake/rdoctask'
110
+ require 'rdoc/task'
102
111
 
103
112
  Rake::RDocTask.new do |rdoc|
104
113
  rdoc.rdoc_dir = 'site/rdoc'
data/beetle.gemspec CHANGED
@@ -33,19 +33,14 @@ Gem::Specification.new do |s|
33
33
 
34
34
  s.specification_version = 3
35
35
  s.add_runtime_dependency("uuid4r", [">= 0.1.2"])
36
- s.add_runtime_dependency("bunny", ["= 0.7.8"])
37
- s.add_runtime_dependency("redis", ["= 2.2.2"])
38
- s.add_runtime_dependency("hiredis", ["= 0.4.4"])
39
- s.add_runtime_dependency("amq-client", ["= 0.9.1"])
40
- s.add_runtime_dependency("amq-protocol", ["= 0.9.0"])
41
- s.add_runtime_dependency("amqp", ["= 0.9.2"])
36
+ s.add_runtime_dependency("bunny", ["= 0.7.9"])
37
+ s.add_runtime_dependency("redis", ["= 3.0.1"])
38
+ s.add_runtime_dependency("hiredis", ["= 0.4.5"])
39
+ s.add_runtime_dependency("amq-client", ["= 0.9.3"])
40
+ s.add_runtime_dependency("amq-protocol", ["= 0.9.3"])
41
+ s.add_runtime_dependency("amqp", ["= 0.9.6"])
42
42
  s.add_runtime_dependency("activesupport", [">= 2.3.4"])
43
43
  s.add_runtime_dependency("eventmachine_httpserver", [">= 0.2.1"])
44
44
  s.add_runtime_dependency("daemons", [">= 1.0.10"])
45
- s.add_development_dependency("rake", [">= 0.8.7"])
46
- s.add_development_dependency("mocha", [">= 0"])
47
- s.add_development_dependency("rcov", ["~> 0.9.10"])
48
- s.add_development_dependency("cucumber", [">= 0.7.2"])
49
- s.add_development_dependency("daemon_controller", [">= 0"])
50
45
  end
51
46
 
data/examples/simple.rb CHANGED
@@ -1,8 +1,6 @@
1
1
  # simple.rb
2
2
  # this example shows you a very basic message/handler setup
3
3
  #
4
- #
5
- #
6
4
  # ! check the examples/README.rdoc for information on starting your redis/rabbit !
7
5
  #
8
6
  # start it with ruby simple.rb
@@ -15,7 +13,7 @@ Beetle.config.logger.level = Logger::INFO
15
13
 
16
14
  # setup client
17
15
  client = Beetle::Client.new
18
- client.register_queue(:test, :arguments => {"x-message-ttl" => 60 * 1000})
16
+ client.register_queue(:test)
19
17
  client.register_message(:test)
20
18
 
21
19
  # purge the test queue
@@ -199,7 +199,7 @@ module Beetle
199
199
  # have we already seen this message? if not, set the status to "incomplete" and store
200
200
  # the message exipration timestamp in the deduplication store.
201
201
  def key_exists?
202
- old_message = 0 == @store.msetnx(msg_id, :status =>"incomplete", :expires => @expires_at, :timeout => now + timeout)
202
+ old_message = !@store.msetnx(msg_id, :status =>"incomplete", :expires => @expires_at, :timeout => now + timeout)
203
203
  if old_message
204
204
  logger.debug "Beetle: received duplicate message: #{msg_id} on queue: #{@queue}"
205
205
  end
@@ -19,11 +19,6 @@ class Redis #:nodoc:
19
19
  slaveof(host, port)
20
20
  end
21
21
 
22
- # Redis 2 tries to establish a connection on inspect. this is evil!
23
- def inspect
24
- super
25
- end
26
-
27
22
  def info_with_rescue
28
23
  info
29
24
  rescue Exception
@@ -51,23 +46,4 @@ class Redis #:nodoc:
51
46
  info["role"] == "slave" && info["master_host"] == host && info["master_port"] == port.to_s
52
47
  end
53
48
 
54
- # redis 2.2.2 shutdown implementation does not disconnect from the redis server.
55
- # this leaves the connection in an inconsistent state and causes the next command to silently fail.
56
- # this in turn breaks our cucumber test scenarios.
57
- # fix this here, until a new version is released which fixes the problem.
58
-
59
- alias_method :broken_shutdown, :shutdown
60
-
61
- # Synchronously save the dataset to disk and then shut down the server.
62
- def shutdown
63
- synchronize do
64
- begin
65
- @client.call [:shutdown]
66
- rescue Errno::ECONNREFUSED
67
- ensure
68
- @client.disconnect
69
- end
70
- end
71
- end
72
-
73
49
  end
@@ -1,3 +1,3 @@
1
1
  module Beetle
2
- VERSION = "0.3.0.rc.13"
2
+ VERSION = "0.3.0.rc.14"
3
3
  end
data/lib/beetle.rb CHANGED
@@ -10,6 +10,7 @@ require 'socket'
10
10
  require 'beetle/version'
11
11
 
12
12
  module Beetle
13
+ #:nocov:
13
14
  Timer = if RUBY_VERSION < "1.9"
14
15
  begin
15
16
  require 'system_timer'
@@ -23,6 +24,7 @@ module Beetle
23
24
  require 'timeout'
24
25
  Timeout
25
26
  end
27
+ #:nocov:
26
28
 
27
29
  # abstract superclass for Beetle specific exceptions
28
30
  class Error < StandardError; end
@@ -52,7 +54,11 @@ module Beetle
52
54
  def self.hostname
53
55
  name = Socket.gethostname
54
56
  parts = name.split('.')
55
- parts.size > 1 ? name : Socket.gethostbyname(parts.first).first
57
+ if parts.size > 1
58
+ name
59
+ else
60
+ Socket.gethostbyname(parts.first).first rescue name
61
+ end
56
62
  end
57
63
 
58
64
  # use ruby's autoload mechanism for loading beetle classes
@@ -76,7 +82,9 @@ module Beetle
76
82
  raise if $!.is_a?(Mocha::ExpectationError)
77
83
  end
78
84
  else
85
+ #:nocov:
79
86
  def self.reraise_expectation_errors! #:nodoc:
80
87
  end
88
+ #:nocov:
81
89
  end
82
90
  end
@@ -0,0 +1,16 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../test_helper')
2
+
3
+ module Beetle
4
+ class HostnameTest < Test::Unit::TestCase
5
+ test "should use Socket.gethostname if returned name name is fully qualified" do
6
+ Socket.expects(:gethostname).returns("a.b.com")
7
+ assert_equal "a.b.com", Beetle.hostname
8
+ end
9
+
10
+ test "should use Socket.gethosbyname if returned name name is not fully qualified" do
11
+ Socket.expects(:gethostname).returns("a")
12
+ Socket.expects(:gethostbyname).with("a").returns(["a.b.com"])
13
+ assert_equal "a.b.com", Beetle.hostname
14
+ end
15
+ end
16
+ end
@@ -13,6 +13,12 @@ module Beetle
13
13
  assert_equal new_value, config.gc_threshold
14
14
  end
15
15
 
16
+ test "should log an error if the specified file does not exist" do
17
+ config = Configuration.new
18
+ config.logger.expects(:error)
19
+ assert_raises(Errno::ENOENT){ config.config_file = "some/path/to/a/file" }
20
+ end
21
+
16
22
  test "should log to STDOUT if no log_file given" do
17
23
  config = Configuration.new
18
24
  Logger.expects(:new).with(STDOUT).returns(stub_everything)
@@ -13,11 +13,11 @@ module Beetle
13
13
  assert_equal 0, @r.del("hahahaha")
14
14
  end
15
15
 
16
- test "msetnx returns 0 or 1" do
17
- assert_equal 1, @r.msetnx("a", 1, "b", 2)
16
+ test "msetnx returns a boolean" do
17
+ assert_equal true, @r.msetnx("a", 1, "b", 2)
18
18
  assert_equal "1", @r.get("a")
19
19
  assert_equal "2", @r.get("b")
20
- assert_equal 0, @r.msetnx("a", 3, "b", 4)
20
+ assert_equal false, @r.msetnx("a", 3, "b", 4)
21
21
  assert_equal "1", @r.get("a")
22
22
  assert_equal "2", @r.get("b")
23
23
  end
@@ -61,23 +61,14 @@ module Beetle
61
61
  end
62
62
  end
63
63
 
64
- class BrokenRedisShutdownTest < Test::Unit::TestCase
64
+ class RedisShutdownTest < Test::Unit::TestCase
65
65
  def setup
66
66
  @r = Redis.new(:host => "localhost", :port => 6390)
67
67
  end
68
68
 
69
- # if this test fails after upgrading redis, we can probably remove
70
- # our custom shutdown method from redis_ext.rb
71
- test "orginal redis shutdown implementation is broken" do
72
- @r.client.expects(:call_without_reply).with([:shutdown]).once
73
- @r.client.expects(:disconnect).never
74
- @r.broken_shutdown
75
- end
76
-
77
- test "patched redis shutdown implementation should call :shutdown and rescue Errno::ECONNREFUSED" do
78
- @r.client.expects(:call).with([:shutdown]).once.raises(Errno::ECONNREFUSED)
79
- @r.client.expects(:disconnect).once
80
- @r.shutdown
69
+ test "redis shutdown implementation should call :shutdown and return nil" do
70
+ @r.client.expects(:call).with([:shutdown]).once.raises(Redis::ConnectionError)
71
+ assert_nil @r.shutdown
81
72
  end
82
73
  end
83
74
 
data/test/test_helper.rb CHANGED
@@ -1,4 +1,10 @@
1
1
  require 'rubygems'
2
+ if RUBY_VERSION >= "1.9"
3
+ require 'simplecov'
4
+ SimpleCov.start do
5
+ add_filter "/test/"
6
+ end
7
+ end
2
8
  require 'test/unit'
3
9
  require 'mocha'
4
10
  require 'active_support/testing/declarative'
@@ -7,14 +13,7 @@ require File.expand_path(File.dirname(__FILE__) + '/../lib/beetle')
7
13
  require File.expand_path(File.dirname(__FILE__) + '/colorized_test_output')
8
14
 
9
15
  # we can remove this hack which is needed only for testing
10
- begin
11
- require 'qrack/errors'
12
- rescue LoadError
13
- module Qrack
14
- class BufferOverflowError < StandardError; end
15
- class InvalidTypeError < StandardError; end
16
- end
17
- end
16
+ require 'qrack/errors'
18
17
 
19
18
 
20
19
  class Test::Unit::TestCase
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: beetle
3
3
  version: !ruby/object:Gem::Version
4
- hash: 3659109081
5
- prerelease: true
4
+ hash: -3659944352
5
+ prerelease: 6
6
6
  segments:
7
7
  - 0
8
8
  - 3
9
9
  - 0
10
10
  - rc
11
- - 13
12
- version: 0.3.0.rc.13
11
+ - 14
12
+ version: 0.3.0.rc.14
13
13
  platform: ruby
14
14
  authors:
15
15
  - Stefan Kaes
@@ -21,8 +21,7 @@ autorequire:
21
21
  bindir: bin
22
22
  cert_chain: []
23
23
 
24
- date: 2012-03-06 00:00:00 +01:00
25
- default_executable: beetle
24
+ date: 2012-07-01 00:00:00 Z
26
25
  dependencies:
27
26
  - !ruby/object:Gem::Dependency
28
27
  name: uuid4r
@@ -48,12 +47,12 @@ dependencies:
48
47
  requirements:
49
48
  - - "="
50
49
  - !ruby/object:Gem::Version
51
- hash: 19
50
+ hash: 17
52
51
  segments:
53
52
  - 0
54
53
  - 7
55
- - 8
56
- version: 0.7.8
54
+ - 9
55
+ version: 0.7.9
57
56
  type: :runtime
58
57
  version_requirements: *id002
59
58
  - !ruby/object:Gem::Dependency
@@ -64,12 +63,12 @@ dependencies:
64
63
  requirements:
65
64
  - - "="
66
65
  - !ruby/object:Gem::Version
67
- hash: 3
66
+ hash: 5
68
67
  segments:
69
- - 2
70
- - 2
71
- - 2
72
- version: 2.2.2
68
+ - 3
69
+ - 0
70
+ - 1
71
+ version: 3.0.1
73
72
  type: :runtime
74
73
  version_requirements: *id003
75
74
  - !ruby/object:Gem::Dependency
@@ -80,12 +79,12 @@ dependencies:
80
79
  requirements:
81
80
  - - "="
82
81
  - !ruby/object:Gem::Version
83
- hash: 7
82
+ hash: 5
84
83
  segments:
85
84
  - 0
86
85
  - 4
87
- - 4
88
- version: 0.4.4
86
+ - 5
87
+ version: 0.4.5
89
88
  type: :runtime
90
89
  version_requirements: *id004
91
90
  - !ruby/object:Gem::Dependency
@@ -96,12 +95,12 @@ dependencies:
96
95
  requirements:
97
96
  - - "="
98
97
  - !ruby/object:Gem::Version
99
- hash: 57
98
+ hash: 61
100
99
  segments:
101
100
  - 0
102
101
  - 9
103
- - 1
104
- version: 0.9.1
102
+ - 3
103
+ version: 0.9.3
105
104
  type: :runtime
106
105
  version_requirements: *id005
107
106
  - !ruby/object:Gem::Dependency
@@ -112,12 +111,12 @@ dependencies:
112
111
  requirements:
113
112
  - - "="
114
113
  - !ruby/object:Gem::Version
115
- hash: 59
114
+ hash: 61
116
115
  segments:
117
116
  - 0
118
117
  - 9
119
- - 0
120
- version: 0.9.0
118
+ - 3
119
+ version: 0.9.3
121
120
  type: :runtime
122
121
  version_requirements: *id006
123
122
  - !ruby/object:Gem::Dependency
@@ -128,12 +127,12 @@ dependencies:
128
127
  requirements:
129
128
  - - "="
130
129
  - !ruby/object:Gem::Version
131
- hash: 63
130
+ hash: 55
132
131
  segments:
133
132
  - 0
134
133
  - 9
135
- - 2
136
- version: 0.9.2
134
+ - 6
135
+ version: 0.9.6
137
136
  type: :runtime
138
137
  version_requirements: *id007
139
138
  - !ruby/object:Gem::Dependency
@@ -184,82 +183,6 @@ dependencies:
184
183
  version: 1.0.10
185
184
  type: :runtime
186
185
  version_requirements: *id010
187
- - !ruby/object:Gem::Dependency
188
- name: rake
189
- prerelease: false
190
- requirement: &id011 !ruby/object:Gem::Requirement
191
- none: false
192
- requirements:
193
- - - ">="
194
- - !ruby/object:Gem::Version
195
- hash: 49
196
- segments:
197
- - 0
198
- - 8
199
- - 7
200
- version: 0.8.7
201
- type: :development
202
- version_requirements: *id011
203
- - !ruby/object:Gem::Dependency
204
- name: mocha
205
- prerelease: false
206
- requirement: &id012 !ruby/object:Gem::Requirement
207
- none: false
208
- requirements:
209
- - - ">="
210
- - !ruby/object:Gem::Version
211
- hash: 3
212
- segments:
213
- - 0
214
- version: "0"
215
- type: :development
216
- version_requirements: *id012
217
- - !ruby/object:Gem::Dependency
218
- name: rcov
219
- prerelease: false
220
- requirement: &id013 !ruby/object:Gem::Requirement
221
- none: false
222
- requirements:
223
- - - ~>
224
- - !ruby/object:Gem::Version
225
- hash: 47
226
- segments:
227
- - 0
228
- - 9
229
- - 10
230
- version: 0.9.10
231
- type: :development
232
- version_requirements: *id013
233
- - !ruby/object:Gem::Dependency
234
- name: cucumber
235
- prerelease: false
236
- requirement: &id014 !ruby/object:Gem::Requirement
237
- none: false
238
- requirements:
239
- - - ">="
240
- - !ruby/object:Gem::Version
241
- hash: 7
242
- segments:
243
- - 0
244
- - 7
245
- - 2
246
- version: 0.7.2
247
- type: :development
248
- version_requirements: *id014
249
- - !ruby/object:Gem::Dependency
250
- name: daemon_controller
251
- prerelease: false
252
- requirement: &id015 !ruby/object:Gem::Requirement
253
- none: false
254
- requirements:
255
- - - ">="
256
- - !ruby/object:Gem::Version
257
- hash: 3
258
- segments:
259
- - 0
260
- version: "0"
261
- type: :development
262
- version_requirements: *id015
263
186
  description: A highly available, reliable messaging infrastructure
264
187
  email: opensource@xing.com
265
188
  executables:
@@ -327,6 +250,7 @@ files:
327
250
  - MIT-LICENSE
328
251
  - test/beetle/amqp_gem_behavior_test.rb
329
252
  - test/beetle/base_test.rb
253
+ - test/beetle/beetle_test.rb
330
254
  - test/beetle/client_test.rb
331
255
  - test/beetle/configuration_test.rb
332
256
  - test/beetle/deduplication_store_test.rb
@@ -343,7 +267,6 @@ files:
343
267
  - test/colorized_test_output.rb
344
268
  - test/test_helper.rb
345
269
  - bin/beetle
346
- has_rdoc: true
347
270
  homepage: http://xing.github.com/beetle/
348
271
  licenses: []
349
272
 
@@ -375,13 +298,14 @@ required_rubygems_version: !ruby/object:Gem::Requirement
375
298
  requirements: []
376
299
 
377
300
  rubyforge_project:
378
- rubygems_version: 1.3.7
301
+ rubygems_version: 1.8.24
379
302
  signing_key:
380
303
  specification_version: 3
381
304
  summary: High Availability AMQP Messaging with Redundant Queues
382
305
  test_files:
383
306
  - test/beetle/amqp_gem_behavior_test.rb
384
307
  - test/beetle/base_test.rb
308
+ - test/beetle/beetle_test.rb
385
309
  - test/beetle/client_test.rb
386
310
  - test/beetle/configuration_test.rb
387
311
  - test/beetle/deduplication_store_test.rb