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/01/05 16:35:58 UTC
[34/50] [abbrv] qpid-proton git commit: PROTON-1720: [ruby] Add
missing connection options, update Connection API.
PROTON-1720: [ruby] Add missing connection options, update Connection API.
Project: http://git-wip-us.apache.org/repos/asf/qpid-proton/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-proton/commit/055f3dc6
Tree: http://git-wip-us.apache.org/repos/asf/qpid-proton/tree/055f3dc6
Diff: http://git-wip-us.apache.org/repos/asf/qpid-proton/diff/055f3dc6
Branch: refs/heads/go1
Commit: 055f3dc6b94332c353bf3e93aa7318209a2d9e6d
Parents: c4d5fde
Author: Alan Conway <ac...@redhat.com>
Authored: Fri Dec 15 16:53:30 2017 -0500
Committer: Alan Conway <ac...@redhat.com>
Committed: Fri Dec 15 17:37:05 2017 -0500
----------------------------------------------------------------------
examples/ruby/server.rb | 4 +-
proton-c/bindings/ruby/lib/core/connection.rb | 121 +++++++++++--------
.../bindings/ruby/lib/core/connection_driver.rb | 1 -
proton-c/bindings/ruby/lib/core/container.rb | 3 +-
proton-c/bindings/ruby/lib/core/message.rb | 6 +-
proton-c/bindings/ruby/lib/core/transport.rb | 54 ++-------
proton-c/bindings/ruby/lib/reactor/container.rb | 2 +-
proton-c/bindings/ruby/lib/types/array.rb | 6 +-
proton-c/bindings/ruby/lib/types/hash.rb | 13 +-
proton-c/bindings/ruby/lib/util/deprecation.rb | 7 +-
.../bindings/ruby/tests/old_examples/server.rb | 4 +-
proton-c/bindings/ruby/tests/test_container.rb | 63 +++++++++-
12 files changed, 171 insertions(+), 113 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/055f3dc6/examples/ruby/server.rb
----------------------------------------------------------------------
diff --git a/examples/ruby/server.rb b/examples/ruby/server.rb
index 7a4832b..7538d61 100644
--- a/examples/ruby/server.rb
+++ b/examples/ruby/server.rb
@@ -36,8 +36,8 @@ class Server < Qpid::Proton::MessagingHandler
end
def on_connection_open(connection)
- if connection.remote_offered_capabilities &&
- connection.remote_offered_capabilities.contain?("ANONYMOUS-RELAY")
+ if connection.offered_capabilities &&
+ connection.offered_capabilities.contain?("ANONYMOUS-RELAY")
@relay = connection.open_sender({:target => nil})
end
end
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/055f3dc6/proton-c/bindings/ruby/lib/core/connection.rb
----------------------------------------------------------------------
diff --git a/proton-c/bindings/ruby/lib/core/connection.rb b/proton-c/bindings/ruby/lib/core/connection.rb
index b9b5746..f9a80a7 100644
--- a/proton-c/bindings/ruby/lib/core/connection.rb
+++ b/proton-c/bindings/ruby/lib/core/connection.rb
@@ -20,32 +20,17 @@ module Qpid::Proton
# An AMQP connection.
class Connection < Endpoint
- include Util::Deprecation
-
- # @private
PROTON_METHOD_PREFIX = "pn_connection"
- # @private
include Util::Wrapper
+ include Util::Deprecation
- # @!attribute hostname
- # @return [String] The AMQP hostname for the connection.
- proton_set_get :hostname
-
- # @!attribute user
- # @return [String] User name used for authentication (outgoing connection) or the authenticated user name (incoming connection)
- proton_set_get :user
-
- private
-
- proton_set :password
- attr_accessor :overrides
- attr_accessor :session_policy
-
+ # @private
def self.wrap(impl)
return nil if impl.nil?
self.fetch_instance(impl, :pn_connection_attachments) || Connection.new(impl)
end
+ # @private
def initialize(impl = Cproton.pn_connection)
super()
@impl = impl
@@ -56,7 +41,19 @@ module Qpid::Proton
self.class.store_instance(self, :pn_connection_attachments)
end
- public
+ # @return [String] The AMQP hostname for the connection.
+ def virtual_host() Cproton.pn_connection_remote_hostname(@impl); end
+ deprecated_alias :remote_hostname, :virtual_host
+
+ # @!attribute hostname
+ # @deprecated use {#virtual_host}
+ proton_set_get :hostname
+
+ # @return [String] User name used for authentication (outgoing connection)
+ # or the authenticated user name (incoming connection)
+ def user()
+ Cproton.pn_connection_get_user(impl) or (connection.transport && connection.transport.user)
+ end
# @deprecated no replacement
def overrides?() deprecated __method__; false; end
@@ -68,49 +65,54 @@ module Qpid::Proton
def connection() self; end
# @return [Transport, nil] transport bound to this connection, or nil if unbound.
- #
def transport() Transport.wrap(Cproton.pn_connection_transport(@impl)); end
- # @return AMQP container ID advertised by the remote peer
- def remote_container_id() Cproton.pn_connection_remote_container(@impl); end
-
- alias remote_container remote_container_id
+ # @return AMQP container ID advertised by the remote peer.
+ # To get the local container ID use {#container} and {Container#id}
+ def container_id() Cproton.pn_connection_remote_container(@impl); end
+ deprecated_alias :remote_container, :container_id
# @return [Container] the container managing this connection
attr_reader :container
- # @return AMQP container ID for the local end of the connection
- def container_id() Cproton.pn_connection_get_container(@impl); end
-
- # @return [String] hostname used by the remote end of the connection
- def remote_hostname() Cproton.pn_connection_remote_hostname(@impl); end
-
# @return [Array<Symbol>] offered capabilities provided by the remote peer
- def remote_offered_capabilities
+ def offered_capabilities
Codec::Data.to_object(Cproton.pn_connection_remote_offered_capabilities(@impl))
end
+ deprecated_alias :remote_offered_capabilities, :offered_capabilities
# @return [Array<Symbol>] desired capabilities provided by the remote peer
- def remote_desired_capabilities
+ def desired_capabilities
Codec::Data.to_object(Cproton.pn_connection_remote_desired_capabilities(@impl))
end
+ deprecated_alias :remote_desired_capabilities, :desired_capabilities
# @return [Hash] connection-properties provided by the remote peer
- def remote_properties
- Codec::Data.to_object(Cproton.pn_connection_remote_properites(@impl))
+ def properties
+ Codec::Data.to_object(Cproton.pn_connection_remote_properties(@impl))
end
+ deprecated_alias :remote_properties, :properties
# Open the local end of the connection.
#
# @option opts [MessagingHandler] :handler handler for events related to this connection.
- # @option opts [String] :user user-name for authentication.
- # @option opts [String] :password password for authentication.
- # @option opts [Numeric] :idle_timeout seconds before closing an idle connection
- # @option opts [Boolean] :sasl_enabled Enable or disable SASL.
- # @option opts [Boolean] :sasl_allow_insecure_mechs Allow mechanisms that disclose clear text
- # passwords, even over an insecure connection.
- # @option opts [String] :sasl_allowed_mechs the allowed SASL mechanisms for use on the connection.
- # @option opts [String] :container_id AMQP container ID, normally provided by {Container}
+ #
+ # @option opts [String] :user User name for authentication
+ # @option opts [String] :password Authentication secret
+ # @option opts [String] :virtual_host Virtual host name
+ # @option opts [String] :container_id (provided by {Container}) override advertised container-id
+ #
+ # @option opts [Hash<Symbol=>Object>] :properties Application-defined properties
+ # @option opts [Array<Symbol>] :offered_capabilities Extensions the endpoint supports
+ # @option opts [Array<Symbol>] :desired_capabilities Extensions the endpoint can use
+ #
+ # @option opts [Numeric] :idle_timeout Seconds before closing an idle connection
+ # @option opts [Integer] :max_sessions Limit the number of active sessions
+ # @option opts [Integer] :max_frame_size Limit the size of AMQP frames
+ #
+ # @option opts [Boolean] :sasl_enabled (false) Enable or disable SASL.
+ # @option opts [Boolean] :sasl_allow_insecure_mechs (false) Allow mechanisms send secrets in clear text
+ # @option opts [String] :sasl_allowed_mechs SASL mechanisms allowed by this end of the connection
#
def open(opts=nil)
return if local_active?
@@ -129,23 +131,44 @@ module Qpid::Proton
Cproton.pn_connection_set_container(@impl, cid)
Cproton.pn_connection_set_user(@impl, opts[:user]) if opts[:user]
Cproton.pn_connection_set_password(@impl, opts[:password]) if opts[:password]
- @link_prefix = opts[:link_prefix] || container_id
- Codec::Data.from_object(Cproton.pn_connection_offered_capabilities(@impl), opts[:offered_capabilities])
- Codec::Data.from_object(Cproton.pn_connection_desired_capabilities(@impl), opts[:desired_capabilities])
- Codec::Data.from_object(Cproton.pn_connection_properties(@impl), opts[:properties])
+ Cproton.pn_connection_set_hostname(@impl, opts[:virtual_host]) if opts[:virtual_host]
+ @link_prefix = opts[:link_prefix] || cid
+ Codec::Data.from_object(Cproton.pn_connection_offered_capabilities(@impl),
+ Types.symbol_array(opts[:offered_capabilities]))
+ Codec::Data.from_object(Cproton.pn_connection_desired_capabilities(@impl),
+ Types.symbol_array(opts[:desired_capabilities]))
+ Codec::Data.from_object(Cproton.pn_connection_properties(@impl),
+ Types.symbol_keys(opts[:properties]))
end
# Idle-timeout advertised by the remote peer, in seconds.
- # Set by {Connection#open} with the +:idle_timeout+ option.
# @return [Numeric] Idle-timeout advertised by the remote peer, in seconds.
- # @return [nil] if The peer does not advertise an idle time-out
- # @option :idle_timeout (see {#open})
+ # @return [nil] if the peer does not advertise an idle time-out
def idle_timeout()
if transport && (t = transport.remote_idle_timeout)
Rational(t, 1000) # More precise than Float
end
end
+ # Session limit advertised by the remote peer. See {Connection#open :max_sessions}
+ # @return [Integer] maximum number of sessions per connection allowed by remote peer.
+ # @return [nil] no specific limit is set.
+ def max_sessions()
+ raise StateError, "connection not bound to transport" unless transport
+ max = transport.remote_channel_max
+ return max.zero? ? nil : max
+ end
+
+ # Maximum frame size, in bytes, advertised by the remote peer.
+ # See {Connection#open :max_frame_size}
+ # @return [Integer] maximum frame size
+ # @return [nil] no limit
+ def max_frame_size()
+ raise StateError, "connection not bound to transport" unless transport
+ max = transport.remote_max_frame
+ return max.zero? ? nil : max
+ end
+
# Closes the local end of the connection. The remote end may or may not be closed.
# @param error [Condition] Optional error condition to send with the close.
def close(error=nil)
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/055f3dc6/proton-c/bindings/ruby/lib/core/connection_driver.rb
----------------------------------------------------------------------
diff --git a/proton-c/bindings/ruby/lib/core/connection_driver.rb b/proton-c/bindings/ruby/lib/core/connection_driver.rb
index 2ce132e..12dcb68 100644
--- a/proton-c/bindings/ruby/lib/core/connection_driver.rb
+++ b/proton-c/bindings/ruby/lib/core/connection_driver.rb
@@ -181,7 +181,6 @@ module Qpid::Proton
case e.method # Events that affect the driver
when :on_transport_tail_closed then close_read
when :on_transport_head_closed then close_write
- when :on_transport_authenticated then connection.user = transport.user
end
e.dispatch @adapter
end
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/055f3dc6/proton-c/bindings/ruby/lib/core/container.rb
----------------------------------------------------------------------
diff --git a/proton-c/bindings/ruby/lib/core/container.rb b/proton-c/bindings/ruby/lib/core/container.rb
index 5dc9d60..9d9463e 100644
--- a/proton-c/bindings/ruby/lib/core/container.rb
+++ b/proton-c/bindings/ruby/lib/core/container.rb
@@ -125,7 +125,8 @@ module Qpid::Proton
@handler = args[0] unless @id
else raise ArgumentError, "wrong number of arguments (given #{args.size}, expected 0..2"
end
- @adapter = Handler::Adapter.adapt(@handler)
+ # Use an empty messaging adapter to give default behaviour if there's no global handler.
+ @adapter = Handler::Adapter.adapt(@handler) || Handler::MessagingAdapter.new(nil)
@id = (@id || SecureRandom.uuid).freeze
# Implementation note:
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/055f3dc6/proton-c/bindings/ruby/lib/core/message.rb
----------------------------------------------------------------------
diff --git a/proton-c/bindings/ruby/lib/core/message.rb b/proton-c/bindings/ruby/lib/core/message.rb
index 8b13de2..9afaa0a 100644
--- a/proton-c/bindings/ruby/lib/core/message.rb
+++ b/proton-c/bindings/ruby/lib/core/message.rb
@@ -73,8 +73,10 @@ module Qpid::Proton
# @private
def pre_encode
# encode elements from the message
- Codec::Data.from_object(Cproton::pn_message_properties(@impl), !@properties.empty? && @properties)
- Codec::Data.from_object(Cproton::pn_message_instructions(@impl), !@instructions.empty? && @instructions)
+ Codec::Data.from_object(Cproton::pn_message_properties(@impl),
+ !@properties.empty? && Types.symbol_keys!(@properties))
+ Codec::Data.from_object(Cproton::pn_message_instructions(@impl),
+ !@instructions.empty? && Types.symbol_keys!(@instructions))
if @annotations # Make sure keys are symbols
@annotations.keys.each do |k|
@annotations[k.to_sym] = @annotations.delete(k) unless k.is_a? Symbol
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/055f3dc6/proton-c/bindings/ruby/lib/core/transport.rb
----------------------------------------------------------------------
diff --git a/proton-c/bindings/ruby/lib/core/transport.rb b/proton-c/bindings/ruby/lib/core/transport.rb
index 9b36335..eb5fb01 100644
--- a/proton-c/bindings/ruby/lib/core/transport.rb
+++ b/proton-c/bindings/ruby/lib/core/transport.rb
@@ -18,49 +18,7 @@
module Qpid::Proton
- # A transport is used by a connection to interface with the network.
- #
- # A transport is associated with, at most, one Connection.
- #
- # == Client And Server Mode
- #
- # Initially, a transport is configured to be a client tranpsort. It can be
- # configured to act as a server when it is created.
- #
- # A client transport initiates outgoing connections.
- #
- # A client transport must be configured with the protocol layers to use and
- # cannot configure itself automatically.
- #
- # A server transport accepts incoming connections. It can automatically
- # configure itself to include the various protocol layers depending on the
- # incoming protocol headers.
- #
- # == Tracing Data
- #
- # Data can be traced into and out of the transport programmatically by setting
- # the #trace level to one of the defined trace values (TRACE_RAW, TRACE_FRM or
- # TRACE_DRV). Tracing can also be turned off programmatically by setting the
- # #trace level to TRACE_OFF.
- #
- # @example
- #
- # # turns on frame tracing
- # @transport.trace = Qpid::Proton::Transport::TRACE_FRM
- #
- # # ... do something where the frames are of interest, such as debugging
- #
- # # turn tracing off again
- # @transport.trace = Qpid::Proton::Transport::TRACE_NONE
- #
- # Tracing can also be enabled from the command line by defining the similarly
- # named environment variable before starting a Proton application:
- #
- # @example
- #
- # # enable tracing from the command line
- # PN_TRACE_FRM=1 ruby my_proton_app.rb
- #
+ # @deprecated all important features are available from {#Connection}
class Transport
include Util::Deprecation
@@ -78,6 +36,7 @@ module Qpid::Proton
# Log driver related events; i.e., initialization, end of stream, etc.
TRACE_DRV = Cproton::PN_TRACE_DRV
+ proton_get :user
# @!attribute channel_max
#
@@ -94,8 +53,8 @@ module Qpid::Proton
# @!attribute max_frame_size
#
# @return [Integer] The maximum frame size.
- #
- proton_set_get :max_frame_size
+ proton_set_get :max_frame
+ proton_get :remote_max_frame
# @!attribute [r] remote_max_frame_size
#
@@ -394,14 +353,15 @@ module Qpid::Proton
end
# @private
+ # Options are documented {Connection#open}, keep that consistent with this
def apply opts
sasl if opts[:sasl_enabled] # Explicitly enabled
unless opts.include?(:sasl_enabled) && !opts[:sasl_enabled] # Not explicitly disabled
sasl.allowed_mechs = opts[:sasl_allowed_mechs] if opts.include? :sasl_allowed_mechs
sasl.allow_insecure_mechs = opts[:sasl_allow_insecure_mechs] if opts.include? :sasl_allow_insecure_mechs
end
- self.channel_max= opts[:channel_max] if opts.include? :channel_max
- self.max_frame_size= opts[:max_frame_size] if opts.include? :max_frame_size
+ self.channel_max= opts[:max_sessions] if opts.include? :max_sessions
+ self.max_frame = opts[:max_frame_size] if opts.include? :max_frame_size
# NOTE: The idle_timeout option is in Numeric *seconds*, can be Integer, Float or Rational.
# This is consistent with idiomatic ruby.
# The transport #idle_timeout property is in *milliseconds* passed direct to C.
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/055f3dc6/proton-c/bindings/ruby/lib/reactor/container.rb
----------------------------------------------------------------------
diff --git a/proton-c/bindings/ruby/lib/reactor/container.rb b/proton-c/bindings/ruby/lib/reactor/container.rb
index 22cb0e8..98c35e2 100644
--- a/proton-c/bindings/ruby/lib/reactor/container.rb
+++ b/proton-c/bindings/ruby/lib/reactor/container.rb
@@ -31,7 +31,7 @@ module Qpid::Proton
# @deprecated use {Qpid::Proton::Container}
def initialize(handlers, opts=nil)
deprecated Qpid::Proton::Reactor::Container, Qpid::Proton::Container
- h = handlers || (opts && opts[:global_handler])
+ h = handlers || (opts && opts[:global_handler]) || Handler::ReactorMessagingAdapter.new(nil)
id = opts && opts[:container_id]
super(h, id)
end
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/055f3dc6/proton-c/bindings/ruby/lib/types/array.rb
----------------------------------------------------------------------
diff --git a/proton-c/bindings/ruby/lib/types/array.rb b/proton-c/bindings/ruby/lib/types/array.rb
index 7a20adb..d7e15e6 100644
--- a/proton-c/bindings/ruby/lib/types/array.rb
+++ b/proton-c/bindings/ruby/lib/types/array.rb
@@ -51,7 +51,11 @@ module Qpid::Proton
@type, @descriptor = type, descriptor
raise ArgumentError, "no type specified for array" if @type.nil?
super elements if elements
- @proton_array_header = ArrayHeader.new(@type, @descriptor) # Deprecated
+ end
+
+ # @deprecated backwards compatibility {UniformArray}
+ def proton_array_header
+ @proton_array_header ||= ArrayHeader.new(@type, @descriptor) # Deprecated
end
# @return [Type] Array elements must be convertible to this AMQP type
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/055f3dc6/proton-c/bindings/ruby/lib/types/hash.rb
----------------------------------------------------------------------
diff --git a/proton-c/bindings/ruby/lib/types/hash.rb b/proton-c/bindings/ruby/lib/types/hash.rb
index 2d78f74..2702ab2 100644
--- a/proton-c/bindings/ruby/lib/types/hash.rb
+++ b/proton-c/bindings/ruby/lib/types/hash.rb
@@ -23,7 +23,6 @@
# @private
class Hash # :nodoc:
-
# @deprecated
def proton_data_put(data)
@@ -37,3 +36,15 @@ class Hash # :nodoc:
data.map
end
end
+
+module Qpid::Proton::Types
+ # @private
+ def self.symbol_keys(h)
+ h && h.reduce({}) { |x, (k, v)| x[k.to_sym] = v; x }
+ end
+
+ # @private
+ def self.symbol_array(a)
+ a && UniformArray.new(SYMBOL, a.collect { |v| v.to_sym })
+ end
+end
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/055f3dc6/proton-c/bindings/ruby/lib/util/deprecation.rb
----------------------------------------------------------------------
diff --git a/proton-c/bindings/ruby/lib/util/deprecation.rb b/proton-c/bindings/ruby/lib/util/deprecation.rb
index d9d0563..4980a9e 100644
--- a/proton-c/bindings/ruby/lib/util/deprecation.rb
+++ b/proton-c/bindings/ruby/lib/util/deprecation.rb
@@ -20,10 +20,13 @@ module Qpid::Proton::Util
module Deprecation
MATCH_DIR = /#{File.dirname(File.dirname(__FILE__))}/
+ DEPRECATE_FULL_TRACE = false
+
def self.deprecated(old, new=nil)
replace = new ? "use `#{new}`" : "internal use only"
- line = caller.find { |l| not MATCH_DIR.match(l) }
- warn "[DEPRECATION] `#{old}` is deprecated, #{replace}. Called from #{line}"
+
+ from = DEPRECATE_FULL_TRACE ? caller(2).join("\n") : caller.find { |l| not MATCH_DIR.match(l) }
+ warn "[DEPRECATION] `#{old}` is deprecated, #{replace}. Called from #{from}"
end
def deprecated(*arg) Deprecation.deprecated(*arg); end
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/055f3dc6/proton-c/bindings/ruby/tests/old_examples/server.rb
----------------------------------------------------------------------
diff --git a/proton-c/bindings/ruby/tests/old_examples/server.rb b/proton-c/bindings/ruby/tests/old_examples/server.rb
index 265a63d..1908c24 100644
--- a/proton-c/bindings/ruby/tests/old_examples/server.rb
+++ b/proton-c/bindings/ruby/tests/old_examples/server.rb
@@ -36,8 +36,8 @@ class Server < Qpid::Proton::Handler::MessagingHandler
end
def on_connection_opened(event)
- if event.connection.remote_offered_capabilities &&
- event.connection.remote_offered_capabilities.contain?("ANONYMOUS-RELAY")
+ if event.connection.offered_capabilities &&
+ event.connection.offered_capabilities.contain?("ANONYMOUS-RELAY")
@relay = @container.create_sender(@conn, nil)
end
end
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/055f3dc6/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 d8bd52c..82c34e2 100644
--- a/proton-c/bindings/ruby/tests/test_container.rb
+++ b/proton-c/bindings/ruby/tests/test_container.rb
@@ -75,7 +75,7 @@ class ContainerTest < Minitest::Test
end
class CloseOnOpenHandler < TestHandler
- def on_connection_open(c) c.close; end
+ def on_connection_open(c) super; c.close; end
end
def test_auto_stop_one
@@ -159,6 +159,61 @@ class ContainerTest < Minitest::Test
assert_match(/badconnect.example.com:999/, c.transport.condition.description)
end
+ # Verify that connection options are sent to the peer and available as Connection methods
+ def test_connection_options
+ # Note: user, password and sasl_xxx options are tested by ContainerSASLTest below
+ server_handler = Class.new(MessagingHandler) do
+ def on_error(e) raise e.inspect; end
+ def on_connection_open(c) @connection = c
+ c.open({
+ :virtual_host => "server.to.client",
+ :properties => { :server => :client },
+ :offered_capabilities => [ :s1 ],
+ :desired_capabilities => [ :s2 ],
+ :container_id => "box",
+ })
+ c.close
+ end
+ attr_reader :connection
+ end.new
+ # Transport options must be provided to the listener, by Connection#open it is too late
+ cont = TestContainer.new(nil, {
+ :handler => server_handler,
+ :idle_timeout => 88,
+ :max_sessions =>1000,
+ :max_frame_size => 8888,
+ })
+ client = cont.connect(cont.url,
+ {:virtual_host => "client.to.server",
+ :properties => { :foo => :bar, "str" => "str" },
+ :offered_capabilities => [:c1 ],
+ :desired_capabilities => ["c2" ],
+ :idle_timeout => 42,
+ :max_sessions =>100,
+ :max_frame_size => 4096,
+ :container_id => "bowl"
+ })
+ cont.run
+ c = server_handler.connection
+ assert_equal "client.to.server", c.virtual_host
+ assert_equal({ :foo => :bar, :str => "str" }, c.properties)
+ assert_equal([:c1], c.offered_capabilities)
+ assert_equal([:c2], c.desired_capabilities)
+ assert_equal 21, c.idle_timeout # Proton divides by 2
+ assert_equal 100, c.max_sessions
+ assert_equal 4096, c.max_frame_size
+ assert_equal "bowl", c.container_id
+
+ c = client
+ assert_equal "server.to.client", c.virtual_host
+ assert_equal({ :server => :client }, c.properties)
+ assert_equal([:s1], c.offered_capabilities)
+ assert_equal([:s2], c.desired_capabilities)
+ assert_equal "box", c.container_id
+ assert_equal 8888, c.max_frame_size
+ assert_equal 44, c.idle_timeout # Proton divides by 2
+ assert_equal 100, c.max_sessions
+ end
end
@@ -184,7 +239,7 @@ class ContainerSASLTest < Minitest::Test
if connection == @client
connection.close
else
- @auth_user = connection.transport.sasl.user
+ @auth_user = connection.user
end
end
end
@@ -231,7 +286,7 @@ mech_list: EXTERNAL DIGEST-MD5 SCRAM-SHA-1 CRAM-MD5 PLAIN ANONYMOUS
def test_sasl_anonymous()
s = SASLHandler.new("amqp://", {:sasl_allowed_mechs => "ANONYMOUS"})
TestContainer.new(s, {:sasl_allowed_mechs => "ANONYMOUS"}, __method__).run
- assert_nil(s.connections[0].user)
+ assert_equal "anonymous", s.connections[0].user
end
def test_sasl_plain_url()
@@ -239,7 +294,7 @@ mech_list: EXTERNAL DIGEST-MD5 SCRAM-SHA-1 CRAM-MD5 PLAIN ANONYMOUS
# Use default realm with URL, should authenticate with "default_password"
opts = {:sasl_allowed_mechs => "PLAIN", :sasl_allow_insecure_mechs => true}
s = SASLHandler.new("amqp://user:default_password@", opts)
- TestContainer.new(s, opts).run
+ TestContainer.new(s, opts, __method__).run
assert_equal(2, s.connections.size)
assert_equal("user", s.auth_user)
end
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org