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

Reply via email to