http://git-wip-us.apache.org/repos/asf/qpid-proton-j/blob/2f85988e/proton-c/bindings/ruby/lib/util/error_handler.rb ---------------------------------------------------------------------- diff --git a/proton-c/bindings/ruby/lib/util/error_handler.rb b/proton-c/bindings/ruby/lib/util/error_handler.rb deleted file mode 100644 index da51214..0000000 --- a/proton-c/bindings/ruby/lib/util/error_handler.rb +++ /dev/null @@ -1,127 +0,0 @@ -#-- -# 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::Proton::Util - - # Provides mixin functionality for dealing with exception conditions. - # - # @private - module ErrorHandler - - def self.included(base) - base.extend(self) - - unless defined? base.to_be_wrapped - class << base - @@to_be_wrapped = [] - end - end - - define_method :method_added do |name| - if (!@@to_be_wrapped.nil?) && (@@to_be_wrapped.include? name) - @@to_be_wrapped.delete name - create_exception_handler_wrapper(name) - end - end - end - - def can_raise_error(method_names, options = {}) - error_class = options[:error_class] - below = options[:below] || 0 - # coerce the names to be an array - Array(method_names).each do |method_name| - # if the method doesn't already exist then queue this aliasing - unless self.method_defined? method_name - @@to_be_wrapped ||= [] - @@to_be_wrapped << method_name - else - create_exception_handler_wrapper(method_name, error_class, below) - end - end - end - - def create_exception_handler_wrapper(method_name, error_class = nil, below = 0) - original_method_name = method_name.to_s - wrapped_method_name = "_excwrap_#{original_method_name}" - alias_method wrapped_method_name, original_method_name - define_method original_method_name do |*args, &block| - # need to get a reference to the method object itself since - # calls to Class.send interfere with Messenger.send - method = self.method(wrapped_method_name.to_sym) - rc = method.call(*args, &block) - check_for_error(rc, error_class) if rc < below - return rc - end - end - - # Raises an Proton-specific error if a return code is non-zero. - # - # Expects the class to provide an +error+ method. - def check_for_error(code, error_class = nil) - - raise ::ArgumentError.new("Invalid error code: #{code}") if code.nil? - - return code if code > 0 - - case(code) - - when Qpid::Proton::Error::NONE - return - - when Qpid::Proton::Error::EOS - raise Qpid::Proton::EOSError.new(self.error) - - when Qpid::Proton::Error::ERROR - raise Qpid::Proton::ProtonError.new(self.error) - - when Qpid::Proton::Error::OVERFLOW - raise Qpid::Proton::OverflowError.new(self.error) - - when Qpid::Proton::Error::UNDERFLOW - raise Qpid::Proton::UnderflowError.new(self.error) - - when Qpid::Proton::Error::ARGUMENT - raise Qpid::Proton::ArgumentError.new(self.error) - - when Qpid::Proton::Error::STATE - raise Qpid::Proton::StateError.new(self.error) - - when Qpid::Proton::Error::TIMEOUT - raise Qpid::Proton::TimeoutError.new(self.error) - - when Qpid::Proton::Error::INPROGRESS - return - - when Qpid::Proton::Error::INTERRUPTED - raise Qpid::Proton::InterruptedError.new(self.error) - - when Qpid::Proton::Error::INPROGRESS - raise Qpid::Proton::InProgressError.new(self.error) - - else - - raise ::ArgumentError.new("Unknown error code: #{code}") - - end - - end - - end - -end
http://git-wip-us.apache.org/repos/asf/qpid-proton-j/blob/2f85988e/proton-c/bindings/ruby/lib/util/handler.rb ---------------------------------------------------------------------- diff --git a/proton-c/bindings/ruby/lib/util/handler.rb b/proton-c/bindings/ruby/lib/util/handler.rb deleted file mode 100644 index e7d07b1..0000000 --- a/proton-c/bindings/ruby/lib/util/handler.rb +++ /dev/null @@ -1,41 +0,0 @@ -#-- -# 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::Proton::Util - - # @private - module Handler - - def chandler(handler, on_error) - return nil if handler.nil? - - if handler.instance_of?(Qpid::Proton::Handler::WrappedHandler) - impl = handler.impl - Cproton.pn_incref(impl) - return impl - else - cadaptor = Qpid::Proton::Handler::CAdaptor.new(handler, on_error) - rbhandler = Cproton.pn_rbhandler(cadaptor) - return rbhandler - end - end - - end - -end http://git-wip-us.apache.org/repos/asf/qpid-proton-j/blob/2f85988e/proton-c/bindings/ruby/lib/util/reactor.rb ---------------------------------------------------------------------- diff --git a/proton-c/bindings/ruby/lib/util/reactor.rb b/proton-c/bindings/ruby/lib/util/reactor.rb deleted file mode 100644 index 0bcb557..0000000 --- a/proton-c/bindings/ruby/lib/util/reactor.rb +++ /dev/null @@ -1,32 +0,0 @@ -#-- -# 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::Proton::Util - - module Reactor - - def create_session(connection, handler = nil) - session = connection.session - session.open - return session - end - - end - -end http://git-wip-us.apache.org/repos/asf/qpid-proton-j/blob/2f85988e/proton-c/bindings/ruby/lib/util/swig_helper.rb ---------------------------------------------------------------------- diff --git a/proton-c/bindings/ruby/lib/util/swig_helper.rb b/proton-c/bindings/ruby/lib/util/swig_helper.rb deleted file mode 100644 index d60e9e4..0000000 --- a/proton-c/bindings/ruby/lib/util/swig_helper.rb +++ /dev/null @@ -1,114 +0,0 @@ -#-- -# 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::Proton::Util - - # Provides helper functions for writing wrapper functions for the - # underlying C APIs. - # - # Before defining any mutators the class must define the name of the - # prefix for methods with the constant PROTON_METOD_PREFIX. - # - # == Mutators, Setters And Getters - # - # There are three types of wrappers that are supported: - # - # [proton_writer] Defines a set-only method for the named attribute. - # [proton_reader] Defines a get-only method for the named attribute. - # [proton_accessor] Defines both a set- and a get-method for the named - # attribute. - # [proton_caller] A simple wrapper for calling an underlying method, - # avoids repetitive boiler plate coding. - # - # == Arguments - # - # [:is_or_get => {:is, :get}] For both the getter and the mutator types - # you can also declare that the method uses "is" instead of "get" in the - # underlying API. Such methods are then defined with "?" - # - # @example - # class Terminus - # - # include WrapperHelper - # - # PROTON_METHOD_PREFIX = "pn_terminus" - # - # # add methods "type" and "type=" that call "pn_terminus_{get,set}_type" - # proton_accessor :type - # - # # adds the method "dynamic?" that calls "pn_terminus_is_dynamic" - # proton_accessor :dynamic, :is_or_get => :is - # - # # adds a method named "foo" that calls "pn_terminus_foo" - # proton_caller :foo - # - # end - # - # @private - module SwigHelper - - def self.included(base) - base.extend ClassMethods - end - - module ClassMethods # :nodoc: - - def create_wrapper_method(name, proton_method, with_arg = false) - if with_arg - define_method "#{name}" do |arg| - Cproton.__send__(proton_method.to_sym, @impl, arg) - end - else - define_method "#{name}" do - Cproton.__send__(proton_method.to_sym, @impl) - end - end - end - - # Defines a method that calls an underlying C library function. - def proton_caller(name, options = {}) - proton_method = "#{self::PROTON_METHOD_PREFIX}_#{name}" - # drop the trailing '?' if this is a property method - proton_method = proton_method[0..-2] if proton_method.end_with? "?" - create_wrapper_method(name, proton_method) - end - - def proton_writer(name, options = {}) - proton_method = "#{self::PROTON_METHOD_PREFIX}_set_#{name}" - create_wrapper_method("#{name}=", proton_method, true) - end - - def proton_reader(name, options = {}) - an_is_method = options[:is_or_get] == :is - prefix = (an_is_method) ? "is" : "get" - proton_method = "#{self::PROTON_METHOD_PREFIX}_#{prefix}_#{name}" - name = "#{name}?" if an_is_method - create_wrapper_method(name, proton_method) - end - - def proton_accessor(name, options = {}) - proton_writer(name, options) - proton_reader(name, options) - end - - end - - end - -end http://git-wip-us.apache.org/repos/asf/qpid-proton-j/blob/2f85988e/proton-c/bindings/ruby/lib/util/timeout.rb ---------------------------------------------------------------------- diff --git a/proton-c/bindings/ruby/lib/util/timeout.rb b/proton-c/bindings/ruby/lib/util/timeout.rb deleted file mode 100644 index f4647f5..0000000 --- a/proton-c/bindings/ruby/lib/util/timeout.rb +++ /dev/null @@ -1,50 +0,0 @@ -#-- -# 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::Proton::Util - - # Provides methods for converting between milliseconds, seconds - # and timeout values. - # - # @private - module Timeout - - def sec_to_millis(s) - return (s * 1000).to_int - end - - def millis_to_sec(ms) - return (ms.to_f / 1000.0).to_int - end - - def timeout_to_millis(s) - return Cproton::PN_MILLIS_MAX if s.nil? - - return sec_to_millis(s) - end - - def millis_to_timeout(ms) - return nil if ms == Cproton::PN_MILLIS_MAX - - return millis_to_sec(ms) - end - - end - -end http://git-wip-us.apache.org/repos/asf/qpid-proton-j/blob/2f85988e/proton-c/bindings/ruby/lib/util/uuid.rb ---------------------------------------------------------------------- diff --git a/proton-c/bindings/ruby/lib/util/uuid.rb b/proton-c/bindings/ruby/lib/util/uuid.rb deleted file mode 100644 index 882715b..0000000 --- a/proton-c/bindings/ruby/lib/util/uuid.rb +++ /dev/null @@ -1,32 +0,0 @@ -#-- -# 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::Proton::Util - - module UUID - - def generate_uuid - # generate a UUID based on what APIs are available with the current - # version of Ruby - SecureRandom.uuid - end - - end - -end http://git-wip-us.apache.org/repos/asf/qpid-proton-j/blob/2f85988e/proton-c/bindings/ruby/lib/util/version.rb ---------------------------------------------------------------------- diff --git a/proton-c/bindings/ruby/lib/util/version.rb b/proton-c/bindings/ruby/lib/util/version.rb deleted file mode 100644 index f9962ba..0000000 --- a/proton-c/bindings/ruby/lib/util/version.rb +++ /dev/null @@ -1,30 +0,0 @@ -#-- -# 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::Proton::Util - - # The major version for the underlying Proton library. - # @private - VERSION_MAJOR = Cproton::PN_VERSION_MAJOR - - # The minor version for the underlying Proton library. - # @private - VERSION_MINOR = Cproton::PN_VERSION_MINOR - -end http://git-wip-us.apache.org/repos/asf/qpid-proton-j/blob/2f85988e/proton-c/bindings/ruby/lib/util/wrapper.rb ---------------------------------------------------------------------- diff --git a/proton-c/bindings/ruby/lib/util/wrapper.rb b/proton-c/bindings/ruby/lib/util/wrapper.rb deleted file mode 100644 index 8db1c4e..0000000 --- a/proton-c/bindings/ruby/lib/util/wrapper.rb +++ /dev/null @@ -1,124 +0,0 @@ -#-- -# 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::Proton::Util - - # @private - module Wrapper - - # @private - def impl=(impl) - @impl = impl - end - - # @private - def impl - @impl - end - - def self.registry - @registry ||= {} - end - - def self.included(base) - base.extend(ClassMethods) - end - - # Adds methods to the target class for storing and retrieving pure Ruby - # wrappers to underlying Proton structures. - # - # Such wrappers are stored in a registry using a key. The key is then - # attached to the Proton structure as a record. That record lives for as - # long as the Proton structure lives, and when the structure is released - # the record acts as hook to also delete the Ruby wrapper object from the - # registry. - # - # @private - # - module ClassMethods - - # @private - def get_key(impl) - ("%032x" % Cproton.pni_address_of(impl)) - end - - # Stores the given object for later retrieval. - # - # @param object [Object] The object. - # @param attachment_method [Symbol] The Proton attachment method. - # - def store_instance(object, attachment_method = nil) - # ensure the impl has a reference to the wrapper object - object.impl.instance_eval { @proton_wrapper = object } - registry_key = get_key(object.impl) - unless attachment_method.nil? - record = Cproton.__send__(attachment_method, object.impl) - rbkey = Cproton.Pn_rbkey_new - Cproton.Pn_rbkey_set_registry(rbkey, Cproton.pn_rb2void(Qpid::Proton::Util::Wrapper.registry)) - Cproton.Pn_rbkey_set_method(rbkey, "delete") - Cproton.Pn_rbkey_set_key_value(rbkey, registry_key) - Cproton.pn_record_def(record, RBCTX, Cproton.Pn_rbkey__class()); - Cproton.pn_record_set(record, RBCTX, rbkey) - end - Qpid::Proton::Util::Wrapper.registry[registry_key] = object - end - - # Retrieves the wrapper object with the supplied Proton struct. - # - # @param impl [Object] The wrapper for the Proton struct. - # @param attachment_method [Symbol] The Proton attachment method. - # - # @return [Object] The Ruby wrapper object. - # - def fetch_instance(impl, attachment_method = nil) - # if the impl has a wrapper already attached, then return it - if impl.instance_variable_defined?(:@proton_wrapper) - return impl.instance_variable_get(:@proton_wrapper) - end - unless attachment_method.nil? - record = Cproton.__send__(attachment_method, impl) - rbkey = Cproton.pni_void2rbkey(Cproton.pn_record_get(record, RBCTX)) - # if we don't have a key, then we don't have an object - return nil if rbkey.nil? - registry_key = Cproton.Pn_rbkey_get_key_value(rbkey) - else - registry_key = get_key(impl) - end - # if the object's not in the registry then return - return nil unless Qpid::Proton::Util::Wrapper.registry.has_key?(registry_key) - - result = Qpid::Proton::Util::Wrapper.registry[registry_key] - # result = nil unless result.weakref_alive? - if result.nil? - raise Qpid::Proton::ProtonError.new("missing object for key=#{registry_key}") - else - # update the impl since the Swig wrapper for it may have changed - result.impl = impl - end - return result - end - - end - - end - - # @private - RBCTX = Wrapper.hash.to_i - -end http://git-wip-us.apache.org/repos/asf/qpid-proton-j/blob/2f85988e/proton-c/bindings/ruby/qpid_proton.gemspec ---------------------------------------------------------------------- diff --git a/proton-c/bindings/ruby/qpid_proton.gemspec b/proton-c/bindings/ruby/qpid_proton.gemspec deleted file mode 100644 index 1acaff1..0000000 --- a/proton-c/bindings/ruby/qpid_proton.gemspec +++ /dev/null @@ -1,36 +0,0 @@ -# -*- encoding: utf-8 -*- -lib = File.expand_path('lib/', __FILE__) -$:.unshift lib unless $:.include?(lib) - -# Generate the Swig wrapper -system "swig -ruby -I/usr/include -o ext/cproton/cproton.c ruby.i" - -Gem::Specification.new do |s| - s.name = "qpid_proton" - s.version = "0.3" - s.licenses = ['Apache-2.0'] - s.platform = Gem::Platform::RUBY - s.authors = ["Darryl L. Pierce"] - s.email = ["pro...@qpid.apache.org"] - s.homepage = "http://qpid.apache.org/proton" - s.summary = "Ruby language bindings for the Qpid Proton messaging framework" - s.description = <<-EOF -Proton is a high performance, lightweight messaging library. It can be used in -the widest range of messaging applications including brokers, client libraries, -routers, bridges, proxies, and more. Proton is based on the AMQP 1.0 messaging -standard. -EOF - - s.extensions = "ext/cproton/extconf.rb" - s.files = Dir[ - "LICENSE", - "TODO", - "ChangeLog", - "ext/cproton/*.rb", - "ext/cproton/*.c", - "lib/**/*.rb", - ] - s.require_path = 'lib' - s.add_runtime_dependency "json" -end - http://git-wip-us.apache.org/repos/asf/qpid-proton-j/blob/2f85988e/proton-c/bindings/ruby/ruby.i ---------------------------------------------------------------------- diff --git a/proton-c/bindings/ruby/ruby.i b/proton-c/bindings/ruby/ruby.i deleted file mode 100644 index d5979f3..0000000 --- a/proton-c/bindings/ruby/ruby.i +++ /dev/null @@ -1,640 +0,0 @@ -/* - * 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 cproton - -%{ -#include <proton/engine.h> -#include <proton/message.h> -#include <proton/sasl.h> -#include <proton/messenger.h> -#include <proton/ssl.h> -#include <proton/types.h> -#include <proton/url.h> -#include <proton/reactor.h> -#include <proton/handlers.h> -%} - -/* -NOTE: According to ccache-swig man page: "Known problems are using -preprocessor directives within %inline blocks and the use of â#pragma SWIGâ." -This includes using macros in an %inline section. - -Keep preprocessor directives and macro expansions in the normal header section. -*/ - -%include <cstring.i> - -%cstring_output_withsize(char *OUTPUT, size_t *OUTPUT_SIZE) -%cstring_output_allocate_size(char **ALLOC_OUTPUT, size_t *ALLOC_SIZE, free(*$1)); -%cstring_output_maxsize(char *OUTPUT, size_t MAX_OUTPUT_SIZE) - -%{ -#if !defined(RSTRING_LEN) -# define RSTRING_LEN(x) (RSTRING(X)->len) -# define RSTRING_PTR(x) (RSTRING(x)->ptr) -#endif -%} - -%typemap(in) pn_bytes_t { - if ($input == Qnil) { - $1.start = NULL; - $1.size = 0; - } else { - $1.start = RSTRING_PTR($input); - if (!$1.start) { - $1.size = 0; - } - $1.size = RSTRING_LEN($input); - } -} - -%typemap(out) pn_bytes_t { - $result = rb_str_new($1.start, $1.size); -} - -%typemap(in) pn_atom_t -{ - if ($input == Qnil) - { - $1.type = PN_NULL; - } - else - { - switch(TYPE($input)) - { - case T_TRUE: - $1.type = PN_BOOL; - $1.u.as_bool = true; - break; - - case T_FALSE: - $1.type = PN_BOOL; - $1.u.as_bool = false; - break; - - case T_FLOAT: - $1.type = PN_FLOAT; - $1.u.as_float = NUM2DBL($input); - break; - - case T_STRING: - $1.type = PN_STRING; - $1.u.as_bytes.start = RSTRING_PTR($input); - if ($1.u.as_bytes.start) - { - $1.u.as_bytes.size = RSTRING_LEN($input); - } - else - { - $1.u.as_bytes.size = 0; - } - break; - - case T_FIXNUM: - $1.type = PN_INT; - $1.u.as_int = FIX2LONG($input); - break; - - case T_BIGNUM: - $1.type = PN_LONG; - $1.u.as_long = NUM2LL($input); - break; - - } - } -} - -%typemap(out) pn_atom_t -{ - switch($1.type) - { - case PN_NULL: - $result = Qnil; - break; - - case PN_BOOL: - $result = $1.u.as_bool ? Qtrue : Qfalse; - break; - - case PN_BYTE: - $result = INT2NUM($1.u.as_byte); - break; - - case PN_UBYTE: - $result = UINT2NUM($1.u.as_ubyte); - break; - - case PN_SHORT: - $result = INT2NUM($1.u.as_short); - break; - - case PN_USHORT: - $result = UINT2NUM($1.u.as_ushort); - break; - - case PN_INT: - $result = INT2NUM($1.u.as_int); - break; - - case PN_UINT: - $result = UINT2NUM($1.u.as_uint); - break; - - case PN_LONG: - $result = LL2NUM($1.u.as_long); - break; - - case PN_ULONG: - $result = ULL2NUM($1.u.as_ulong); - break; - - case PN_FLOAT: - $result = rb_float_new($1.u.as_float); - break; - - case PN_DOUBLE: - $result = rb_float_new($1.u.as_double); - break; - - case PN_STRING: - $result = rb_str_new($1.u.as_bytes.start, $1.u.as_bytes.size); - break; - - default: - break; - } -} - -%typemap (in) pn_decimal32_t -{ - $1 = FIX2UINT($input); -} - -%typemap (out) pn_decimal32_t -{ - $result = ULL2NUM($1); -} - -%typemap (in) pn_decimal64_t -{ - $1 = NUM2ULL($input); -} - -%typemap (out) pn_decimal64_t -{ - $result = ULL2NUM($1); -} - -%typemap (in) pn_decimal128_t -{ - int index; - - for(index = 0; index < 16; index++) - { - VALUE element = rb_ary_entry($input, index); - $1.bytes[16 - (index + 1)] = FIX2INT(element); - } -} - -%typemap (out) pn_decimal128_t -{ - int index; - - $result = rb_ary_new2(16); - for(index = 0; index < 16; index++) - { - rb_ary_store($result, 16 - (index + 1), CHR2FIX($1.bytes[index])); - } -} - -%typemap (in) pn_uuid_t -{ - int index; - - for(index = 0; index < 16; index++) - { - VALUE element = rb_ary_entry($input, index); - $1.bytes[16 - (index + 1)] = FIX2INT(element); - } -} - -%typemap (out) pn_uuid_t -{ - int index; - - $result = rb_ary_new2(16); - for(index = 0; index < 16; index++) - { - rb_ary_store($result, 16 - (index + 1), CHR2FIX($1.bytes[index])); - } -} - -int pn_message_encode(pn_message_t *msg, char *OUTPUT, size_t *OUTPUT_SIZE); -%ignore pn_message_encode; - -ssize_t pn_link_send(pn_link_t *transport, char *STRING, size_t LENGTH); -%ignore pn_link_send; - -%rename(pn_link_recv) wrap_pn_link_recv; -%inline %{ - int wrap_pn_link_recv(pn_link_t *link, char *OUTPUT, size_t *OUTPUT_SIZE) { - ssize_t sz = pn_link_recv(link, OUTPUT, *OUTPUT_SIZE); - if (sz >= 0) { - *OUTPUT_SIZE = sz; - } else { - *OUTPUT_SIZE = 0; - } - return sz; - } -%} -%ignore pn_link_recv; - -ssize_t pn_transport_input(pn_transport_t *transport, char *STRING, size_t LENGTH); -%ignore pn_transport_input; - -%rename(pn_transport_output) wrap_pn_transport_output; -%inline %{ - int wrap_pn_transport_output(pn_transport_t *transport, char *OUTPUT, size_t *OUTPUT_SIZE) { - ssize_t sz = pn_transport_output(transport, OUTPUT, *OUTPUT_SIZE); - if (sz >= 0) { - *OUTPUT_SIZE = sz; - } else { - *OUTPUT_SIZE = 0; - } - return sz; - } -%} -%ignore pn_transport_output; - -%rename(pn_transport_peek) wrap_pn_transport_peek; -%inline %{ - int wrap_pn_transport_peek(pn_transport_t *transport, char *OUTPUT, size_t *OUTPUT_SIZE) { - ssize_t sz = pn_transport_peek(transport, OUTPUT, *OUTPUT_SIZE); - if(sz >= 0) { - *OUTPUT_SIZE = sz; - } else { - *OUTPUT_SIZE = 0; - } - return sz; - } -%} -%ignore pn_transport_peek; - -%rename(pn_delivery) wrap_pn_delivery; -%inline %{ - pn_delivery_t *wrap_pn_delivery(pn_link_t *link, char *STRING, size_t LENGTH) { - return pn_delivery(link, pn_dtag(STRING, LENGTH)); - } -%} -%ignore pn_delivery; - -// Suppress "Warning(451): Setting a const char * variable may leak memory." on pn_delivery_tag_t -%warnfilter(451) pn_delivery_tag_t; -%rename(pn_delivery_tag) wrap_pn_delivery_tag; -%inline %{ - void wrap_pn_delivery_tag(pn_delivery_t *delivery, char **ALLOC_OUTPUT, size_t *ALLOC_SIZE) { - pn_delivery_tag_t tag = pn_delivery_tag(delivery); - *ALLOC_OUTPUT = malloc(tag.size); - *ALLOC_SIZE = tag.size; - memcpy(*ALLOC_OUTPUT, tag.start, tag.size); - } -%} -%ignore pn_delivery_tag; - -bool pn_ssl_get_cipher_name(pn_ssl_t *ssl, char *OUTPUT, size_t MAX_OUTPUT_SIZE); -%ignore pn_ssl_get_cipher_name; - -bool pn_ssl_get_protocol_name(pn_ssl_t *ssl, char *OUTPUT, size_t MAX_OUTPUT_SIZE); -%ignore pn_ssl_get_protocol_name; - -%inline %{ -#if defined(RUBY20) || defined(RUBY21) - - typedef void *non_blocking_return_t; -#define RB_BLOCKING_CALL rb_thread_call_without_gvl - -#elif defined(RUBY19) - - typedef VALUE non_blocking_return_t; -#define RB_BLOCKING_CALL rb_thread_blocking_region - -#endif - %} - -%rename(pn_messenger_send) wrap_pn_messenger_send; -%rename(pn_messenger_recv) wrap_pn_messenger_recv; -%rename(pn_messenger_work) wrap_pn_messenger_work; - -%inline %{ - -#if defined(RB_BLOCKING_CALL) - - static non_blocking_return_t pn_messenger_send_no_gvl(void *args) { - VALUE result = Qnil; - pn_messenger_t *messenger = (pn_messenger_t *)((void **)args)[0]; - int *limit = (int *)((void **)args)[1]; - - int rc = pn_messenger_send(messenger, *limit); - - result = INT2NUM(rc); - return (non_blocking_return_t )result; - } - - static non_blocking_return_t pn_messenger_recv_no_gvl(void *args) { - VALUE result = Qnil; - pn_messenger_t *messenger = (pn_messenger_t *)((void **)args)[0]; - int *limit = (int *)((void **)args)[1]; - - int rc = pn_messenger_recv(messenger, *limit); - - result = INT2NUM(rc); - return (non_blocking_return_t )result; - } - - static non_blocking_return_t pn_messenger_work_no_gvl(void *args) { - VALUE result = Qnil; - pn_messenger_t *messenger = (pn_messenger_t *)((void **)args)[0]; - int *timeout = (int *)((void **)args)[1]; - - int rc = pn_messenger_work(messenger, *timeout); - - result = INT2NUM(rc); - return (non_blocking_return_t )result; - } - -#endif - - int wrap_pn_messenger_send(pn_messenger_t *messenger, int limit) { - int result = 0; - -#if defined(RB_BLOCKING_CALL) - - // only release the gil if we're blocking - if(pn_messenger_is_blocking(messenger)) { - VALUE rc; - void* args[2]; - - args[0] = messenger; - args[1] = &limit; - - rc = RB_BLOCKING_CALL(pn_messenger_send_no_gvl, - &args, RUBY_UBF_PROCESS, NULL); - - if(RTEST(rc)) - { - result = FIX2INT(rc); - } - } - -#else // !defined(RB_BLOCKING_CALL) - result = pn_messenger_send(messenger, limit); -#endif // defined(RB_BLOCKING_CALL) - - return result; - } - - int wrap_pn_messenger_recv(pn_messenger_t *messenger, int limit) { - int result = 0; - -#if defined(RB_BLOCKING_CALL) - // only release the gil if we're blocking - if(pn_messenger_is_blocking(messenger)) { - VALUE rc; - void* args[2]; - - args[0] = messenger; - args[1] = &limit; - - rc = RB_BLOCKING_CALL(pn_messenger_recv_no_gvl, - &args, RUBY_UBF_PROCESS, NULL); - - if(RTEST(rc)) - { - result = FIX2INT(rc); - } - - } else { - result = pn_messenger_recv(messenger, limit); - } -#else // !defined(RB_BLOCKING_CALL) - result = pn_messenger_recv(messenger, limit); -#endif // defined(RB_BLOCKING_CALL) - - return result; - } - - int wrap_pn_messenger_work(pn_messenger_t *messenger, int timeout) { - int result = 0; - -#if defined(RB_BLOCKING_CALL) - // only release the gil if we're blocking - if(timeout) { - VALUE rc; - void* args[2]; - - args[0] = messenger; - args[1] = &timeout; - - rc = RB_BLOCKING_CALL(pn_messenger_work_no_gvl, - &args, RUBY_UBF_PROCESS, NULL); - - if(RTEST(rc)) - { - result = FIX2INT(rc); - } - } else { - result = pn_messenger_work(messenger, timeout); - } -#else - result = pn_messenger_work(messenger, timeout); -#endif - - return result; - } - -%} - -%ignore pn_messenger_send; -%ignore pn_messenger_recv; -%ignore pn_messenger_work; - -%{ -typedef struct Pn_rbkey_t { - void *registry; - char *method; - char *key_value; -} Pn_rbkey_t; - -void Pn_rbkey_initialize(void *vp_rbkey) { - Pn_rbkey_t *rbkey = (Pn_rbkey_t*)vp_rbkey; - assert(rbkey); - rbkey->registry = NULL; - rbkey->method = NULL; - rbkey->key_value = NULL; -} - -void Pn_rbkey_finalize(void *vp_rbkey) { - Pn_rbkey_t *rbkey = (Pn_rbkey_t*)vp_rbkey; - if(rbkey && rbkey->registry && rbkey->method && rbkey->key_value) { - rb_funcall((VALUE )rbkey->registry, rb_intern(rbkey->method), 1, rb_str_new2(rbkey->key_value)); - } - if(rbkey->key_value) { - free(rbkey->key_value); - rbkey->key_value = NULL; - } -} - -/* NOTE: no macro or preprocessor definitions in %inline sections */ -#define CID_Pn_rbkey CID_pn_void -#define Pn_rbkey_inspect NULL -#define Pn_rbkey_compare NULL -#define Pn_rbkey_hashcode NULL - -pn_class_t* Pn_rbkey__class(void) { - static pn_class_t clazz = PN_CLASS(Pn_rbkey); - return &clazz; -} - -Pn_rbkey_t *Pn_rbkey_new(void) { - return (Pn_rbkey_t *) pn_class_new(Pn_rbkey__class(), sizeof(Pn_rbkey_t)); -} -%} - -pn_class_t* Pn_rbkey__class(void); -Pn_rbkey_t *Pn_rbkey_new(void); - -%inline %{ - -Pn_rbkey_t *Pn_rbkey_new(void); - -void Pn_rbkey_set_registry(Pn_rbkey_t *rbkey, void *registry) { - assert(rbkey); - rbkey->registry = registry; -} - -void *Pn_rbkey_get_registry(Pn_rbkey_t *rbkey) { - assert(rbkey); - return rbkey->registry; -} - -void Pn_rbkey_set_method(Pn_rbkey_t *rbkey, char *method) { - assert(rbkey); - rbkey->method = method; -} - -char *Pn_rbkey_get_method(Pn_rbkey_t *rbkey) { - assert(rbkey); - return rbkey->method; -} - -void Pn_rbkey_set_key_value(Pn_rbkey_t *rbkey, char *key_value) { - assert(rbkey); - rbkey->key_value = malloc(strlen(key_value) + 1); - strncpy(rbkey->key_value, key_value, strlen(key_value) + 1); -} - -char *Pn_rbkey_get_key_value(Pn_rbkey_t *rbkey) { - assert(rbkey); - return rbkey->key_value; -} - -Pn_rbkey_t *pni_void2rbkey(void *object) { - return (Pn_rbkey_t *)object; -} - -VALUE pn_void2rb(void *object) { - return (VALUE )object; -} - -void *pn_rb2void(VALUE object) { - return (void *)object; -} - -VALUE pni_address_of(void *object) { - return ULL2NUM((unsigned long )object); -} - -%} - -//%rename(pn_collector_put) wrap_pn_collector_put; -//%inline %{ -// pn_event_t *wrap_pn_collector_put(pn_collector_t *collector, void *context, -// pn_event_type_t type) { -// return pn_collector_put(collector, PN_RBREF, context, type); -// } -// %} -//%ignore pn_collector_put; - -int pn_ssl_get_peer_hostname(pn_ssl_t *ssl, char *OUTPUT, size_t *OUTPUT_SIZE); -%ignore pn_ssl_get_peer_hostname; - -%inline %{ - - VALUE pni_ruby_get_proton_module() { - VALUE mQpid = rb_define_module("Qpid"); - return rb_define_module_under(mQpid, "Proton"); - } - - void pni_ruby_add_to_registry(VALUE key, VALUE value) { - VALUE result = rb_funcall(pni_ruby_get_proton_module(), rb_intern("add_to_registry"), 2, key, value); - } - - VALUE pni_ruby_get_from_registry(VALUE key) { - return rb_funcall(pni_ruby_get_proton_module(), rb_intern("get_from_registry"), 1, key); - } - - void pni_ruby_delete_from_registry(VALUE stored_key) { - rb_funcall(pni_ruby_get_proton_module(), rb_intern("delete_from_registry"), 1, stored_key); - } - - typedef struct { - VALUE handler_key; - } Pni_rbhandler_t; - - static Pni_rbhandler_t *pni_rbhandler(pn_handler_t *handler) { - return (Pni_rbhandler_t *) pn_handler_mem(handler); - } - - static void pni_rbdispatch(pn_handler_t *handler, pn_event_t *event, pn_event_type_t type) { - Pni_rbhandler_t *rbh = pni_rbhandler(handler); - VALUE rbhandler = pni_ruby_get_from_registry(rbh->handler_key); - - rb_funcall(rbhandler, rb_intern("dispatch"), 2, SWIG_NewPointerObj(event, SWIGTYPE_p_pn_event_t, 0), INT2FIX(type)); - } - - static void pni_rbhandler_finalize(pn_handler_t *handler) { - Pni_rbhandler_t *rbh = pni_rbhandler(handler); - pni_ruby_delete_from_registry(rbh->handler_key); - } - - pn_handler_t *pn_rbhandler(VALUE handler) { - pn_handler_t *chandler = pn_handler_new(pni_rbdispatch, sizeof(Pni_rbhandler_t), pni_rbhandler_finalize); - Pni_rbhandler_t *rhy = pni_rbhandler(chandler); - - VALUE ruby_key = rb_class_new_instance(0, NULL, rb_cObject); - pni_ruby_add_to_registry(ruby_key, handler); - - rhy->handler_key = ruby_key; - - return chandler; - } - -%} - -%include "proton/cproton.i" http://git-wip-us.apache.org/repos/asf/qpid-proton-j/blob/2f85988e/proton-c/bindings/ruby/spec/qpid/proton/array_spec.rb ---------------------------------------------------------------------- diff --git a/proton-c/bindings/ruby/spec/qpid/proton/array_spec.rb b/proton-c/bindings/ruby/spec/qpid/proton/array_spec.rb deleted file mode 100644 index 2f26fdf..0000000 --- a/proton-c/bindings/ruby/spec/qpid/proton/array_spec.rb +++ /dev/null @@ -1,114 +0,0 @@ -# -# 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. -# - -require "spec_helper" - -describe "The extended array type" do - - before :each do - @data = Qpid::Proton::Codec::Data.new - @list = random_list(rand(100)) - @undescribed = random_array(rand(100)) - @description = random_string(128) - @described = random_array(rand(100), true, @description) - end - - it "can be created like a normal array" do - value = [] - - expect(value).to respond_to(:proton_put) - expect(value).to respond_to(:proton_array_header) - expect(value.class).to respond_to(:proton_get) - expect(value).to respond_to :proton_described? - end - - it "raises an error when putting into a nil Data object" do - expect { - @list.proton_put(nil) - }.to raise_error - end - - it "raises an error when getting from a nil Data object" do - expect { - Array.proton_get(nil) - }.to raise_error(TypeError) - end - - it "raises an error when the data object is empty" do - expect { - Array.proton_get(@data) - }.to raise_error(TypeError) - end - - it "raises an error when the current object is not a list" do - @data.string = random_string(128) - @data.rewind - - expect { - Array.proton_get(@data) - }.to raise_error(TypeError) - end - - it "does not have an array header when it's a simple list" do - expect(@list.proton_described?).to eq(false) - end - - it "can be put into a Data object as a list" do - @list.proton_put(@data) - result = Array.proton_get(@data) - expect(result).to match_array(@list) - expect(result.proton_array_header).to eq(nil) - end - - it "has an array header when it's an AMQP array" do - expect(@undescribed.proton_array_header).not_to be_nil - expect(@described.proton_array_header).not_to be_nil - end - - it "raises an error when the elements of an Array are dissimilar and is put into a Data object" do - value = [] - value.proton_array_header = Qpid::Proton::Types::ArrayHeader.new(Qpid::Proton::Codec::INT) - value << random_string(16) - - expect { - value.proton_put(@data) - }.to raise_error(TypeError) - end - - it "can be put into a Data object as an undescribed array" do - @undescribed.proton_put(@data) - result = Array.proton_get(@data) - be_close_array(@undescribed, result) - - expect(result.proton_array_header).not_to be_nil - expect(result.proton_array_header).to eq(@undescribed.proton_array_header) - expect(result.proton_array_header.described?).to eq(false) - end - - it "can be put into a Data object as a described array" do - @described.proton_put(@data) - result = Array.proton_get(@data) - be_close_array(@described, result) - - expect(result.proton_array_header).not_to be_nil - expect(result.proton_array_header).to eq(@described.proton_array_header) - expect(result.proton_array_header.described?).to eq(true) - end - -end http://git-wip-us.apache.org/repos/asf/qpid-proton-j/blob/2f85988e/proton-c/bindings/ruby/spec/qpid/proton/data_spec.rb ---------------------------------------------------------------------- diff --git a/proton-c/bindings/ruby/spec/qpid/proton/data_spec.rb b/proton-c/bindings/ruby/spec/qpid/proton/data_spec.rb deleted file mode 100644 index c8c7d18..0000000 --- a/proton-c/bindings/ruby/spec/qpid/proton/data_spec.rb +++ /dev/null @@ -1,493 +0,0 @@ -# -# 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. -# - -require "spec_helper" - -module Qpid - - module Proton - - describe "A data object" do - - before :each do - @data = Qpid::Proton::Codec::Data.new - end - - it "can be initialized" do - expect(@data).not_to be_nil - end - - it "can hold a null" do - @data.null - expect(@data.null?).to eq(true) - end - - it "can hold a true boolean" do - @data.bool = true - expect(@data.bool).to eq(true) - end - - it "can hold a false boolean" do - @data.bool = false - expect(@data.bool).to eq(false) - end - - it "raises an error on a negative ubyte" do - expect { - @data.ubyte = (0 - (rand(127) + 1)) - }.to raise_error(RangeError) - end - - it "raises an error on a null ubyte" do - expect { - @data.ubyte = nil - }.to raise_error(TypeError) - end - - it "can hold an unsigned byte" do - value = rand(255) - @data.ubyte = value - expect(@data.ubyte).to eq(value) - end - - it "can hold a byte" do - value = rand(128) - @data.byte = value - expect(@data.byte).to eq(value) - end - - it "can hold a negative byte" do - value = 0 - (rand(126) + 1) - @data.byte = value - expect(@data.byte).to eq(value) - end - - it "raises an error on a negative ushort" do - expect { - @data.ushort = (0 - (rand(65535) + 1)) - }.to raise_error(RangeError) - end - - it "raises an error on a nil ushort" do - expect { - @data.ushort = nil - }.to raise_error(TypeError) - end - - it "can hold a zero unsigned short" do - @data.ushort = 0 - expect(@data.ushort).to eq(0) - end - - it "can hold an unsigned short" do - value = rand(2**15) + 1 - @data.ushort = value - expect(@data.ushort).to eq(value) - end - - it "raises an error on a nil short" do - expect { - @data.short = nil - }.to raise_error(TypeError) - end - - it "can hold a short" do - value = rand(2**15) + 1 - @data.short = value - expect(@data.short).to eq(value) - end - - it "can hold a zero short" do - @data.short = 0 - expect(@data.short).to eq(0) - end - - it "can hold a negative short" do - value = (0 - (rand(2**15) + 1)) - @data.short = value - expect(@data.short).to eq(value) - end - - it "raises an error on a nil uint" do - expect { - @data.uint = nil - }.to raise_error(TypeError) - end - - it "raises an error on a negative uint" do - expect { - @data.uint = (0 - (rand(2**32) + 1)) - }.to raise_error(RangeError) - end - - it "can hold an unsigned integer" do - value = rand(2**32) + 1 - @data.uint = value - expect(@data.uint).to eq(value) - end - - it "can hold a zero unsigned integer" do - @data.uint = 0 - expect(@data.uint).to eq(0) - end - - it "raise an error on a null integer" do - expect { - @data.int = nil - }.to raise_error(TypeError) - end - - it "can hold an integer" do - value = rand(2**31) + 1 - @data.int = value - expect(@data.int).to eq(value) - end - - it "can hold zero as an integer" do - @data.int = 0 - expect(@data.int).to eq(0) - end - - it "raises an error on a null character" do - expect { - @data.char = nil - }.to raise_error(TypeError) - end - - it "can hold a character" do - source = random_string(256) - index = rand(source.length) - value = source[index,1].bytes.to_a[0] - @data.char = value - expect(@data.char).to eq(value) - end - - it "raises an error on a null ulong" do - expect { - @data.ulong = nil - }.to raise_error(TypeError) - end - - it "raises an error on a negative ulong" do - expect { - @data.ulong = (0 - (rand(2**63) + 1)) - }.to raise_error(RangeError) - end - - it "can have a zero unsigned long" do - @data.ulong = 0 - expect(@data.ulong).to eq(0) - end - - it "can hold an unsigned long" do - value = rand(2**63) + 1 - @data.ulong = value - expect(@data.ulong).to eq(value) - end - - it "raises an error on a null long" do - expect { - @data.long = nil - }.to raise_error(TypeError) - end - - it "can have a zero long" do - @data.long = 0 - expect(@data.long).to eq(0) - end - - it "can hold a long" do - value = rand(2**63) + 1 - @data.long = value - expect(@data.long).to eq(value) - end - - it "raise an error on a null timestamp" do - expect { - @data.timestamp = nil - }.to raise_error(TypeError) - end - - it "can handle a negative timestamp" do - last_year = Time.now - (60*60*24*365) - @data.timestamp = last_year - expect(@data.timestamp).to eq(last_year.to_i) - end - - it "can handle a zero timestamp" do - @data.timestamp = 0 - expect(@data.timestamp).to eq(0) - end - - it "can hold a timestamp" do - next_year = Time.now + (60*60*24*365) - @data.timestamp = next_year - expect(@data.timestamp).to eq(next_year.to_i) - end - - it "raises an error on a null float" do - expect { - @data.float = nil - }.to raise_error(TypeError) - end - - it "can hold a negative float" do - value = 0.0 - (1.0 + rand(2.0**15)).to_f - @data.float = value - expect(@data.float).to eq(value) - end - - it "can hold a zero float" do - @data.float = 0.0 - expect(@data.float).to eq(0.0) - end - - it "can hold a float" do - value = (1.0 + rand(2.0**15)).to_f - @data.float = value - expect(@data.float).to eq(value) - end - - it "raise an error on a null double" do - expect { - @data.double = nil - }.to raise_error(TypeError) - end - - it "can hold a negative double" do - value = 0.0 - (1.0 + rand(2.0**31)).to_f - @data.double = value - expect(@data.double).to eq(value) - end - - it "can hold a zero double" do - @data.double = 0.0 - expect(@data.double).to eq(0.0) - end - - it "can hold a double" do - value = (1.0 + rand(2.0**31)).to_f - @data.double = value - expect(@data.double).to eq(value) - end - - it "raises an error on a null decimal32" do - expect { - @data.decimal32 = nil - }.to raise_error(TypeError) - end - - it "can hold a zero decimal32" do - @data.decimal32 = 0 - expect(@data.decimal32).to eq(0) - end - - it "can hold a decimal32" do - value = 1 + rand(2**31) - @data.decimal32 = value - expect(@data.decimal32).to eq(value) - end - - it "raises an error on a null decimal64" do - expect { - @data.decimal64 = nil - }.to raise_error(TypeError) - end - - it "can hold a zero decimal64" do - @data.decimal64 = 0 - expect(@data.decimal64).to eq(0) - end - - it "can hold a decimal64" do - value = 1 + rand(2**63) - @data.decimal64 = value - expect(@data.decimal64).to eq(value) - end - - it "raises an error on a null decimal128" do - expect { - @data.decimal128 = nil - }.to raise_error(TypeError) - end - - it "can hold a zero decimal128" do - @data.decimal128 = 0 - expect(@data.decimal128).to eq(0) - end - - it "can hold a decimal128" do - value = rand(2**127) - @data.decimal128 = value - expect(@data.decimal128).to eq(value) - end - - it "raises an error on a null UUID" do - expect { - @data.uuid = nil - }.to raise_error(::ArgumentError) - end - - it "raises an error on a malformed UUID" do - expect { - @data.uuid = random_string(36) - }.to raise_error(::ArgumentError) - end - - it "can set a UUID from an integer value" do - @data.uuid = 336307859334295828133695192821923655679 - expect(@data.uuid).to eq("fd0289a5-8eec-4a08-9283-81d02c9d2fff") - end - - it "can hold a UUID" do - value = "fd0289a5-8eec-4a08-9283-81d02c9d2fff" - @data.uuid = value - expect(@data.uuid).to eq(value) - end - - it "can hold a null binary" do - @data.binary = nil - expect(@data.binary).to eq("") - end - - it "can hold a binary" do - value = random_string(128) - @data.binary = value - expect(@data.binary).to eq(value) - end - - it "can hold a null string" do - @data.string = nil - expect(@data.string).to eq("") - end - - it "can hold a string" do - value = random_string(128) - @data.string = value - expect(@data.string).to eq(value) - end - - it "can hold a null symbol" do - @data.symbol = nil - expect(@data.symbol).to eq("") - end - - it "can hold a symbol" do - value = random_string(128) - @data.symbol = value - expect(@data.symbol).to eq(value) - end - - it "can hold a described value" do - name = random_string(16) - value = random_string(16) - @data.put_described - @data.enter - @data.symbol = name - @data.string = value - @data.exit - - expect(@data.described?).to eq(true) - @data.enter - @data.next - expect(@data.symbol).to eq(name) - @data.next - expect(@data.string).to eq(value) - end - - it "raises an error when setting the wrong type in an array" - - it "can hold an array" do - values = [] - (1..(rand(100) + 5)).each { values << rand(2**16) } - @data.put_array false, Qpid::Proton::Codec::INT - @data.enter - values.each { |value| @data.int = value } - @data.exit - - @data.enter - values.each do |value| - @data.next - expect(@data.int).to eq(value) - end - end - - it "can hold a described array" do - values = [] - (1..(rand(100) + 5)).each { values << random_string(64) } - descriptor = random_string(32) - @data.put_array true, Qpid::Proton::Codec::STRING - @data.enter - @data.symbol = descriptor - values.each { |value| @data.string = value } - @data.exit - - expect(@data.array).to match_array([values.size, true, Qpid::Proton::Codec::STRING]) - @data.enter - @data.next - expect(@data.symbol).to eq(descriptor) - values.each do |value| - @data.next - expect(@data.string).to eq(value) - end - end - - it "can hold a list" do - values = [] - (1..(rand(100) + 5)).each { values << random_string(128) } - @data.put_list - @data.enter - values.each {|value| @data.string = value} - @data.exit - - @data.enter - values.each do |value| - @data.next - expect(@data.string).to eq(value) - end - end - - it "can hold a map" do - keys = [] - (1..(rand(100) + 5)).each {keys << random_string(128)} - values = {} - keys.each {|key| values[key] = random_string(128)} - - @data.put_map - @data.enter - keys.each do |key| - @data.string = key - @data.string = values[key] - end - @data.exit - - @data.enter - keys.each do |key| - @data.next - expect(@data.string).to eq(key) - @data.next - expect(@data.string).to eq(values[key]) - end - end - - end - - end - -end http://git-wip-us.apache.org/repos/asf/qpid-proton-j/blob/2f85988e/proton-c/bindings/ruby/spec/qpid/proton/exception_handling_spec.rb ---------------------------------------------------------------------- diff --git a/proton-c/bindings/ruby/spec/qpid/proton/exception_handling_spec.rb b/proton-c/bindings/ruby/spec/qpid/proton/exception_handling_spec.rb deleted file mode 100644 index e296a69..0000000 --- a/proton-c/bindings/ruby/spec/qpid/proton/exception_handling_spec.rb +++ /dev/null @@ -1,96 +0,0 @@ -# -# 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 Proton - - class ExceptionHandlingClass - include Qpid::Proton::Util::ErrorHandler - - def error - "This is a test error: #{Time.new}" - end - end - - describe "The exception handling mixin" do - - before (:each) do - @handler = Qpid::Proton::ExceptionHandlingClass.new - end - - it "does not raise an error on a zero code" do - expect { - @handler.check_for_error(0) - }.to_not raise_error - end - - it "raises EOS on PN_EOS" do - expect { - @handler.check_for_error(Qpid::Proton::Error::EOS) - }.to raise_error(Qpid::Proton::EOSError) - end - - it "raises Error on PN_ERR" do - expect { - @handler.check_for_error(Qpid::Proton::Error::ERROR) - }.to raise_error(Qpid::Proton::ProtonError) - end - - it "raises Overflow on PN_OVERFLOW" do - expect { - @handler.check_for_error(Qpid::Proton::Error::OVERFLOW) - }.to raise_error(Qpid::Proton::OverflowError) - end - - it "raises Underflow on PN_UNDERFLOW" do - expect { - @handler.check_for_error(Qpid::Proton::Error::UNDERFLOW) - }.to raise_error(Qpid::Proton::UnderflowError) - end - - it "raises Argument on PN_ARG_ERR" do - expect { - @handler.check_for_error(Qpid::Proton::Error::ARGUMENT) - }.to raise_error(Qpid::Proton::ArgumentError) - end - - it "raises Timeout on PN_TIMEOUT" do - expect { - @handler.check_for_error(Qpid::Proton::Error::TIMEOUT) - }.to raise_error(Qpid::Proton::TimeoutError) - end - - it "raises an Ruby ArgumentError on a nil code" do - expect { - @handler.check_for_error(nil) - }.to raise_error(::ArgumentError) - end - - it "raises a Ruby ArgumentError on an unknown value" do - expect { - @handler.check_for_error("farkle") - }.to raise_error(::ArgumentError) - end - - end - - end - -end http://git-wip-us.apache.org/repos/asf/qpid-proton-j/blob/2f85988e/proton-c/bindings/ruby/spec/qpid/proton/hash_spec.rb ---------------------------------------------------------------------- diff --git a/proton-c/bindings/ruby/spec/qpid/proton/hash_spec.rb b/proton-c/bindings/ruby/spec/qpid/proton/hash_spec.rb deleted file mode 100644 index 7568ac1..0000000 --- a/proton-c/bindings/ruby/spec/qpid/proton/hash_spec.rb +++ /dev/null @@ -1,57 +0,0 @@ -# -# 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. -# - -require "spec_helper" - -describe "The extended hash type" do - - before :each do - @data = Qpid::Proton::Codec::Data.new - @hash = random_hash(rand(128) + 64) - end - - it "raises an error when put into a nil Data instance" do - expect { - @hash.proton_data_put(nil) - }.to raise_error(TypeError) - end - - it "can be put into an instance of Data" do - @hash.proton_data_put(@data) - result = Hash.proton_data_get(@data) - expect(result.keys).to match_array(@hash.keys) - expect(result.values).to match_array(@hash.values) - end - - it "raises an error when retrieved from a nil Data instance" do - expect { - Hash.proton_data_get(nil) - }.to raise_error(TypeError) - end - - it "raises an error when trying to get what is not a Hash" do - @data.string = random_string(128) - @data.rewind - - expect { - Hash.proton_data_get(@data) - }.to raise_error(TypeError) - end - -end http://git-wip-us.apache.org/repos/asf/qpid-proton-j/blob/2f85988e/proton-c/bindings/ruby/spec/qpid/proton/message_spec.rb ---------------------------------------------------------------------- diff --git a/proton-c/bindings/ruby/spec/qpid/proton/message_spec.rb b/proton-c/bindings/ruby/spec/qpid/proton/message_spec.rb deleted file mode 100644 index 36e4695..0000000 --- a/proton-c/bindings/ruby/spec/qpid/proton/message_spec.rb +++ /dev/null @@ -1,638 +0,0 @@ -# -# 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. -# - -require "spec_helper" - -module Qpid - - module Proton - - describe "A message" do - - before (:each) do - @message = Qpid::Proton::Message.new - end - - it "can be created" do - expect(@message).not_to be_nil - end - - it "can be cleared" do - subject = random_string(16) - @message.subject = subject - expect(@message.subject).to eq(subject) - @message.clear - expect(@message.subject).not_to eq(subject) - end - - it "can be durable" do - @message.durable = true - expect(@message.durable).to eq(true) - @message.durable = false - expect(@message.durable).to eq(false) - end - - it "raises an error when setting durable to nil" do - expect { - @message.durable = nil - }.to raise_error(TypeError) - end - - it "raises an error when setting the priority to nil" do - expect { - @message.priority = nil - }.to raise_error(TypeError) - end - - it "raises an error when setting the priority to a non-number" do - expect { - @message.priority = "abck" - }.to raise_error(TypeError) - end - - it "sets the priority to the integer portion when a float" do - priority = rand(100) / 10 - @message.priority = priority - expect(@message.priority).to eq(priority.floor) - end - - it "rejects a priority with too large of a value" do - expect { - @message.priority = (rand(100) + 256) - }.to raise_error(RangeError) - end - - it "rejects a negative priority" do - expect { - @message.priority = (0 - (rand(255) + 1)) - }.to raise_error(RangeError) - end - - it "has a priority" do - priority = rand(256) - @message.priority = priority - expect(@message.priority).to eq(priority) - end - - it "raises an error when setting the time-to-live to nil" do - expect { - @message.ttl = nil - }.to raise_error(TypeError) - end - - it "raises an error when setting the time-to-live to a non-number" do - expect { - @message.ttl = random_string(5) - }.to raise_error(TypeError) - end - - it "sets the time-to-live to the integer portion when a float" do - ttl = (rand(32767) / 10) - @message.ttl = ttl - expect(@message.ttl).to eq(ttl.floor) - end - - it "raises an error when the time-to-live is negative" do - expect { - @message.ttl = (0 - rand(1000)) - }.to raise_error(RangeError) - end - - it "has a time-to-live" do - ttl = rand(32767) - @message.ttl = ttl - expect(@message.ttl).to eq(ttl) - end - - it "raises an error when setting first acquirer to nil" do - expect { - @message.first_acquirer = nil - }.to raise_error(TypeError) - end - - it "raises and error when setting first acquirer to a non-boolean" do - expect { - @message.first_acquirer = random_string(16) - }.to raise_error(TypeError) - end - - it "has a first acquirer" do - @message.first_acquirer = true - expect(@message.first_acquirer?).to eq(true) - - @message.first_acquirer = false - expect(@message.first_acquirer?).to eq(false) - end - - it "raises an error on a nil delivery count" do - expect { - @message.delivery_count = nil - }.to raise_error(::ArgumentError) - end - - it "raises an error on a negative delivery count" do - expect { - @message.delivery_count = -1 - }.to raise_error(RangeError) - end - - it "raises an error on a non-numeric delivery count" do - expect { - @message.delivery_count = "farkle" - }.to raise_error(::ArgumentError) - end - - it "converts a floating point delivery count to its integer portion" do - count = rand(255) / 10.0 - @message.delivery_count = count - expect(@message.delivery_count).to eq(count.floor) - end - - it "has a delivery count" do - count = rand(255) - @message.delivery_count = count - expect(@message.delivery_count).to eq(count) - end - - it "allows setting a nil id" do - @message.id = nil - expect(@message.id).to be_nil - end - - it "has an id" do - id = random_string(16) - @message.id = id - expect(@message.id).to eq(id) - end - - it "allows setting a nil user id" do - @message.user_id = nil - expect(@message.user_id).to eq("") - end - - it "has a user id" do - id = random_string(16) - @message.user_id = id - expect(@message.user_id).to eq(id) - end - - it "allows setting a nil address" do - @message.address = nil - expect(@message.address).to be_nil - end - - it "has an address" do - address = "//0.0.0.0/#{random_string(16)}" - @message.address = address - expect(@message.address).to eq(address) - end - - it "allows setting a nil subject" do - @message.subject = nil - expect(@message.subject).to be_nil - end - - it "has a subject" do - subject = random_string(50) - @message.subject = subject - expect(@message.subject).to eq(subject) - end - - it "will allow a nil reply-to address" do - @message.reply_to = nil - expect(@message.reply_to).to be_nil - end - - it "has a reply-to address" do - address = "//0.0.0.0/#{random_string(16)}" - @message.reply_to = address - expect(@message.reply_to).to eq(address) - end - - it "will allow a nil correlation id" do - @message.correlation_id = nil - expect(@message.correlation_id).to be_nil - end - - it "has a correlation id" do - id = random_string(25) - @message.correlation_id = id - expect(@message.correlation_id).to eq(id) - end - - it "will allow a nil content type" do - @message.content_type = nil - expect(@message.content_type).to be_nil - end - - it "will allow an empty content type" do - @message.content_type = "" - expect(@message.content_type).to eq("") - end - - it "has a content type" do - content_type = random_string(32) - @message.content_type = content_type - expect(@message.content_type).to eq(content_type) - end - - it "can have nil content encoding" do - @message.content_encoding = nil - expect(@message.content_encoding).to be_nil - end - - it "has a content encoding" do - encoding = "#{random_string(8)}/#{random_string(8)}" - @message.content_encoding = encoding - expect(@message.content_encoding).to eq(encoding) - end - - it "raises an error on a nil expiry time" do - expect { - @message.expires = nil - }.to raise_error(TypeError) - end - - it "raises an error on a negative expiry time" do - expect { - @message.expires = (0-(rand(65535))) - }.to raise_error(::ArgumentError) - end - - it "can have a zero expiry time" do - @message.expires = 0 - expect(@message.expires).to equal(0) - end - - it "has an expiry time" do - time = rand(65535) - @message.expires = time - expect(@message.expires).to eq(time) - end - - it "raises an error on a nil creation time" do - expect { - @message.creation_time = nil - }.to raise_error(TypeError) - end - - it "raises an error on a negative creation time" do - expect { - @message.creation_time = (0 - rand(65535)) - }.to raise_error(::ArgumentError) - end - - it "can have a zero creation time" do - @message.creation_time = 0 - expect(@message.creation_time).to eq(0) - end - - it "has a creation time" do - time = rand(65535) - @message.creation_time = time - expect(@message.creation_time).to eq(time) - end - - it "can have a nil group id" do - @message.group_id = nil - expect(@message.group_id).to be_nil - end - - it "can have an empty group id" do - @message.group_id = "" - expect(@message.group_id).to eq("") - end - - it "has a group id" do - id = random_string(16) - @message.group_id = id - expect(@message.group_id).to eq(id) - end - - - it "raises an error on a nil group sequence" do - expect { - @message.group_sequence = nil - }.to raise_error(TypeError) - end - - it "can have a negative group sequence" do - seq = (0 - rand(32767)) - @message.group_sequence = seq - expect(@message.group_sequence).to eq(seq) - end - - it "can have a zero group sequence" do - @message.group_sequence = 0 - expect(@message.group_sequence).to eq(0) - end - - it "has a group sequence" do - id = rand(32767) - @message.group_sequence = id - expect(@message.group_sequence).to eq(id) - end - - it "can have a nil reply-to group id" do - @message.reply_to_group_id = nil - expect(@message.reply_to_group_id).to be_nil - end - - it "can have an empty reply-to group id" do - @message.reply_to_group_id = "" - expect(@message.reply_to_group_id).to eq("") - end - - it "has a reply-to group id" do - id = random_string(16) - @message.reply_to_group_id = id - expect(@message.reply_to_group_id).to eq(id) - end - - it "has properties" do - expect(@message).to respond_to(:properties) - expect(@message).to respond_to(:properties=) - expect(@message).to respond_to(:[]) - expect(@message).to respond_to(:[]=) - - expect(@message.properties).to be_kind_of({}.class) - end - - it "can replace the set of properties" do - values = random_hash(128) - - @message.properties = values.clone - expect(@message.properties).to eq(values) - end - - it "can set properties" do - name = random_string(16) - value = random_string(128) - - @message[name] = value - expect(@message[name]).to eq(value) - end - - it "can update properties" do - name = random_string(16) - value = random_string(128) - - @message[name] = value - expect(@message[name]).to eq(value) - - value = random_string(128) - @message[name] = value - expect(@message[name]).to eq(value) - end - - it "can hold a null property" do - name = random_string(16) - value = random_string(128) - - @message[name] = value - expect(@message[name]).to eq(value) - - @message[name] = nil - expect(@message[name]).to be_nil - end - - it "can delete a property" do - name = random_string(16) - value = random_string(128) - - @message[name] = value - expect(@message[name]).to eq(value) - - @message.delete_property(name) - expect(@message.properties.keys).to_not include(name) - end - - it "has no properties after being cleared" do - name = random_string(16) - value = random_string(128) - - @message[name] = value - expect(@message[name]).to eq(value) - - @message.clear - expect(@message.properties).to be_empty - end - - it "has instructions" do - expect(@message).to respond_to(:instructions) - expect(@message).to respond_to("instructions=".to_sym) - end - - it "can set an instruction" do - name = random_string(16) - value = random_string(128) - - @message.instructions[name] = value - expect(@message.instructions[name]).to eq(value) - end - - it "can update an instruction" do - name = random_string(16) - value = random_string(128) - - @message.instructions[name] = value - expect(@message.instructions[name]).to eq(value) - - value = random_string(128) - @message.instructions[name] = value - expect(@message.instructions[name]).to eq(value) - end - - it "can delete the instructions" do - name = random_string(16) - value = random_string(128) - - @message.instructions[name] = value - expect(@message.instructions).to_not be_empty - - @message.instructions = nil - expect(@message.instructions).to be_nil - end - - it "can replace the instructions" do - values = random_hash(rand(128) + 1) - - @message.instructions = values.clone - expect(@message.instructions).to eq(values) - - values = random_hash(rand(64) + 1) - - @message.instructions = values.clone - expect(@message.instructions).to eq(values) - end - - it "can delete the set of instructions" do - values = random_hash(rand(128) + 1) - - @message.instructions = values.clone - expect(@message.instructions).to eq(values) - - @message.instructions = nil - expect(@message.instructions).to be_nil - end - - it "has no instructions after being cleared" do - value = random_hash(128) - - @message.instructions = value.clone - expect(@message.instructions).to eq(value) - - @message.clear - expect(@message.instructions).to be_empty - end - - it "has annotations" do - expect(@message).to respond_to(:annotations) - expect(@message).to respond_to(:annotations=) - end - - it "can set an annotation" do - name = random_hash(32) - value = random_hash(256) - - @message.annotations[name] = value.clone - expect(@message.annotations[name]).to eq(value) - end - - it "can update an annotation" do - name = random_hash(32) - value = random_hash(256) - - @message.annotations[name] = value.clone - expect(@message.annotations[name]).to eq(value) - - value = random_hash(128) - - @message.annotations[name] = value.clone - expect(@message.annotations[name]).to eq(value) - end - - it "can delete an annotation" do - name = random_hash(32) - value = random_hash(256) - - @message.annotations[name] = value.clone - expect(@message.annotations[name]).to eq(value) - - @message.annotations[name] = nil - expect(@message.annotations[name]).to be_nil - end - - it "can replace all annotations" do - values = random_hash(rand(128) + 1) - - @message.annotations = values.clone - expect(@message.annotations).to eq(values) - - values = random_hash(rand(64) + 1) - - @message.annotations = values.clone - expect(@message.annotations).to eq(values) - end - - it "can delete the set of annotations" do - value = random_hash(rand(128) + 1) - - @message.annotations = value.clone - expect(@message.annotations).to eq(value) - - @message.annotations = nil - expect(@message.annotations).to be_nil - end - - it "has no annotations after being cleared" do - value = random_hash(16) - - @message.annotations = value - expect(@message.annotations).to eq(value) - - @message.clear - expect(@message.annotations).to be_empty - end - - it "has a body property" do - expect(@message).to respond_to(:body) - expect(@message).to respond_to(:body=) - end - - it "has a default body that is nil" do - expect(@message.body).to be_nil - end - - it "has no body after being cleared" do - name = random_string(16) - value = random_string(128) - - @message.body = value - expect(@message.body).to eq(value) - - @message.clear - expect(@message.body).to be_nil - end - - it "can set the body property" do - (1..3).each do |which| - case which - when 0 - value = random_string(32) - when 1 - value = random_array(100) - when 2 - value = random_hash(100) - when 3 - value = rand(512) - end - - @message.body = value - expect(@message.body).to eq(value) - end - end - - it "can update the body property" do - (1..3).each do |which| - case which - when 0 - value = random_string(32) - when 1 - value = random_array(100) - when 2 - value = random_hash(100) - when 3 - value = rand(512) - end - - @message.body = value - expect(@message.body).to eq(value) - - @message.body = nil - expect(@message.body).to be_nil - end - end - - end - - end - -end - --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org