You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@qpid.apache.org by "Darryl L. Pierce" <dp...@redhat.com> on 2011/07/11 14:43:12 UTC

[PATCH 06/11] Created the Sender class and its unit tests.

From: "Darryl L. Pierce" <dp...@redhat.com>

The class is packaged as follows:

Qpid::Messaging::Sender

A Sender can send a message.
---
 qpid/cpp/bindings/qpid/ruby/lib/qpid.rb         |    1 +
 qpid/cpp/bindings/qpid/ruby/lib/qpid/sender.rb  |   82 ++++++++++
 qpid/cpp/bindings/qpid/ruby/test/test_sender.rb |  183 +++++++++++++++++++++++
 qpid/cpp/bindings/qpid/ruby/test/ts_bindings.rb |    1 +
 4 files changed, 267 insertions(+), 0 deletions(-)
 create mode 100644 qpid/cpp/bindings/qpid/ruby/lib/qpid/sender.rb
 create mode 100644 qpid/cpp/bindings/qpid/ruby/test/test_sender.rb

diff --git a/qpid/cpp/bindings/qpid/ruby/lib/qpid.rb b/qpid/cpp/bindings/qpid/ruby/lib/qpid.rb
index b5ac578..b72747d 100644
--- a/qpid/cpp/bindings/qpid/ruby/lib/qpid.rb
+++ b/qpid/cpp/bindings/qpid/ruby/lib/qpid.rb
@@ -22,4 +22,5 @@ require 'qpid/duration'
 require 'qpid/address'
 require 'qpid/encoding'
 require 'qpid/message'
+require 'qpid/sender'
 
