You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by kp...@apache.org on 2020/08/12 14:53:40 UTC
[qpid-proton] 02/02: PROTON-2237: Finalized handling property keys,
added tests for these cases.
This is an automated email from the ASF dual-hosted git repository.
kpvdr pushed a commit to branch python-check-property-keys
in repository https://gitbox.apache.org/repos/asf/qpid-proton.git
commit 08db56e14045896057c483592d0230890643cace
Author: Kim van der Riet <kp...@apache.org>
AuthorDate: Wed Aug 12 10:53:21 2020 -0400
PROTON-2237: Finalized handling property keys, added tests for these cases.
---
python/proton/_message.py | 6 ++--
python/tests/proton_tests/message.py | 63 +++++++++++++++++++++++++-----------
2 files changed, 47 insertions(+), 22 deletions(-)
diff --git a/python/proton/_message.py b/python/proton/_message.py
index 16556be..cdaaf2f 100644
--- a/python/proton/_message.py
+++ b/python/proton/_message.py
@@ -34,7 +34,7 @@ from cproton import PN_DEFAULT_PRIORITY, PN_OVERFLOW, pn_error_text, pn_message,
from . import _compat
from ._common import isinteger, millis2secs, secs2millis, unicode2utf8, utf82unicode
-from ._data import char, Data, symbol, ulong, AnnotationDict
+from ._data import char, Data, decimal128, symbol, ulong, AnnotationDict
from ._endpoints import Link
from ._exceptions import EXCEPTIONS, MessageException
@@ -97,10 +97,10 @@ class Message(object):
if not type(k) is unicode:
self.properties[unicode(k)] = self.properties.pop(k)
continue
- # If key is binary then change to string
+ # If key is binary then change to string. Exclude bytes subclass decimal128.
# Mostly for py2 users who encode strings without using the u'' prefix
# but py3 bytes() type will be converted also
- elif isinstance(k, bytes):
+ elif isinstance(k, bytes) and not (type(k) is decimal128):
self.properties[k.decode('utf-8')] = self.properties.pop(k)
else:
raise MessageException('Application property key is not string type: key=%s %s' % (str(k), type(k)))
diff --git a/python/tests/proton_tests/message.py b/python/tests/proton_tests/message.py
index d819096..4363168 100644
--- a/python/tests/proton_tests/message.py
+++ b/python/tests/proton_tests/message.py
@@ -108,6 +108,10 @@ class AccessorsTest(Test):
self._test_str("reply_to_group_id")
try:
+ long()
+except NameError:
+ long = int
+try:
unicode()
except NameError:
unicode = str
@@ -129,7 +133,7 @@ class CodecTest(Test):
return 'MyStringSubclass(%s)' % unicode.__repr__(self)
def testStringSubclassPropertyKey(self):
- self.msg.properties = {CodecTest.MyStringSubclass('abc'): 123}
+ self.msg.properties = {'abc': 123, CodecTest.MyStringSubclass('def'): 456}
data = self.msg.encode()
msg2 = Message()
@@ -137,29 +141,50 @@ class CodecTest(Test):
assert msg2.properties == self.msg.properties
- def testNonStringPropertyKey(self):
- self.msg.properties = {123: 'abc'}
- try:
- self.msg.encode()
- except MessageException:
- return
- assert True, '%s: non-string key' % self.msg
+ def testBinaryPropertyKey(self):
+ self.msg.properties = {'abc': 123, b'def': 456}
+ data = self.msg.encode()
- def testSymbolPropertyKey(self):
- self.msg.properties = {symbol('abc'): 'def'}
+ msg2 = Message()
+ msg2.decode(data)
+
+ assert msg2.properties == self.msg.properties
+
+ def _testNonStringPropertyKey(self, k):
+ self.msg.properties = {k: 'abc'}
try:
- self.msg.encode()
+ self.msg.encode()
except MessageException:
- return
- assert True, '%s: symbol key' % self.msg
+ return
+ self.fail('Non-string property key: %s, key type: %s' % (self.msg, type(k)))
+
+ def testNonSequencePropertyKeys(self):
+ # AMQP non-string types
+ self._testNonStringPropertyKey(None)
+ self._testNonStringPropertyKey(True)
+ self._testNonStringPropertyKey(byte(1))
+ self._testNonStringPropertyKey(ubyte(2))
+ self._testNonStringPropertyKey(short(3))
+ self._testNonStringPropertyKey(ushort(4))
+ self._testNonStringPropertyKey(int32(5))
+ self._testNonStringPropertyKey(uint(6))
+ self._testNonStringPropertyKey(long(7))
+ self._testNonStringPropertyKey(ulong(8))
+ self._testNonStringPropertyKey(float32(9.0))
+ self._testNonStringPropertyKey(10.0)
+ self._testNonStringPropertyKey(decimal32(11))
+ self._testNonStringPropertyKey(decimal64(12))
+ self._testNonStringPropertyKey(timestamp(1234567890))
+ self._testNonStringPropertyKey(uuid4())
def testCharPropertyKey(self):
- self.msg.properties = {char('a'): 'bcd'}
- try:
- self.msg.encode()
- except MessageException:
- return
- assert True, '%s: char key' % self.msg
+ self._testNonStringPropertyKey(char('A'))
+
+ def testDecimal128PropertyKey(self):
+ self._testNonStringPropertyKey(decimal128(b'12345'))
+
+ def testSymbolPropertyKey(self):
+ self._testNonStringPropertyKey(symbol('abcdef'))
def testAnnotationsSymbolicAndUlongKey(self, a={symbol('one'): 1, 'two': 2, ulong(3): 'three'}):
self.msg.annotations = a
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org