From 64d30343a141519bbec2c5424a6884b2e5a59485 Mon Sep 17 00:00:00 2001 From: Peter Hamilton Date: Tue, 16 Jun 2015 14:33:56 -0400 Subject: [PATCH] Adding test case for bug with unsigned Enumeration encoding This change adds a test case that verifies a fix for a bug with how Enumerations were encoded as signed instead of unsigned integers. The validation check for Enumerations has also been updated to be more concise. --- kmip/core/primitives.py | 7 +++---- .../tests/unit/core/primitives/test_primitives.py | 15 +++++++++++++++ 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/kmip/core/primitives.py b/kmip/core/primitives.py index 8779364..37dd292 100644 --- a/kmip/core/primitives.py +++ b/kmip/core/primitives.py @@ -415,10 +415,9 @@ class Enumeration(Integer): def __validate(self): if self.enum is not None: - if type(self.enum) is not self.ENUM_TYPE: - msg = ErrorStrings.BAD_EXP_RECV - raise TypeError(msg.format(Enumeration.__name__, 'value', - Enum, type(self.enum))) + if not isinstance(self.enum, Enum): + raise TypeError("expected {0}, observed {1}".format( + type(self.enum), Enum)) def __repr__(self): return "{0}(value={1})".format(type(self).__name__, self.enum) diff --git a/kmip/tests/unit/core/primitives/test_primitives.py b/kmip/tests/unit/core/primitives/test_primitives.py index 6c0086e..12a7778 100644 --- a/kmip/tests/unit/core/primitives/test_primitives.py +++ b/kmip/tests/unit/core/primitives/test_primitives.py @@ -18,6 +18,7 @@ from testtools import TestCase from kmip.core.enums import Tags from kmip.core.enums import Types +from kmip.core.enums import OpaqueDataType from kmip.core.utils import BytearrayStream @@ -905,6 +906,20 @@ class TestEnumeration(TestCase): len_rcv)) self.assertEqual(encoding, result, self.bad_encoding) + def test_write_unsigned(self): + """ + Test that a large enumeration value is written correctly as an + unsigned integer. + """ + encoding = (b'\x42\x00\x00\x05\x00\x00\x00\x04\x80\x00\x00\x00\x00\x00' + b'\x00\x00') + e = Enumeration(OpaqueDataType.NONE) + e.write(self.stream) + result = self.stream.read() + + self.assertEqual(len(encoding), len(result)) + self.assertEqual(encoding, result) + class TestBoolean(TestCase):