bunny 1.7.0 → 2.17.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 (141) hide show
  1. checksums.yaml +5 -5
  2. data/.github/ISSUE_TEMPLATE.md +18 -0
  3. data/.gitignore +6 -1
  4. data/.rspec +1 -3
  5. data/.travis.yml +21 -14
  6. data/CONTRIBUTING.md +132 -0
  7. data/ChangeLog.md +745 -1
  8. data/Gemfile +13 -13
  9. data/LICENSE +1 -1
  10. data/README.md +41 -75
  11. data/Rakefile +54 -0
  12. data/bunny.gemspec +4 -10
  13. data/docker-compose.yml +28 -0
  14. data/docker/Dockerfile +24 -0
  15. data/docker/apt/preferences.d/erlang +3 -0
  16. data/docker/apt/sources.list.d/bintray.rabbitmq.list +2 -0
  17. data/docker/docker-entrypoint.sh +26 -0
  18. data/docker/rabbitmq.conf +29 -0
  19. data/examples/connection/automatic_recovery_with_basic_get.rb +1 -1
  20. data/examples/connection/automatic_recovery_with_client_named_queues.rb +1 -1
  21. data/examples/connection/automatic_recovery_with_multiple_consumers.rb +1 -1
  22. data/examples/connection/automatic_recovery_with_republishing.rb +1 -1
  23. data/examples/connection/automatic_recovery_with_server_named_queues.rb +1 -1
  24. data/examples/connection/channel_level_exception.rb +1 -9
  25. data/examples/connection/disabled_automatic_recovery.rb +1 -1
  26. data/examples/connection/heartbeat.rb +1 -1
  27. data/examples/consumers/high_and_low_priority.rb +1 -1
  28. data/examples/guides/extensions/alternate_exchange.rb +2 -0
  29. data/examples/guides/getting_started/hello_world.rb +2 -0
  30. data/examples/guides/getting_started/weathr.rb +2 -0
  31. data/examples/guides/queues/one_off_consumer.rb +2 -0
  32. data/examples/guides/queues/redeliveries.rb +2 -0
  33. data/lib/bunny.rb +6 -2
  34. data/lib/bunny/channel.rb +192 -109
  35. data/lib/bunny/channel_id_allocator.rb +6 -4
  36. data/lib/bunny/concurrent/continuation_queue.rb +34 -13
  37. data/lib/bunny/consumer_work_pool.rb +34 -6
  38. data/lib/bunny/cruby/socket.rb +29 -16
  39. data/lib/bunny/cruby/ssl_socket.rb +20 -7
  40. data/lib/bunny/exceptions.rb +7 -1
  41. data/lib/bunny/exchange.rb +11 -7
  42. data/lib/bunny/get_response.rb +1 -1
  43. data/lib/bunny/heartbeat_sender.rb +3 -2
  44. data/lib/bunny/jruby/socket.rb +23 -6
  45. data/lib/bunny/jruby/ssl_socket.rb +5 -0
  46. data/lib/bunny/queue.rb +12 -10
  47. data/lib/bunny/reader_loop.rb +31 -18
  48. data/lib/bunny/session.rb +389 -134
  49. data/lib/bunny/test_kit.rb +14 -0
  50. data/lib/bunny/timeout.rb +1 -12
  51. data/lib/bunny/transport.rb +114 -67
  52. data/lib/bunny/version.rb +1 -1
  53. data/repl +1 -1
  54. data/spec/config/rabbitmq.conf +13 -0
  55. data/spec/higher_level_api/integration/basic_ack_spec.rb +154 -22
  56. data/spec/higher_level_api/integration/basic_cancel_spec.rb +77 -11
  57. data/spec/higher_level_api/integration/basic_consume_spec.rb +60 -55
  58. data/spec/higher_level_api/integration/basic_consume_with_objects_spec.rb +6 -6
  59. data/spec/higher_level_api/integration/basic_get_spec.rb +31 -7
  60. data/spec/higher_level_api/integration/basic_nack_spec.rb +22 -19
  61. data/spec/higher_level_api/integration/basic_publish_spec.rb +11 -100
  62. data/spec/higher_level_api/integration/basic_qos_spec.rb +32 -4
  63. data/spec/higher_level_api/integration/basic_reject_spec.rb +94 -16
  64. data/spec/higher_level_api/integration/basic_return_spec.rb +4 -4
  65. data/spec/higher_level_api/integration/channel_close_spec.rb +51 -10
  66. data/spec/higher_level_api/integration/channel_open_spec.rb +12 -12
  67. data/spec/higher_level_api/integration/connection_recovery_spec.rb +412 -286
  68. data/spec/higher_level_api/integration/connection_spec.rb +284 -134
  69. data/spec/higher_level_api/integration/connection_stop_spec.rb +31 -19
  70. data/spec/higher_level_api/integration/consumer_cancellation_notification_spec.rb +17 -17
  71. data/spec/higher_level_api/integration/dead_lettering_spec.rb +14 -14
  72. data/spec/higher_level_api/integration/exchange_bind_spec.rb +5 -5
  73. data/spec/higher_level_api/integration/exchange_declare_spec.rb +32 -31
  74. data/spec/higher_level_api/integration/exchange_delete_spec.rb +12 -12
  75. data/spec/higher_level_api/integration/exchange_unbind_spec.rb +5 -5
  76. data/spec/higher_level_api/integration/exclusive_queue_spec.rb +5 -5
  77. data/spec/higher_level_api/integration/heartbeat_spec.rb +4 -4
  78. data/spec/higher_level_api/integration/message_properties_access_spec.rb +49 -49
  79. data/spec/higher_level_api/integration/predeclared_exchanges_spec.rb +2 -2
  80. data/spec/higher_level_api/integration/publisher_confirms_spec.rb +92 -27
  81. data/spec/higher_level_api/integration/publishing_edge_cases_spec.rb +19 -19
  82. data/spec/higher_level_api/integration/queue_bind_spec.rb +23 -23
  83. data/spec/higher_level_api/integration/queue_declare_spec.rb +129 -34
  84. data/spec/higher_level_api/integration/queue_delete_spec.rb +2 -2
  85. data/spec/higher_level_api/integration/queue_purge_spec.rb +5 -5
  86. data/spec/higher_level_api/integration/queue_unbind_spec.rb +6 -6
  87. data/spec/higher_level_api/integration/read_only_consumer_spec.rb +9 -9
  88. data/spec/higher_level_api/integration/sender_selected_distribution_spec.rb +10 -10
  89. data/spec/higher_level_api/integration/tls_connection_spec.rb +218 -112
  90. data/spec/higher_level_api/integration/toxiproxy_spec.rb +76 -0
  91. data/spec/higher_level_api/integration/tx_commit_spec.rb +1 -1
  92. data/spec/higher_level_api/integration/tx_rollback_spec.rb +1 -1
  93. data/spec/higher_level_api/integration/with_channel_spec.rb +2 -2
  94. data/spec/issues/issue100_spec.rb +11 -12
  95. data/spec/issues/issue141_spec.rb +13 -14
  96. data/spec/issues/issue202_spec.rb +1 -1
  97. data/spec/issues/issue224_spec.rb +5 -5
  98. data/spec/issues/issue465_spec.rb +32 -0
  99. data/spec/issues/issue549_spec.rb +30 -0
  100. data/spec/issues/issue78_spec.rb +21 -24
  101. data/spec/issues/issue83_spec.rb +5 -6
  102. data/spec/issues/issue97_spec.rb +44 -45
  103. data/spec/lower_level_api/integration/basic_cancel_spec.rb +15 -16
  104. data/spec/lower_level_api/integration/basic_consume_spec.rb +20 -21
  105. data/spec/spec_helper.rb +2 -19
  106. data/spec/stress/channel_close_stress_spec.rb +3 -3
  107. data/spec/stress/channel_open_stress_spec.rb +4 -4
  108. data/spec/stress/channel_open_stress_with_single_threaded_connection_spec.rb +7 -7
  109. data/spec/stress/concurrent_consumers_stress_spec.rb +18 -16
  110. data/spec/stress/concurrent_publishers_stress_spec.rb +16 -19
  111. data/spec/stress/connection_open_close_spec.rb +9 -9
  112. data/spec/stress/merry_go_round_spec.rb +105 -0
  113. data/spec/tls/ca_certificate.pem +27 -16
  114. data/spec/tls/ca_key.pem +52 -27
  115. data/spec/tls/client_certificate.pem +27 -16
  116. data/spec/tls/client_key.pem +49 -25
  117. data/spec/tls/generate-server-cert.sh +8 -0
  118. data/spec/tls/server-openssl.cnf +10 -0
  119. data/spec/tls/server.csr +16 -0
  120. data/spec/tls/server_certificate.pem +27 -16
  121. data/spec/tls/server_key.pem +49 -25
  122. data/spec/toxiproxy_helper.rb +28 -0
  123. data/spec/unit/bunny_spec.rb +5 -5
  124. data/spec/unit/concurrent/atomic_fixnum_spec.rb +6 -6
  125. data/spec/unit/concurrent/condition_spec.rb +8 -8
  126. data/spec/unit/concurrent/linked_continuation_queue_spec.rb +2 -2
  127. data/spec/unit/concurrent/synchronized_sorted_set_spec.rb +16 -16
  128. data/spec/unit/exchange_recovery_spec.rb +39 -0
  129. data/spec/unit/version_delivery_tag_spec.rb +3 -3
  130. metadata +42 -35
  131. data/lib/bunny/system_timer.rb +0 -20
  132. data/spec/config/rabbitmq.config +0 -18
  133. data/spec/higher_level_api/integration/basic_recover_spec.rb +0 -18
  134. data/spec/higher_level_api/integration/confirm_select_spec.rb +0 -19
  135. data/spec/higher_level_api/integration/consistent_hash_exchange_spec.rb +0 -50
  136. data/spec/higher_level_api/integration/merry_go_round_spec.rb +0 -85
  137. data/spec/stress/long_running_consumer_spec.rb +0 -83
  138. data/spec/tls/cacert.pem +0 -18
  139. data/spec/tls/client_cert.pem +0 -18
  140. data/spec/tls/server_cert.pem +0 -18
  141. data/spec/unit/system_timer_spec.rb +0 -10
