Add unit tests for usage commands in compute v2
Add unit tests and fakes for command below in compute v2: usage list usage show Change-Id: Ie533e23375ca6b8ba4cb7e865d39fac652cc0195
This commit is contained in:
		 jiahui.qiang
					jiahui.qiang
				
			
				
					committed by
					
						 Steve Martinelli
						Steve Martinelli
					
				
			
			
				
	
			
			
			 Steve Martinelli
						Steve Martinelli
					
				
			
						parent
						
							5d62981beb
						
					
				
				
					commit
					7b1febf47f
				
			| @@ -168,6 +168,9 @@ class FakeComputev2Client(object): | |||||||
|         self.quota_classes = mock.Mock() |         self.quota_classes = mock.Mock() | ||||||
|         self.quota_classes.resource_class = fakes.FakeResource(None, {}) |         self.quota_classes.resource_class = fakes.FakeResource(None, {}) | ||||||
|  |  | ||||||
|  |         self.usage = mock.Mock() | ||||||
|  |         self.usage.resource_class = fakes.FakeResource(None, {}) | ||||||
|  |  | ||||||
|         self.volumes = mock.Mock() |         self.volumes = mock.Mock() | ||||||
|         self.volumes.resource_class = fakes.FakeResource(None, {}) |         self.volumes.resource_class = fakes.FakeResource(None, {}) | ||||||
|  |  | ||||||
| @@ -1248,3 +1251,65 @@ class FakeServerGroup(object): | |||||||
|             info=copy.deepcopy(server_group_info), |             info=copy.deepcopy(server_group_info), | ||||||
|             loaded=True) |             loaded=True) | ||||||
|         return server_group |         return server_group | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class FakeUsage(object): | ||||||
|  |     """Fake one or more usage.""" | ||||||
|  |  | ||||||
|  |     @staticmethod | ||||||
|  |     def create_one_usage(attrs=None): | ||||||
|  |         """Create a fake usage. | ||||||
|  |  | ||||||
|  |         :param Dictionary attrs: | ||||||
|  |             A dictionary with all attributes | ||||||
|  |         :return: | ||||||
|  |             A FakeResource object, with tenant_id and other attributes | ||||||
|  |         """ | ||||||
|  |         if attrs is None: | ||||||
|  |             attrs = {} | ||||||
|  |  | ||||||
|  |         # Set default attributes. | ||||||
|  |         usage_info = { | ||||||
|  |             'tenant_id': 'usage-tenant-id-' + uuid.uuid4().hex, | ||||||
|  |             'total_memory_mb_usage': 512.0, | ||||||
|  |             'total_vcpus_usage': 1.0, | ||||||
|  |             'total_local_gb_usage': 1.0, | ||||||
|  |             'server_usages': [ | ||||||
|  |                 { | ||||||
|  |                     'ended_at': None, | ||||||
|  |                     'flavor': 'usage-flavor-' + uuid.uuid4().hex, | ||||||
|  |                     'hours': 1.0, | ||||||
|  |                     'local_gb': 1, | ||||||
|  |                     'memory_mb': 512, | ||||||
|  |                     'name': 'usage-name-' + uuid.uuid4().hex, | ||||||
|  |                     'state': 'active', | ||||||
|  |                     'uptime': 3600, | ||||||
|  |                     'vcpus': 1 | ||||||
|  |                 } | ||||||
|  |             ] | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         # Overwrite default attributes. | ||||||
|  |         usage_info.update(attrs) | ||||||
|  |  | ||||||
|  |         usage = fakes.FakeResource(info=copy.deepcopy(usage_info), | ||||||
|  |                                    loaded=True) | ||||||
|  |  | ||||||
|  |         return usage | ||||||
|  |  | ||||||
|  |     @staticmethod | ||||||
|  |     def create_usages(attrs=None, count=2): | ||||||
|  |         """Create multiple fake services. | ||||||
|  |  | ||||||
|  |         :param Dictionary attrs: | ||||||
|  |             A dictionary with all attributes | ||||||
|  |         :param int count: | ||||||
|  |             The number of services to fake | ||||||
|  |         :return: | ||||||
|  |             A list of FakeResource objects faking the services | ||||||
|  |         """ | ||||||
|  |         usages = [] | ||||||
|  |         for i in range(0, count): | ||||||
|  |             usages.append(FakeUsage.create_one_usage(attrs)) | ||||||
|  |  | ||||||
|  |         return usages | ||||||
|   | |||||||
							
								
								
									
										179
									
								
								openstackclient/tests/unit/compute/v2/test_usage.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										179
									
								
								openstackclient/tests/unit/compute/v2/test_usage.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,179 @@ | |||||||
|  | #   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 datetime | ||||||
|  | import mock | ||||||
|  |  | ||||||
|  | from openstackclient.compute.v2 import usage | ||||||
|  | from openstackclient.tests.unit.compute.v2 import fakes as compute_fakes | ||||||
|  | from openstackclient.tests.unit.identity.v3 import fakes as identity_fakes | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class TestUsage(compute_fakes.TestComputev2): | ||||||
|  |  | ||||||
|  |     def setUp(self): | ||||||
|  |         super(TestUsage, self).setUp() | ||||||
|  |  | ||||||
|  |         self.usage_mock = self.app.client_manager.compute.usage | ||||||
|  |         self.usage_mock.reset_mock() | ||||||
|  |  | ||||||
|  |         self.projects_mock = self.app.client_manager.identity.projects | ||||||
|  |         self.projects_mock.reset_mock() | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class TestUsageList(TestUsage): | ||||||
|  |  | ||||||
|  |     project = identity_fakes.FakeProject.create_one_project() | ||||||
|  |     # Return value of self.usage_mock.list(). | ||||||
|  |     usages = compute_fakes.FakeUsage.create_usages( | ||||||
|  |         attrs={'tenant_id': project.name}, count=1) | ||||||
|  |  | ||||||
|  |     columns = ( | ||||||
|  |         "Project", | ||||||
|  |         "Servers", | ||||||
|  |         "RAM MB-Hours", | ||||||
|  |         "CPU Hours", | ||||||
|  |         "Disk GB-Hours" | ||||||
|  |     ) | ||||||
|  |  | ||||||
|  |     data = [( | ||||||
|  |         usages[0].tenant_id, | ||||||
|  |         len(usages[0].server_usages), | ||||||
|  |         float("%.2f" % usages[0].total_memory_mb_usage), | ||||||
|  |         float("%.2f" % usages[0].total_vcpus_usage), | ||||||
|  |         float("%.2f" % usages[0].total_local_gb_usage), | ||||||
|  |     )] | ||||||
|  |  | ||||||
|  |     def setUp(self): | ||||||
|  |         super(TestUsageList, self).setUp() | ||||||
|  |  | ||||||
|  |         self.usage_mock.list.return_value = self.usages | ||||||
|  |  | ||||||
|  |         self.projects_mock.list.return_value = [self.project] | ||||||
|  |         # Get the command object to test | ||||||
|  |         self.cmd = usage.ListUsage(self.app, None) | ||||||
|  |  | ||||||
|  |     def test_usage_list_no_options(self): | ||||||
|  |  | ||||||
|  |         arglist = [] | ||||||
|  |         verifylist = [ | ||||||
|  |             ('start', None), | ||||||
|  |             ('end', None), | ||||||
|  |         ] | ||||||
|  |  | ||||||
|  |         parsed_args = self.check_parser(self.cmd, arglist, verifylist) | ||||||
|  |  | ||||||
|  |         columns, data = self.cmd.take_action(parsed_args) | ||||||
|  |  | ||||||
|  |         self.projects_mock.list.assert_called_with() | ||||||
|  |  | ||||||
|  |         self.assertEqual(self.columns, columns) | ||||||
|  |         self.assertEqual(tuple(self.data), tuple(data)) | ||||||
|  |  | ||||||
|  |     def test_usage_list_with_options(self): | ||||||
|  |         arglist = [ | ||||||
|  |             '--start', '2016-11-11', | ||||||
|  |             '--end', '2016-12-20', | ||||||
|  |         ] | ||||||
|  |         verifylist = [ | ||||||
|  |             ('start', '2016-11-11'), | ||||||
|  |             ('end', '2016-12-20'), | ||||||
|  |         ] | ||||||
|  |  | ||||||
|  |         parsed_args = self.check_parser(self.cmd, arglist, verifylist) | ||||||
|  |  | ||||||
|  |         columns, data = self.cmd.take_action(parsed_args) | ||||||
|  |  | ||||||
|  |         self.projects_mock.list.assert_called_with() | ||||||
|  |         self.usage_mock.list.assert_called_with( | ||||||
|  |             datetime.datetime(2016, 11, 11, 0, 0), | ||||||
|  |             datetime.datetime(2016, 12, 20, 0, 0), | ||||||
|  |             detailed=True) | ||||||
|  |  | ||||||
|  |         self.assertEqual(self.columns, columns) | ||||||
|  |         self.assertEqual(tuple(self.data), tuple(data)) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class TestUsageShow(TestUsage): | ||||||
|  |  | ||||||
|  |     project = identity_fakes.FakeProject.create_one_project() | ||||||
|  |     # Return value of self.usage_mock.list(). | ||||||
|  |     usage = compute_fakes.FakeUsage.create_one_usage( | ||||||
|  |         attrs={'tenant_id': project.name}) | ||||||
|  |  | ||||||
|  |     columns = ( | ||||||
|  |         'CPU Hours', | ||||||
|  |         'Disk GB-Hours', | ||||||
|  |         'RAM MB-Hours', | ||||||
|  |         'Servers', | ||||||
|  |     ) | ||||||
|  |  | ||||||
|  |     data = ( | ||||||
|  |         float("%.2f" % usage.total_vcpus_usage), | ||||||
|  |         float("%.2f" % usage.total_local_gb_usage), | ||||||
|  |         float("%.2f" % usage.total_memory_mb_usage), | ||||||
|  |         len(usage.server_usages), | ||||||
|  |     ) | ||||||
|  |  | ||||||
|  |     def setUp(self): | ||||||
|  |         super(TestUsageShow, self).setUp() | ||||||
|  |  | ||||||
|  |         self.usage_mock.get.return_value = self.usage | ||||||
|  |  | ||||||
|  |         self.projects_mock.get.return_value = self.project | ||||||
|  |         # Get the command object to test | ||||||
|  |         self.cmd = usage.ShowUsage(self.app, None) | ||||||
|  |  | ||||||
|  |     def test_usage_show_no_options(self): | ||||||
|  |  | ||||||
|  |         self.app.client_manager.auth_ref = mock.Mock() | ||||||
|  |         self.app.client_manager.auth_ref.project_id = self.project.id | ||||||
|  |  | ||||||
|  |         arglist = [] | ||||||
|  |         verifylist = [ | ||||||
|  |             ('project', None), | ||||||
|  |             ('start', None), | ||||||
|  |             ('end', None), | ||||||
|  |         ] | ||||||
|  |  | ||||||
|  |         parsed_args = self.check_parser(self.cmd, arglist, verifylist) | ||||||
|  |  | ||||||
|  |         columns, data = self.cmd.take_action(parsed_args) | ||||||
|  |  | ||||||
|  |         self.assertEqual(self.columns, columns) | ||||||
|  |         self.assertEqual(self.data, data) | ||||||
|  |  | ||||||
|  |     def test_usage_show_with_options(self): | ||||||
|  |  | ||||||
|  |         arglist = [ | ||||||
|  |             '--project', self.project.id, | ||||||
|  |             '--start', '2016-11-11', | ||||||
|  |             '--end', '2016-12-20', | ||||||
|  |         ] | ||||||
|  |         verifylist = [ | ||||||
|  |             ('project', self.project.id), | ||||||
|  |             ('start', '2016-11-11'), | ||||||
|  |             ('end', '2016-12-20'), | ||||||
|  |         ] | ||||||
|  |  | ||||||
|  |         parsed_args = self.check_parser(self.cmd, arglist, verifylist) | ||||||
|  |  | ||||||
|  |         columns, data = self.cmd.take_action(parsed_args) | ||||||
|  |  | ||||||
|  |         self.usage_mock.get.assert_called_with( | ||||||
|  |             self.project.id, | ||||||
|  |             datetime.datetime(2016, 11, 11, 0, 0), | ||||||
|  |             datetime.datetime(2016, 12, 20, 0, 0)) | ||||||
|  |  | ||||||
|  |         self.assertEqual(self.columns, columns) | ||||||
|  |         self.assertEqual(self.data, data) | ||||||
		Reference in New Issue
	
	Block a user