diff --git a/tempest/manager.py b/tempest/manager.py index c64227c8d6..f5ed0938b3 100644 --- a/tempest/manager.py +++ b/tempest/manager.py @@ -40,7 +40,7 @@ NetworkClient = network_client.NetworkClient ImagesClient = images_client.ImagesClient FlavorsClient = flavors_client.FlavorsClient ServersClient = servers_client.ServersClientJSON -LimitsClient = limits_client.LimitsClient +LimitsClient = limits_client.LimitsClientJSON ExtensionsClient = extensions_client.ExtensionsClient SecurityGroupsClient = security_groups_client.SecurityGroupsClient FloatingIPsClient = floating_ips_client.FloatingIPsClient diff --git a/tempest/openstack.py b/tempest/openstack.py index b9912f1c31..2e1ed272af 100644 --- a/tempest/openstack.py +++ b/tempest/openstack.py @@ -23,8 +23,8 @@ from tempest.services.image import service as image_service from tempest.services.network.json.network_client import NetworkClient from tempest.services.nova.json.images_client import ImagesClient from tempest.services.nova.json.flavors_client import FlavorsClient +from tempest.services.nova.json.limits_client import LimitsClientJSON from tempest.services.nova.json.servers_client import ServersClientJSON -from tempest.services.nova.json.limits_client import LimitsClient from tempest.services.nova.json.extensions_client import ExtensionsClient from tempest.services.nova.json.security_groups_client \ import SecurityGroupsClient @@ -33,6 +33,7 @@ from tempest.services.nova.json.keypairs_client import KeyPairsClient from tempest.services.nova.json.volumes_client import VolumesClient from tempest.services.nova.json.console_output_client \ import ConsoleOutputsClient +from tempest.services.nova.xml.limits_client import LimitsClientXML from tempest.services.nova.xml.servers_client import ServersClientXML LOG = logging.getLogger(__name__) @@ -42,6 +43,11 @@ SERVERS_CLIENTS = { "xml": ServersClientXML, } +LIMITS_CLIENTS = { + "json": LimitsClientJSON, + "xml": LimitsClientXML, +} + class Manager(object): @@ -84,12 +90,12 @@ class Manager(object): try: self.servers_client = SERVERS_CLIENTS[interface](*client_args) + self.limits_client = LIMITS_CLIENTS[interface](*client_args) except KeyError: msg = "Unsupported interface type `%s'" % interface raise exceptions.InvalidConfiguration(msg) self.flavors_client = FlavorsClient(*client_args) self.images_client = ImagesClient(*client_args) - self.limits_client = LimitsClient(*client_args) self.extensions_client = ExtensionsClient(*client_args) self.keypairs_client = KeyPairsClient(*client_args) self.security_groups_client = SecurityGroupsClient(*client_args) diff --git a/tempest/services/nova/json/limits_client.py b/tempest/services/nova/json/limits_client.py index 163b68521c..d0dc1535cd 100644 --- a/tempest/services/nova/json/limits_client.py +++ b/tempest/services/nova/json/limits_client.py @@ -2,10 +2,10 @@ import json from tempest.common.rest_client import RestClient -class LimitsClient(RestClient): +class LimitsClientJSON(RestClient): def __init__(self, config, username, password, auth_url, tenant_name=None): - super(LimitsClient, self).__init__(config, username, password, + super(LimitsClientJSON, self).__init__(config, username, password, auth_url, tenant_name) self.service = self.config.compute.catalog_type diff --git a/tempest/services/nova/xml/limits_client.py b/tempest/services/nova/xml/limits_client.py new file mode 100644 index 0000000000..3f47484e21 --- /dev/null +++ b/tempest/services/nova/xml/limits_client.py @@ -0,0 +1,59 @@ +# vim: tabstop=4 shiftwidth=4 softtabstop=4 +# +# Copyright 2012 IBM +# 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. + +from tempest.common.rest_client import RestClientXML +from lxml import etree +from lxml import objectify + +NS = "{http://docs.openstack.org/common/api/v1.0}" + + +class LimitsClientXML(RestClientXML): + + def __init__(self, config, username, password, auth_url, tenant_name=None): + super(LimitsClientXML, self).__init__(config, username, password, + auth_url, tenant_name) + self.service = self.config.compute.catalog_type + + def get_limits(self): + resp, body = self.get("limits", self.headers) + body = objectify.fromstring(body) + lim = NS + 'absolute' + ret = {} + + for el in body[lim].iterchildren(): + attributes = el.attrib + if attributes['name'] == 'maxServerMeta': + ret['maxServerMeta'] = int(attributes['value']) + elif attributes['name'] == 'maxPersonality': + ret['maxPersonality'] = int(attributes['value']) + elif attributes['name'] == 'maxPersonalitySize': + ret['maxPersonalitySize'] = int(attributes['value']) + + return resp, ret + + def get_max_server_meta(self): + resp, limits_dict = self.get_limits() + return resp, limits_dict['maxServerMeta'] + + def get_personality_file_limit(self): + resp, limits_dict = self.get_limits() + return resp, limits_dict['maxPersonality'] + + def get_personality_size_limit(self): + resp, limits_dict = self.get_limits() + return resp, limits_dict['maxPersonalitySize']