summaryrefslogtreecommitdiff
path: root/openstackclient/tests/unit
diff options
context:
space:
mode:
Diffstat (limited to 'openstackclient/tests/unit')
-rw-r--r--openstackclient/tests/unit/compute/v2/test_server.py213
-rw-r--r--openstackclient/tests/unit/identity/v2_0/test_project.py36
-rw-r--r--openstackclient/tests/unit/identity/v3/fakes.py17
-rw-r--r--openstackclient/tests/unit/identity/v3/test_group.py17
-rw-r--r--openstackclient/tests/unit/identity/v3/test_project.py67
-rw-r--r--openstackclient/tests/unit/network/v2/fakes.py4
-rw-r--r--openstackclient/tests/unit/network/v2/test_network_qos_policy.py53
-rw-r--r--openstackclient/tests/unit/network/v2/test_security_group.py2
8 files changed, 406 insertions, 3 deletions
diff --git a/openstackclient/tests/unit/compute/v2/test_server.py b/openstackclient/tests/unit/compute/v2/test_server.py
index 249902bc..5020dd2e 100644
--- a/openstackclient/tests/unit/compute/v2/test_server.py
+++ b/openstackclient/tests/unit/compute/v2/test_server.py
@@ -957,6 +957,8 @@ class TestServerList(TestServer):
'Networks',
'Image Name',
'Image ID',
+ 'Flavor Name',
+ 'Flavor ID',
'Availability Zone',
'Host',
'Properties',
@@ -1027,6 +1029,12 @@ class TestServerList(TestServer):
for s in self.servers
]
+ Flavor = collections.namedtuple('Flavor', 'id name')
+ self.flavors_mock.list.return_value = [
+ Flavor(id=s.flavor['id'], name=self.flavor.name)
+ for s in self.servers
+ ]
+
for s in self.servers:
self.data.append((
s.id,
@@ -1046,6 +1054,8 @@ class TestServerList(TestServer):
server._format_servers_list_networks(s.networks),
self.image.name,
s.image['id'],
+ self.flavor.name,
+ s.flavor['id'],
getattr(s, 'OS-EXT-AZ:availability_zone'),
getattr(s, 'OS-EXT-SRV-ATTR:host'),
s.Metadata,
@@ -1185,6 +1195,209 @@ class TestServerLock(TestServer):
self.run_method_with_servers('lock', 3)
+class TestServerMigrate(TestServer):
+
+ def setUp(self):
+ super(TestServerMigrate, self).setUp()
+
+ methods = {
+ 'migrate': None,
+ 'live_migrate': None,
+ }
+ self.server = compute_fakes.FakeServer.create_one_server(
+ methods=methods)
+
+ # This is the return value for utils.find_resource()
+ self.servers_mock.get.return_value = self.server
+
+ self.servers_mock.migrate.return_value = None
+ self.servers_mock.live_migrate.return_value = None
+
+ # Get the command object to test
+ self.cmd = server.MigrateServer(self.app, None)
+
+ def test_server_migrate_no_options(self):
+ arglist = [
+ self.server.id,
+ ]
+ verifylist = [
+ ('live', None),
+ ('block_migration', False),
+ ('disk_overcommit', False),
+ ('wait', False),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ result = self.cmd.take_action(parsed_args)
+
+ self.servers_mock.get.assert_called_with(self.server.id)
+ self.server.migrate.assert_called_with()
+ self.assertNotCalled(self.servers_mock.live_migrate)
+ self.assertIsNone(result)
+
+ def test_server_migrate_with_block_migration(self):
+ arglist = [
+ '--block-migration', self.server.id,
+ ]
+ verifylist = [
+ ('live', None),
+ ('block_migration', True),
+ ('disk_overcommit', False),
+ ('wait', False),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ self.assertRaises(exceptions.CommandError, self.cmd.take_action,
+ parsed_args)
+
+ self.servers_mock.get.assert_called_with(self.server.id)
+ self.assertNotCalled(self.servers_mock.live_migrate)
+ self.assertNotCalled(self.servers_mock.migrate)
+
+ def test_server_migrate_with_disk_overcommit(self):
+ arglist = [
+ '--disk-overcommit', self.server.id,
+ ]
+ verifylist = [
+ ('live', None),
+ ('block_migration', False),
+ ('disk_overcommit', True),
+ ('wait', False),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ self.assertRaises(exceptions.CommandError, self.cmd.take_action,
+ parsed_args)
+
+ self.servers_mock.get.assert_called_with(self.server.id)
+ self.assertNotCalled(self.servers_mock.live_migrate)
+ self.assertNotCalled(self.servers_mock.migrate)
+
+ def test_server_live_migrate(self):
+ arglist = [
+ '--live', 'fakehost', self.server.id,
+ ]
+ verifylist = [
+ ('live', 'fakehost'),
+ ('block_migration', False),
+ ('disk_overcommit', False),
+ ('wait', False),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ result = self.cmd.take_action(parsed_args)
+
+ self.servers_mock.get.assert_called_with(self.server.id)
+ self.server.live_migrate.assert_called_with(block_migration=False,
+ disk_over_commit=False,
+ host='fakehost')
+ self.assertNotCalled(self.servers_mock.migrate)
+ self.assertIsNone(result)
+
+ def test_server_block_live_migrate(self):
+ arglist = [
+ '--live', 'fakehost', '--block-migration', self.server.id,
+ ]
+ verifylist = [
+ ('live', 'fakehost'),
+ ('block_migration', True),
+ ('disk_overcommit', False),
+ ('wait', False),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ result = self.cmd.take_action(parsed_args)
+
+ self.servers_mock.get.assert_called_with(self.server.id)
+ self.server.live_migrate.assert_called_with(block_migration=True,
+ disk_over_commit=False,
+ host='fakehost')
+ self.assertNotCalled(self.servers_mock.migrate)
+ self.assertIsNone(result)
+
+ def test_server_live_migrate_with_disk_overcommit(self):
+ arglist = [
+ '--live', 'fakehost', '--disk-overcommit', self.server.id,
+ ]
+ verifylist = [
+ ('live', 'fakehost'),
+ ('block_migration', False),
+ ('disk_overcommit', True),
+ ('wait', False),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ result = self.cmd.take_action(parsed_args)
+
+ self.servers_mock.get.assert_called_with(self.server.id)
+ self.server.live_migrate.assert_called_with(block_migration=False,
+ disk_over_commit=True,
+ host='fakehost')
+ self.assertNotCalled(self.servers_mock.migrate)
+ self.assertIsNone(result)
+
+ def test_server_live_migrate_with_false_value_options(self):
+ arglist = [
+ '--live', 'fakehost', '--no-disk-overcommit',
+ '--shared-migration', self.server.id,
+ ]
+ verifylist = [
+ ('live', 'fakehost'),
+ ('block_migration', False),
+ ('disk_overcommit', False),
+ ('wait', False),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ result = self.cmd.take_action(parsed_args)
+
+ self.servers_mock.get.assert_called_with(self.server.id)
+ self.server.live_migrate.assert_called_with(block_migration=False,
+ disk_over_commit=False,
+ host='fakehost')
+ self.assertNotCalled(self.servers_mock.migrate)
+ self.assertIsNone(result)
+
+ @mock.patch.object(common_utils, 'wait_for_status', return_value=True)
+ def test_server_migrate_with_wait(self, mock_wait_for_status):
+ arglist = [
+ '--wait', self.server.id,
+ ]
+ verifylist = [
+ ('live', None),
+ ('block_migration', False),
+ ('disk_overcommit', False),
+ ('wait', True),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ result = self.cmd.take_action(parsed_args)
+
+ self.servers_mock.get.assert_called_with(self.server.id)
+ self.server.migrate.assert_called_with()
+ self.assertNotCalled(self.servers_mock.live_migrate)
+ self.assertIsNone(result)
+
+ @mock.patch.object(common_utils, 'wait_for_status', return_value=False)
+ def test_server_migrate_with_wait_fails(self, mock_wait_for_status):
+ arglist = [
+ '--wait', self.server.id,
+ ]
+ verifylist = [
+ ('live', None),
+ ('block_migration', False),
+ ('disk_overcommit', False),
+ ('wait', True),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ self.assertRaises(SystemExit, self.cmd.take_action, parsed_args)
+
+ self.servers_mock.get.assert_called_with(self.server.id)
+ self.server.migrate.assert_called_with()
+ self.assertNotCalled(self.servers_mock.live_migrate)
+
+
class TestServerPause(TestServer):
def setUp(self):
diff --git a/openstackclient/tests/unit/identity/v2_0/test_project.py b/openstackclient/tests/unit/identity/v2_0/test_project.py
index 4e1077db..c726f2a6 100644
--- a/openstackclient/tests/unit/identity/v2_0/test_project.py
+++ b/openstackclient/tests/unit/identity/v2_0/test_project.py
@@ -26,6 +26,7 @@ from openstackclient.tests.unit.identity.v2_0 import fakes as identity_fakes
class TestProject(identity_fakes.TestIdentityv2):
fake_project = identity_fakes.FakeProject.create_one_project()
+ fake_projects = identity_fakes.FakeProject.create_projects()
columns = (
'description',
@@ -39,6 +40,12 @@ class TestProject(identity_fakes.TestIdentityv2):
fake_project.id,
fake_project.name,
)
+ datalists = (
+ (fake_projects[0].description, True,
+ fake_projects[0].id, fake_projects[0].name,),
+ (fake_projects[1].description, True,
+ fake_projects[1].id, fake_projects[1].name,),
+ )
def setUp(self):
super(TestProject, self).setUp()
@@ -386,6 +393,35 @@ class TestProjectList(TestProject):
), )
self.assertEqual(datalist, tuple(data))
+ def test_project_list_sort(self):
+ self.projects_mock.list.return_value = self.fake_projects
+
+ arglist = ['--sort', 'name:asc', ]
+ verifylist = []
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
+ (columns, data) = self.cmd.take_action(parsed_args)
+ self.projects_mock.list.assert_called_with()
+
+ collist = ('ID', 'Name')
+ self.assertEqual(collist, columns)
+
+ if self.fake_projects[0].name > self.fake_projects[1].name:
+ datalists = (
+ (self.fake_projects[1].id, self.fake_projects[1].name),
+ (self.fake_projects[0].id, self.fake_projects[0].name),
+ )
+ else:
+ datalists = (
+ (self.fake_projects[0].id, self.fake_projects[0].name),
+ (self.fake_projects[1].id, self.fake_projects[1].name),
+ )
+
+ self.assertEqual(datalists, tuple(data))
+
class TestProjectSet(TestProject):
diff --git a/openstackclient/tests/unit/identity/v3/fakes.py b/openstackclient/tests/unit/identity/v3/fakes.py
index 75065e65..01b5dede 100644
--- a/openstackclient/tests/unit/identity/v3/fakes.py
+++ b/openstackclient/tests/unit/identity/v3/fakes.py
@@ -622,6 +622,23 @@ class FakeProject(object):
loaded=True)
return project
+ @staticmethod
+ def create_projects(attrs=None, count=2):
+ """Create multiple fake projects.
+
+ :param Dictionary attrs:
+ A dictionary with all attributes
+ :param int count:
+ The number of projects to fake
+ :return:
+ A list of FakeResource objects faking the projects
+ """
+
+ projects = []
+ for i in range(0, count):
+ projects.append(FakeProject.create_one_project(attrs))
+ return projects
+
class FakeDomain(object):
"""Fake one or more domain."""
diff --git a/openstackclient/tests/unit/identity/v3/test_group.py b/openstackclient/tests/unit/identity/v3/test_group.py
index 00bd217d..5870e1db 100644
--- a/openstackclient/tests/unit/identity/v3/test_group.py
+++ b/openstackclient/tests/unit/identity/v3/test_group.py
@@ -115,6 +115,23 @@ class TestGroupCheckUser(TestGroup):
self.user.id, self.group.id)
self.assertIsNone(result)
+ def test_group_check_user_server_error(self):
+ def server_error(*args):
+ raise ks_exc.http.InternalServerError
+ self.users_mock.check_in_group.side_effect = server_error
+ arglist = [
+ self.group.name,
+ self.user.name,
+ ]
+ verifylist = [
+ ('group', self.group.name),
+ ('user', self.user.name),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ self.assertRaises(ks_exc.http.InternalServerError,
+ self.cmd.take_action, parsed_args)
+
class TestGroupCreate(TestGroup):
diff --git a/openstackclient/tests/unit/identity/v3/test_project.py b/openstackclient/tests/unit/identity/v3/test_project.py
index b99eaf85..7be81153 100644
--- a/openstackclient/tests/unit/identity/v3/test_project.py
+++ b/openstackclient/tests/unit/identity/v3/test_project.py
@@ -479,6 +479,7 @@ class TestProjectList(TestProject):
domain = identity_fakes.FakeDomain.create_one_domain()
project = identity_fakes.FakeProject.create_one_project(
attrs={'domain_id': domain.id})
+ projects = identity_fakes.FakeProject.create_projects()
columns = (
'ID',
@@ -490,6 +491,12 @@ class TestProjectList(TestProject):
project.name,
),
)
+ datalists = (
+ (projects[0].description, True,
+ projects[0].id, projects[0].name,),
+ (projects[1].description, True,
+ projects[1].id, projects[1].name,),
+ )
def setUp(self):
super(TestProjectList, self).setUp()
@@ -580,6 +587,66 @@ class TestProjectList(TestProject):
self.assertEqual(self.columns, columns)
self.assertEqual(self.datalist, tuple(data))
+ def test_project_list_sort(self):
+ self.projects_mock.list.return_value = self.projects
+
+ arglist = ['--sort', 'name:asc', ]
+ verifylist = []
+
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
+ (columns, data) = self.cmd.take_action(parsed_args)
+ self.projects_mock.list.assert_called_with()
+
+ collist = ('ID', 'Name')
+ self.assertEqual(collist, columns)
+
+ if self.projects[0].name > self.projects[1].name:
+ datalists = (
+ (self.projects[1].id, self.projects[1].name),
+ (self.projects[0].id, self.projects[0].name),
+ )
+ else:
+ datalists = (
+ (self.projects[0].id, self.projects[0].name),
+ (self.projects[1].id, self.projects[1].name),
+ )
+
+ self.assertEqual(datalists, tuple(data))
+
+ def test_project_list_my_projects(self):
+ auth_ref = identity_fakes.fake_auth_ref(
+ identity_fakes.TOKEN_WITH_PROJECT_ID,
+ )
+ ar_mock = mock.PropertyMock(return_value=auth_ref)
+ type(self.app.client_manager).auth_ref = ar_mock
+
+ arglist = [
+ '--my-projects',
+ ]
+ verifylist = [
+ ('my_projects', True),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
+ columns, data = self.cmd.take_action(parsed_args)
+ self.projects_mock.list.assert_called_with(
+ user=self.app.client_manager.auth_ref.user_id)
+
+ collist = ('ID', 'Name')
+ self.assertEqual(collist, columns)
+ datalist = ((
+ self.project.id,
+ self.project.name,
+ ), )
+ self.assertEqual(datalist, tuple(data))
+
class TestProjectSet(TestProject):
diff --git a/openstackclient/tests/unit/network/v2/fakes.py b/openstackclient/tests/unit/network/v2/fakes.py
index 7afe3328..e0ee05b4 100644
--- a/openstackclient/tests/unit/network/v2/fakes.py
+++ b/openstackclient/tests/unit/network/v2/fakes.py
@@ -1071,7 +1071,7 @@ class FakeSecurityGroup(object):
'id': 'security-group-id-' + uuid.uuid4().hex,
'name': 'security-group-name-' + uuid.uuid4().hex,
'description': 'security-group-description-' + uuid.uuid4().hex,
- 'tenant_id': 'project-id-' + uuid.uuid4().hex,
+ 'project_id': 'project-id-' + uuid.uuid4().hex,
'security_group_rules': [],
}
@@ -1083,7 +1083,7 @@ class FakeSecurityGroup(object):
loaded=True)
# Set attributes with special mapping in OpenStack SDK.
- security_group.project_id = security_group_attrs['tenant_id']
+ security_group.project_id = security_group_attrs['project_id']
return security_group
diff --git a/openstackclient/tests/unit/network/v2/test_network_qos_policy.py b/openstackclient/tests/unit/network/v2/test_network_qos_policy.py
index bd30579a..667f5015 100644
--- a/openstackclient/tests/unit/network/v2/test_network_qos_policy.py
+++ b/openstackclient/tests/unit/network/v2/test_network_qos_policy.py
@@ -250,6 +250,59 @@ class TestListNetworkQosPolicy(TestQosPolicy):
self.assertEqual(self.columns, columns)
self.assertEqual(self.data, list(data))
+ def test_qos_policy_list_share(self):
+ arglist = [
+ '--share',
+ ]
+ verifylist = [
+ ('share', True),
+ ]
+
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+ columns, data = self.cmd.take_action(parsed_args)
+
+ self.network.qos_policies.assert_called_once_with(
+ **{'shared': True}
+ )
+ self.assertEqual(self.columns, columns)
+ self.assertEqual(self.data, list(data))
+
+ def test_qos_policy_list_no_share(self):
+ arglist = [
+ '--no-share',
+ ]
+ verifylist = [
+ ('no_share', True),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+ columns, data = self.cmd.take_action(parsed_args)
+
+ self.network.qos_policies.assert_called_once_with(
+ **{'shared': False}
+ )
+ self.assertEqual(self.columns, columns)
+ self.assertEqual(self.data, list(data))
+
+ def test_network_qos_list_project(self):
+ project = identity_fakes_v3.FakeProject.create_one_project()
+ self.projects_mock.get.return_value = project
+ arglist = [
+ '--project', project.id,
+ '--project-domain', project.domain_id,
+ ]
+ verifylist = [
+ ('project', project.id),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ columns, data = self.cmd.take_action(parsed_args)
+ self.network.qos_policies.assert_called_once_with(
+ **{'tenant_id': project.id}
+ )
+
+ self.assertEqual(self.columns, columns)
+ self.assertEqual(self.data, list(data))
+
class TestSetNetworkQosPolicy(TestQosPolicy):
diff --git a/openstackclient/tests/unit/network/v2/test_security_group.py b/openstackclient/tests/unit/network/v2/test_security_group.py
index 9a30267e..66d357f9 100644
--- a/openstackclient/tests/unit/network/v2/test_security_group.py
+++ b/openstackclient/tests/unit/network/v2/test_security_group.py
@@ -404,7 +404,7 @@ class TestListSecurityGroupNetwork(TestSecurityGroupNetwork):
grp.id,
grp.name,
grp.description,
- grp.tenant_id,
+ grp.project_id,
))
def setUp(self):