From 5afd046d53fd6cca4ad8b28ed37586f9d352a315 Mon Sep 17 00:00:00 2001 From: Cyril Roelandt Date: Fri, 14 Aug 2015 14:40:51 +0200 Subject: [PATCH] Python 3: fix test_utils In Python 3, the error message returned when unpacking too many values is a bit different from the one we see in Python 2: Python 2: ValueError: too many values to unpack Python 3: ValueError: too many values to unpack (expected ) Blueprint: neutron-python3 Change-Id: Ib607a526c007567a370c521fd7e2e4f8b504b934 --- neutron/common/utils.py | 2 +- neutron/tests/unit/common/test_utils.py | 17 ++++++++++------- tox.ini | 1 + 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/neutron/common/utils.py b/neutron/common/utils.py index 00b615b7773..f628904719b 100644 --- a/neutron/common/utils.py +++ b/neutron/common/utils.py @@ -263,7 +263,7 @@ def str2dict(string): def dict2tuple(d): - items = d.items() + items = list(d.items()) items.sort() return tuple(items) diff --git a/neutron/tests/unit/common/test_utils.py b/neutron/tests/unit/common/test_utils.py index b604bbb27ae..f6aee3da935 100644 --- a/neutron/tests/unit/common/test_utils.py +++ b/neutron/tests/unit/common/test_utils.py @@ -137,7 +137,7 @@ class TestVxlanTunnelRangeVerifyValid(TestParseTunnelRangesMixin, class UtilTestParseVlanRanges(base.BaseTestCase): _err_prefix = "Invalid network VLAN range: '" _err_too_few = "' - 'need more than 2 values to unpack'" - _err_too_many = "' - 'too many values to unpack'" + _err_too_many_prefix = "' - 'too many values to unpack" _err_not_int = "' - 'invalid literal for int() with base 10: '%s''" _err_bad_vlan = "' - '%s is not a valid VLAN tag'" _err_range = "' - 'End of VLAN range is less than start of VLAN range'" @@ -145,8 +145,8 @@ class UtilTestParseVlanRanges(base.BaseTestCase): def _range_too_few_err(self, nv_range): return self._err_prefix + nv_range + self._err_too_few - def _range_too_many_err(self, nv_range): - return self._err_prefix + nv_range + self._err_too_many + def _range_too_many_err_prefix(self, nv_range): + return self._err_prefix + nv_range + self._err_too_many_prefix def _vlan_not_int_err(self, nv_range, vlan): return self._err_prefix + nv_range + (self._err_not_int % vlan) @@ -267,10 +267,13 @@ class TestParseOneVlanRange(UtilTestParseVlanRanges): def test_parse_one_net_range_too_many(self): config_str = "net1:100:150:200" - expected_msg = self._range_too_many_err(config_str) + expected_msg_prefix = self._range_too_many_err_prefix(config_str) err = self.assertRaises(n_exc.NetworkVlanRangeError, self.parse_one, config_str) - self.assertEqual(str(err), expected_msg) + # The error message is not same in Python 2 and Python 3. In Python 3, + # it depends on the amount of values used when unpacking, so it cannot + # be predicted as a fixed string. + self.assertTrue(str(err).startswith(expected_msg_prefix)) def test_parse_one_net_vlan1_not_int(self): config_str = "net1:foo:199" @@ -463,8 +466,8 @@ class TestCachingDecorator(base.BaseTestCase): class TestDict2Tuples(base.BaseTestCase): def test_dict(self): - input_dict = {'foo': 'bar', 42: 'baz', 'aaa': 'zzz'} - expected = ((42, 'baz'), ('aaa', 'zzz'), ('foo', 'bar')) + input_dict = {'foo': 'bar', '42': 'baz', 'aaa': 'zzz'} + expected = (('42', 'baz'), ('aaa', 'zzz'), ('foo', 'bar')) output_tuple = utils.dict2tuple(input_dict) self.assertEqual(expected, output_tuple) diff --git a/tox.ini b/tox.ini index db15ec3dafd..2d24598b7d0 100644 --- a/tox.ini +++ b/tox.ini @@ -236,6 +236,7 @@ commands = python -m testtools.run \ neutron.tests.unit.extensions.test_providernet \ neutron.tests.unit.callbacks.test_manager \ neutron.tests.unit.hacking.test_checks \ + neutron.tests.unit.common.test_utils \ neutron.tests.unit.common.test_config \ neutron.tests.unit.common.test_rpc \ neutron.tests.unit.common.test_ipv6_utils \