You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by kg...@apache.org on 2010/04/27 17:19:15 UTC

svn commit: r938506 - in /qpid/trunk/qpid/cpp: bindings/qmf/tests/agent_ruby.rb bindings/qmf/tests/python_agent.py bindings/qmf/tests/python_console.py bindings/qmf/tests/ruby_console_test.rb src/qmf/engine/ValueImpl.cpp

Author: kgiusti
Date: Tue Apr 27 15:19:14 2010
New Revision: 938506

URL: http://svn.apache.org/viewvc?rev=938506&view=rev
Log:
QPID-2556: fix conversion of signed integers in maps and lists.

Modified:
    qpid/trunk/qpid/cpp/bindings/qmf/tests/agent_ruby.rb
    qpid/trunk/qpid/cpp/bindings/qmf/tests/python_agent.py
    qpid/trunk/qpid/cpp/bindings/qmf/tests/python_console.py
    qpid/trunk/qpid/cpp/bindings/qmf/tests/ruby_console_test.rb
    qpid/trunk/qpid/cpp/src/qmf/engine/ValueImpl.cpp

Modified: 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=938506&r1=938505&r2=938506&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/bindings/qmf/tests/agent_ruby.rb (original)
+++ qpid/trunk/qpid/cpp/bindings/qmf/tests/agent_ruby.rb Tue Apr 27 15:19:14 2010
@@ -134,17 +134,6 @@ class App < Qmf::AgentHandler
         @parent.int16val = 10000
         @parent.int8val  = 100
 
-        @parent.mapval = {'u64'  => @parent.uint64val,
-                          'u32'  => @parent.uint32val,
-                          'u16'  => @parent.uint16val,
-                          'u8'   => @parent.uint8val,
-                          'i64'  => @parent.int64val,
-                          'i32'  => @parent.int32val,
-                          'i16'  => @parent.int16val,
-                          'i8'   => @parent.int8val,
-                          'sstr' => "Short String",
-                          'map'  => {'first' => 'FIRST', 'second' => 'SECOND'}}
-
         event = Qmf::QmfEvent.new(@model.event_class)
         event.uint32val = @parent.uint32val
         event.strval = "Unused"
@@ -248,9 +237,18 @@ class App < Qmf::AgentHandler
     @parent.int8val  = 0
 
     # a list containing a list that contains a map (so there!)
-    @parent.listval = ['a', 1, 'b', 2,
+    @parent.listval = ['a', 1, 'b', -2,
                        ['c', true, 3.1415,
-                        {"hi" => 10, "lo" => 5}]]
+                        {"hi" => 10, "lo" => 5, "neg" => -3}]]
+
+    # a default map
+    @parent.mapval = {'aLong'  => 9999999999,
+      'aInt'  => 54321,
+      'aSigned' => -666,
+      'aString'  => "A String",
+      'aFloat'=> 3.1415,
+      'aMap'  => {"first" => 1, "second" => 2},
+      'aList' => ['x', -1, 'y', 2]}
 
     @parent_oid = @agent.alloc_object_id(1)
     @parent.set_object_id(@parent_oid)

Modified: qpid/trunk/qpid/cpp/bindings/qmf/tests/python_agent.py
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/bindings/qmf/tests/python_agent.py?rev=938506&r1=938505&r2=938506&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/bindings/qmf/tests/python_agent.py (original)
+++ qpid/trunk/qpid/cpp/bindings/qmf/tests/python_agent.py Tue Apr 27 15:19:14 2010
@@ -146,17 +146,6 @@ class App(qmf.AgentHandler):
                 self._parent["int16val"] = 10000
                 self._parent.set_attr("int8val",  100)
 
-                self._parent.set_attr("mapval", {'u64'  : self._parent['uint64val'],
-                                                 'u32'  : self._parent['uint32val'],
-                                                 'u16'  : self._parent['uint16val'],
-                                                 'u8'   : self._parent['uint8val'],
-                                                 'i64'  : self._parent['int64val'],
-                                                 'i32'  : self._parent['int32val'],
-                                                 'i16'  : self._parent['int16val'],
-                                                 'i8'   : self._parent['int8val'],
-                                                 'sstr' : "Short String",
-                                                 'map'  : {'first' : 'FIRST', 'second' : 'SECOND'}})
-
                 event = qmf.QmfEvent(self._model.event_class)
                 event.uint32val = self._parent.get_attr("uint32val")
                 event.strval = "Unused"
