You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ac...@apache.org on 2018/02/26 20:11:11 UTC

[1/2] qpid-proton git commit: PROTON-1776 [ruby] generate on_sender/receiver_open/close events

Repository: qpid-proton
Updated Branches:
  refs/heads/master 81ddadc44 -> 13fb06ed5


PROTON-1776 [ruby] generate on_sender/receiver_open/close events

Fixed messaging adapter and all tests/examples that used the incorrect on_link methods.


Project: http://git-wip-us.apache.org/repos/asf/qpid-proton/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-proton/commit/13fb06ed
Tree: http://git-wip-us.apache.org/repos/asf/qpid-proton/tree/13fb06ed
Diff: http://git-wip-us.apache.org/repos/asf/qpid-proton/diff/13fb06ed

Branch: refs/heads/master
Commit: 13fb06ed5c64c0b5e0c99dda10f7ff7361c95a3f
Parents: 96c7240
Author: Alan Conway <ac...@redhat.com>
Authored: Mon Feb 26 15:01:37 2018 -0500
Committer: Alan Conway <ac...@redhat.com>
Committed: Mon Feb 26 15:10:40 2018 -0500

----------------------------------------------------------------------
 examples/ruby/broker.rb                         | 34 +++++++++---------
 examples/ruby/client.rb                         |  4 +--
 .../ruby/lib/handler/messaging_adapter.rb       | 25 ++++++++++---
 proton-c/bindings/ruby/tests/test_container.rb  |  2 +-
 proton-c/bindings/ruby/tests/test_delivery.rb   |  3 +-
 .../ruby/tests/test_messaging_adapter.rb        | 38 +++++++++-----------
 proton-c/bindings/ruby/tests/test_tools.rb      | 10 +++++-
 7 files changed, 68 insertions(+), 48 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/13fb06ed/examples/ruby/broker.rb
----------------------------------------------------------------------
diff --git a/examples/ruby/broker.rb b/examples/ruby/broker.rb
index 5d0793a..9a023ba 100644
--- a/examples/ruby/broker.rb
+++ b/examples/ruby/broker.rb
@@ -103,20 +103,22 @@ class Broker < Qpid::Proton::MessagingHandler
     @queues[address]
   end
 
-  def on_link_open(link)
-    if link.sender?
-      if link.remote_source.dynamic?
-        address = SecureRandom.uuid
-        link.source.address = address
-        q = MessageQueue.new(true)
-        @queues[address] = q
-        q.subscribe(link)
-      elsif link.remote_source.address
-        link.source.address = link.remote_source.address
-        self.queue(link.source.address).subscribe(link)
-      end
-    elsif link.remote_target.address
-      link.target.address = link.remote_target.address
+  def on_sender_open(sender)
+    if sender.remote_source.dynamic?
+      address = SecureRandom.uuid
+      sender.source.address = address
+      q = MessageQueue.new(true)
+      @queues[address] = q
+      q.subscribe(sender)
+    elsif sender.remote_source.address
+      sender.source.address = sender.remote_source.address
+      self.queue(sender.source.address).subscribe(sender)
+    end
+  end
+
+  def on_receiver_open(receiver)
+    if receiver.remote_target.address
+      receiver.target.address = receiver.remote_target.address
     end
   end
 
@@ -128,8 +130,8 @@ class Broker < Qpid::Proton::MessagingHandler
     end
   end
 
-  def on_link_close(link)
-    self.unsubscribe(link) if link.sender?
+  def on_sender_close(sender)
+    self.unsubscribe(sender)
   end
 
   def on_connection_close(connection)

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/13fb06ed/examples/ruby/client.rb
----------------------------------------------------------------------
diff --git a/examples/ruby/client.rb b/examples/ruby/client.rb
index 1439169..d0aa0ca 100644
--- a/examples/ruby/client.rb
+++ b/examples/ruby/client.rb
@@ -45,8 +45,8 @@ class Client < Qpid::Proton::MessagingHandler
     end
   end
 
-  def on_link_open(link)
-    next_request if link.receiver?
+  def on_receiver_open(receiver)
+    next_request
   end
 
   def on_message(delivery, message)

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/13fb06ed/proton-c/bindings/ruby/lib/handler/messaging_adapter.rb
----------------------------------------------------------------------
diff --git a/proton-c/bindings/ruby/lib/handler/messaging_adapter.rb b/proton-c/bindings/ruby/lib/handler/messaging_adapter.rb
index acd08e9..e58314f 100644
--- a/proton-c/bindings/ruby/lib/handler/messaging_adapter.rb
+++ b/proton-c/bindings/ruby/lib/handler/messaging_adapter.rb
@@ -38,7 +38,7 @@ module Qpid::Proton
       def on_container_start(container) delegate(:on_container_start, container); end
       def on_container_stop(container) delegate(:on_container_stop, container); end
 
