neutron-lib/neutron_lib/tests/unit/api/test_conversions.py

170 lines
6.9 KiB
Python

# Copyright 2012 OpenStack Foundation
# All Rights Reserved.
#
# 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.
import testtools
from neutron_lib.api import converters
from neutron_lib import exceptions as n_exc
from neutron_lib.tests import base
from neutron_lib.tests import tools
class TestConvertToBoolean(base.TestCase):
def test_convert_to_boolean_bool(self):
self.assertIs(converters.convert_to_boolean(True), True)
self.assertIs(converters.convert_to_boolean(False), False)
def test_convert_to_boolean_int(self):
self.assertIs(converters.convert_to_boolean(0), False)
self.assertIs(converters.convert_to_boolean(1), True)
self.assertRaises(n_exc.InvalidInput,
converters.convert_to_boolean,
7)
def test_convert_to_boolean_str(self):
self.assertIs(converters.convert_to_boolean('True'), True)
self.assertIs(converters.convert_to_boolean('true'), True)
self.assertIs(converters.convert_to_boolean('False'), False)
self.assertIs(converters.convert_to_boolean('false'), False)
self.assertIs(converters.convert_to_boolean('0'), False)
self.assertIs(converters.convert_to_boolean('1'), True)
self.assertRaises(n_exc.InvalidInput,
converters.convert_to_boolean,
'7')
def test_convert_to_boolean_if_not_none(self):
self.assertIsNone(converters.convert_to_boolean_if_not_none(None))
self.assertIs(converters.convert_to_boolean_if_not_none(1), True)
class TestConvertToInt(base.TestCase):
def test_convert_to_int_int(self):
self.assertEqual(-1, converters.convert_to_int(-1))
self.assertEqual(0, converters.convert_to_int(0))
self.assertEqual(1, converters.convert_to_int(1))
def test_convert_to_int_if_not_none(self):
self.assertEqual(-1, converters.convert_to_int_if_not_none(-1))
self.assertEqual(0, converters.convert_to_int_if_not_none(0))
self.assertEqual(1, converters.convert_to_int_if_not_none(1))
self.assertIsNone(converters.convert_to_int_if_not_none(None))
def test_convert_to_int_str(self):
self.assertEqual(4, converters.convert_to_int('4'))
self.assertEqual(6, converters.convert_to_int('6'))
self.assertRaises(n_exc.InvalidInput,
converters.convert_to_int,
'garbage')
def test_convert_to_int_none(self):
self.assertRaises(n_exc.InvalidInput,
converters.convert_to_int,
None)
def test_convert_none_to_empty_list_none(self):
self.assertEqual([], converters.convert_none_to_empty_list(None))
def test_convert_none_to_empty_dict(self):
self.assertEqual({}, converters.convert_none_to_empty_dict(None))
def test_convert_none_to_empty_list_value(self):
values = ['1', 3, [], [1], {}, {'a': 3}]
for value in values:
self.assertEqual(
value, converters.convert_none_to_empty_list(value))
class TestConvertToFloat(base.TestCase):
# NOTE: the routine being tested here is a plugin-specific extension
# module. As the plugin split proceed towards its second phase this
# test should either be remove, or the validation routine moved into
# neutron.api.v2.attributes
def test_convert_to_float_positve_value(self):
self.assertEqual(
1.111, converters.convert_to_positive_float_or_none(1.111))
self.assertEqual(1, converters.convert_to_positive_float_or_none(1))
self.assertEqual(0, converters.convert_to_positive_float_or_none(0))
def test_convert_to_float_negative_value(self):
self.assertRaises(n_exc.InvalidInput,
converters.convert_to_positive_float_or_none,
-1.11)
def test_convert_to_float_string(self):
self.assertEqual(4, converters.convert_to_positive_float_or_none('4'))
self.assertEqual(
4.44, converters.convert_to_positive_float_or_none('4.44'))
self.assertRaises(n_exc.InvalidInput,
converters.convert_to_positive_float_or_none,
'garbage')
def test_convert_to_float_none_value(self):
self.assertIsNone(converters.convert_to_positive_float_or_none(None))
class TestConvertKvp(base.TestCase):
def test_convert_kvp_list_to_dict_succeeds_for_missing_values(self):
result = converters.convert_kvp_list_to_dict(['True'])
self.assertEqual({}, result)
def test_convert_kvp_list_to_dict_succeeds_for_multiple_values(self):
result = converters.convert_kvp_list_to_dict(
['a=b', 'a=c', 'a=c', 'b=a'])
expected = {'a': tools.UnorderedList(['c', 'b']), 'b': ['a']}
self.assertEqual(expected, result)
def test_convert_kvp_list_to_dict_succeeds_for_values(self):
result = converters.convert_kvp_list_to_dict(['a=b', 'c=d'])
self.assertEqual({'a': ['b'], 'c': ['d']}, result)
def test_convert_kvp_str_to_list_fails_for_missing_key(self):
with testtools.ExpectedException(n_exc.InvalidInput):
converters.convert_kvp_str_to_list('=a')
def test_convert_kvp_str_to_list_fails_for_missing_equals(self):
with testtools.ExpectedException(n_exc.InvalidInput):
converters.convert_kvp_str_to_list('a')
def test_convert_kvp_str_to_list_succeeds_for_one_equals(self):
result = converters.convert_kvp_str_to_list('a=')
self.assertEqual(['a', ''], result)
def test_convert_kvp_str_to_list_succeeds_for_two_equals(self):
result = converters.convert_kvp_str_to_list('a=a=a')
self.assertEqual(['a', 'a=a'], result)
class TestConvertToList(base.TestCase):
def test_convert_to_empty_list(self):
for item in (None, [], (), {}):
self.assertEqual([], converters.convert_to_list(item))
def test_convert_to_list_string(self):
for item in ('', 'foo'):
self.assertEqual([item], converters.convert_to_list(item))
def test_convert_to_list_iterable(self):
for item in ([None], [1, 2, 3], (1, 2, 3), set([1, 2, 3]), ['foo']):
self.assertEqual(list(item), converters.convert_to_list(item))
def test_convert_to_list_non_iterable(self):
for item in (True, False, 1, 1.2, object()):
self.assertEqual([item], converters.convert_to_list(item))