From 3d54459c2971f01581354c8a6b9c58abea7743d8 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 --- 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 a8b79e99f..4040d524c 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 f6aee3da9..be13c3c86 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 @@ -703,3 +704,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)) -- 2.45.2