-      # Define repetative on_xxx_open/close methods for each endpoint type
+      # Define repetative on_xxx_open/close methods for session and connection
       def self.open_close(endpoint)
         Module.new do
           define_method(:"on_#{endpoint}_remote_open") do |event|
@@ -61,7 +61,24 @@ module Qpid::Proton
       end
       # Generate and include open_close modules for each endpoint type
       # Using modules so we can override to extend the behavior later in the handler.
-      [:connection, :session, :link].each { |endpoint| include open_close(endpoint) }
+      [:connection, :session].each { |endpoint| include open_close(endpoint) }
+
+      # Link open/close is handled separately because links are split into
+      # sender and receiver on the messaging API
+      def on_link_remote_open(event)
+        delegate(event.link.sender? ? :on_sender_open : :on_receiver_open, event.link)
+        event.link.open if event.link.local_uninit?
+        add_credit(event)
+      rescue StopAutoResponse
+      end
+
+      def on_link_remote_close(event)
+        s = event.link.sender?
+        delegate_error(s ? :on_sender_error : :on_receiver_error, event.link) if event.link.condition
+        delegate(s ? :on_sender_close : :on_receiver_close, event.link)
+        event.link.close if event.link.local_active?
+      rescue StopAutoResponse
+      end
 
       def on_transport_error(event)
         delegate_error(:on_transport_error, event.context)
@@ -71,10 +88,8 @@ module Qpid::Proton
         delegate(:on_transport_close, event.context) rescue StopAutoResponse
       end
 
-      # Add flow control for link opening events
+      # Add flow control for local link open
       def on_link_local_open(event) add_credit(event); end
-      def on_link_remote_open(event) super; add_credit(event); end
-
 
       def on_delivery(event)
         if event.link.receiver?       # Incoming message

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/13fb06ed/proton-c/bindings/ruby/tests/test_container.rb
----------------------------------------------------------------------
diff --git a/proton-c/bindings/ruby/tests/test_container.rb b/proton-c/bindings/ruby/tests/test_container.rb
index 385549b..8df3755 100644
--- a/proton-c/bindings/ruby/tests/test_container.rb
+++ b/proton-c/bindings/ruby/tests/test_container.rb
@@ -51,7 +51,7 @@ class ContainerTest < MiniTest::Test
 
     receive_handler = Class.new(MessagingHandler) do
       attr_reader :message, :link
-      def on_link_open(link)
+      def on_receiver_open(link)
         @link = link
         @link.open
         @link.flow(1)

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/13fb06ed/proton-c/bindings/ruby/tests/test_delivery.rb
----------------------------------------------------------------------
diff --git a/proton-c/bindings/ruby/tests/test_delivery.rb b/proton-c/bindings/ruby/tests/test_delivery.rb
index ee64451..f061665 100644
--- a/proton-c/bindings/ruby/tests/test_delivery.rb
+++ b/proton-c/bindings/ruby/tests/test_delivery.rb
@@ -25,7 +25,8 @@ include Qpid::Proton
 class TestDelivery < MiniTest::Test
 
   class NoAutoHandler < MessagingHandler
-    def on_link_open(l) l.open({:auto_settle=>false, :auto_accept=>false}); end
+    def on_sender_open(l) l.open({:auto_settle=>false, :auto_accept=>false}); end
+    def on_receiver_open(l) l.open({:auto_settle=>false, :auto_accept=>false}); end
   end
 
   class SendHandler < NoAutoHandler

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/13fb06ed/proton-c/bindings/ruby/tests/test_messaging_adapter.rb
----------------------------------------------------------------------
diff --git a/proton-c/bindings/ruby/tests/test_messaging_adapter.rb b/proton-c/bindings/ruby/tests/test_messaging_adapter.rb
index 6c683c0..942fc01 100644
--- a/proton-c/bindings/ruby/tests/test_messaging_adapter.rb
+++ b/proton-c/bindings/ruby/tests/test_messaging_adapter.rb
@@ -39,20 +39,16 @@ class RecordingHandler < Qpid::Proton::MessagingHandler
   def respond_to?(name, all=false) super || respond_to_missing?(name); end # For ruby < 1.9.2
 end
 
