 99498b0ab3
			
		
	
	99498b0ab3
	
	
	
		
			
			The OpenStackClient mapping of 'openstack quota set' arguments isn't correct for compute quota items that have to different names. For example, the --injected-file-size argument is mapped to injected_file_size, but the compute quotas item is actually injected_file_content_bytes. This incorrect mapping prevented the impacted compute quota items from being set. The problem impacts the following 'openstack quota set' arguments: --injected-file-size --injected-path-size --properties --secgroup-rules --secgroups This patch set also expands the compute quota unit tests to verify all compute quota items that can be set. Change-Id: I0a2f241e425f4811e4ae55be183ac0c8b0805c2a Closes-Bug: #1475831
		
			
				
	
	
		
			151 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			151 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| #   Copyright 2013 Nebula Inc.
 | |
| #
 | |
| #   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 mock
 | |
| 
 | |
| from openstackclient.tests import fakes
 | |
| from openstackclient.tests.identity.v2_0 import fakes as identity_fakes
 | |
| from openstackclient.tests.image.v2 import fakes as image_fakes
 | |
| from openstackclient.tests.network.v2 import fakes as network_fakes
 | |
| from openstackclient.tests import utils
 | |
| from openstackclient.tests.volume.v2 import fakes as volume_fakes
 | |
| 
 | |
| 
 | |
| server_id = 'serv1'
 | |
| server_name = 'waiter'
 | |
| 
 | |
| service_id = '1'
 | |
| 
 | |
| SERVER = {
 | |
|     'id': server_id,
 | |
|     'name': server_name,
 | |
|     'metadata': {},
 | |
| }
 | |
| 
 | |
| extension_name = 'Multinic'
 | |
| extension_namespace = 'http://docs.openstack.org/compute/ext/'\
 | |
|     'multinic/api/v1.1'
 | |
| extension_description = 'Multiple network support'
 | |
| extension_updated = '2014-01-07T12:00:0-00:00'
 | |
| extension_alias = 'NMN'
 | |
| extension_links = '[{"href":'\
 | |
|     '"https://github.com/openstack/compute-api", "type":'\
 | |
|     ' "text/html", "rel": "describedby"}]'
 | |
| 
 | |
| EXTENSION = {
 | |
|     'name': extension_name,
 | |
|     'namespace': extension_namespace,
 | |
|     'description': extension_description,
 | |
|     'updated': extension_updated,
 | |
|     'alias': extension_alias,
 | |
|     'links': extension_links,
 | |
| }
 | |
| 
 | |
| flavor_id = 'm1.large'
 | |
| flavor_name = 'Large'
 | |
| flavor_ram = 8192
 | |
| flavor_vcpus = 4
 | |
| 
 | |
| FLAVOR = {
 | |
|     'id': flavor_id,
 | |
|     'name': flavor_name,
 | |
|     'ram': flavor_ram,
 | |
|     'vcpus': flavor_vcpus,
 | |
| }
 | |
| 
 | |
| floating_ip_num = 100
 | |
| fix_ip_num = 100
 | |
| injected_file_num = 100
 | |
| injected_file_size_num = 10240
 | |
| injected_path_size_num = 255
 | |
| key_pair_num = 100
 | |
| core_num = 20
 | |
| ram_num = 51200
 | |
| instance_num = 10
 | |
| property_num = 128
 | |
| secgroup_rule_num = 20
 | |
| secgroup_num = 10
 | |
| project_name = 'project_test'
 | |
| QUOTA = {
 | |
|     'project': project_name,
 | |
|     'floating-ips': floating_ip_num,
 | |
|     'fix-ips': fix_ip_num,
 | |
|     'injected-files': injected_file_num,
 | |
|     'injected-file-size': injected_file_size_num,
 | |
|     'injected-path-size': injected_path_size_num,
 | |
|     'key-pairs': key_pair_num,
 | |
|     'cores': core_num,
 | |
|     'ram': ram_num,
 | |
|     'instances': instance_num,
 | |
|     'properties': property_num,
 | |
|     'secgroup_rules': secgroup_rule_num,
 | |
|     'secgroups': secgroup_num,
 | |
| }
 | |
| 
 | |
| QUOTA_columns = tuple(sorted(QUOTA))
 | |
| QUOTA_data = tuple(QUOTA[x] for x in sorted(QUOTA))
 | |
| 
 | |
| block_device_mapping = 'vda=' + volume_fakes.volume_name + ':::0'
 | |
| 
 | |
| 
 | |
| class FakeComputev2Client(object):
 | |
|     def __init__(self, **kwargs):
 | |
|         self.images = mock.Mock()
 | |
|         self.images.resource_class = fakes.FakeResource(None, {})
 | |
|         self.servers = mock.Mock()
 | |
|         self.servers.resource_class = fakes.FakeResource(None, {})
 | |
|         self.services = mock.Mock()
 | |
|         self.services.resource_class = fakes.FakeResource(None, {})
 | |
|         self.extensions = mock.Mock()
 | |
|         self.extensions.resource_class = fakes.FakeResource(None, {})
 | |
|         self.flavors = mock.Mock()
 | |
|         self.flavors.resource_class = fakes.FakeResource(None, {})
 | |
|         self.quotas = mock.Mock()
 | |
|         self.quotas.resource_class = fakes.FakeResource(None, {})
 | |
|         self.volumes = mock.Mock()
 | |
|         self.volumes.resource_class = fakes.FakeResource(None, {})
 | |
|         self.auth_token = kwargs['token']
 | |
|         self.management_url = kwargs['endpoint']
 | |
| 
 | |
| 
 | |
| class TestComputev2(utils.TestCommand):
 | |
|     def setUp(self):
 | |
|         super(TestComputev2, self).setUp()
 | |
| 
 | |
|         self.app.client_manager.compute = FakeComputev2Client(
 | |
|             endpoint=fakes.AUTH_URL,
 | |
|             token=fakes.AUTH_TOKEN,
 | |
|         )
 | |
| 
 | |
|         self.app.client_manager.identity = identity_fakes.FakeIdentityv2Client(
 | |
|             endpoint=fakes.AUTH_URL,
 | |
|             token=fakes.AUTH_TOKEN,
 | |
|         )
 | |
| 
 | |
|         self.app.client_manager.image = image_fakes.FakeImagev2Client(
 | |
|             endpoint=fakes.AUTH_URL,
 | |
|             token=fakes.AUTH_TOKEN,
 | |
|         )
 | |
| 
 | |
|         self.app.client_manager.network = network_fakes.FakeNetworkV2Client(
 | |
|             endpoint=fakes.AUTH_URL,
 | |
|             token=fakes.AUTH_TOKEN,
 | |
|         )
 | |
| 
 | |
|         self.app.client_manager.volume = volume_fakes.FakeVolumeClient(
 | |
|             endpoint=fakes.AUTH_URL,
 | |
|             token=fakes.AUTH_TOKEN,
 | |
|         )
 |