amqp 0.9.10 → 1.0.0.pre1
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/.travis.yml +0 -3
 - data/CHANGELOG +4 -0
 - data/Gemfile +1 -0
 - data/README.md +72 -81
 - data/amqp.gemspec +14 -5
 - data/docs/08Migration.textile +0 -4
 - data/docs/AMQP091ModelExplained.textile +0 -5
 - data/docs/Bindings.textile +0 -4
 - data/docs/Clustering.textile +0 -4
 - data/docs/ConnectingToTheBroker.textile +1 -5
 - data/docs/ConnectionEncryptionWithTLS.textile +0 -4
 - data/docs/DocumentationGuidesIndex.textile +0 -4
 - data/docs/Durability.textile +0 -4
 - data/docs/ErrorHandling.textile +40 -106
 - data/docs/Exchanges.textile +0 -4
 - data/docs/GettingStarted.textile +6 -10
 - data/docs/PatternsAndUseCases.textile +1 -4
 - data/docs/Queues.textile +0 -4
 - data/docs/RabbitMQVersions.textile +0 -4
 - data/docs/RunningTests.textile +0 -4
 - data/docs/TestingWithEventedSpec.textile +0 -4
 - data/docs/Troubleshooting.textile +0 -4
 - data/docs/VendorSpecificExtensions.textile +0 -4
 - data/examples/error_handling/hello_world_producer.rb +1 -1
 - data/examples/issues/issue_121.rb +23 -0
 - data/examples/patterns/request_reply/client.rb +2 -1
 - data/examples/patterns/request_reply/server.rb +1 -0
 - data/examples/publishing/returned_messages.rb +1 -1
 - data/lib/amqp.rb +0 -7
 - data/lib/amqp/channel.rb +15 -33
 - data/lib/amqp/client.rb +2 -2
 - data/lib/amqp/compatibility/ruby187_patchlevel_check.rb +4 -4
 - data/lib/amqp/connection.rb +0 -1
 - data/lib/amqp/consumer.rb +2 -2
 - data/lib/amqp/exceptions.rb +1 -10
 - data/lib/amqp/exchange.rb +5 -5
 - data/lib/amqp/queue.rb +23 -47
 - data/lib/amqp/session.rb +4 -4
 - data/lib/amqp/version.rb +1 -1
 - data/spec/integration/basic_get_spec.rb +24 -80
 - data/spec/integration/basic_return_spec.rb +3 -3
 - data/spec/integration/channel_level_exception_with_multiple_channels_spec.rb +1 -0
 - data/spec/integration/exchange_declaration_spec.rb +102 -71
 - data/spec/integration/extensions/rabbitmq/publisher_confirmations_spec.rb +17 -1
 - data/spec/integration/fanout_exchange_routing_spec.rb +1 -1
 - data/spec/integration/immediate_messages_spec.rb +59 -0
 - data/spec/integration/multiple_consumers_per_queue_spec.rb +101 -39
 - data/spec/integration/queue_redeclaration_with_incompatible_attributes_spec.rb +12 -25
 - data/spec/integration/regressions/concurrent_publishing_on_the_same_channel_spec.rb +1 -1
 - data/spec/integration/reply_queue_communication_spec.rb +2 -1
 - data/spec/integration/store_and_forward_spec.rb +9 -6
 - data/spec/integration/topic_subscription_spec.rb +4 -5
 - data/spec/spec_helper.rb +2 -8
 - data/spec/unit/amqp/connection_spec.rb +1 -3
 - metadata +112 -116
 - data/examples/deprecated/default_thread_local_channel_instance.rb +0 -34
 - data/examples/legacy/ack.rb +0 -70
 - data/examples/legacy/callbacks.rb +0 -45
 - data/examples/legacy/clock.rb +0 -74
 - data/examples/legacy/hashtable.rb +0 -60
 - data/examples/legacy/logger.rb +0 -92
 - data/examples/legacy/multiclock.rb +0 -56
 - data/examples/legacy/pingpong.rb +0 -51
 - data/examples/legacy/primes-simple.rb +0 -29
 - data/examples/legacy/primes.rb +0 -74
 - data/examples/legacy/stocks.rb +0 -59
 - data/lib/amqp/deprecated/fork.rb +0 -17
 - data/lib/amqp/deprecated/logger.rb +0 -100
 - data/lib/amqp/deprecated/mq.rb +0 -22
 - data/lib/amqp/deprecated/rpc.rb +0 -169
 - data/lib/amqp/ext/em.rb +0 -3
 - data/lib/amqp/ext/emfork.rb +0 -72
 - data/lib/amqp/logger.rb +0 -19
 - data/lib/amqp/rpc.rb +0 -20
 - data/lib/mq.rb +0 -35
 - data/lib/mq/logger.rb +0 -4
 - data/lib/mq/rpc.rb +0 -4
 - data/spec/integration/remove_individual_binding_spec.rb +0 -51
 
    
        data/lib/amqp/session.rb
    CHANGED
    
    | 
         @@ -110,7 +110,7 @@ module AMQP 
     | 
|
| 
       110 
110 
     | 
    
         | 
| 
       111 
111 
     | 
    
         | 
| 
       112 
112 
     | 
    
         
             
                # Properly close connection with AMQ broker, as described in
         
     | 
| 
       113 
     | 
    
         
            -
                # section 2.2.4 of the {http:// 
     | 
| 
      
 113 
     | 
    
         
            +
                # section 2.2.4 of the {http://bit.ly/hw2ELX AMQP 0.9.1 specification}.
         
     | 
| 
       114 
114 
     | 
    
         
             
                #
         
     | 
| 
       115 
115 
     | 
    
         
             
                # @api  plugin
         
     | 
| 
       116 
116 
     | 
    
         
             
                # @see  #close_connection
         
     | 
| 
         @@ -129,19 +129,19 @@ module AMQP 
     | 
|
| 
       129 
129 
     | 
    
         
             
                # Server properties (product information, platform, et cetera)
         
     | 
| 
       130 
130 
     | 
    
         
             
                #
         
     | 
| 
       131 
131 
     | 
    
         
             
                # @return [Hash]
         
     | 
| 
       132 
     | 
    
         
            -
                # @see http:// 
     | 
| 
      
 132 
     | 
    
         
            +
                # @see http://bit.ly/htCzCX AMQP 0.9.1 protocol documentation (Section 1.4.2.1.3)
         
     | 
