Move tests back to neutronclient package
Neutron itself has all of its tests in neutron/tests, as do 2/3 of the projects in OpenStack. There are a wealth of reasons to put them in the package, not the least of which that tests/__init__.py implies a code living in a global namespace called tests. Change-Id: I2aaacfe59d6790648aa4587e89e6dd28a9149a6c
This commit is contained in:

committed by
HenryGessau

parent
4bd681ad4f
commit
e34a06adf0
@@ -1,4 +1,4 @@
|
|||||||
[DEFAULT]
|
[DEFAULT]
|
||||||
test_command=OS_STDOUT_CAPTURE=1 OS_STDERR_CAPTURE=1 ${PYTHON:-python} -m subunit.run discover -t ./ ./tests $LISTOPT $IDOPTION
|
test_command=OS_STDOUT_CAPTURE=1 OS_STDERR_CAPTURE=1 ${PYTHON:-python} -m subunit.run discover -t ./ . $LISTOPT $IDOPTION
|
||||||
test_id_option=--load-list $IDFILE
|
test_id_option=--load-list $IDFILE
|
||||||
test_list_option=--list
|
test_list_option=--list
|
||||||
|
@@ -20,7 +20,7 @@
|
|||||||
import sys
|
import sys
|
||||||
|
|
||||||
from neutronclient.neutron.v2_0.fw import firewall
|
from neutronclient.neutron.v2_0.fw import firewall
|
||||||
from tests.unit import test_cli20
|
from neutronclient.tests.unit import test_cli20
|
||||||
|
|
||||||
|
|
||||||
class CLITestV20FirewallJSON(test_cli20.CLITestV20Base):
|
class CLITestV20FirewallJSON(test_cli20.CLITestV20Base):
|
@@ -23,7 +23,7 @@ import mox
|
|||||||
|
|
||||||
from neutronclient.neutron.v2_0.fw import firewallpolicy
|
from neutronclient.neutron.v2_0.fw import firewallpolicy
|
||||||
from neutronclient import shell
|
from neutronclient import shell
|
||||||
from tests.unit import test_cli20
|
from neutronclient.tests.unit import test_cli20
|
||||||
|
|
||||||
|
|
||||||
class CLITestV20FirewallPolicyJSON(test_cli20.CLITestV20Base):
|
class CLITestV20FirewallPolicyJSON(test_cli20.CLITestV20Base):
|
@@ -20,7 +20,7 @@
|
|||||||
import sys
|
import sys
|
||||||
|
|
||||||
from neutronclient.neutron.v2_0.fw import firewallrule
|
from neutronclient.neutron.v2_0.fw import firewallrule
|
||||||
from tests.unit import test_cli20
|
from neutronclient.tests.unit import test_cli20
|
||||||
|
|
||||||
|
|
||||||
class CLITestV20FirewallRuleJSON(test_cli20.CLITestV20Base):
|
class CLITestV20FirewallRuleJSON(test_cli20.CLITestV20Base):
|
@@ -22,7 +22,7 @@ import sys
|
|||||||
import mox
|
import mox
|
||||||
|
|
||||||
from neutronclient.neutron.v2_0.lb import healthmonitor
|
from neutronclient.neutron.v2_0.lb import healthmonitor
|
||||||
from tests.unit import test_cli20
|
from neutronclient.tests.unit import test_cli20
|
||||||
|
|
||||||
|
|
||||||
class CLITestV20LbHealthmonitorJSON(test_cli20.CLITestV20Base):
|
class CLITestV20LbHealthmonitorJSON(test_cli20.CLITestV20Base):
|
@@ -20,7 +20,7 @@
|
|||||||
import sys
|
import sys
|
||||||
|
|
||||||
from neutronclient.neutron.v2_0.lb import member
|
from neutronclient.neutron.v2_0.lb import member
|
||||||
from tests.unit import test_cli20
|
from neutronclient.tests.unit import test_cli20
|
||||||
|
|
||||||
|
|
||||||
class CLITestV20LbMemberJSON(test_cli20.CLITestV20Base):
|
class CLITestV20LbMemberJSON(test_cli20.CLITestV20Base):
|
@@ -22,7 +22,7 @@ import sys
|
|||||||
import mox
|
import mox
|
||||||
|
|
||||||
from neutronclient.neutron.v2_0.lb import pool
|
from neutronclient.neutron.v2_0.lb import pool
|
||||||
from tests.unit import test_cli20
|
from neutronclient.tests.unit import test_cli20
|
||||||
|
|
||||||
|
|
||||||
class CLITestV20LbPoolJSON(test_cli20.CLITestV20Base):
|
class CLITestV20LbPoolJSON(test_cli20.CLITestV20Base):
|
@@ -20,7 +20,7 @@
|
|||||||
import sys
|
import sys
|
||||||
|
|
||||||
from neutronclient.neutron.v2_0.lb import vip
|
from neutronclient.neutron.v2_0.lb import vip
|
||||||
from tests.unit import test_cli20
|
from neutronclient.tests.unit import test_cli20
|
||||||
|
|
||||||
|
|
||||||
class CLITestV20LbVipJSON(test_cli20.CLITestV20Base):
|
class CLITestV20LbVipJSON(test_cli20.CLITestV20Base):
|
@@ -20,7 +20,7 @@
|
|||||||
import sys
|
import sys
|
||||||
|
|
||||||
from neutronclient.neutron.v2_0 import agentscheduler
|
from neutronclient.neutron.v2_0 import agentscheduler
|
||||||
from tests.unit import test_cli20
|
from neutronclient.tests.unit import test_cli20
|
||||||
|
|
||||||
|
|
||||||
class CLITestV20LBaaSAgentScheduler(test_cli20.CLITestV20Base):
|
class CLITestV20LBaaSAgentScheduler(test_cli20.CLITestV20Base):
|
@@ -20,7 +20,7 @@
|
|||||||
import sys
|
import sys
|
||||||
|
|
||||||
from neutronclient.neutron.v2_0 import credential
|
from neutronclient.neutron.v2_0 import credential
|
||||||
from tests.unit import test_cli20
|
from neutronclient.tests.unit import test_cli20
|
||||||
|
|
||||||
|
|
||||||
class CLITestV20Credential(test_cli20.CLITestV20Base):
|
class CLITestV20Credential(test_cli20.CLITestV20Base):
|
@@ -19,8 +19,8 @@ import sys
|
|||||||
|
|
||||||
from neutronclient.neutron.v2_0.extension import ListExt
|
from neutronclient.neutron.v2_0.extension import ListExt
|
||||||
from neutronclient.neutron.v2_0.extension import ShowExt
|
from neutronclient.neutron.v2_0.extension import ShowExt
|
||||||
from tests.unit.test_cli20 import CLITestV20Base
|
from neutronclient.tests.unit.test_cli20 import CLITestV20Base
|
||||||
from tests.unit.test_cli20 import MyApp
|
from neutronclient.tests.unit.test_cli20 import MyApp
|
||||||
|
|
||||||
|
|
||||||
class CLITestV20Extension(CLITestV20Base):
|
class CLITestV20Extension(CLITestV20Base):
|
@@ -19,7 +19,7 @@
|
|||||||
import sys
|
import sys
|
||||||
|
|
||||||
from neutronclient.neutron.v2_0 import floatingip as fip
|
from neutronclient.neutron.v2_0 import floatingip as fip
|
||||||
from tests.unit import test_cli20
|
from neutronclient.tests.unit import test_cli20
|
||||||
|
|
||||||
|
|
||||||
class CLITestV20FloatingIpsJSON(test_cli20.CLITestV20Base):
|
class CLITestV20FloatingIpsJSON(test_cli20.CLITestV20Base):
|
@@ -22,7 +22,7 @@ from neutronclient.common import exceptions
|
|||||||
from neutronclient.common import utils
|
from neutronclient.common import utils
|
||||||
from neutronclient.neutron.v2_0 import network
|
from neutronclient.neutron.v2_0 import network
|
||||||
from neutronclient import shell
|
from neutronclient import shell
|
||||||
from tests.unit import test_cli20
|
from neutronclient.tests.unit import test_cli20
|
||||||
|
|
||||||
|
|
||||||
class CLITestV20NetworkJSON(test_cli20.CLITestV20Base):
|
class CLITestV20NetworkJSON(test_cli20.CLITestV20Base):
|
@@ -20,7 +20,7 @@
|
|||||||
import sys
|
import sys
|
||||||
|
|
||||||
from neutronclient.neutron.v2_0 import networkprofile
|
from neutronclient.neutron.v2_0 import networkprofile
|
||||||
from tests.unit import test_cli20
|
from neutronclient.tests.unit import test_cli20
|
||||||
|
|
||||||
|
|
||||||
class CLITestV20NetworkProfile(test_cli20.CLITestV20Base):
|
class CLITestV20NetworkProfile(test_cli20.CLITestV20Base):
|
@@ -19,7 +19,7 @@
|
|||||||
import sys
|
import sys
|
||||||
|
|
||||||
from neutronclient.neutron.v2_0 import nvp_qos_queue as qos
|
from neutronclient.neutron.v2_0 import nvp_qos_queue as qos
|
||||||
from tests.unit import test_cli20
|
from neutronclient.tests.unit import test_cli20
|
||||||
|
|
||||||
|
|
||||||
class CLITestV20NvpQosQueueJSON(test_cli20.CLITestV20Base):
|
class CLITestV20NvpQosQueueJSON(test_cli20.CLITestV20Base):
|
@@ -18,7 +18,7 @@
|
|||||||
import sys
|
import sys
|
||||||
|
|
||||||
from neutronclient.neutron.v2_0 import nvpnetworkgateway as nwgw
|
from neutronclient.neutron.v2_0 import nvpnetworkgateway as nwgw
|
||||||
from tests.unit import test_cli20
|
from neutronclient.tests.unit import test_cli20
|
||||||
|
|
||||||
|
|
||||||
class CLITestV20NetworkGatewayJSON(test_cli20.CLITestV20Base):
|
class CLITestV20NetworkGatewayJSON(test_cli20.CLITestV20Base):
|
@@ -20,7 +20,7 @@
|
|||||||
import sys
|
import sys
|
||||||
|
|
||||||
from neutronclient.neutron.v2_0 import policyprofile
|
from neutronclient.neutron.v2_0 import policyprofile
|
||||||
from tests.unit import test_cli20
|
from neutronclient.tests.unit import test_cli20
|
||||||
|
|
||||||
|
|
||||||
class CLITestV20PolicyProfile(test_cli20.CLITestV20Base):
|
class CLITestV20PolicyProfile(test_cli20.CLITestV20Base):
|
@@ -21,7 +21,7 @@ import mox
|
|||||||
|
|
||||||
from neutronclient.neutron.v2_0 import port
|
from neutronclient.neutron.v2_0 import port
|
||||||
from neutronclient import shell
|
from neutronclient import shell
|
||||||
from tests.unit import test_cli20
|
from neutronclient.tests.unit import test_cli20
|
||||||
|
|
||||||
|
|
||||||
class CLITestV20PortJSON(test_cli20.CLITestV20Base):
|
class CLITestV20PortJSON(test_cli20.CLITestV20Base):
|
@@ -19,7 +19,7 @@ import sys
|
|||||||
|
|
||||||
from neutronclient.common import exceptions
|
from neutronclient.common import exceptions
|
||||||
from neutronclient.neutron.v2_0 import router
|
from neutronclient.neutron.v2_0 import router
|
||||||
from tests.unit import test_cli20
|
from neutronclient.tests.unit import test_cli20
|
||||||
|
|
||||||
|
|
||||||
class CLITestV20RouterJSON(test_cli20.CLITestV20Base):
|
class CLITestV20RouterJSON(test_cli20.CLITestV20Base):
|
@@ -21,7 +21,7 @@ import sys
|
|||||||
import mox
|
import mox
|
||||||
|
|
||||||
from neutronclient.neutron.v2_0 import securitygroup
|
from neutronclient.neutron.v2_0 import securitygroup
|
||||||
from tests.unit import test_cli20
|
from neutronclient.tests.unit import test_cli20
|
||||||
|
|
||||||
|
|
||||||
class CLITestV20SecurityGroupsJSON(test_cli20.CLITestV20Base):
|
class CLITestV20SecurityGroupsJSON(test_cli20.CLITestV20Base):
|
@@ -20,7 +20,7 @@
|
|||||||
import sys
|
import sys
|
||||||
|
|
||||||
from neutronclient.neutron.v2_0 import servicetype
|
from neutronclient.neutron.v2_0 import servicetype
|
||||||
from tests.unit import test_cli20
|
from neutronclient.tests.unit import test_cli20
|
||||||
|
|
||||||
|
|
||||||
class CLITestV20ServiceProvidersJSON(test_cli20.CLITestV20Base):
|
class CLITestV20ServiceProvidersJSON(test_cli20.CLITestV20Base):
|
@@ -18,7 +18,7 @@
|
|||||||
import sys
|
import sys
|
||||||
|
|
||||||
from neutronclient.neutron.v2_0 import subnet
|
from neutronclient.neutron.v2_0 import subnet
|
||||||
from tests.unit import test_cli20
|
from neutronclient.tests.unit import test_cli20
|
||||||
|
|
||||||
|
|
||||||
class CLITestV20SubnetJSON(test_cli20.CLITestV20Base):
|
class CLITestV20SubnetJSON(test_cli20.CLITestV20Base):
|
@@ -20,7 +20,7 @@ import testtools
|
|||||||
|
|
||||||
from neutronclient.client import HTTPClient
|
from neutronclient.client import HTTPClient
|
||||||
from neutronclient.common import exceptions
|
from neutronclient.common import exceptions
|
||||||
from tests.unit.test_cli20 import MyResp
|
from neutronclient.tests.unit.test_cli20 import MyResp
|
||||||
|
|
||||||
|
|
||||||
AUTH_TOKEN = 'test_token'
|
AUTH_TOKEN = 'test_token'
|
@@ -22,8 +22,8 @@ import testtools
|
|||||||
|
|
||||||
from neutronclient.common import exceptions
|
from neutronclient.common import exceptions
|
||||||
from neutronclient.neutron import v2_0 as neutronV20
|
from neutronclient.neutron import v2_0 as neutronV20
|
||||||
|
from neutronclient.tests.unit import test_cli20
|
||||||
from neutronclient.v2_0 import client
|
from neutronclient.v2_0 import client
|
||||||
from tests.unit import test_cli20
|
|
||||||
|
|
||||||
|
|
||||||
class CLITestNameorID(testtools.TestCase):
|
class CLITestNameorID(testtools.TestCase):
|
@@ -19,7 +19,7 @@ import sys
|
|||||||
|
|
||||||
from neutronclient.common import exceptions
|
from neutronclient.common import exceptions
|
||||||
from neutronclient.neutron.v2_0 import quota as test_quota
|
from neutronclient.neutron.v2_0 import quota as test_quota
|
||||||
from tests.unit import test_cli20
|
from neutronclient.tests.unit import test_cli20
|
||||||
|
|
||||||
|
|
||||||
class CLITestV20Quota(test_cli20.CLITestV20Base):
|
class CLITestV20Quota(test_cli20.CLITestV20Base):
|
@@ -1,5 +1,5 @@
|
|||||||
# Copyright 2013 OpenStack LLC.
|
# Copyright (C) 2013 Yahoo! Inc.
|
||||||
# All Rights Reserved
|
# All Rights Reserved.
|
||||||
#
|
#
|
||||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
# 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
|
# not use this file except in compliance with the License. You may obtain
|
||||||
@@ -12,34 +12,179 @@
|
|||||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
# License for the specific language governing permissions and limitations
|
# License for the specific language governing permissions and limitations
|
||||||
# under the License.
|
# under the License.
|
||||||
#
|
|
||||||
# vim: tabstop=4 shiftwidth=4 softtabstop=4
|
# vim: tabstop=4 shiftwidth=4 softtabstop=4
|
||||||
|
|
||||||
|
import datetime
|
||||||
|
import sys
|
||||||
|
|
||||||
import testtools
|
import testtools
|
||||||
|
|
||||||
|
from neutronclient.common import exceptions
|
||||||
from neutronclient.common import utils
|
from neutronclient.common import utils
|
||||||
|
|
||||||
|
|
||||||
class UtilsTest(testtools.TestCase):
|
class TestUtils(testtools.TestCase):
|
||||||
def test_safe_encode_list(self):
|
def test_string_to_bool_true(self):
|
||||||
o = object()
|
self.assertTrue(utils.str2bool('true'))
|
||||||
unicode_text = u'\u7f51\u7edc'
|
|
||||||
l = ['abc', unicode_text, unicode_text.encode('utf-8'), o]
|
|
||||||
expected = ['abc', unicode_text.encode('utf-8'),
|
|
||||||
unicode_text.encode('utf-8'), o]
|
|
||||||
self.assertEqual(utils.safe_encode_list(l), expected)
|
|
||||||
|
|
||||||
def test_safe_encode_dict(self):
|
def test_string_to_bool_false(self):
|
||||||
o = object()
|
self.assertFalse(utils.str2bool('false'))
|
||||||
unicode_text = u'\u7f51\u7edc'
|
|
||||||
d = {'test1': unicode_text,
|
def test_string_to_bool_None(self):
|
||||||
'test2': [unicode_text, o],
|
self.assertIsNone(utils.str2bool(None))
|
||||||
'test3': o,
|
|
||||||
'test4': {'test5': unicode_text},
|
def test_string_to_dictionary(self):
|
||||||
'test6': unicode_text.encode('utf-8')}
|
input_str = 'key1=value1,key2=value2'
|
||||||
expected = {'test1': unicode_text.encode('utf-8'),
|
expected = {'key1': 'value1', 'key2': 'value2'}
|
||||||
'test2': [unicode_text.encode('utf-8'), o],
|
self.assertEqual(expected, utils.str2dict(input_str))
|
||||||
'test3': o,
|
|
||||||
'test4': {'test5': unicode_text.encode('utf-8')},
|
def test_get_dict_item_properties(self):
|
||||||
'test6': unicode_text.encode('utf-8')}
|
item = {'name': 'test_name', 'id': 'test_id'}
|
||||||
self.assertEqual(utils.safe_encode_dict(d), expected)
|
fields = ('name', 'id')
|
||||||
|
actual = utils.get_item_properties(item=item, fields=fields)
|
||||||
|
self.assertEqual(('test_name', 'test_id'), actual)
|
||||||
|
|
||||||
|
def test_get_object_item_properties_mixed_case_fields(self):
|
||||||
|
class Fake(object):
|
||||||
|
def __init__(self):
|
||||||
|
self.id = 'test_id'
|
||||||
|
self.name = 'test_name'
|
||||||
|
self.test_user = 'test'
|
||||||
|
|
||||||
|
fields = ('name', 'id', 'test user')
|
||||||
|
mixed_fields = ('test user', 'ID')
|
||||||
|
item = Fake()
|
||||||
|
actual = utils.get_item_properties(item, fields, mixed_fields)
|
||||||
|
self.assertEqual(('test_name', 'test_id', 'test'), actual)
|
||||||
|
|
||||||
|
def test_get_object_item_desired_fields_differ_from_item(self):
|
||||||
|
class Fake(object):
|
||||||
|
def __init__(self):
|
||||||
|
self.id = 'test_id_1'
|
||||||
|
self.name = 'test_name'
|
||||||
|
self.test_user = 'test'
|
||||||
|
|
||||||
|
fields = ('name', 'id', 'test user')
|
||||||
|
item = Fake()
|
||||||
|
actual = utils.get_item_properties(item, fields)
|
||||||
|
self.assertNotEqual(('test_name', 'test_id', 'test'), actual)
|
||||||
|
|
||||||
|
def test_get_object_item_desired_fields_is_empty(self):
|
||||||
|
class Fake(object):
|
||||||
|
def __init__(self):
|
||||||
|
self.id = 'test_id_1'
|
||||||
|
self.name = 'test_name'
|
||||||
|
self.test_user = 'test'
|
||||||
|
|
||||||
|
fields = []
|
||||||
|
item = Fake()
|
||||||
|
actual = utils.get_item_properties(item, fields)
|
||||||
|
self.assertEqual((), actual)
|
||||||
|
|
||||||
|
def test_get_object_item_with_formatters(self):
|
||||||
|
class Fake(object):
|
||||||
|
def __init__(self):
|
||||||
|
self.id = 'test_id'
|
||||||
|
self.name = 'test_name'
|
||||||
|
self.test_user = 'test'
|
||||||
|
|
||||||
|
class FakeCallable(object):
|
||||||
|
def __call__(self, *args, **kwargs):
|
||||||
|
return 'pass'
|
||||||
|
|
||||||
|
fields = ('name', 'id', 'test user', 'is_public')
|
||||||
|
formatters = {'is_public': FakeCallable()}
|
||||||
|
item = Fake()
|
||||||
|
act = utils.get_item_properties(item, fields, formatters=formatters)
|
||||||
|
self.assertEqual(('test_name', 'test_id', 'test', 'pass'), act)
|
||||||
|
|
||||||
|
|
||||||
|
class JSONUtilsTestCase(testtools.TestCase):
|
||||||
|
def test_dumps(self):
|
||||||
|
self.assertEqual(utils.dumps({'a': 'b'}), '{"a": "b"}')
|
||||||
|
|
||||||
|
def test_dumps_dict_with_date_value(self):
|
||||||
|
x = datetime.datetime(1920, 2, 3, 4, 5, 6, 7)
|
||||||
|
res = utils.dumps({1: 'a', 2: x})
|
||||||
|
expected = '{"1": "a", "2": "1920-02-03 04:05:06.000007"}'
|
||||||
|
self.assertEqual(expected, res)
|
||||||
|
|
||||||
|
def test_dumps_dict_with_spaces(self):
|
||||||
|
x = datetime.datetime(1920, 2, 3, 4, 5, 6, 7)
|
||||||
|
res = utils.dumps({1: 'a ', 2: x})
|
||||||
|
expected = '{"1": "a ", "2": "1920-02-03 04:05:06.000007"}'
|
||||||
|
self.assertEqual(expected, res)
|
||||||
|
|
||||||
|
def test_loads(self):
|
||||||
|
self.assertEqual(utils.loads('{"a": "b"}'), {'a': 'b'})
|
||||||
|
|
||||||
|
|
||||||
|
class ToPrimitiveTestCase(testtools.TestCase):
|
||||||
|
def test_list(self):
|
||||||
|
self.assertEqual(utils.to_primitive([1, 2, 3]), [1, 2, 3])
|
||||||
|
|
||||||
|
def test_empty_list(self):
|
||||||
|
self.assertEqual(utils.to_primitive([]), [])
|
||||||
|
|
||||||
|
def test_tuple(self):
|
||||||
|
self.assertEqual(utils.to_primitive((1, 2, 3)), [1, 2, 3])
|
||||||
|
|
||||||
|
def test_empty_tuple(self):
|
||||||
|
self.assertEqual(utils.to_primitive(()), [])
|
||||||
|
|
||||||
|
def test_dict(self):
|
||||||
|
self.assertEqual(
|
||||||
|
utils.to_primitive(dict(a=1, b=2, c=3)),
|
||||||
|
dict(a=1, b=2, c=3))
|
||||||
|
|
||||||
|
def test_empty_dict(self):
|
||||||
|
self.assertEqual(utils.to_primitive({}), {})
|
||||||
|
|
||||||
|
def test_datetime(self):
|
||||||
|
x = datetime.datetime(1920, 2, 3, 4, 5, 6, 7)
|
||||||
|
self.assertEqual(
|
||||||
|
utils.to_primitive(x),
|
||||||
|
'1920-02-03 04:05:06.000007')
|
||||||
|
|
||||||
|
def test_iter(self):
|
||||||
|
x = xrange(1, 6)
|
||||||
|
self.assertEqual(utils.to_primitive(x), [1, 2, 3, 4, 5])
|
||||||
|
|
||||||
|
def test_iteritems(self):
|
||||||
|
d = {'a': 1, 'b': 2, 'c': 3}
|
||||||
|
|
||||||
|
class IterItemsClass(object):
|
||||||
|
def iteritems(self):
|
||||||
|
return d.iteritems()
|
||||||
|
|
||||||
|
x = IterItemsClass()
|
||||||
|
p = utils.to_primitive(x)
|
||||||
|
self.assertEqual(p, {'a': 1, 'b': 2, 'c': 3})
|
||||||
|
|
||||||
|
def test_nasties(self):
|
||||||
|
def foo():
|
||||||
|
pass
|
||||||
|
x = [datetime, foo, dir]
|
||||||
|
ret = utils.to_primitive(x)
|
||||||
|
self.assertEqual(len(ret), 3)
|
||||||
|
|
||||||
|
def test_to_primitive_dict_with_date_value(self):
|
||||||
|
x = datetime.datetime(1920, 2, 3, 4, 5, 6, 7)
|
||||||
|
res = utils.to_primitive({'a': x})
|
||||||
|
self.assertEqual({'a': '1920-02-03 04:05:06.000007'}, res)
|
||||||
|
|
||||||
|
|
||||||
|
class ImportClassTestCase(testtools.TestCase):
|
||||||
|
def test_import_class(self):
|
||||||
|
dt = utils.import_class('datetime.datetime')
|
||||||
|
self.assertTrue(sys.modules['datetime'].datetime is dt)
|
||||||
|
|
||||||
|
def test_import_bad_class(self):
|
||||||
|
self.assertRaises(
|
||||||
|
ImportError, utils.import_class,
|
||||||
|
'lol.u_mad.brah')
|
||||||
|
|
||||||
|
def test_get_client_class_invalid_version(self):
|
||||||
|
self.assertRaises(
|
||||||
|
exceptions.UnsupportedVersion,
|
||||||
|
utils.get_client_class, 'image', '2', {'image': '2'})
|
||||||
|
@@ -1,190 +0,0 @@
|
|||||||
# Copyright (C) 2013 Yahoo! Inc.
|
|
||||||
# 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.
|
|
||||||
# vim: tabstop=4 shiftwidth=4 softtabstop=4
|
|
||||||
|
|
||||||
import datetime
|
|
||||||
import sys
|
|
||||||
|
|
||||||
import testtools
|
|
||||||
|
|
||||||
from neutronclient.common import exceptions
|
|
||||||
from neutronclient.common import utils
|
|
||||||
|
|
||||||
|
|
||||||
class TestUtils(testtools.TestCase):
|
|
||||||
def test_string_to_bool_true(self):
|
|
||||||
self.assertTrue(utils.str2bool('true'))
|
|
||||||
|
|
||||||
def test_string_to_bool_false(self):
|
|
||||||
self.assertFalse(utils.str2bool('false'))
|
|
||||||
|
|
||||||
def test_string_to_bool_None(self):
|
|
||||||
self.assertIsNone(utils.str2bool(None))
|
|
||||||
|
|
||||||
def test_string_to_dictionary(self):
|
|
||||||
input_str = 'key1=value1,key2=value2'
|
|
||||||
expected = {'key1': 'value1', 'key2': 'value2'}
|
|
||||||
self.assertEqual(expected, utils.str2dict(input_str))
|
|
||||||
|
|
||||||
def test_get_dict_item_properties(self):
|
|
||||||
item = {'name': 'test_name', 'id': 'test_id'}
|
|
||||||
fields = ('name', 'id')
|
|
||||||
actual = utils.get_item_properties(item=item, fields=fields)
|
|
||||||
self.assertEqual(('test_name', 'test_id'), actual)
|
|
||||||
|
|
||||||
def test_get_object_item_properties_mixed_case_fields(self):
|
|
||||||
class Fake(object):
|
|
||||||
def __init__(self):
|
|
||||||
self.id = 'test_id'
|
|
||||||
self.name = 'test_name'
|
|
||||||
self.test_user = 'test'
|
|
||||||
|
|
||||||
fields = ('name', 'id', 'test user')
|
|
||||||
mixed_fields = ('test user', 'ID')
|
|
||||||
item = Fake()
|
|
||||||
actual = utils.get_item_properties(item, fields, mixed_fields)
|
|
||||||
self.assertEqual(('test_name', 'test_id', 'test'), actual)
|
|
||||||
|
|
||||||
def test_get_object_item_desired_fields_differ_from_item(self):
|
|
||||||
class Fake(object):
|
|
||||||
def __init__(self):
|
|
||||||
self.id = 'test_id_1'
|
|
||||||
self.name = 'test_name'
|
|
||||||
self.test_user = 'test'
|
|
||||||
|
|
||||||
fields = ('name', 'id', 'test user')
|
|
||||||
item = Fake()
|
|
||||||
actual = utils.get_item_properties(item, fields)
|
|
||||||
self.assertNotEqual(('test_name', 'test_id', 'test'), actual)
|
|
||||||
|
|
||||||
def test_get_object_item_desired_fields_is_empty(self):
|
|
||||||
class Fake(object):
|
|
||||||
def __init__(self):
|
|
||||||
self.id = 'test_id_1'
|
|
||||||
self.name = 'test_name'
|
|
||||||
self.test_user = 'test'
|
|
||||||
|
|
||||||
fields = []
|
|
||||||
item = Fake()
|
|
||||||
actual = utils.get_item_properties(item, fields)
|
|
||||||
self.assertEqual((), actual)
|
|
||||||
|
|
||||||
def test_get_object_item_with_formatters(self):
|
|
||||||
class Fake(object):
|
|
||||||
def __init__(self):
|
|
||||||
self.id = 'test_id'
|
|
||||||
self.name = 'test_name'
|
|
||||||
self.test_user = 'test'
|
|
||||||
|
|
||||||
class FakeCallable(object):
|
|
||||||
def __call__(self, *args, **kwargs):
|
|
||||||
return 'pass'
|
|
||||||
|
|
||||||
fields = ('name', 'id', 'test user', 'is_public')
|
|
||||||
formatters = {'is_public': FakeCallable()}
|
|
||||||
item = Fake()
|
|
||||||
act = utils.get_item_properties(item, fields, formatters=formatters)
|
|
||||||
self.assertEqual(('test_name', 'test_id', 'test', 'pass'), act)
|
|
||||||
|
|
||||||
|
|
||||||
class JSONUtilsTestCase(testtools.TestCase):
|
|
||||||
def test_dumps(self):
|
|
||||||
self.assertEqual(utils.dumps({'a': 'b'}), '{"a": "b"}')
|
|
||||||
|
|
||||||
def test_dumps_dict_with_date_value(self):
|
|
||||||
x = datetime.datetime(1920, 2, 3, 4, 5, 6, 7)
|
|
||||||
res = utils.dumps({1: 'a', 2: x})
|
|
||||||
expected = '{"1": "a", "2": "1920-02-03 04:05:06.000007"}'
|
|
||||||
self.assertEqual(expected, res)
|
|
||||||
|
|
||||||
def test_dumps_dict_with_spaces(self):
|
|
||||||
x = datetime.datetime(1920, 2, 3, 4, 5, 6, 7)
|
|
||||||
res = utils.dumps({1: 'a ', 2: x})
|
|
||||||
expected = '{"1": "a ", "2": "1920-02-03 04:05:06.000007"}'
|
|
||||||
self.assertEqual(expected, res)
|
|
||||||
|
|
||||||
def test_loads(self):
|
|
||||||
self.assertEqual(utils.loads('{"a": "b"}'), {'a': 'b'})
|
|
||||||
|
|
||||||
|
|
||||||
class ToPrimitiveTestCase(testtools.TestCase):
|
|
||||||
def test_list(self):
|
|
||||||
self.assertEqual(utils.to_primitive([1, 2, 3]), [1, 2, 3])
|
|
||||||
|
|
||||||
def test_empty_list(self):
|
|
||||||
self.assertEqual(utils.to_primitive([]), [])
|
|
||||||
|
|
||||||
def test_tuple(self):
|
|
||||||
self.assertEqual(utils.to_primitive((1, 2, 3)), [1, 2, 3])
|
|
||||||
|
|
||||||
def test_empty_tuple(self):
|
|
||||||
self.assertEqual(utils.to_primitive(()), [])
|
|
||||||
|
|
||||||
def test_dict(self):
|
|
||||||
self.assertEqual(
|
|
||||||
utils.to_primitive(dict(a=1, b=2, c=3)),
|
|
||||||
dict(a=1, b=2, c=3))
|
|
||||||
|
|
||||||
def test_empty_dict(self):
|
|
||||||
self.assertEqual(utils.to_primitive({}), {})
|
|
||||||
|
|
||||||
def test_datetime(self):
|
|
||||||
x = datetime.datetime(1920, 2, 3, 4, 5, 6, 7)
|
|
||||||
self.assertEqual(
|
|
||||||
utils.to_primitive(x),
|
|
||||||
'1920-02-03 04:05:06.000007')
|
|
||||||
|
|
||||||
def test_iter(self):
|
|
||||||
x = xrange(1, 6)
|
|
||||||
self.assertEqual(utils.to_primitive(x), [1, 2, 3, 4, 5])
|
|
||||||
|
|
||||||
def test_iteritems(self):
|
|
||||||
d = {'a': 1, 'b': 2, 'c': 3}
|
|
||||||
|
|
||||||
class IterItemsClass(object):
|
|
||||||
def iteritems(self):
|
|
||||||
return d.iteritems()
|
|
||||||
|
|
||||||
x = IterItemsClass()
|
|
||||||
p = utils.to_primitive(x)
|
|
||||||
self.assertEqual(p, {'a': 1, 'b': 2, 'c': 3})
|
|
||||||
|
|
||||||
def test_nasties(self):
|
|
||||||
def foo():
|
|
||||||
pass
|
|
||||||
x = [datetime, foo, dir]
|
|
||||||
ret = utils.to_primitive(x)
|
|
||||||
self.assertEqual(len(ret), 3)
|
|
||||||
|
|
||||||
def test_to_primitive_dict_with_date_value(self):
|
|
||||||
x = datetime.datetime(1920, 2, 3, 4, 5, 6, 7)
|
|
||||||
res = utils.to_primitive({'a': x})
|
|
||||||
self.assertEqual({'a': '1920-02-03 04:05:06.000007'}, res)
|
|
||||||
|
|
||||||
|
|
||||||
class ImportClassTestCase(testtools.TestCase):
|
|
||||||
def test_import_class(self):
|
|
||||||
dt = utils.import_class('datetime.datetime')
|
|
||||||
self.assertTrue(sys.modules['datetime'].datetime is dt)
|
|
||||||
|
|
||||||
def test_import_bad_class(self):
|
|
||||||
self.assertRaises(
|
|
||||||
ImportError, utils.import_class,
|
|
||||||
'lol.u_mad.brah')
|
|
||||||
|
|
||||||
def test_get_client_class_invalid_version(self):
|
|
||||||
self.assertRaises(
|
|
||||||
exceptions.UnsupportedVersion,
|
|
||||||
utils.get_client_class, 'image', '2', {'image': '2'})
|
|
Reference in New Issue
Block a user