-# Extra methods for driver pairs of RecordingHandler
-class DriverPair
-  def names() collect { |x| x.handler.names }; end
-  def clear() each { |x| x.handler.clear; } end
-end
-
 class NoAutoOpenClose < RecordingHandler
   def initialize() super; @endpoints = []; end
   def on_connection_open(x) @connection = x; super; raise StopAutoResponse; end
   def on_session_open(x) @session = x; super; raise StopAutoResponse; end
-  def on_link_open(x) @link = x; super; raise StopAutoResponse; end
+  def on_sender_open(x) @link = x; super; raise StopAutoResponse; end
+  def on_receiver_open(x) @link = x; super; raise StopAutoResponse; end
   def on_connection_close(x) super; raise StopAutoResponse; end
   def on_session_close(x) super; raise StopAutoResponse; end
-  def on_link_close(x) super; raise StopAutoResponse; end
+  def on_sender_close(x) super; raise StopAutoResponse; end
+  def on_receiver_close(x) super; raise StopAutoResponse; end
   attr_reader :connection, :session, :link
 end
 
@@ -61,8 +57,8 @@ class TestMessagingHandler < MiniTest::Test
   def test_auto_open_close
     d = DriverPair.new(RecordingHandler.new, RecordingHandler.new)
     d.client.connection.open; d.client.connection.open_sender; d.run
-    assert_equal [:on_connection_open, :on_session_open, :on_link_open, :on_sendable], d.client.handler.names
-    assert_equal [:on_connection_open, :on_session_open, :on_link_open], d.server.handler.names
+    assert_equal [:on_connection_open, :on_session_open, :on_sender_open, :on_sendable], d.client.handler.names
+    assert_equal [:on_connection_open, :on_session_open, :on_receiver_open], d.server.handler.names
     d.clear
     d.client.connection.close; d.run
     assert_equal [:on_connection_close, :on_transport_close], d.server.handler.names
@@ -126,20 +122,19 @@ class TestMessagingHandler < MiniTest::Test
     assert_equal "bad dog", d.server.handler.calls[0][1].condition.description
   end
 
-  def test_link_error
+  def test_sender_receiver_error
     d = DriverPair.new(RecordingHandler.new, RecordingHandler.new)
     d.client.connection.open
     s = d.client.connection.open_sender; d.run
-    assert_equal [:on_connection_open, :on_session_open, :on_link_open, :on_sendable], d.client.handler.names
-    assert_equal [:on_connection_open, :on_session_open, :on_link_open], d.server.handler.names
+    assert_equal [:on_connection_open, :on_session_open, :on_sender_open, :on_sendable], d.client.handler.names
+    assert_equal [:on_connection_open, :on_session_open, :on_receiver_open], d.server.handler.names
     d.clear
     s.close "bad dog"; d.run
-    assert_equal [:on_link_error, :on_link_close], d.client.handler.names
-    assert_equal [:on_link_error, :on_link_close], d.server.handler.names
+    assert_equal [:on_sender_error, :on_sender_close], d.client.handler.names
+    assert_equal [:on_receiver_error, :on_receiver_close], d.server.handler.names
     assert_equal "bad dog", d.server.handler.calls[0][1].condition.description
   end
 
-
   def test_options_off
     linkopts = {:credit_window=>0, :auto_settle=>false, :auto_accept=>false}
     d = DriverPair.new(NoAutoOpenClose.new, NoAutoOpenClose.new)
@@ -149,11 +144,11 @@ class TestMessagingHandler < MiniTest::Test
     assert_equal [[:on_connection_open], [:on_connection_open]], d.names
     d.clear
     s = d.client.connection.open_sender(linkopts); d.run
-    assert_equal [[], [:on_session_open, :on_link_open]], d.names
+    assert_equal [[], [:on_session_open, :on_receiver_open]], d.names
     d.server.handler.session.open      # Return session open
     d.server.handler.link.open(linkopts) # Return link open
     d.run
-    assert_equal [[:on_session_open, :on_link_open], [:on_session_open, :on_link_open]], d.names
+    assert_equal [[:on_session_open, :on_sender_open], [:on_session_open, :on_receiver_open]], d.names
     d.clear
     d.server.handler.link.flow(1); d.run
     assert_equal [[:on_sendable], []], d.names
@@ -163,7 +158,6 @@ class TestMessagingHandler < MiniTest::Test
     assert_equal [[], [:on_message]], d.names
   end
 
