Skip to content

Commit

Permalink
Merge "Add XML support for extensions_client"
Browse files Browse the repository at this point in the history
  • Loading branch information
Jenkins authored and openstack-gerrit committed Sep 19, 2012
2 parents e1165ed + 89126c3 commit c25ef68
Show file tree
Hide file tree
Showing 5 changed files with 58 additions and 12 deletions.
2 changes: 1 addition & 1 deletion tempest/manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@
FlavorsClient = flavors_client.FlavorsClientJSON
ServersClient = servers_client.ServersClientJSON
LimitsClient = limits_client.LimitsClientJSON
ExtensionsClient = extensions_client.ExtensionsClient
ExtensionsClient = extensions_client.ExtensionsClientJSON
SecurityGroupsClient = security_groups_client.SecurityGroupsClient
FloatingIPsClient = floating_ips_client.FloatingIPsClient
KeyPairsClient = keypairs_client.KeyPairsClientJSON
Expand Down
11 changes: 9 additions & 2 deletions tempest/openstack.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,12 @@
from tempest import exceptions
from tempest.services.image import service as image_service
from tempest.services.network.json.network_client import NetworkClient
from tempest.services.nova.json.extensions_client import ExtensionsClientJSON
from tempest.services.nova.json.flavors_client import FlavorsClientJSON
from tempest.services.volume.json.volumes_client import VolumesClient
from tempest.services.nova.json.images_client import ImagesClient
from tempest.services.nova.json.limits_client import LimitsClientJSON
from tempest.services.nova.json.servers_client import ServersClientJSON
from tempest.services.nova.json.extensions_client import ExtensionsClient
from tempest.services.nova.json.security_groups_client \
import SecurityGroupsClient
from tempest.services.nova.json.floating_ips_client import FloatingIPsClient
Expand All @@ -35,6 +35,7 @@
import VolumesExtensionsClient
from tempest.services.nova.json.console_output_client \
import ConsoleOutputsClient
from tempest.services.nova.xml.extensions_client import ExtensionsClientXML
from tempest.services.nova.xml.flavors_client import FlavorsClientXML
from tempest.services.nova.xml.keypairs_client import KeyPairsClientXML
from tempest.services.nova.xml.limits_client import LimitsClientXML
Expand Down Expand Up @@ -62,6 +63,11 @@
"xml": FlavorsClientXML
}

EXTENSIONS_CLIENTS = {
"json": ExtensionsClientJSON,
"xml": ExtensionsClientXML
}


class Manager(object):

Expand Down Expand Up @@ -108,11 +114,12 @@ def __init__(self, username=None, password=None, tenant_name=None,
self.limits_client = LIMITS_CLIENTS[interface](*client_args)
self.keypairs_client = KEYPAIRS_CLIENTS[interface](*client_args)
self.flavors_client = FLAVORS_CLIENTS[interface](*client_args)
self.extensions_client = \
EXTENSIONS_CLIENTS[interface](*client_args)
except KeyError:
msg = "Unsupported interface type `%s'" % interface
raise exceptions.InvalidConfiguration(msg)
self.images_client = ImagesClient(*client_args)
self.extensions_client = ExtensionsClient(*client_args)
self.security_groups_client = SecurityGroupsClient(*client_args)
self.floating_ips_client = FloatingIPsClient(*client_args)
self.console_outputs_client = ConsoleOutputsClient(*client_args)
Expand Down
4 changes: 2 additions & 2 deletions tempest/services/nova/json/extensions_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@
import json


class ExtensionsClient(RestClient):
class ExtensionsClientJSON(RestClient):

def __init__(self, config, username, password, auth_url, tenant_name=None):
super(ExtensionsClient, self).__init__(config, username, password,
super(ExtensionsClientJSON, self).__init__(config, username, password,
auth_url, tenant_name)
self.service = self.config.compute.catalog_type

Expand Down
28 changes: 28 additions & 0 deletions tempest/services/nova/xml/extensions_client.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
from lxml import etree
from tempest.common.rest_client import RestClientXML
from tempest.services.nova.xml.common import xml_to_json


class ExtensionsClientXML(RestClientXML):

def __init__(self, config, username, password, auth_url, tenant_name=None):
super(ExtensionsClientXML, self).__init__(config, username, password,
auth_url, tenant_name)
self.service = self.config.compute.catalog_type

def _parse_array(self, node):
array = []
for child in node:
array.append(xml_to_json(child))
return array

def list_extensions(self):
url = 'extensions'
resp, body = self.get(url, self.headers)
body = self._parse_array(etree.fromstring(body))
return resp, {'extensions': body}

def is_enabled(self, extension):
_, extensions = self.list_extensions()
exts = extensions['extensions']
return any([e for e in exts if e['name'] == extension])
25 changes: 18 additions & 7 deletions tempest/tests/compute/test_extensions.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,19 +17,30 @@

from nose.plugins.attrib import attr

from tempest.tests.compute.base import BaseComputeTest
from tempest.tests.compute import base


class ExtensionsTest(BaseComputeTest):

@classmethod
def setUpClass(cls):
super(ExtensionsTest, cls).setUpClass()
cls.client = cls.extensions_client
class ExtensionsTestBase(object):

@attr(type='positive')
def test_list_extensions(self):
"""List of all extensions"""
resp, extensions = self.client.list_extensions()
self.assertTrue("extensions" in extensions)
self.assertEqual(200, resp.status)


class ExtensionsTestJSON(base.BaseComputeTest, ExtensionsTestBase):

@classmethod
def setUpClass(cls):
super(ExtensionsTestJSON, cls).setUpClass()
cls.client = cls.extensions_client


class ExtensionsTestXML(base.BaseComputeTestXML, ExtensionsTestBase):

@classmethod
def setUpClass(cls):
super(ExtensionsTestXML, cls).setUpClass()
cls.client = cls.extensions_client

0 comments on commit c25ef68

Please sign in to comment.