From c514065c70e7f0dcff87b3daccfdd8978c10d1c8 Mon Sep 17 00:00:00 2001 From: Claudiu Belu Date: Wed, 10 Feb 2016 23:56:05 +0200 Subject: [PATCH] Fixes hex decoding related unit tests Uses codecs module in order to decode hex. Enables keymgr unit tests for gate-nova-python34. Enables volume.encryptors unit tests for gate-nova-python34. Partially Implements: blueprint nova-python3-newton Change-Id: I43504da03c42c6b684da0ca1c3640c31a9843a45 --- nova/keymgr/mock_key_mgr.py | 6 ++++-- nova/keymgr/single_key_mgr.py | 2 +- nova/tests/unit/keymgr/test_barbican.py | 2 +- nova/tests/unit/keymgr/test_conf_key_mgr.py | 4 +++- nova/tests/unit/keymgr/test_key.py | 5 ++++- nova/tests/unit/keymgr/test_mock_key_mgr.py | 7 +++++-- nova/tests/unit/keymgr/test_single_key_mgr.py | 5 ++++- nova/tests/unit/volume/encryptors/test_cryptsetup.py | 5 ++++- tests-py3.txt | 7 ------- 9 files changed, 26 insertions(+), 17 deletions(-) diff --git a/nova/keymgr/mock_key_mgr.py b/nova/keymgr/mock_key_mgr.py index dcd76050e4e2..ab947c1cb2f7 100644 --- a/nova/keymgr/mock_key_mgr.py +++ b/nova/keymgr/mock_key_mgr.py @@ -27,6 +27,7 @@ this class. """ import array +import codecs from oslo_log import log as logging from oslo_utils import uuidutils @@ -39,6 +40,7 @@ from nova import utils LOG = logging.getLogger(__name__) +decode_hex = codecs.getdecoder("hex_codec") class MockKeyManager(key_mgr.KeyManager): @@ -60,14 +62,14 @@ class MockKeyManager(key_mgr.KeyManager): def _generate_hex_key(self, **kwargs): key_length = kwargs.get('key_length', 256) # hex digit => 4 bits - hex_encoded = utils.generate_password(length=key_length / 4, + hex_encoded = utils.generate_password(length=key_length // 4, symbolgroups='0123456789ABCDEF') return hex_encoded def _generate_key(self, **kwargs): _hex = self._generate_hex_key(**kwargs) return key.SymmetricKey('AES', - array.array('B', _hex.decode('hex')).tolist()) + array.array('B', decode_hex(_hex)[0]).tolist()) def create_key(self, ctxt, **kwargs): """Creates a key. diff --git a/nova/keymgr/single_key_mgr.py b/nova/keymgr/single_key_mgr.py index f12b35e8fe30..6cf0e75670ab 100644 --- a/nova/keymgr/single_key_mgr.py +++ b/nova/keymgr/single_key_mgr.py @@ -49,7 +49,7 @@ class SingleKeyManager(mock_key_mgr.MockKeyManager): def _generate_hex_key(self, **kwargs): key_length = kwargs.get('key_length', 256) - return '0' * (key_length / 4) # hex digit => 4 bits + return b'0' * (key_length // 4) # hex digit => 4 bits def _generate_key_id(self): return self.key_id diff --git a/nova/tests/unit/keymgr/test_barbican.py b/nova/tests/unit/keymgr/test_barbican.py index 0028acf40d33..f8274c362c67 100644 --- a/nova/tests/unit/keymgr/test_barbican.py +++ b/nova/tests/unit/keymgr/test_barbican.py @@ -195,7 +195,7 @@ class BarbicanKeyManagerTestCase(test_key_mgr.KeyManagerTestCase): returned_uuid = self.key_mgr.store_key(self.ctxt, _key, bit_length=32) self.create.assert_called_once_with('Nova Compute Key', - 'AQKgsw==', + b'AQKgsw==', 'application/octet-stream', 'base64', 'AES', 32, 'CBC', diff --git a/nova/tests/unit/keymgr/test_conf_key_mgr.py b/nova/tests/unit/keymgr/test_conf_key_mgr.py index ee9b5a2cc282..060e0a5fffa2 100644 --- a/nova/tests/unit/keymgr/test_conf_key_mgr.py +++ b/nova/tests/unit/keymgr/test_conf_key_mgr.py @@ -18,6 +18,7 @@ Test cases for the conf key manager. """ import array +import codecs from oslo_config import cfg @@ -28,6 +29,7 @@ from nova.tests.unit.keymgr import test_single_key_mgr CONF = cfg.CONF CONF.import_opt('fixed_key', 'nova.keymgr.conf_key_mgr', group='keymgr') +decode_hex = codecs.getdecoder("hex_codec") class ConfKeyManagerTestCase(test_single_key_mgr.SingleKeyManagerTestCase): @@ -43,7 +45,7 @@ class ConfKeyManagerTestCase(test_single_key_mgr.SingleKeyManagerTestCase): def setUp(self): super(ConfKeyManagerTestCase, self).setUp() - encoded_key = array.array('B', self._hex_key.decode('hex')).tolist() + encoded_key = array.array('B', decode_hex(self._hex_key)[0]).tolist() self.key = key.SymmetricKey('AES', encoded_key) def test_init(self): diff --git a/nova/tests/unit/keymgr/test_key.py b/nova/tests/unit/keymgr/test_key.py index 14766fd20178..ba08567f29a1 100644 --- a/nova/tests/unit/keymgr/test_key.py +++ b/nova/tests/unit/keymgr/test_key.py @@ -18,10 +18,13 @@ Test cases for the key classes. """ import array +import codecs from nova.keymgr import key from nova import test +decode_hex = codecs.getdecoder("hex_codec") + class KeyTestCase(test.NoDBTestCase): @@ -41,7 +44,7 @@ class SymmetricKeyTestCase(KeyTestCase): def setUp(self): self.algorithm = 'AES' - self.encoded = array.array('B', ('0' * 64).decode('hex')).tolist() + self.encoded = array.array('B', decode_hex('0' * 64)[0]).tolist() super(SymmetricKeyTestCase, self).setUp() diff --git a/nova/tests/unit/keymgr/test_mock_key_mgr.py b/nova/tests/unit/keymgr/test_mock_key_mgr.py index 9d0c2174d1c4..46f5c5ffa172 100644 --- a/nova/tests/unit/keymgr/test_mock_key_mgr.py +++ b/nova/tests/unit/keymgr/test_mock_key_mgr.py @@ -18,6 +18,7 @@ Test cases for the mock key manager. """ import array +import codecs from nova import context from nova import exception @@ -25,6 +26,8 @@ from nova.keymgr import key as keymgr_key from nova.keymgr import mock_key_mgr from nova.tests.unit.keymgr import test_key_mgr +decode_hex = codecs.getdecoder("hex_codec") + class MockKeyManagerTestCase(test_key_mgr.KeyManagerTestCase): @@ -46,14 +49,14 @@ class MockKeyManagerTestCase(test_key_mgr.KeyManagerTestCase): for length in [64, 128, 256]: key_id = self.key_mgr.create_key(self.ctxt, key_length=length) key = self.key_mgr.get_key(self.ctxt, key_id) - self.assertEqual(length / 8, len(key.get_encoded())) + self.assertEqual(length // 8, len(key.get_encoded())) def test_create_null_context(self): self.assertRaises(exception.Forbidden, self.key_mgr.create_key, None) def test_store_key(self): - secret_key = array.array('B', ('0' * 64).decode('hex')).tolist() + secret_key = array.array('B', decode_hex('0' * 64)[0]).tolist() _key = keymgr_key.SymmetricKey('AES', secret_key) key_id = self.key_mgr.store_key(self.ctxt, _key) diff --git a/nova/tests/unit/keymgr/test_single_key_mgr.py b/nova/tests/unit/keymgr/test_single_key_mgr.py index 3cf1de8da278..984bf032a0eb 100644 --- a/nova/tests/unit/keymgr/test_single_key_mgr.py +++ b/nova/tests/unit/keymgr/test_single_key_mgr.py @@ -18,12 +18,15 @@ Test cases for the single key manager. """ import array +import codecs from nova import exception from nova.keymgr import key from nova.keymgr import single_key_mgr from nova.tests.unit.keymgr import test_mock_key_mgr +decode_hex = codecs.getdecoder("hex_codec") + class SingleKeyManagerTestCase(test_mock_key_mgr.MockKeyManagerTestCase): @@ -34,7 +37,7 @@ class SingleKeyManagerTestCase(test_mock_key_mgr.MockKeyManagerTestCase): super(SingleKeyManagerTestCase, self).setUp() self.key_id = '00000000-0000-0000-0000-000000000000' - encoded = array.array('B', ('0' * 64).decode('hex')).tolist() + encoded = array.array('B', decode_hex('0' * 64)[0]).tolist() self.key = key.SymmetricKey('AES', encoded) def test___init__(self): diff --git a/nova/tests/unit/volume/encryptors/test_cryptsetup.py b/nova/tests/unit/volume/encryptors/test_cryptsetup.py index b26d0aa293ae..175c88fd4b1f 100644 --- a/nova/tests/unit/volume/encryptors/test_cryptsetup.py +++ b/nova/tests/unit/volume/encryptors/test_cryptsetup.py @@ -15,6 +15,7 @@ import array +import codecs import mock import six @@ -24,9 +25,11 @@ from nova.keymgr import key from nova.tests.unit.volume.encryptors import test_base from nova.volume.encryptors import cryptsetup +decode_hex = codecs.getdecoder("hex_codec") + def fake__get_key(context): - raw = array.array('B', ('0' * 64).decode('hex')).tolist() + raw = array.array('B', decode_hex('0' * 64)[0]).tolist() symmetric_key = key.SymmetricKey('AES', raw) return symmetric_key diff --git a/tests-py3.txt b/tests-py3.txt index e37fe7466574..4e2bae7f5c46 100644 --- a/tests-py3.txt +++ b/tests-py3.txt @@ -82,11 +82,6 @@ nova.tests.unit.db.test_migrations.TestNovaMigrationsMySQL nova.tests.unit.db.test_migrations.TestNovaMigrationsPostgreSQL nova.tests.unit.db.test_migrations.TestNovaMigrationsSQLite nova.tests.unit.image.test_fake.FakeImageServiceTestCase -nova.tests.unit.keymgr.test_barbican.BarbicanKeyManagerTestCase -nova.tests.unit.keymgr.test_conf_key_mgr.ConfKeyManagerTestCase -nova.tests.unit.keymgr.test_key.SymmetricKeyTestCase -nova.tests.unit.keymgr.test_mock_key_mgr.MockKeyManagerTestCase -nova.tests.unit.keymgr.test_single_key_mgr.SingleKeyManagerTestCase nova.tests.unit.network.test_manager.LdapDNSTestCase nova.tests.unit.pci.test_manager.PciDevTrackerTestCase nova.tests.unit.pci.test_stats.PciDeviceStatsTestCase @@ -188,8 +183,6 @@ nova.tests.unit.virt.xenapi.test_xenapi.HypervisorPoolTestCase nova.tests.unit.virt.xenapi.test_xenapi.XenAPIDiffieHellmanTestCase nova.tests.unit.virt.xenapi.test_xenapi.XenAPIDom0IptablesFirewallTestCase nova.tests.unit.virt.xenapi.test_xenapi.XenAPIVMTestCase -nova.tests.unit.volume.encryptors.test_cryptsetup.CryptsetupEncryptorTestCase -nova.tests.unit.volume.encryptors.test_luks.LuksEncryptorTestCase nova.tests.unit.volume.test_cinder.CinderApiTestCase ##########################################################################