| 
       133 
133 
     | 
    
         
             
                attr_reader :server_properties
         
     | 
| 
       134 
134 
     | 
    
         | 
| 
       135 
135 
     | 
    
         
             
                # Server capabilities (usually used to detect AMQP 0.9.1 extensions like basic.nack, publisher
         
     | 
| 
       136 
136 
     | 
    
         
             
                # confirms and so on)
         
     | 
| 
       137 
137 
     | 
    
         
             
                #
         
     | 
| 
       138 
138 
     | 
    
         
             
                # @return [Hash]
         
     | 
| 
       139 
     | 
    
         
            -
                # @see http:// 
     | 
| 
      
 139 
     | 
    
         
            +
                # @see http://bit.ly/htCzCX AMQP 0.9.1 protocol documentation (Section 1.4.2.1.3)
         
     | 
| 
       140 
140 
     | 
    
         
             
                attr_reader :server_capabilities
         
     | 
| 
       141 
141 
     | 
    
         | 
| 
       142 
142 
     | 
    
         
             
                # Locales server supports
         
     | 
| 
       143 
143 
     | 
    
         
             
                #
         
     | 
| 
       144 
     | 
    
         
            -
                # @see http:// 
     | 
| 
      
 144 
     | 
    
         
            +
                # @see http://bit.ly/htCzCX AMQP 0.9.1 protocol documentation (Section 1.4.2.1.3)
         
     | 
| 
       145 
145 
     | 
    
         
             
                attr_reader :server_locales
         
     | 
| 
       146 
146 
     | 
    
         | 
| 
       147 
147 
     | 
    
         
             
                # @return [AMQP::Broker] Broker this connection is established with
         
     | 
    
        data/lib/amqp/version.rb
    CHANGED
    
    
| 
         @@ -61,92 +61,36 @@ describe AMQP::Queue, "#pop" do 
     | 
|
| 
       61 
61 
     | 
    
         | 
| 
       62 
62 
     | 
    
         
             
              context "when THERE ARE messages in the queue" do
         
     | 
| 
       63 
63 
     | 
    
         
             
                it "yields message payload to the callback" do
         
     | 
| 
       64 
     | 
    
         
            -
                   
     | 
| 
      
 64 
     | 
    
         
            +
                  number_of_received_messages = 0
         
     | 
| 
      
 65 
     | 
    
         
            +
                  expected_number_of_messages = 300
         
     | 
| 
       65 
66 
     | 
    
         | 
| 
       66 
     | 
    
         
            -
                   
     | 
| 
       67 
     | 
    
         
            -
                     
     | 
| 
      
 67 
     | 
    
         
            +
                  expected_number_of_messages.times do |i|
         
     | 
| 
      
 68 
     | 
    
         
            +
                    @exchange.publish(@dispatched_data + "_#{i}", :key => @queue_name)
         
     | 
| 
       68 
69 
     | 
    
         
             
                  end
         
     | 
| 
       69 
70 
     | 
    
         | 
| 
       70 
     | 
    
         
            -
                   
     | 
| 
      
 71 
     | 
    
         
            +
                  @queue.status do |number_of_messages, number_of_consumers|
         
     | 
| 
      
 72 
     | 
    
         
            +
                    expected_number_of_messages.times do
         
     | 
| 
      
 73 
     | 
    
         
            +
                      @queue.pop do |headers, payload|
         
     | 
| 
      
 74 
     | 
    
         
            +
                        payload.should_not be_nil
         
     | 
| 
      
 75 
     | 
    
         
            +
                        number_of_received_messages += 1
         
     | 
| 
      
 76 
     | 
    
         
            +
                        headers.message_count.should == (expected_number_of_messages - number_of_received_messages)
         
     | 
| 
      
 77 
     | 
    
         
            +
             
     | 
| 
      
 78 
     | 
    
         
            +
                        if RUBY_VERSION =~ /^1.9/
         
     | 
| 
      
 79 
     | 
    
         
            +
                          payload.force_encoding("UTF-8").should =~ /#{@dispatched_data}/
         
     | 
| 
      
 80 
     | 
    
         
            +
                        else
         
     | 
| 
      
 81 
     | 
    
         
            +
                          payload.should =~ /#{@dispatched_data}/
         
     | 
| 
      
 82 
     | 
    
         
            +
                        end
         
     | 
| 
      
 83 
     | 
    
         
            +
                      end # pop
         
     | 
| 
      
 84 
     | 
    
         
            +
                    end # do
         
     | 
| 
      
 85 
     | 
    
         
            +
                  end
         
     | 
| 
      
 86 
     | 
    
         
            +
             
     | 
| 
      
 87 
     | 
    
         
            +
                  delayed(1.3) {
         
     | 
| 
       71 
88 
     | 
    
         
             
                    # Queue.Get doesn't qualify for subscription, hence, manual deletion is required
         
     | 
| 
       72 
89 
     | 
    
         
             
                    @queue.delete
         
     | 
| 
       73 
90 
     | 
    
         
             
                  }
         
     | 
