Author: tross Date: Tue Aug 11 15:27:08 2009 New Revision: 803156 URL: http://svn.apache.org/viewvc?rev=803156&view=rev Log: Cleaned up the makefiles in the QMF bindings area. Added tests for the QMF bindings. Removed spurious "cout" prints from qmf/Agent.cpp
Added: qpid/trunk/qpid/cpp/bindings/qmf/python/qmf/ qpid/trunk/qpid/cpp/bindings/qmf/tests/ qpid/trunk/qpid/cpp/bindings/qmf/tests/Makefile.am qpid/trunk/qpid/cpp/bindings/qmf/tests/agent_ruby.rb (with props) qpid/trunk/qpid/cpp/bindings/qmf/tests/python_console.py (with props) qpid/trunk/qpid/cpp/bindings/qmf/tests/run_interop_tests (with props) Modified: qpid/trunk/qpid/cpp/bindings/qmf/Makefile.am qpid/trunk/qpid/cpp/bindings/qmf/python/Makefile.am qpid/trunk/qpid/cpp/bindings/qmf/ruby/qmf.rb qpid/trunk/qpid/cpp/bindings/qmf/ruby/ruby.i qpid/trunk/qpid/cpp/configure.ac qpid/trunk/qpid/cpp/src/qmf/Agent.cpp Modified: qpid/trunk/qpid/cpp/bindings/qmf/Makefile.am URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/bindings/qmf/Makefile.am?rev=803156&r1=803155&r2=803156&view=diff ============================================================================== --- qpid/trunk/qpid/cpp/bindings/qmf/Makefile.am (original) +++ qpid/trunk/qpid/cpp/bindings/qmf/Makefile.am Tue Aug 11 15:27:08 2009 @@ -17,6 +17,9 @@ # under the License. # +if HAVE_SWIG + EXTRA_DIST = qmfengine.i -SUBDIRS = ruby +SUBDIRS = ruby tests +endif Modified: qpid/trunk/qpid/cpp/bindings/qmf/python/Makefile.am URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/bindings/qmf/python/Makefile.am?rev=803156&r1=803155&r2=803156&view=diff ============================================================================== --- qpid/trunk/qpid/cpp/bindings/qmf/python/Makefile.am (original) +++ qpid/trunk/qpid/cpp/bindings/qmf/python/Makefile.am Tue Aug 11 15:27:08 2009 @@ -21,27 +21,27 @@ INCLUDES = -I$(top_srcdir)/include -I$(top_builddir)/include -I$(top_srcdir)/src/qmf -I$(top_srcdir)/src -I$(top_builddir)/src -EXTRA_DIST = python.i - generated_file_list = \ qmfengine.cpp \ qmfengine.py +EXTRA_DIST = python.i +BUILT_SOURCES = $(generated_file_list) + $(generated_file_list): $(srcdir)/python.i $(srcdir)/../qmfengine.i swig -python -c++ -Wall -I/usr/include $(INCLUDES) $(QPID_CXXFLAGS) -I$(top_srcdir)/src/qmf -o qmfengine.cpp $(srcdir)/python.i -AM_CPPFLAGS = $(QPID_CXXFLAGS) $(INCLUDES) -I$(srcdir)/qmf -I$(PYTHON_INC) -AM_CXXFLAGS = $(QPID_CXXFLAGS) - pylibdir = $(PYTHON_LIB) lib_LTLIBRARIES = _qmfengine.la _qmfengine_la_LDFLAGS = -avoid-version -module -shrext "$(PYTHON_SO)" _qmfengine_la_LIBADD = $(PYTHON_LIBS) -L$(top_builddir)/src/.libs -lqpidclient $(top_builddir)/src/libqmfcommon.la - +_qmfengine_la_CXXFLAGS = $(INCLUDES) -I$(srcdir)/qmf -I$(PYTHON_INC) _qmfengine_la_SOURCES = \ qmfengine.cpp +CLEANFILES = $(generated_file_list) + endif # HAVE_PYTHON_DEVEL Modified: qpid/trunk/qpid/cpp/bindings/qmf/ruby/qmf.rb URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/bindings/qmf/ruby/qmf.rb?rev=803156&r1=803155&r2=803156&view=diff ============================================================================== --- qpid/trunk/qpid/cpp/bindings/qmf/ruby/qmf.rb (original) +++ qpid/trunk/qpid/cpp/bindings/qmf/ruby/qmf.rb Tue Aug 11 15:27:08 2009 @@ -172,7 +172,6 @@ @by_ha...@map.key(a)] = by_key(@map.key(a)) a += 1 end - end def [] (key) Modified: qpid/trunk/qpid/cpp/bindings/qmf/ruby/ruby.i URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/bindings/qmf/ruby/ruby.i?rev=803156&r1=803155&r2=803156&view=diff ============================================================================== --- qpid/trunk/qpid/cpp/bindings/qmf/ruby/ruby.i (original) +++ qpid/trunk/qpid/cpp/bindings/qmf/ruby/ruby.i Tue Aug 11 15:27:08 2009 @@ -18,7 +18,6 @@ */ %include stl.i -%trackobjects; %module qmfengine @@ -32,9 +31,19 @@ $result = (VALUE) $1; } +%typemap (in) uint16_t +{ + $1 = FIX2UINT ($input); +} + +%typemap (out) uint16_t +{ + $result = UINT2NUM((unsigned short) $1); +} + %typemap (in) uint32_t { - $1 = FIX2UINT ((uint32_t) $input); + $1 = FIX2UINT ($input); } %typemap (out) uint32_t @@ -48,7 +57,7 @@ %typemap (in) uint64_t { - $1 = FIX2ULONG ((uint64_t) $input); + $1 = FIX2ULONG ($input); } %typemap (out) uint64_t Added: qpid/trunk/qpid/cpp/bindings/qmf/tests/Makefile.am URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/bindings/qmf/tests/Makefile.am?rev=803156&view=auto ============================================================================== --- qpid/trunk/qpid/cpp/bindings/qmf/tests/Makefile.am (added) +++ qpid/trunk/qpid/cpp/bindings/qmf/tests/Makefile.am Tue Aug 11 15:27:08 2009 @@ -0,0 +1,20 @@ +# +# 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. +# + +TESTS = run_interop_tests Added: qpid/trunk/qpid/cpp/bindings/qmf/tests/agent_ruby.rb URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/bindings/qmf/tests/agent_ruby.rb?rev=803156&view=auto ============================================================================== --- qpid/trunk/qpid/cpp/bindings/qmf/tests/agent_ruby.rb (added) +++ qpid/trunk/qpid/cpp/bindings/qmf/tests/agent_ruby.rb Tue Aug 11 15:27:08 2009 @@ -0,0 +1,99 @@ +#!/usr/bin/ruby + +# +# 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 'qmf' +require 'socket' + +class Model + attr_reader :parent_class, :child_class + + def initialize + @parent_class = Qmf::SchemaObjectClass.new("org.apache.qpid.qmf", "parent") + @parent_class.add_property(Qmf::SchemaProperty.new("name", Qmf::TYPE_SSTR, :index => true)) + @parent_class.add_property(Qmf::SchemaProperty.new("state", Qmf::TYPE_SSTR)) + @parent_class.add_property(Qmf::SchemaProperty.new("uint32val", Qmf::TYPE_UINT32)) + @parent_class.add_statistic(Qmf::SchemaStatistic.new("queryCount", Qmf::TYPE_UINT32, :unit => "query", :desc => "Query count")) + + method = Qmf::SchemaMethod.new("create_child", :desc => "Create a new child object") + method.add_argument(Qmf::SchemaArgument.new("child_name", Qmf::TYPE_LSTR, :dir => Qmf::DIR_IN)) + method.add_argument(Qmf::SchemaArgument.new("child_ref", Qmf::TYPE_REF, :dir => Qmf::DIR_OUT)) + + @parent_class.add_method(method) + + @child_class = Qmf::SchemaObjectClass.new("org.apache.qpid.qmf", "child") + @child_class.add_property(Qmf::SchemaProperty.new("name", Qmf::TYPE_SSTR, :index => true)) + end + + def register(agent) + agent.register_class(@parent_class) + agent.register_class(@child_class) + end +end + + +class App < Qmf::AgentHandler + def get_query(context, query, userId) +# puts "Query: user=#{userId} context=#{context} class=#{query.class_name} object_num=#{query.object_id.object_num_low if query.object_id}" + #...@parent.inc_attr("queryCount") + if query.class_name == 'parent' + @agent.query_response(context, @parent) + end + @agent.query_complete(context) + end + + def method_call(context, name, object_id, args, userId) +# puts "Method: user=#{userId} context=#{context} method=#{name} object_num=#{object_id.object_num_low if object_id} args=#{args}" + oid = @agent.alloc_object_id(2) + args['child_ref'] = oid + @child = Qmf::QmfObject.new(@model.child_class) + @child.set_attr("name", args.by_key("child_name")) + @child.set_object_id(oid) + @agent.method_response(context, 0, "OK", args) + end + + def main + @settings = Qmf::ConnectionSettings.new + @settings.host = ARGV[0] if ARGV.size > 0 + @settings.port = ARGV[1].to_i if ARGV.size > 1 + @connection = Qmf::Connection.new(@settings) + @agent = Qmf::Agent.new(self) + + @model = Model.new + @model.register(@agent) + + @agent.set_connection(@connection) + + @parent = Qmf::QmfObject.new(@model.parent_class) + @parent.set_attr("name", "Parent One") + @parent.set_attr("state", "OPERATIONAL") + @parent.set_attr("uint32val", 0xa5a5a5a5) + + oid = @agent.alloc_object_id(1) + @parent.set_object_id(oid) + + sleep + end +end + +app = App.new +app.main + + Propchange: qpid/trunk/qpid/cpp/bindings/qmf/tests/agent_ruby.rb ------------------------------------------------------------------------------ svn:executable = * Added: qpid/trunk/qpid/cpp/bindings/qmf/tests/python_console.py URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/bindings/qmf/tests/python_console.py?rev=803156&view=auto ============================================================================== --- qpid/trunk/qpid/cpp/bindings/qmf/tests/python_console.py (added) +++ qpid/trunk/qpid/cpp/bindings/qmf/tests/python_console.py Tue Aug 11 15:27:08 2009 @@ -0,0 +1,83 @@ +#!/usr/bin/env python +# +# 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. +# + +import sys +from qpid.testlib import TestBase010, testrunner +from qpid.datatypes import Message +from qpid.queue import Empty +from time import sleep + +def scan_args(name, default=None, args=sys.argv[1:]): + if (name in args): + pos = args.index(name) + return args[pos + 1] + elif default: + return default + else: + print "Please specify extra argument: %s" % name + sys.exit(2) + +def extract_args(name, args): + if (name in args): + pos = args.index(name) + del args[pos:pos+2] + else: + return None + +class QmfInteropTests(TestBase010): + + def test_A_agent_presence(self): + self.startQmf(); + qmf = self.qmf + + agents = [] + count = 0 + while len(agents) == 0: + agents = qmf.getObjects(_class="agent") + sleep(1) + count += 1 + if count > 5: + self.fail("Timed out waiting for remote agent") + + def test_B_basic_types(self): + self.startQmf(); + qmf = self.qmf + + parents = qmf.getObjects(_class="parent") + self.assertEqual(len(parents), 1) + self.assertEqual(parents[0].uint32val, 0xA5A5A5A5) + + def getProperty(self, msg, name): + for h in msg.headers: + if hasattr(h, name): return getattr(h, name) + return None + + def getAppHeader(self, msg, name): + headers = self.getProperty(msg, "application_headers") + if headers: + return headers[name] + return None + + +if __name__ == '__main__': + args = sys.argv[1:] + args.append("python_console") + + if not testrunner.run(args): sys.exit(1) Propchange: qpid/trunk/qpid/cpp/bindings/qmf/tests/python_console.py ------------------------------------------------------------------------------ svn:executable = * Added: qpid/trunk/qpid/cpp/bindings/qmf/tests/run_interop_tests URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/bindings/qmf/tests/run_interop_tests?rev=803156&view=auto ============================================================================== --- qpid/trunk/qpid/cpp/bindings/qmf/tests/run_interop_tests (added) +++ qpid/trunk/qpid/cpp/bindings/qmf/tests/run_interop_tests Tue Aug 11 15:27:08 2009 @@ -0,0 +1,67 @@ +#!/bin/sh + +# +# 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. +# + +# Run the qmf interoperability tests. +MY_DIR=`dirname \`which $0\`` +QPID_DIR=${MY_DIR}/../../../.. +BUILD_DIR=../../.. +PYTHON_DIR=${QPID_DIR}/python +BROKER_DIR=${BUILD_DIR}/src +API_DIR=${BUILD_DIR}/bindings/qmf +SPEC_DIR=${QPID_DIR}/specs + +trap stop_broker INT TERM QUIT + +start_broker() { + ${BROKER_DIR}/qpidd --daemon --port 0 --no-data-dir --no-module-dir --auth no > _qpidd.port + BROKER_PORT=`cat _qpidd.port` +} + +stop_broker() { + ${BROKER_DIR}/qpidd -q --port $BROKER_PORT + echo "Broker stopped" +} + +start_ruby_agent() { + ruby -I${MY_DIR}/../ruby -I${API_DIR}/ruby/.libs ${MY_DIR}/agent_ruby.rb localhost $BROKER_PORT & + AGENT_PID=$! +} + +stop_ruby_agent() { + kill $AGENT_PID +} + +if test -d ${PYTHON_DIR} ; then + start_broker + echo "Running qmf interop tests using broker on port $BROKER_PORT" + PYTHONPATH=${PYTHON_DIR} + export PYTHONPATH + echo " Ruby Agent vs. Pure-Python Console" + start_ruby_agent + echo " Ruby agent started at pid $AGENT_PID" + ${MY_DIR}/python_console.py -v -s ${SPEC_DIR}/amqp.0-10-qpid-errata.xml -b localhost:$BROKER_PORT $@ + RETCODE=$? + stop_ruby_agent + stop_broker + if test x$RETCODE != x0; then + echo "FAIL qmf interop tests"; exit 1; + fi +fi Propchange: qpid/trunk/qpid/cpp/bindings/qmf/tests/run_interop_tests ------------------------------------------------------------------------------ svn:executable = * Modified: qpid/trunk/qpid/cpp/configure.ac URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/configure.ac?rev=803156&r1=803155&r2=803156&view=diff ============================================================================== --- qpid/trunk/qpid/cpp/configure.ac (original) +++ qpid/trunk/qpid/cpp/configure.ac Tue Aug 11 15:27:08 2009 @@ -514,6 +514,8 @@ examples/tradedemo/Makefile bindings/qmf/Makefile bindings/qmf/ruby/Makefile + bindings/qmf/tests/Makefile + bindings/qmf/python/qmf/Makefile managementgen/Makefile etc/Makefile src/Makefile Modified: qpid/trunk/qpid/cpp/src/qmf/Agent.cpp URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qmf/Agent.cpp?rev=803156&r1=803155&r2=803156&view=diff ============================================================================== --- qpid/trunk/qpid/cpp/src/qmf/Agent.cpp (original) +++ qpid/trunk/qpid/cpp/src/qmf/Agent.cpp Tue Aug 11 15:27:08 2009 @@ -239,7 +239,6 @@ AgentImpl::~AgentImpl() { - cout << "AgentImpl::~AgentImpl" << endl; } void AgentImpl::setStoreDir(char* path) @@ -859,7 +858,6 @@ Agent::~Agent() { - cout << "Agent::~Agent" << endl; delete impl; } --------------------------------------------------------------------- Apache Qpid - AMQP Messaging Implementation Project: http://qpid.apache.org Use/Interact: mailto:commits-subscr...@qpid.apache.org