From 38a436a3eb3879078f848cc7b68942f174d9bb11 Mon Sep 17 00:00:00 2001 From: Artur Korzeniewski Date: Tue, 9 Feb 2016 10:31:10 +0100 Subject: [PATCH] OVO common enum class for IPv6 modes. Change-Id: I383c59b52adda47fe1f96fb6e99e4c24955690f3 --- neutron/objects/common_types.py | 29 +++++++++ .../tests/unit/objects/test_common_types.py | 60 +++++++++++++++++++ 2 files changed, 89 insertions(+) create mode 100644 neutron/objects/common_types.py create mode 100644 neutron/tests/unit/objects/test_common_types.py diff --git a/neutron/objects/common_types.py b/neutron/objects/common_types.py new file mode 100644 index 00000000000..ad27327bc61 --- /dev/null +++ b/neutron/objects/common_types.py @@ -0,0 +1,29 @@ +# Copyright 2016 OpenStack Foundation +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +from oslo_versionedobjects import fields as obj_fields + +from neutron.common import constants + + +class IPV6ModeEnum(obj_fields.Enum): + """IPV6 Mode custom Enum""" + def __init__(self, **kwargs): + super(IPV6ModeEnum, self).__init__(valid_values=constants.IPV6_MODES, + **kwargs) + + +class IPV6ModeEnumField(obj_fields.BaseEnumField): + def __init__(self, **kwargs): + self.AUTO_TYPE = IPV6ModeEnum() + super(IPV6ModeEnumField, self).__init__(**kwargs) diff --git a/neutron/tests/unit/objects/test_common_types.py b/neutron/tests/unit/objects/test_common_types.py new file mode 100644 index 00000000000..a2b967edc69 --- /dev/null +++ b/neutron/tests/unit/objects/test_common_types.py @@ -0,0 +1,60 @@ +# Copyright 2016 OpenStack Foundation +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +from neutron.common import constants +from neutron.objects import common_types +from neutron.tests import base as test_base + + +class TestField(object): + + def test_coerce_good_values(self): + for in_val, out_val in self.coerce_good_values: + self.assertEqual(out_val, self.field.coerce('obj', 'attr', in_val)) + + def test_coerce_bad_values(self): + for in_val in self.coerce_bad_values: + self.assertRaises((TypeError, ValueError), + self.field.coerce, 'obj', 'attr', in_val) + + def test_to_primitive(self): + for in_val, prim_val in self.to_primitive_values: + self.assertEqual(prim_val, self.field.to_primitive('obj', 'attr', + in_val)) + + def test_from_primitive(self): + class ObjectLikeThing(object): + _context = 'context' + + for prim_val, out_val in self.from_primitive_values: + self.assertEqual(out_val, self.field.from_primitive( + ObjectLikeThing, 'attr', prim_val)) + + def test_stringify(self): + for in_val, out_val in self.coerce_good_values: + self.assertEqual("'%s'" % in_val, self.field.stringify(in_val)) + + def test_stringify_invalid(self): + for in_val in self.coerce_bad_values: + self.assertRaises(ValueError, self.field.stringify, in_val) + + +class IPV6ModeEnumFieldTest(test_base.BaseTestCase, TestField): + def setUp(self): + super(IPV6ModeEnumFieldTest, self).setUp() + self.field = common_types.IPV6ModeEnumField() + self.coerce_good_values = [(mode, mode) + for mode in constants.IPV6_MODES] + self.coerce_bad_values = ['6', 4, 'type', 'slaacc'] + self.to_primitive_values = self.coerce_good_values + self.from_primitive_values = self.coerce_good_values