@@ -292,9 +281,20 @@ class App(qmf.AgentHandler):
         self._parent.set_attr("int8val",  0)
 
         # a list containing a list that contains a map (so there!)
-        self._parent.set_attr("listval", ['a', 1, 'b', 2,
+        self._parent.set_attr("listval", ['a', 1, 'b', -2,
                                           ['c', True, 3.1415,
-                                           {"hi": 10, "lo": 5}]])
+                                           {"hi": 10, "lo": 5, "neg": -3}]])
+        # a default map
+        self._parent.set_attr("mapval", {'aLong' : long(9999999999),
+                                         'aInt'  : int(54321),
+                                         'aSigned' : -666,
+                                         'aString' : "A String",
+                                         'aFloat' : 3.1415,
+                                         'aMap'  : {'first' : 1,
+                                                    'second': 2},
+                                         'aList' : ['x', -1, 'y', 2]})
+
+
 
         self._parent_oid = self._agent.alloc_object_id(1)
         self._parent.set_object_id(self._parent_oid)

Modified: 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=938506&r1=938505&r2=938506&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/bindings/qmf/tests/python_console.py (original)
+++ qpid/trunk/qpid/cpp/bindings/qmf/tests/python_console.py Tue Apr 27 15:19:14 2010
@@ -221,6 +221,23 @@ class QmfInteropTests(TestBase010):
         self.assertTrue(isinstance(parent.listval[4][3], dict))
         self.assertEqual(parent.listval[4][3]["hi"], 10)
         self.assertEqual(parent.listval[4][3]["lo"], 5)
+        self.assertEqual(parent.listval[4][3]["neg"], -3)
+
+        # see agent for structure of mapval
+
+        self.assertTrue(isinstance(parent.mapval, dict))
+        self.assertEqual(len(parent.mapval), 7)
+        self.assertEqual(parent.mapval['aLong'], 9999999999)
+        self.assertEqual(parent.mapval['aInt'], 54321)
+        self.assertEqual(parent.mapval['aSigned'], -666)
+        self.assertEqual(parent.mapval['aString'], "A String"),
+        self.assertEqual(parent.mapval['aFloat'], 3.1415),
+        self.assertTrue(isinstance(parent.mapval['aMap'], dict))
+        self.assertEqual(len(parent.mapval['aMap']), 2)
+        self.assertEqual(parent.mapval['aMap']['second'], 2)
+        self.assertTrue(isinstance(parent.mapval['aList'], list))
+        self.assertEqual(len(parent.mapval['aList']), 4)
+        self.assertEqual(parent.mapval['aList'][1], -1)
 
 
     def getProperty(self, msg, name):

Modified: qpid/trunk/qpid/cpp/bindings/qmf/tests/ruby_console_test.rb
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/bindings/qmf/tests/ruby_console_test.rb?rev=938506&r1=938505&r2=938506&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/bindings/qmf/tests/ruby_console_test.rb (original)
+++ qpid/trunk/qpid/cpp/bindings/qmf/tests/ruby_console_test.rb Tue Apr 27 15:19:14 2010
@@ -177,44 +177,6 @@ class ConsoleTest < ConsoleTestBase
     end
   end
 
-  def test_C_basic_types_map
-    parent = @qmfc.object(:class =>"parent")
-    assert(parent, "Number of parent objects")
-
-    result = parent.set_numerics("big")
-    assert_equal(result.status, 0, "Method Response Status")
-    assert_equal(result.text, "OK", "Method Response Text")
-
-    parent.update
-
-    map = parent.mapval
-
-    assert_equal(map['u64'], 0x9494949449494949)
-    assert_equal(map['u32'], 0xA5A55A5A)
-    assert_equal(map['u16'], 0xB66B)
-    assert_equal(map['u8'],  0xC7)
-
-    assert_equal(map['i64'], 1000000000000000000)
-    assert_equal(map['i32'], 1000000000)
-    assert_equal(map['i16'], 10000)
-    assert_equal(map['i8'],  100)
-
-    assert_equal(map['sstr'], "Short String")
-
-    submap = map['map']
-    assert_equal(submap['first'], "FIRST")
-    assert_equal(submap['second'], "SECOND")
-
-    result = parent.set_map({'first' => 'FIRST', 'sub' => {'subfirst' => 25}})
-    assert_equal(result.status, 0, "Method Response Status")
-    assert_equal(result.text, "OK", "Method Response Text")
-
-    rmap = result.args.output
-    assert_equal(rmap['first'], "FIRST")
-    assert_equal(rmap['sub']['subfirst'], 25)
-    assert_equal(rmap['added'], 'Added Text')
-  end
-
   def test_D_userid_for_method
     parent = @qmfc.object(:class => "parent")
     assert(parent, "Number of parent objects")