| 
       74 
     | 
    
         
            -
                  done( 
     | 
| 
      
 91 
     | 
    
         
            +
                  done(2.5) {
         
     | 
| 
      
 92 
     | 
    
         
            +
                    number_of_received_messages.should == expected_number_of_messages
         
     | 
| 
      
 93 
     | 
    
         
            +
                  }
         
     | 
| 
       75 
94 
     | 
    
         
             
                end # it
         
     | 
| 
       76 
95 
     | 
    
         
             
              end # context
         
     | 
| 
       77 
     | 
    
         
            -
             
     | 
| 
       78 
     | 
    
         
            -
             
     | 
| 
       79 
     | 
    
         
            -
              context "with manual acknowledgements" do
         
     | 
| 
       80 
     | 
    
         
            -
                default_timeout 4
         
     | 
| 
       81 
     | 
    
         
            -
             
     | 
| 
       82 
     | 
    
         
            -
                let(:queue_name) { "amqpgem.integration.basic.get.acks.manual#{rand}" }
         
     | 
| 
       83 
     | 
    
         
            -
             
     | 
| 
       84 
     | 
    
         
            -
                it "does not remove messages from the queue unless ack-ed" do
         
     | 
| 
       85 
     | 
    
         
            -
                  ch1 = AMQP::Channel.new
         
     | 
| 
       86 
     | 
    
         
            -
                  ch2 = AMQP::Channel.new
         
     | 
| 
       87 
     | 
    
         
            -
             
     | 
| 
       88 
     | 
    
         
            -
                  ch1.on_error do |ch, close_ok|
         
     | 
| 
       89 
     | 
    
         
            -
                    puts "Channel error: #{close_ok.reply_code} #{close_ok.reply_text}"
         
     | 
| 
       90 
     | 
    
         
            -
                  end
         
     | 
| 
       91 
     | 
    
         
            -
             
     | 
| 
       92 
     | 
    
         
            -
                  q  = ch1.queue(queue_name, :exclusive => true)
         
     | 
| 
       93 
     | 
    
         
            -
                  x  = ch1.default_exchange
         
     | 
| 
       94 
     | 
    
         
            -
             
     | 
| 
       95 
     | 
    
         
            -
                  q.purge
         
     | 
| 
       96 
     | 
    
         
            -
                  delayed(0.2) { x.publish(@dispatched_data, :routing_key => q.name) }
         
     | 
| 
       97 
     | 
    
         
            -
             
     | 
| 
       98 
     | 
    
         
            -
                  delayed(0.5) {
         
     | 
| 
       99 
     | 
    
         
            -
                    q.pop(:ack => true) do |meta, payload|
         
     | 
| 
       100 
     | 
    
         
            -
                      # never ack
         
     | 
| 
       101 
     | 
    
         
            -
                    end
         
     | 
| 
       102 
     | 
    
         
            -
             
     | 
| 
       103 
     | 
    
         
            -
                    ch1.close
         
     | 
| 
       104 
     | 
    
         
            -
             
     | 
| 
       105 
     | 
    
         
            -
                    EventMachine.add_timer(0.7) {
         
     | 
| 
       106 
     | 
    
         
            -
                      ch2.queue(queue_name, :exclusive => true).status do |number_of_messages, number_of_consumers|
         
     | 
| 
       107 
     | 
    
         
            -
                        number_of_messages.should == 1
         
     | 
| 
       108 
     | 
    
         
            -
                        done
         
     | 
| 
       109 
     | 
    
         
            -
                      end
         
     | 
| 
       110 
     | 
    
         
            -
                    }
         
     | 
| 
       111 
     | 
    
         
            -
                  }
         
     | 
| 
       112 
     | 
    
         
            -
                end
         
     | 
| 
       113 
     | 
    
         
            -
              end
         
     | 
| 
       114 
     | 
    
         
            -
             
     | 
| 
       115 
     | 
    
         
            -
             
     | 
| 
       116 
     | 
    
         
            -
             
     | 
| 
       117 
     | 
    
         
            -
              context "with automatic acknowledgements" do
         
     | 
| 
       118 
     | 
    
         
            -
                default_timeout 4
         
     | 
| 
       119 
     | 
    
         
            -
             
     | 
| 
       120 
     | 
    
         
            -
                let(:queue_name) { "amqpgem.integration.basic.get.acks.automatic#{rand}" }
         
     | 
| 
       121 
     | 
    
         
            -
             
     | 
| 
       122 
     | 
    
         
            -
                it "does remove messages from the queue after delivery" do
         
     | 
| 
       123 
     | 
    
         
            -
                  ch1 = AMQP::Channel.new
         
     | 
| 
       124 
     | 
    
         
            -
                  ch2 = AMQP::Channel.new
         
     | 
| 
       125 
     | 
    
         
            -
             
     | 
| 
       126 
     | 
    
         
            -
                  ch1.on_error do |ch, close_ok|
         
     | 
| 
       127 
     | 
    
         
            -
                    puts "Channel error: #{close_ok.reply_code} #{close_ok.reply_text}"
         
     | 
| 
       128 
     | 
    
         
            -
                  end
         
     | 
| 
       129 
     | 
    
         
            -
             
     | 
| 
       130 
     | 
    
         
            -
                  q  = ch1.queue(queue_name, :exclusive => true)
         
     | 
| 
       131 
     | 
    
         
            -
                  x  = ch1.default_exchange
         
     | 
| 
       132 
     | 
    
         
            -
             
     | 
| 
       133 
     | 
    
         
            -
                  q.purge
         
     | 
| 
       134 
     | 
    
         
            -
                  x.publish(@dispatched_data, :routing_key => q.name)
         
     | 
| 
       135 
     | 
    
         
            -
             
     | 
| 
       136 
     | 
    
         
            -
                  delayed(0.5) {
         
     | 
| 
       137 
     | 
    
         
            -
                    q.pop(:ack => false) do |meta, payload|
         
     | 
| 
       138 
     | 
    
         
            -
                      # never ack
         
     | 
| 
       139 
     | 
    
         
            -
                    end
         
     | 
| 
       140 
     | 
    
         
            -
             
     | 
| 
       141 
     | 
    
         
            -
                    ch1.close
         
     | 
| 
       142 
     | 
    
         
            -
             
     | 
| 
       143 
     | 
    
         
            -
                    EventMachine.add_timer(0.5) {
         
     | 
| 
       144 
     | 
    
         
            -
                      ch2.queue(queue_name, :exclusive => true).status do |number_of_messages, number_of_consumers|
         
     | 
| 
       145 
     | 
    
         
            -
                        number_of_messages.should == 0
         
     | 
| 
       146 
     | 
    
         
            -
                        done
         
     | 
| 
       147 
     | 
    
         
            -
                      end
         
     | 
| 
       148 
     | 
    
         
            -
                    }
         
     | 
| 
       149 
     | 
    
         
            -
                  }
         
     | 
| 
       150 
     | 
    
         
            -
                end
         
     | 
| 
       151 
     | 
    
         
            -
              end
         
     | 
| 
       152 
96 
     | 
    
         
             
            end # describe
         
     | 
| 
         @@ -38,11 +38,11 @@ describe "Message published as mandatory" do 
     | 
|
| 
       38 
38 
     | 
    
         
             
                  @exchange.on_return do |basic_return, header, body|
         
     | 
| 
       39 
39 
     | 
    
         
             
                    returned_messages << basic_return.reply_text
         
     | 
| 
       40 
40 
     | 
    
         
             
                  end
         
     | 
| 
       41 
     | 
    
         
            -
                  (1..10).to_a.each { |m| @exchange.publish(m, : 
     | 
| 
      
 41 
     | 
    
         
            +
                  (1..10).to_a.each { |m| @exchange.publish(m, :immediate => true) }
         
     | 
| 
       42 
42 
     | 
    
         | 
| 
       43 
43 
     | 
    
         
             
                  done(1.0) {
         
     | 
| 
       44 
     | 
    
         
            -
                    returned_messages.should == Array.new(10) { " 
     | 
| 
      
 44 
     | 
    
         
            +
                    returned_messages.should == Array.new(10) { "NO_CONSUMERS" }
         
     | 
| 
       45 
45 
     | 
    
         
             
                  }
         
     | 
| 
       46 
46 
     | 
    
         
             
                end
         
     | 
| 
       47 
47 
     | 
    
         
             
              end
         
     | 
| 
       48 
     | 
    
         
            -
            end
         
     | 
| 
      
 48 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -127,14 +127,27 @@ describe AMQP::Channel do 
     | 
|
| 
       127 
127 
     | 
    
         
             
                end # context
         
     | 
| 
       128 
128 
     | 
    
         | 
| 
       129 
129 
     | 
    
         | 
| 
      
 130 
     | 
    
         
            +
                context "when exchange name was specified as a blank string" do
         
     | 
| 
      
 131 
     | 
    
         
            +
                  it 'returns direct exchange with server-generated name' do
         
     | 
| 
      
 132 
     | 
    
         
            +
                    pending <<-EOF
         
     | 
| 
      
 133 
     | 
    
         
            +
                  This has to be fixed in RabbitMQ first
         
     | 
| 
      
 134 
     | 
    
         
            +
                  https://bugzilla.rabbitmq.com/show_bug.cgi?id=23509
         
     | 
| 
      
 135 
     | 
    
         
            +
                EOF
         
     | 
| 
      
 136 
     | 
    
         
            +
                    @channel.direct("") do |exchange|
         
     | 
| 
      
 137 
     | 
    
         
            +
                      exchange.name.should_not be_empty
         
     | 
| 
      
 138 
     | 
    
         
            +
                      done
         
     | 
| 
      
 139 
     | 
    
         
            +
                    end
         
     | 
| 
      
 140 
     | 
    
         
            +
                  end
         
     | 
| 
      
 141 
     | 
    
         
            +
                end # context
         
     | 
| 
      
 142 
     | 
    
         
            +
             
     | 
| 
      
 143 
     | 
    
         
            +
             
     | 
| 
       130 
144 
     | 
    
         
             
                context "when passive option is used" do
         
     | 
| 
       131 
145 
     | 
    
         
             
                  context "and exchange with given name already exists" do
         
     | 
| 
       132 
146 
     | 
    
         
             
                    it "silently returns" do
         
     | 
| 
       133 
     | 
    
         
            -
                      name 
     | 
| 
       134 
     | 
    
         
            -
                      channel = AMQP::Channel.new
         
     | 
| 
      
 147 
     | 
    
         
            +
                      name = "a_new_direct_exchange declared at #{Time.now.to_i}"
         
     | 
| 
       135 
148 
     | 
    
         | 
| 
       136 
     | 
    
         
            -
                      original_exchange = channel.direct(name)
         
     | 
| 
       137 
     | 
    
         
            -
                      exchange          = channel.direct(name, :passive => true)
         
     | 
| 
      
 149 
     | 
    
         
            +
                      original_exchange = @channel.direct(name)
         
     | 
| 
      
 150 
     | 
    
         
            +
                      exchange          = @channel.direct(name, :passive => true)
         
     | 
| 
       138 
151 
     | 
    
         | 
| 
       139 
152 
     | 
    
         
             
                      exchange.should == original_exchange
         
     | 
| 
       140 
153 
     | 
    
         | 
| 
         @@ -144,16 +157,13 @@ describe AMQP::Channel do 
     | 
|
| 
       144 
157 
     | 
    
         | 
| 
       145 
158 
     | 
    
         
             
                  context "and exchange with given name DOES NOT exist" do
         
     | 
| 
       146 
159 
     | 
    
         
             
                    it "raises an exception" do
         
     | 
| 
       147 
     | 
    
         
            -
                       
     | 
| 
       148 
     | 
    
         
            -
                      channel.on_error do |ch, channel_close|
         
     | 
| 
       149 
     | 
    
         
            -
                        @error_code = channel_close.reply_code
         
     | 
| 
       150 
     | 
    
         
            -
                      end
         
     | 
| 
      
 160 
     | 
    
         
            +
                      pending "Not yet supported"
         
     | 
| 
       151 
161 
     | 
    
         | 
| 
       152 
     | 
    
         
            -
                       
     | 
| 
      
 162 
     | 
    
         
            +
                      expect {
         
     | 
| 
      
 163 
     | 
    
         
            +
                        exchange = @channel.direct("direct exchange declared at #{Time.now.to_i}", :passive => true)
         
     | 
| 
      
 164 
     | 
    
         
            +
                      }.to raise_error
         
     | 
| 
       153 
165 
     | 
    
         | 
| 
       154 
     | 
    
         
            -
                      done 
     | 
| 
       155 
     | 
    
         
            -
                        @error_code.should == 404
         
     | 
| 
       156 
     | 
    
         
            -
                      }
         
     | 
| 
      
 166 
     | 
    
         
            +
                      done
         
     | 
| 
       157 
167 
     | 
    
         
             
                    end # it
         
     | 
| 
       158 
168 
     | 
    
         
             
                  end # context
         
     | 
| 
       159 
169 
     | 
    
         
             
                end # context
         
     | 
| 
         @@ -213,16 +223,27 @@ describe AMQP::Channel do 
     | 
|
| 
       213 
223 
     | 
    
         | 
| 
       214 
224 
     | 
    
         
             
                context "when exchange is re-declared with parameters different from original declaration" do
         
     | 
| 
       215 
225 
     | 
    
         
             
                  it "raises an exception" do
         
     | 
| 
       216 
     | 
    
         
            -
                    channel  
     | 
| 
       217 
     | 
    
         
            -
                    channel.direct("previously.declared.durable.direct.exchange", :durable => true)
         
     | 
| 
      
 226 
     | 
    
         
            +
                    @channel.direct("previously.declared.durable.direct.exchange", :durable => true)
         
     | 
| 
       218 
227 
     | 
    
         | 
| 
       219 
228 
     | 
    
         
             
                    expect {
         
     | 
| 
       220 
     | 
    
         
            -
                      channel.direct("previously.declared.durable.direct.exchange", :durable => false)
         
     | 
| 
      
 229 
     | 
    
         
            +
                      @channel.direct("previously.declared.durable.direct.exchange", :durable => false)
         
     | 
| 
       221 
230 
     | 
    
         
             
                    }.to raise_error(AMQP::IncompatibleOptionsError)
         
     | 
| 
       222 
231 
     | 
    
         | 
| 
       223 
232 
     | 
    
         
             
                    done
         
     | 
| 
       224 
233 
     | 
    
         
             
                  end # it
         
     | 
| 
       225 
234 
     | 
    
         
             
                end # context
         
     | 
| 
      
 235 
     | 
    
         
            +
             
     | 
| 
      
 236 
     | 
    
         
            +
                context "when exchange is re-declared with irrelevent parameters different from original declaration" do
         
     | 
| 
      
 237 
     | 
    
         
            +
                  it "doesn't raise an exception" do
         
     | 
| 
      
 238 
     | 
    
         
            +
                    @channel.direct("previously.declared.durable.direct.exchange", :durable => true)
         
     | 
| 
      
 239 
     | 
    
         
            +
             
     | 
| 
      
 240 
     | 
    
         
            +
                    expect {
         
     | 
| 
      
 241 
     | 
    
         
            +
                      @channel.direct("previously.declared.durable.direct.exchange", :durable => true, :header => {:random => 'stuff' })
         
     | 
| 
      
 242 
     | 
    
         
            +
                    }.to_not raise_error(AMQP::IncompatibleOptionsError)
         
     | 
| 
      
 243 
     | 
    
         
            +
             
     | 
| 
      
 244 
     | 
    
         
            +
                    done
         
     | 
| 
      
 245 
     | 
    
         
            +
                  end # it
         
     | 
| 
      
 246 
     | 
    
         
            +
                end # context
         
     | 
| 
       226 
247 
     | 
    
         
             
              end # describe
         
     | 
| 
       227 
248 
     | 
    
         | 
| 
       228 
249 
     | 
    
         | 
| 
         @@ -266,17 +287,12 @@ describe AMQP::Channel do 
     | 
|
| 
       266 
287 
     | 
    
         
             
                  end
         
     | 
| 
       267 
288 
     | 
    
         | 
| 
       268 
289 
     | 
    
         
             
                  context "and exchange with given name DOES NOT exist" do
         
     | 
| 
       269 
     | 
    
         
            -
                    it " 
     | 
| 
       270 
     | 
    
         
            -
                       
     | 
| 
       271 
     | 
    
         
            -
                      channel.on_error do |ch, channel_close|
         
     | 
| 
       272 
     | 
    
         
            -
                        @error_code = channel_close.reply_code
         
     | 
| 
       273 
     | 
    
         
            -
                      end
         
     | 
| 
       274 
     | 
    
         
            -
             
     | 
| 
       275 
     | 
    
         
            -
                      exchange = channel.fanout("fanout exchange declared at #{Time.now.to_i}", :passive => true)
         
     | 
| 
      
 290 
     | 
    
         
            +
                    it "raises an exception" do
         
     | 
| 
      
 291 
     | 
    
         
            +
                      pending "Not yet supported"
         
     | 
| 
       276 
292 
     | 
    
         | 
| 
       277 
     | 
    
         
            -
                       
     | 
| 
       278 
     | 
    
         
            -
                        @ 
     | 
| 
       279 
     | 
    
         
            -
                      }
         
     | 
| 
      
 293 
     | 
    
         
            +
                      expect {
         
     | 
| 
      
 294 
     | 
    
         
            +
                        exchange = @channel.fanout("fanout exchange declared at #{Time.now.to_i}", :passive => true)
         
     | 
| 
      
 295 
     | 
    
         
            +
                      }.to raise_error
         
     | 
| 
       280 
296 
     | 
    
         | 
| 
       281 
297 
     | 
    
         
             
                      done
         
     | 
| 
       282 
298 
     | 
    
         
             
                    end # it
         
     | 
| 
         @@ -338,11 +354,10 @@ describe AMQP::Channel do 
     | 
|
| 
       338 
354 
     | 
    
         | 
| 
       339 
355 
     | 
    
         
             
                context "when exchange is re-declared with parameters different from original declaration" do
         
     | 
| 
       340 
356 
     | 
    
         
             
                  it "raises an exception" do
         
     | 
| 
       341 
     | 
    
         
            -
                    channel  
     | 
| 
       342 
     | 
    
         
            -
                    channel.fanout("previously.declared.durable.topic.exchange", :durable => true)
         
     | 
| 
      
 357 
     | 
    
         
            +
                    @channel.fanout("previously.declared.durable.topic.exchange", :durable => true)
         
     | 
| 
       343 
358 
     | 
    
         | 
| 
       344 
359 
     | 
    
         
             
                    expect {
         
     | 
| 
       345 
     | 
    
         
            -
                      channel.fanout("previously.declared.durable.topic.exchange", :durable => false)
         
     | 
| 
      
 360 
     | 
    
         
            +
                      @channel.fanout("previously.declared.durable.topic.exchange", :durable => false)
         
     | 
| 
       346 
361 
     | 
    
         
             
                    }.to raise_error(AMQP::IncompatibleOptionsError)
         
     | 
| 
       347 
362 
     | 
    
         | 
| 
       348 
363 
     | 
    
         
             
                    done
         
     | 
| 
         @@ -362,7 +377,7 @@ describe AMQP::Channel do 
     | 
|
| 
       362 
377 
     | 
    
         
             
                    exchange.name.should == name
         
     | 
| 
       363 
378 
     | 
    
         | 
| 
       364 
379 
     | 
    
         
             
                    done
         
     | 
| 
       365 
     | 
    
         
            -
                  end 
     | 
| 
      
 380 
     | 
    
         
            +
                  end
         
     | 
| 
       366 
381 
     | 
    
         
             
                end # context
         
     | 
| 
       367 
382 
     | 
    
         | 
| 
       368 
383 
     | 
    
         
             
                context "when exchange name is omitted" do
         
     | 
| 
         @@ -372,7 +387,7 @@ describe AMQP::Channel do 
     | 
|
| 
       372 
387 
     | 
    
         
             
                    exchange.name.should_not == "amq.topic2"
         
     | 
| 
       373 
388 
     | 
    
         | 
| 
       374 
389 
     | 
    
         
             
                    done
         
     | 
| 
       375 
     | 
    
         
            -
                  end 
     | 
| 
      
 390 
     | 
    
         
            +
                  end
         
     | 
| 
       376 
391 
     | 
    
         
             
                end # context
         
     | 
| 
       377 
392 
     | 
    
         | 
| 
       378 
393 
     | 
    
         
             
                context "when passive option is used" do
         
     | 
| 
         @@ -387,23 +402,20 @@ describe AMQP::Channel do 
     | 
|
| 
       387 
402 
     | 
    
         | 
| 
       388 
403 
     | 
    
         
             
                      done
         
     | 
| 
       389 
404 
     | 
    
         
             
                    end # it
         
     | 
| 
       390 
     | 
    
         
            -
                  end 
     | 
| 
      
 405 
     | 
    
         
            +
                  end
         
     | 
| 
       391 
406 
     | 
    
         | 
| 
       392 
407 
     | 
    
         
             
                  context "and exchange with given name DOES NOT exist" do
         
     | 
| 
       393 
     | 
    
         
            -
                    it " 
     | 
| 
       394 
     | 
    
         
            -
                       
     | 
| 
       395 
     | 
    
         
            -
                      channel.on_error do |ch, channel_close|
         
     | 
| 
       396 
     | 
    
         
            -
                        @error_code = channel_close.reply_code
         
     | 
| 
       397 
     | 
    
         
            -
                      end
         
     | 
| 
      
 408 
     | 
    
         
            +
                    it "raises an exception" do
         
     | 
| 
      
 409 
     | 
    
         
            +
                      pending "Not yet supported"
         
     | 
| 
       398 
410 
     | 
    
         | 
| 
       399 
     | 
    
         
            -
                       
     | 
| 
      
 411 
     | 
    
         
            +
                      expect {
         
     | 
| 
      
 412 
     | 
    
         
            +
                        exchange = @channel.topic("topic exchange declared at #{Time.now.to_i}", :passive => true)
         
     | 
| 
      
 413 
     | 
    
         
            +
                      }.to raise_error
         
     | 
| 
       400 
414 
     | 
    
         | 
| 
       401 
     | 
    
         
            -
                      done 
     | 
| 
       402 
     | 
    
         
            -
                        @error_code.should == 404
         
     | 
| 
       403 
     | 
    
         
            -
                      }
         
     | 
| 
      
 415 
     | 
    
         
            +
                      done
         
     | 
| 
       404 
416 
     | 
    
         
             
                    end # it
         
     | 
| 
       405 
417 
     | 
    
         
             
                  end # context
         
     | 
| 
       406 
     | 
    
         
            -
                end
         
     | 
| 
      
 418 
     | 
    
         
            +
                end # context
         
     | 
| 
       407 
419 
     | 
    
         | 
| 
       408 
420 
     | 
    
         | 
| 
       409 
421 
     | 
    
         
             
                context "when exchange is declared as durable" do
         
     | 
| 
         @@ -458,14 +470,16 @@ describe AMQP::Channel do 
     | 
|
| 
       458 
470 
     | 
    
         
             
                end # context
         
     | 
| 
       459 
471 
     | 
    
         | 
| 
       460 
472 
     | 
    
         | 
| 
       461 
     | 
    
         
            -
                context "when exchange is re-declared with parameters different from  
     | 
| 
      
 473 
     | 
    
         
            +
                context "when exchange is re-declared with parameters different from original declaration" do
         
     | 
| 
       462 
474 
     | 
    
         
             
                  amqp_after do
         
     | 
| 
       463 
475 
     | 
    
         
             
                    done
         
     | 
| 
       464 
476 
     | 
    
         
             
                  end
         
     | 
| 
       465 
477 
     | 
    
         | 
| 
       466 
478 
     | 
    
         
             
                  it "raises an exception" do
         
     | 
| 
       467 
479 
     | 
    
         
             
                    channel = AMQP::Channel.new
         
     | 
| 
      
 480 
     | 
    
         
            +
             
     | 
| 
       468 
481 
     | 
    
         
             
                    channel.topic("previously.declared.durable.topic.exchange", :durable => true)
         
     | 
| 
      
 482 
     | 
    
         
            +
                    channel.should be_open
         
     | 
| 
       469 
483 
     | 
    
         | 
| 
       470 
484 
     | 
    
         
             
                    expect {
         
     | 
| 
       471 
485 
     | 
    
         
             
                      channel.topic("previously.declared.durable.topic.exchange", :durable => false)
         
     | 
| 
         @@ -484,8 +498,7 @@ describe AMQP::Channel do 
     | 
|
| 
       484 
498 
     | 
    
         
             
                  let(:name) { "new.headers.exchange" }
         
     | 
| 
       485 
499 
     | 
    
         | 
| 
       486 
500 
     | 
    
         
             
                  it "declares a new headers exchange with that name" do
         
     | 
| 
       487 
     | 
    
         
            -
                     
     | 
| 
       488 
     | 
    
         
            -
                    exchange = channel.headers(name)
         
     | 
| 
      
 501 
     | 
    
         
            +
                    exchange = @channel.headers(name)
         
     | 
| 
       489 
502 
     | 
    
         | 
| 
       490 
503 
     | 
    
         
             
                    exchange.name.should == name
         
     | 
| 
       491 
504 
     | 
    
         | 
| 
         @@ -499,8 +512,7 @@ describe AMQP::Channel do 
     | 
|
| 
       499 
512 
     | 
    
         
             
                  end
         
     | 
| 
       500 
513 
     | 
    
         | 
| 
       501 
514 
     | 
    
         
             
                  it "uses amq.match" do
         
     | 
| 
       502 
     | 
    
         
            -
                     
     | 
| 
       503 
     | 
    
         
            -
                    exchange = channel.headers
         
     | 
| 
      
 515 
     | 
    
         
            +
                    exchange = @channel.headers
         
     | 
| 
       504 
516 
     | 
    
         
             
                    exchange.name.should == "amq.match"
         
     | 
| 
       505 
517 
     | 
    
         
             
                    exchange.name.should_not == "amq.headers"
         
     | 
| 
       506 
518 
     | 
    
         | 
| 
         @@ -511,11 +523,10 @@ describe AMQP::Channel do 
     | 
|
| 
       511 
523 
     | 
    
         
             
                context "when passive option is used" do
         
     | 
| 
       512 
524 
     | 
    
         
             
                  context "and exchange with given name already exists" do
         
     | 
| 
       513 
525 
     | 
    
         
             
                    it "silently returns" do
         
     | 
| 
       514 
     | 
    
         
            -
                      name 
     | 
| 
       515 
     | 
    
         
            -
                      channel = AMQP::Channel.new
         
     | 
| 
      
 526 
     | 
    
         
            +
                      name = "a_new_headers_exchange declared at #{Time.now.to_i}"
         
     | 
| 
       516 
527 
     | 
    
         | 
| 
       517 
     | 
    
         
            -
                      original_exchange = channel.headers(name)
         
     | 
| 
       518 
     | 
    
         
            -
                      exchange          = channel.headers(name, :passive => true)
         
     | 
| 
      
 528 
     | 
    
         
            +
                      original_exchange = @channel.headers(name)
         
     | 
| 
      
 529 
     | 
    
         
            +
                      exchange          = @channel.headers(name, :passive => true)
         
     | 
| 
       519 
530 
     | 
    
         | 
| 
       520 
531 
     | 
    
         
             
                      exchange.should == original_exchange
         
     | 
| 
       521 
532 
     | 
    
         | 
| 
         @@ -525,16 +536,13 @@ describe AMQP::Channel do 
     | 
|
| 
       525 
536 
     | 
    
         | 
| 
       526 
537 
     | 
    
         
             
                  context "and exchange with given name DOES NOT exist" do
         
     | 
| 
       527 
538 
     | 
    
         
             
                    it "raises an exception" do
         
     | 
| 
       528 
     | 
    
         
            -
                       
     | 
| 
       529 
     | 
    
         
            -
                      channel.on_error do |ch, channel_close|
         
     | 
| 
       530 
     | 
    
         
            -
                        @error_code = channel_close.reply_code
         
     | 
| 
       531 
     | 
    
         
            -
                      end
         
     | 
| 
      
 539 
     | 
    
         
            +
                      pending "Not yet supported"
         
     | 
| 
       532 
540 
     | 
    
         | 
| 
       533 
     | 
    
         
            -
                       
     | 
| 
      
 541 
     | 
    
         
            +
                      expect {
         
     | 
| 
      
 542 
     | 
    
         
            +
                        exchange = @channel.headers("headers exchange declared at #{Time.now.to_i}", :passive => true)
         
     | 
| 
      
 543 
     | 
    
         
            +
                      }.to raise_error
         
     | 
| 
       534 
544 
     | 
    
         | 
| 
       535 
     | 
    
         
            -
                      done 
     | 
| 
       536 
     | 
    
         
            -
                        @error_code.should == 404
         
     | 
| 
       537 
     | 
    
         
            -
                      }
         
     | 
| 
      
 545 
     | 
    
         
            +
                      done
         
     | 
| 
       538 
546 
     | 
    
         
             
                    end # it
         
     | 
| 
       539 
547 
     | 
    
         
             
                  end # context
         
     | 
| 
       540 
548 
     | 
    
         
             
                end # context
         
     | 
| 
         @@ -542,8 +550,7 @@ describe AMQP::Channel do 
     | 
|
| 
       542 
550 
     | 
    
         | 
| 
       543 
551 
     | 
    
         
             
                context "when exchange is declared as durable" do
         
     | 
| 
       544 
552 
     | 
    
         
             
                  it "returns a new durable headers exchange" do
         
     | 
| 
       545 
     | 
    
         
            -
                     
     | 
| 
       546 
     | 
    
         
            -
                    exchange = channel.headers("a_new_durable_headers_exchange", :durable => true)
         
     | 
| 
      
 553 
     | 
    
         
            +
                    exchange = @channel.headers("a_new_durable_headers_exchange", :durable => true)
         
     | 
| 
       547 
554 
     | 
    
         
             
                    exchange.should be_durable
         
     | 
| 
       548 
555 
     | 
    
         
             
                    exchange.should_not be_transient
         
     | 
| 
       549 
556 
     | 
    
         | 
| 
         @@ -554,8 +561,7 @@ describe AMQP::Channel do 
     | 
|
| 
       554 
561 
     | 
    
         | 
| 
       555 
562 
     | 
    
         
             
                context "when exchange is declared as non-durable" do
         
     | 
| 
       556 
563 
     | 
    
         
             
                  it "returns a new NON-durable headers exchange" do
         
     | 
| 
       557 
     | 
    
         
            -
                     
     | 
| 
       558 
     | 
    
         
            -
                    exchange = channel.headers("a_new_non_durable_headers_exchange", :durable => false)
         
     | 
| 
      
 564 
     | 
    
         
            +
                    exchange = @channel.headers("a_new_non_durable_headers_exchange", :durable => false)
         
     | 
| 
       559 
565 
     | 
    
         
             
                    exchange.should_not be_durable
         
     | 
| 
       560 
566 
     | 
    
         
             
                    exchange.should be_transient
         
     | 
| 
       561 
567 
     | 
    
         | 
| 
         @@ -566,8 +572,7 @@ describe AMQP::Channel do 
     | 
|
| 
       566 
572 
     | 
    
         | 
| 
       567 
573 
     | 
    
         
             
                context "when exchange is declared as auto-deleted" do
         
     | 
| 
       568 
574 
     | 
    
         
             
                  it "returns a new auto-deleted headers exchange" do
         
     | 
| 
       569 
     | 
    
         
            -
                     
     | 
| 
       570 
     | 
    
         
            -
                    exchange = channel.headers("a new auto-deleted headers exchange", :auto_delete => true)
         
     | 
| 
      
 575 
     | 
    
         
            +
                    exchange = @channel.headers("a new auto-deleted headers exchange", :auto_delete => true)
         
     | 
| 
       571 
576 
     | 
    
         | 
| 
       572 
577 
     | 
    
         
             
                    exchange.should be_auto_deleted
         
     | 
| 
       573 
578 
     | 
    
         
             
                    done
         
     | 
| 
         @@ -577,8 +582,7 @@ describe AMQP::Channel do 
     | 
|
| 
       577 
582 
     | 
    
         | 
| 
       578 
583 
     | 
    
         
             
                context "when exchange is declared as auto-deleted" do
         
     | 
| 
       579 
584 
     | 
    
         
             
                  it "returns a new auto-deleted headers exchange" do
         
     | 
| 
       580 
     | 
    
         
            -
                     
     | 
| 
       581 
     | 
    
         
            -
                    exchange = channel.headers("a new non-auto-deleted headers exchange", :auto_delete => false)
         
     | 
| 
      
 585 
     | 
    
         
            +
                    exchange = @channel.headers("a new non-auto-deleted headers exchange", :auto_delete => false)
         
     | 
| 
       582 
586 
     | 
    
         | 
| 
       583 
587 
     | 
    
         
             
                    exchange.should_not be_auto_deleted
         
     | 
| 
       584 
588 
     | 
    
         
             
                    done
         
     | 
| 
         @@ -588,8 +592,7 @@ describe AMQP::Channel do 
     | 
|
| 
       588 
592 
     | 
    
         | 
| 
       589 
593 
     | 
    
         
             
                context "when exchange is declared without explicit :nowait parameter" do
         
     | 
| 
       590 
594 
     | 
    
         
             
                  it "is declared with :nowait by default" do
         
     | 
| 
       591 
     | 
    
         
            -
                     
     | 
| 
       592 
     | 
    
         
            -
                    exchange = channel.headers("a new non-auto-deleted headers exchange", :auto_delete => false)
         
     | 
| 
      
 595 
     | 
    
         
            +
                    exchange = @channel.headers("a new non-auto-deleted headers exchange", :auto_delete => false)
         
     | 
| 
       593 
596 
     | 
    
         | 
| 
       594 
597 
     | 
    
         
             
                    exchange.should_not be_auto_deleted
         
     | 
| 
       595 
598 
     | 
    
         
             
                    done
         
     | 
| 
         @@ -603,15 +606,43 @@ describe AMQP::Channel do 
     | 
|
| 
       603 
606 
     | 
    
         
             
                  end
         
     | 
| 
       604 
607 
     | 
    
         | 
| 
       605 
608 
     | 
    
         
             
                  it "raises an exception" do
         
     | 
| 
       606 
     | 
    
         
            -
                    channel  
     | 
| 
       607 
     | 
    
         
            -
                    channel.headers("previously.declared.durable.headers.exchange", :durable => true)
         
     | 
| 
      
 609 
     | 
    
         
            +
                    @channel.headers("previously.declared.durable.headers.exchange", :durable => true)
         
     | 
| 
       608 
610 
     | 
    
         | 
| 
       609 
611 
     | 
    
         
             
                    expect {
         
     | 
| 
       610 
     | 
    
         
            -
                      channel.headers("previously.declared.durable.headers.exchange", :durable => false)
         
     | 
| 
      
 612 
     | 
    
         
            +
                      @channel.headers("previously.declared.durable.headers.exchange", :durable => false)
         
     | 
| 
       611 
613 
     | 
    
         
             
                    }.to raise_error(AMQP::IncompatibleOptionsError)
         
     | 
| 
       612 
614 
     | 
    
         | 
| 
       613 
615 
     | 
    
         
             
                    done
         
     | 
| 
       614 
616 
     | 
    
         
             
                  end # it
         
     | 
| 
       615 
617 
     | 
    
         
             
                end # context
         
     | 
| 
      
 618 
     | 
    
         
            +
             
     | 
| 
      
 619 
     | 
    
         
            +
             
     | 
| 
      
 620 
     | 
    
         
            +
                context "when exchange is re-declared with parameters different from original declaration on two separate channels" do
         
     | 
| 
      
 621 
     | 
    
         
            +
                  it "raises an exception" do
         
     | 
| 
      
 622 
     | 
    
         
            +
                    channel2 = AMQP::Channel.new
         
     | 
| 
      
 623 
     | 
    
         
            +
                    @channel.headers("previously.declared.durable.headers.exchange", :durable => true)
         
     | 
| 
      
 624 
     | 
    
         
            +
             
     | 
| 
      
 625 
     | 
    
         
            +
                    channel2.on_error do |ch, channel_close|
         
     | 
| 
      
 626 
     | 
    
         
            +
                      puts "reply_text: #{channel_close.reply_text}, reply_code: #{channel_close.reply_code}"
         
     | 
| 
      
 627 
     | 
    
         
            +
                      done
         
     | 
| 
      
 628 
     | 
    
         
            +
                    end
         
     | 
| 
      
 629 
     | 
    
         
            +
                    channel2.headers("previously.declared.durable.headers.exchange", :durable => false)
         
     | 
| 
      
 630 
     | 
    
         
            +
                  end # it
         
     | 
| 
      
 631 
     | 
    
         
            +
                end # context
         
     | 
| 
      
 632 
     | 
    
         
            +
             
     | 
| 
      
 633 
     | 
    
         
            +
             
     | 
| 
      
 634 
     | 
    
         
            +
             
     | 
| 
      
 635 
     | 
    
         
            +
                context "when exchange is re-declared with type different from original declaration on two separate channels" do
         
     | 
| 
      
 636 
     | 
    
         
            +
                  it "raises an exception" do
         
     | 
| 
      
 637 
     | 
    
         
            +
                    channel2 = AMQP::Channel.new
         
     | 
| 
      
 638 
     | 
    
         
            +
                    @channel.topic("previously.declared.durable.topic.exchange", :durable => true)
         
     | 
| 
      
 639 
     | 
    
         
            +
             
     | 
| 
      
 640 
     | 
    
         
            +
                    channel2.on_error do |ch, channel_close|
         
     | 
| 
      
 641 
     | 
    
         
            +
                      puts "reply_text: #{channel_close.reply_text}, reply_code: #{channel_close.reply_code}"
         
     | 
| 
      
 642 
     | 
    
         
            +
                      done
         
     | 
| 
      
 643 
     | 
    
         
            +
                    end
         
     | 
| 
      
 644 
     | 
    
         
            +
                    channel2.headers("previously.declared.durable.topic.exchange", :durable => true)
         
     | 
| 
      
 645 
     | 
    
         
            +
                  end # it
         
     | 
| 
      
 646 
     | 
    
         
            +
                end # context
         
     | 
| 
       616 
647 
     | 
    
         
             
              end # describe
         
     | 
| 
       617 
648 
     | 
    
         
             
            end # describe AMQP
         
     |