Files
neutron-lib/neutron_lib/tests/unit/api/test_conversions.py
Doug Wiegley 285236706a Move some common test and framework goo into neutron-lib
Also fix an issue with ignoring some of the unit tests, moving them all
under the right subdir, and do not overload the tests.base name.

This commit used to contain the move of the rpc code, but that is now
in a child commit.

Partially-Implements: blueprint neutron-lib
Change-Id: Iae9fe970cd2a76305a74804d93a912e476060f1e
2016-01-29 23:45:49 -07:00

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 as base
from neutron_lib.tests import _tools as tools
class TestConvertToBoolean(base.BaseTestCase):
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.BaseTestCase):
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.BaseTestCase):
# 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.BaseTestCase):
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.BaseTestCase):
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))