@@ -1,20 +0,0 @@
1
- # -*- encoding: utf-8; mode: ruby -*-
2
-
3
- require "system_timer"
4
-
5
- module Bunny
6
- # Used for Ruby before 1.9
7
- class SystemTimer
8
- # Executes a block of code, raising if the execution does not finish
9
- # in the alloted period of time, in seconds.
10
- def self.timeout(seconds, exception = nil)
11
- if seconds
12
- ::SystemTimer.timeout_after(seconds, exception) do
13
- yield
14
- end
15
- else
16
- yield
17
- end
18
- end
19
- end # SystemTimer
20
- end # Bunny
@@ -1,18 +0,0 @@
1
- [
2
-
3
- {rabbit, [
4
- {ssl_listeners, [5671]},
5
- {ssl_options, [{cacertfile,"spec/tls/cacert.pem"},
6
- {certfile,"spec/tls/server_cert.pem"},
7
- {keyfile,"spec/tls/server_key.pem"},
8
- {verify,verify_none},
9
- {fail_if_no_peer_cert,false}]} ]
10
- },
11
-
12
- {rabbitmq_management,
13
- [{listener,
14
- [{port, 15672}]
15
- }]
16
- }
17
-
18
- ].
@@ -1,18 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Bunny::Channel, "#recover" do
4
- let(:connection) do
5
- c = Bunny.new(:user => "bunny_gem", :password => "bunny_password", :vhost => "bunny_testbed")
6
- c.start
7
- c
8
- end
9
-
10
- subject do
11
- connection.create_channel
12
- end
13
-
14
- it "is supported" do
15
- subject.recover(true).should be_instance_of(AMQ::Protocol::Basic::RecoverOk)
16
- subject.recover(true).should be_instance_of(AMQ::Protocol::Basic::RecoverOk)
17
- end
18
- end
@@ -1,19 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Bunny::Channel, "#confirm_select" do
4
- let(:connection) do
5
- c = Bunny.new(:user => "bunny_gem", :password => "bunny_password", :vhost => "bunny_testbed")
6
- c.start
7
- c
8
- end
9
-
10
- after :each do
11
- connection.close if connection.open?
12
- end
13
-
14
- it "is supported" do
15
- connection.with_channel do |ch|
16
- ch.confirm_select
17
- end
18
- end
19
- end
@@ -1,50 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
- require "spec_helper"
3
-
4
- unless ENV["CI"]
5
- describe "x-consistent-hash exchange" do
6
- let(:connection) do
7
- c = Bunny.new(:user => "bunny_gem", :password => "bunny_password", :vhost => "bunny_testbed")
8
- c.start
9
- c
10
- end
11
-
12
- after :each do
13
- connection.close
14
- end
15
-
16
- let(:list) { Range.new(0, 6).to_a.map(&:to_s) }
17
-
18
- let(:m) { 1500 }
19
-
20
- it "distributes messages between queues bound with the same routing key" do
21
- ch = connection.create_channel
22
- body = "сообщение"
23
- # requires the consistent hash exchange plugin,
24
- # enable it with
25
- #
26
- # $ [sudo] rabbitmq-plugins enable rabbitmq_consistent_hash_exchange
27
- x = ch.exchange("bunny.stress.concurrent.consumers", :type => "x-consistent-hash", :durable => true)
28
-
29
- qs = []
30
-
31
- q1 = ch.queue("", :exclusive => true).bind(x, :routing_key => "5")
32
- q2 = ch.queue("", :exclusive => true).bind(x, :routing_key => "5")
33
-
34
- sleep 1.0
35
-
36
- 5.times do |i|
37
- m.times do
38
- x.publish(body, :routing_key => list.sample)
39
- end
40
- puts "Published #{(i + 1) * m} tiny messages..."
41
- end
42
-
43
- sleep 2.0
44
- q1.message_count.should be > 100
45
- q2.message_count.should be > 100
46
-
47
- ch.close
48
- end
49
- end
50
- end
@@ -1,85 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe "A message that is proxied by multiple intermediate consumers" do
4
- let(:c1) do
5
- c = Bunny.new(:user => "bunny_gem", :password => "bunny_password", :vhost => "bunny_testbed")
6
- c.start
7
- c
8
- end
9
-
10
- let(:c2) do
11
- c = Bunny.new(:user => "bunny_gem", :password => "bunny_password", :vhost => "bunny_testbed")
12
- c.start
13
- c
14
- end
15
-
16
- let(:c3) do
17
- c = Bunny.new(:user => "bunny_gem", :password => "bunny_password", :vhost => "bunny_testbed")
18
- c.start
19
- c
20
- end
21
-
22
- let(:c4) do
23
- c = Bunny.new(:user => "bunny_gem", :password => "bunny_password", :vhost => "bunny_testbed")
24
- c.start
25
- c
26
- end
27
-
28
- let(:c5) do
29
- c = Bunny.new(:user => "bunny_gem", :password => "bunny_password", :vhost => "bunny_testbed")
30
- c.start
31
- c
32
- end
33
-
34
- after :each do
35
- [c1, c2, c3, c4, c5].each do |c|
36
- c.close if c.open?
37
- end
38
- end
39
-
40
- # message flow is as follows:
41
- #
42
- # x => q4 => q3 => q2 => q1 => xs (results)
43
- it "reaches its final destination" do
44
- n = 10000
45
- xs = []
46
-
47
- ch1 = c1.create_channel
48
- q1 = ch1.queue("", :exclusive => true)
49
- q1.subscribe do |_, _, payload|
50
- xs << payload
51
- end
52
-
53
- ch2 = c2.create_channel
54
- q2 = ch2.queue("", :exclusive => true)
55
- q2.subscribe do |_, _, payload|
56
- q1.publish(payload)
57
- end
58
-
59
- ch3 = c3.create_channel
60
- q3 = ch2.queue("", :exclusive => true)
61
- q3.subscribe do |_, _, payload|
62
- q2.publish(payload)
63
- end
64
-
65
- ch4 = c4.create_channel
66
- q4 = ch2.queue("", :exclusive => true)
67
- q4.subscribe do |_, _, payload|
68
- q3.publish(payload)
69
- end
70
-
71
- ch5 = c5.create_channel
72
- x = ch5.default_exchange
73
-
74
- n.times do |i|
75
- x.publish("msg #{i}", :routing_key => q4.name)
76
- end
77
-
78
- t = n / 1000 * 3.0
79
- puts "About to sleep for #{t} seconds..."
80
- sleep(t)
81
-
82
- xs.size.should == n
83
- xs.last.should == "msg #{n - 1}"
84
- end
85
- end
@@ -1,83 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
- require "spec_helper"
3
-
4
- unless ENV["CI"]
5
- require "bunny/concurrent/condition"
6
- require "bunny/test_kit"
7
-
8
- describe "Long running [relatively to heartbeat interval] consumer that never publishes" do
9
- let(:connection) do
10
- c = Bunny.new(:user => "bunny_gem", :password => "bunny_password", :vhost => "bunny_testbed", :automatic_recovery => false, :heartbeat_interval => 6)
11
- c.start
12
- c
13
- end
14
-
15
- after :all do
16
- connection.close
17
- end
18
-
19
- let(:target) { 512 * 1024 * 1024 }
20
- let(:queue) { "bunny.stress.long_running_consumer.#{Time.now.to_i}" }
21
-
22
- let(:rate) { 50 }
23
- let(:s) { 4.0 }
24
-
25
-
26
-
27
- it "does not skip heartbeats" do
28
- finished = Bunny::Concurrent::Condition.new
29
-
30
- ct = Thread.new do
31
- t = 0
32
- ch = connection.create_channel(nil, 6)
33
- begin
34
- q = ch.queue(queue, :exclusive => true)
35
-
36
- q.bind("amq.fanout").subscribe do |_, _, payload|
37
- t += payload.bytesize
38
-
39
- if t >= target
40
- puts "Hit the target, done with the test..."
41
-
42
- finished.notify_all
43
- else
44
- puts "Consumed #{(t.to_f / target.to_f).round(3) * 100}% of data"
45
- end
46
- end
47
- rescue Interrupt => e
48
- ch.maybe_kill_consumer_work_pool!
49
- ch.close
50
- end
51
- end
52
- ct.abort_on_exception = true
53
-
54
- pt = Thread.new do
55
- t = 0
56
- ch = connection.create_channel
57
- begin
58
- x = ch.fanout("amq.fanout")
59
-
60
- loop do
61
- break if t >= target
62
-
63
- rate.times do |i|
64
- msg = Bunny::TestKit.message_in_kb(96, 8192, i)
65
- x.publish(msg)
66
- t += msg.bytesize
67
- end
68
-
69
- sleep (s * rand)
70
- end
71
- rescue Interrupt => e
72
- ch.close
73
- end
74
- end
75
- pt.abort_on_exception = true
76
-
77
- finished.wait
78
-
79
- ct.raise Interrupt.new
80
- pt.raise Interrupt.new
81
- end
82
- end
83
- end
@@ -1,18 +0,0 @@
1
- -----BEGIN CERTIFICATE-----
2
- MIIC5DCCAcygAwIBAgIJAMa8aNd9TfEZMA0GCSqGSIb3DQEBBQUAMCIxETAPBgNV
3
- BAMTCE15VGVzdENBMQ0wCwYDVQQHEwQxODE1MB4XDTEzMDYwMjE1NTQwMFoXDTE0
4
- MDYwMjE1NTQwMFowIjERMA8GA1UEAxMITXlUZXN0Q0ExDTALBgNVBAcTBDE4MTUw
5
- ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDSLh8ZM0+1wVrr4J9KZLLt
6
- VtGoKEhuTWYa+DvDbdUYaD/G06GfRqsM0eOKuJfoaMz3qY49j/bZXmuG64rGx5oq
7
- Lp6VBwAw1R3Pmw3rD7XgiK0/7mVmnC4nwQAs9/uCKeAMPHfMDAG33aalxb3FzJfa
8
- RUiSIY7y7Kt7nCVC53foTFxbt0EKm7wjey1S8P9XkCB8x+ZT5GetzoqulKxt/f1u
9
- 0K/gVnMUvFmflR4hsx5qBNV6wFEYwMfi+C6q184aJv7jmjumimf9IBOcOkZrDnQD
10
- +7HeOeZAbMgLtCaacD2SH72s3hIHvgetbIJva+zJkbjjjA+Ycd824WjG+CiOEIch
11
- AgMBAAGjHTAbMAwGA1UdEwQFMAMBAf8wCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEB
12
- BQUAA4IBAQAvLziFQ56+vNyNAGDD8bQaUY8JElXj4X3vC0nFeN0zuPQz9Aa8UH4A
13
- Y7e/j3NS2mfYdqC8U3iYEXZwp4qk4/JZ9SkhRiaLbeIF7VT+xg+K/HDmBmwNZpQL
14
- b9bNBk9BeRMv4jJUuM/BE04nmqQnbD8h2QleT0A7uVe94ym86rHcimCYmZT7wEZ0
15
- D3TZPRnETwe2WtpAU3qB6Zd2ug/GulFdeugHe8bM0Kjz+BiK+Tmsa0SIN31t/uu4
16
- Tcxk1uFldIGPURAgs6MXxBHohOdJySBLrjsJWlD02Oxv9LeCfxej/gA6pZ4Wiyh/
17
- VtkyWoFlx/8n2S7IH1bKqMFy0SU/Fp3F
18
- -----END CERTIFICATE-----
@@ -1,18 +0,0 @@
1
- -----BEGIN CERTIFICATE-----
2
- MIIC+zCCAeOgAwIBAgIBATANBgkqhkiG9w0BAQUFADAnMRUwEwYDVQQDEwxNeVRl
3
- c3RSb290Q0ExDjAMBgNVBAcTBTgwNTQ3MB4XDTE0MDkxMjA4NDg0MVoXDTI0MDkw
4
- OTA4NDg0MVowKjEXMBUGA1UEAxMObWVyY3VyaW8ubG9jYWwxDzANBgNVBAoTBmNs
5
- aWVudDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJd+NA0M21Kj1CyH
6
- WmnLzUAQAi3GawvLnxwyrlW3nfl1BLEL2kLHrHYS7S0giL0T/Zziw9BqNB2Fba3l
7
- RbI8d0JppuMXRRHnFTY/fLYpQlcwB8hT17NBk8euoU1r2VopCwDKP8rxAxLLL9Im
8
- 2Cg+ksvZe+6yJPzAQ5aw1zc+UMSwJ8p2gAI7BI8Oekk506iccwbHwqVHH3DwCCXp
9
- 0dRtzMeRqZY9lC1wsLHVYLl/Pc/xWtqjuk0j5px6RtrBoW16MaK43zH1nFlEA8KH
10
- c0RVFaQsQMVYBbxsVq54rymGInmmSk+vy5ZoFC1ItBRPSSgI1beaL5/4B/dJGI74
11
- 7u/+cpsCAwEAAaMvMC0wCQYDVR0TBAIwADALBgNVHQ8EBAMCB4AwEwYDVR0lBAww
12
- CgYIKwYBBQUHAwIwDQYJKoZIhvcNAQEFBQADggEBALPEuvS/1/0IBM/Kyi0MHa6m
13
- KjltIm2Cp8iaTkziy9r2UDckvSqv8GW0itE69126j4L1iVUYNIVemUvcAwaX3YLf
14
- nN80XMjNl8mpSKwCXvKKXUTAFUQN+SPMbEC7Uzip1WgJGyc2T9ka8iN+nd1T7btU
15
- 482+zf5bGh+d0E7c4j0jfpf/1+VkfG/Vn5/EpG51DCvYtgg3F3PR39mDmnvKJu8p
16
- eYYvk3Jab0r/v3cLdt5GgZ4/WXZCdVpGgfDd60miXh7DUWilXBRuntVxZequF/ZI
17
- obei8teP2T/4oos3GWPOLxEA8EnQsdUoXxK/2DTq+9G6PQTQNm2/kvR6hPKimBk=
18
- -----END CERTIFICATE-----
@@ -1,18 +0,0 @@
1
- -----BEGIN CERTIFICATE-----
2
- MIIC+zCCAeOgAwIBAgIBAjANBgkqhkiG9w0BAQUFADAnMRUwEwYDVQQDEwxNeVRl
3
- c3RSb290Q0ExDjAMBgNVBAcTBTgwNTQ3MB4XDTE0MDkxMjA4NDg0MloXDTI0MDkw
4
- OTA4NDg0MlowKjEXMBUGA1UEAxMObWVyY3VyaW8ubG9jYWwxDzANBgNVBAoTBnNl
5
- cnZlcjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALvQX6P7Tz0sNKNg
6
- yiEb71gg84gyOaaTnIbgPKHTJ9kFMLZFQ3HN05dHLwqH1noefauV6HVPESVVf01m
7
- Ph28jre9tBorPAaiIzuf2kKlpZolN7Q9d/5rb2Vw3dUpoZJoD4aL+u8cghmkzodV
8
- vts1WRIRjH/yTUc266+h6m9lIi9L9BCYMTAWOF0KHoXA2VgLLkQNv+2GKHFP32ZH
9
- 1vXa98fxErpJ//3jRwP5m4t0PDSPlAw++bOiwgZb8r+vEOCyZE15BoukSi8rtibc
10
- tSpYsbyvWaoe/JQfGPI3St84DhrUPPm2FUMyWMeTmldcfyLA25/vQPha4JC4f4Bc
11
- CYvzCVUCAwEAAaMvMC0wCQYDVR0TBAIwADALBgNVHQ8EBAMCBSAwEwYDVR0lBAww
12
- CgYIKwYBBQUHAwEwDQYJKoZIhvcNAQEFBQADggEBADWhd3ikOdCFNZfDy9If9txm
13
- WtiBJ8g3oWjj99zIvb0CNqp0Xv5jvWgw8DYXG5FZAA7g5sKrihkxKTtpYnKsTZ40
14
- HEcGRUqF/Z1LLeh7/OYMx597yBn86ZcqUyBIaIsEhHNa+yC1zHWa4rg1vpDwY/iI
15
- Mbewjy9KyB4n6w+3TpSHvhpEa5OJiDOMFePURsS3io9r7MGfFVTM0Cho1qIYT1vt
16
- tOoUXpKAJxu+6TwDXzMwoSmjMw5GtchqhpCHQcHBH9z1rGHh/VShGl/+rif4JZ98
17
- natbZ91esBaJKbWLUxH1U9Aol8wwYD4MzK3rvfImgjgig+htAqhCMxLu1z9VE+o=
18
- -----END CERTIFICATE-----
@@ -1,10 +0,0 @@
1
- require "spec_helper"
2
-
3
- if RUBY_VERSION.to_f < 1.9
4
- describe Bunny::SystemTimer do
5
- it 'supports being called with a single argument' do
6
- lambda {Bunny::SystemTimer::timeout(1) {}}.should_not raise_error
7
- lambda {Bunny::SystemTimer::timeout(1, nil) {}}.should_not raise_error
8
- end
9
- end
10
- end