/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 3d54459c29)
This commit is contained in:
Bogdan Tabor 2015-09-23 10:52:25 +02:00 committed by armando-migliaccio
parent fa2b18c45a
commit 677687a3aa
2 changed files with 12 additions and 1 deletions

View File

@ -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]

View File

@ -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))