-
   def test_message
     handler_class = Class.new(MessagingHandler) do
       def on_message(delivery, message) @message = message; end
@@ -203,12 +197,12 @@ class TestMessagingHandler < MiniTest::Test
     d = DriverPair.new(handler_class.new, handler_class.new)
     d.client.connection.open
     r = d.client.connection.open_receiver; d.run
-    assert_equal [:on_connection_open, :on_session_open, :on_link_open], d.client.handler.unhandled
-    assert_equal [:on_connection_open, :on_session_open, :on_link_open, :on_sendable], d.server.handler.unhandled
+    assert_equal [:on_connection_open, :on_session_open, :on_receiver_open], d.client.handler.unhandled
+    assert_equal [:on_connection_open, :on_session_open, :on_sender_open, :on_sendable], d.server.handler.unhandled
     r.close Condition.new("goof", "oops"); d.run
 
     assert_equal [Condition.new("goof", "oops")], d.client.handler.error
-    assert_equal [:on_connection_open, :on_session_open, :on_link_open, :on_sendable, :on_link_close], d.server.handler.unhandled
+    assert_equal [:on_connection_open, :on_session_open, :on_sender_open, :on_sendable, :on_sender_close], d.server.handler.unhandled
     assert_equal [Condition.new("goof", "oops")], d.server.handler.error
 
   end

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/13fb06ed/proton-c/bindings/ruby/tests/test_tools.rb
----------------------------------------------------------------------
diff --git a/proton-c/bindings/ruby/tests/test_tools.rb b/proton-c/bindings/ruby/tests/test_tools.rb
index 5907070..a8fe1de 100644
--- a/proton-c/bindings/ruby/tests/test_tools.rb
+++ b/proton-c/bindings/ruby/tests/test_tools.rb
@@ -82,7 +82,11 @@ class TestHandler < Qpid::Proton::MessagingHandler
     endpoint_open(@sessions, s)
   end
 
-  def on_link_open(l)
+  def on_receiver_open(l)
+    endpoint_open(@links, l)
+  end
+
+  def on_sender_open(l)
     endpoint_open(@links, l)
   end
 
@@ -126,6 +130,10 @@ DriverPair = Struct.new(:client, :server) do
     IO.select(can_read, can_write, [], 0)
   end
 
+  def names() collect { |x| x.handler.names }; end
+
+  def clear() each { |x| x.handler.clear; } end
+
   # Run till there is nothing else to do - not handle waiting for timed events
   # but does pass +now+ to process and returns the min returned timed event time
   def run(now=Time.now)


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org


[2/2] qpid-proton git commit: NO-JIRA: [c] minor fix for sanitizer warning

Posted by ac...@apache.org.
NO-JIRA: [c] minor fix for sanitizer warning


Project: http://git-wip-us.apache.org/repos/asf/qpid-proton/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-proton/commit/96c72404
Tree: http://git-wip-us.apache.org/repos/asf/qpid-proton/tree/96c72404
Diff: http://git-wip-us.apache.org/repos/asf/qpid-proton/diff/96c72404

Branch: refs/heads/master
Commit: 96c72404ae2dff977f58dfb54747ff8c20723843
Parents: 81ddadc
Author: Alan Conway <ac...@redhat.com>
Authored: Fri Feb 23 09:25:33 2018 -0500
Committer: Alan Conway <ac...@redhat.com>
Committed: Mon Feb 26 15:10:40 2018 -0500

----------------------------------------------------------------------
 proton-c/src/core/transport.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/96c72404/proton-c/src/core/transport.c
----------------------------------------------------------------------
diff --git a/proton-c/src/core/transport.c b/proton-c/src/core/transport.c
index 86d0c2a..c49ddd4 100644
--- a/proton-c/src/core/transport.c
+++ b/proton-c/src/core/transport.c
@@ -1349,7 +1349,7 @@ int pn_do_attach(pn_transport_t *transport, uint8_t frame_type, uint16_t channel
   char strbuf[128];      // avoid malloc for most link names
   char *strheap = (name.size >= sizeof(strbuf)) ? (char *) malloc(name.size + 1) : NULL;
   char *strname = strheap ? strheap : strbuf;
-  strncpy(strname, name.start, name.size);
+  if (name.size > 0) strncpy(strname, name.start, name.size);
   strname[name.size] = '\0';
 
   pn_session_t *ssn = pni_channel_state(transport, channel);


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org