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

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/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