diff --git a/qpid/cpp/bindings/qpid/ruby/lib/qpid/sender.rb b/qpid/cpp/bindings/qpid/ruby/lib/qpid/sender.rb
new file mode 100644
index 0000000..5d59c20
--- /dev/null
+++ b/qpid/cpp/bindings/qpid/ruby/lib/qpid/sender.rb
@@ -0,0 +1,82 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+module Qpid
+
+  module Messaging
+
+    # Sender defines a type for sending messages.
+    class Sender
+
+      def initialize(sender_impl) # :nodoc:
+        @sender_impl = sender_impl
+      end
+
+      def sender_impl # :nodoc:
+        @sender_impl
+      end
+
+      # Sends a message.
+      def send(message, args = {})
+        block = args[:block] || false
+        @sender_impl.send message.message_impl, block
+      end
+
+      # Closes the sender.
+      def close; @sender_impl.close; end
+
+      # Returns the name for the sender.
+      def name; @sender_impl.getName; end
+
+      # Sets the capacity for the sender, which is the number of outgoing
+      # messages that can be held pending confirmation or receipt by
+      # the broker.
+      def capacity=(capacity); @sender_impl.setCapacity capacity; end
+
+      # Returns the capacity.
+      def capacity; @sender_impl.getCapacity; end
+
+      # Returns the number of messages sent that are pending receipt
+      # confirmation by the broker.
+      def unsettled; @sender_impl.getUnsettled; end
+
+      # Returns the available capacity for sending messages.
+      def available
+        @sender_impl.getAvailable
+      end
+
+      # Returns the Session for this sender.
+      def session; Qpid::Messaging::Session.new @sender_impl.getSession; end
+
+      # Returns if the underlying sender is valid.
+      def valid?; @sender_impl.isValid; end
+
+      # Returns if the underlying sender is null.
+      def null?; @sender_impl.isNull; end
+
+      def swap sender
+        @sender_impl.swap sender.sender_impl
+      end
+
+    end
+
+  end
+
+end
+
diff --git a/qpid/cpp/bindings/qpid/ruby/test/test_sender.rb b/qpid/cpp/bindings/qpid/ruby/test/test_sender.rb
new file mode 100644
index 0000000..64348b9
--- /dev/null
+++ b/qpid/cpp/bindings/qpid/ruby/test/test_sender.rb
@@ -0,0 +1,183 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+$:.unshift File.join(File.dirname(__FILE__), "..", "lib")
+
+require 'test/unit'
+require 'flexmock/test_unit'
+
+require 'qpid/sender'
+
+class TestSender < Test::Unit::TestCase
+
+  def setup
+    @messaging = flexmock(Qpid::Messaging)
+    @message = flexmock("message")
+
+    @session_impl = flexmock("session_impl")
+
+    @sender_impl = flexmock("sender_impl")
+    @other_sender_impl = flexmock("other_sender_impl")
+    @sender = Qpid::Messaging::Sender.new @sender_impl
+    @other_sender = flexmock("other_sender")
+  end
+
+  def test_send
+    message_impl = "message_impl"
+    content = {:foo => :bar}
+    @message.
+      should_receive(:message_impl).
+      once.
+      and_return(message_impl)
+    @sender_impl.
+      should_receive(:send).
+      once.
+      with(message_impl, false)
+
+    @sender.send @message
+  end
+
+  def test_send_and_dont_block
+    message_impl = "message_impl"
+    content = {:foo => :bar}
+    @message.
+      should_receive(:message_impl).
+      once.
+      and_return(message_impl)
+    @sender_impl.
+      should_receive(:send).
+      once.
+      with(message_impl, false)
+
+    @sender.send @message, :block => false
+  end
+
+  def test_send_and_block
+    message_impl = "message_impl"
+    content = {:foo => :bar}
+    @message.
+      should_receive(:message_impl).
+      once.
+      and_return(message_impl)
+    @sender_impl.
+      should_receive(:send).
+      once.
+      with(message_impl, true)
+
+    @sender.send @message, :block => true
+  end
+
+  def test_close
+    @sender_impl.
+      should_receive(:close).
+      once
+
+    @sender.close
+  end
+
+  def test_set_capacity
+    @sender_impl.
+      should_receive(:setCapacity).
+      once.
+      with(17)
+
+    @sender.capacity = 17
+  end
+
+  def test_get_capacity
+    @sender_impl.
+      should_receive(:getCapacity).
+      once.
+      and_return(12)
+
+    assert_equal 12, @sender.capacity
+  end
+
+  def test_unsettled
+    @sender_impl.
+      should_receive(:getUnsettled).
+      once.
+      and_return(5)
+
+    assert_equal 5, @sender.unsettled
+  end
+
+  def test_available
+    @sender_impl.
+      should_receive(:getAvailable).
+      once.
+      and_return(15)
+
+    assert_equal 15, @sender.available
+  end
+
+  def test_name
+    @sender_impl.
+      should_receive(:getName).
+      once.
+      and_return("myname")
+
+    assert_equal "myname", @sender.name
+  end
+
+  def test_session
+    @sender_impl.
+      should_receive(:getSession).
+      once.
+      and_return(@session_impl)
+
+    result = @sender.session
+
+    assert_not_nil result
+    assert_same @session_impl, result.session_impl
+  end
+
+  def test_is_valid
+    @sender_impl.
+      should_receive(:isValid).
+      once.
+      and_return(true)
+
+    assert @sender.valid?
+  end
+
+  def test_is_null
+    @sender_impl.
+      should_receive(:isNull).
+      once.
+      and_return(false)
+
+    assert !@sender.null?
+  end
+
+  def test_swap
+    @other_sender.
+      should_receive(:sender_impl).
+      once.
+      and_return(@other_sender_impl)
+    @sender_impl.
+      should_receive(:swap).
+      once.
+      with(@other_sender_impl)
+
+    @sender.swap @other_sender
+  end
+
+end
+
diff --git a/qpid/cpp/bindings/qpid/ruby/test/ts_bindings.rb b/qpid/cpp/bindings/qpid/ruby/test/ts_bindings.rb
index 8139983..a58b10f 100644
--- a/qpid/cpp/bindings/qpid/ruby/test/ts_bindings.rb
+++ b/qpid/cpp/bindings/qpid/ruby/test/ts_bindings.rb
@@ -23,4 +23,5 @@ require 'test/unit'
 require 'test_encoding'
 require 'test_address'
 require 'test_message'
+require 'test_sender'
 
-- 
1.7.6


---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:dev-subscribe@qpid.apache.org