From 677687a3aad20e61f47b3ecbc9b0f4686e817653 Mon Sep 17 00:00:00 2001 From: Bogdan Tabor Date: Wed, 23 Sep 2015 10:52:25 +0200 Subject: [PATCH] /common/utils.py py34 incompatibility Fixes bug found during unit test of get_random_string() method. For Python3 it is required to encode string as bytes object before hashing. Related-blueprint: neutron-python3 Closes-bug: #1502148 Change-Id: I93061a831b45fc8b3ede0211af665ce02f36f38a (cherry picked from commit 3d54459c2971f01581354c8a6b9c58abea7743d8) --- neutron/common/utils.py | 3 ++- neutron/tests/unit/common/test_utils.py | 10 ++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/neutron/common/utils.py b/neutron/common/utils.py index da003b9ae5d..1fe6ab1ce5c 100644 --- a/neutron/common/utils.py +++ b/neutron/common/utils.py @@ -312,7 +312,8 @@ def get_random_string(length): rndstr = "" random.seed(datetime.datetime.now().microsecond) while len(rndstr) < length: - rndstr += hashlib.sha224(str(random.random())).hexdigest() + base_str = str(random.random()).encode('utf-8') + rndstr += hashlib.sha224(base_str).hexdigest() return rndstr[0:length] diff --git a/neutron/tests/unit/common/test_utils.py b/neutron/tests/unit/common/test_utils.py index 973a938dc71..90992606f9d 100644 --- a/neutron/tests/unit/common/test_utils.py +++ b/neutron/tests/unit/common/test_utils.py @@ -13,6 +13,7 @@ # under the License. import errno +import re import eventlet import mock @@ -706,3 +707,12 @@ class TestRoundVal(base.BaseTestCase): (1, 1.49), (2, 1.5)): self.assertEqual(expected, utils.round_val(value)) + + +class TestGetRandomString(base.BaseTestCase): + def test_get_random_string(self): + length = 127 + random_string = utils.get_random_string(length) + self.assertEqual(length, len(random_string)) + regex = re.compile('^[0-9a-fA-F]+$') + self.assertIsNotNone(regex.match(random_string))