@@ -314,6 +276,23 @@ class ConsoleTest < ConsoleTestBase
     assert(parent.listval[4][3].class == Hash)
     assert_equal(parent.listval[4][3]["hi"], 10)
     assert_equal(parent.listval[4][3]["lo"], 5)
+    assert_equal(parent.listval[4][3]["neg"], -3)
+
+    # see agent for structure of mapval
+
+    assert(parent.mapval.class == Hash)
+    assert_equal(parent.mapval.length, 7)
+    assert_equal(parent.mapval['aLong'], 9999999999)
+    assert_equal(parent.mapval['aInt'], 54321)
+    assert_equal(parent.mapval['aSigned'], -666)
+    assert_equal(parent.mapval['aString'], "A String")
+    assert_equal(parent.mapval['aFloat'], 3.1415)
+    assert(parent.mapval['aMap'].class == Hash)
+    assert_equal(parent.mapval['aMap'].length, 2)
+    assert_equal(parent.mapval['aMap']['second'], 2)
+    assert(parent.mapval['aList'].class == Array)
+    assert_equal(parent.mapval['aList'].length, 4)
+    assert_equal(parent.mapval['aList'][1], -1)
   end
 
 end

Modified: qpid/trunk/qpid/cpp/src/qmf/engine/ValueImpl.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qmf/engine/ValueImpl.cpp?rev=938506&r1=938505&r2=938506&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qmf/engine/ValueImpl.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qmf/engine/ValueImpl.cpp Tue Apr 27 15:19:14 2010
@@ -121,10 +121,14 @@ void ValueImpl::initMap(const FieldTable
             case 0x22 : subval->setUint(fvalue.get<int>()); break;
             }
             insert(name.c_str(), subval);
-        } else if ((amqType & 0xCF) == 0x01) {
+        } else if (amqType == 0x31) {   // int64
             Value* subval(new Value(TYPE_INT64));
             subval->setInt64(fvalue.get<int64_t>());
             insert(name.c_str(), subval);
+        } else if ((amqType & 0xCF) == 0x01) {  // 0x01:int8, 0x11:int16, 0x21:int21
+            Value* subval(new Value(TYPE_INT32));
+            subval->setInt((int32_t)fvalue.get<int>());
+            insert(name.c_str(), subval);
         } else if (amqType == 0x85 || amqType == 0x95) {
             Value* subval(new Value(TYPE_LSTR));
             subval->setString(fvalue.get<string>().c_str());
@@ -233,15 +237,19 @@ void ValueImpl::initList(const List& fl)
         } else if ((amqType & 0xCF) == 0x02) {
             Value* subval(new Value(TYPE_UINT32));
             switch (amqType) {
-            case 0x02 : subval->setUint(fvalue.get<int>()); break;
-            case 0x12 : subval->setUint(fvalue.get<int>()); break;
-            case 0x22 : subval->setUint(fvalue.get<int>()); break;
+            case 0x02 : subval->setUint(fvalue.get<int>()); break; // uint8
+            case 0x12 : subval->setUint(fvalue.get<int>()); break; // uint16
+            case 0x22 : subval->setUint(fvalue.get<int>()); break; // uint32
             }
             appendToList(subval);
-        } else if ((amqType & 0xCF) == 0x01) {
+        } else if (amqType == 0x31) {   // int64
             Value* subval(new Value(TYPE_INT64));
             subval->setInt64(fvalue.get<int64_t>());
             appendToList(subval);
+        } else if ((amqType & 0xCF) == 0x01) {  // 0x01:int8, 0x11:int16, 0x21:int32
+            Value* subval(new Value(TYPE_INT32));
+            subval->setInt((int32_t)fvalue.get<int>());
+            appendToList(subval);
         } else if (amqType == 0x85 || amqType == 0x95) {
             Value* subval(new Value(TYPE_LSTR));
             subval->setString(fvalue.get<string>().c_str());



---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:commits-subscribe@qpid.apache.org