-
Notifications
You must be signed in to change notification settings - Fork 487
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
This change adds Cinder client in services/volume * Keeps existing tests for Compute Extensions in tempest/tests/compute * Copies existing volumes test to tests/volume and refactors them to test the Cinder API, and adds a BaseVolumesTest class * Renames the Nova Extensions' volumes_client to volumes_extensions_client * Adds build_interval and build_timeout parameters in config for Cinder specific tests * Renames build_interval and build_timeout environment variables in the Devstack template file to COMPUTE_BUILD_INTERVAL and COMPUTE_BUILD_TIMEOUT * Adds volume specific environment variables VOLUME_BUILD_INTERVAL AND VOLUME_BUILD_TIMEOUT to the Devstack template file. Fixes LP Bug #1026190 Change-Id: I14d980ada1ddb29e8147f990aaf239fdcaae5eb6
- Loading branch information
Rohit Karajgi
committed
Sep 3, 2012
1 parent
fe2cdfc
commit dd47d7e
Showing
18 changed files
with
706 additions
and
39 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Empty file.
Empty file.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,120 @@ | ||
# vim: tabstop=4 shiftwidth=4 softtabstop=4 | ||
|
||
# Copyright 2012 OpenStack, LLC | ||
# 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. | ||
|
||
import json | ||
import time | ||
|
||
from tempest.common.rest_client import RestClient | ||
from tempest import exceptions | ||
|
||
|
||
class VolumesClient(RestClient): | ||
""" | ||
Client class to send CRUD Volume API requests to a Cinder endpoint | ||
""" | ||
|
||
def __init__(self, config, username, password, auth_url, tenant_name=None): | ||
super(VolumesClient, self).__init__(config, username, password, | ||
auth_url, tenant_name) | ||
|
||
self.service = self.config.volume.catalog_type | ||
self.build_interval = self.config.volume.build_interval | ||
self.build_timeout = self.config.volume.build_timeout | ||
|
||
def list_volumes(self, params=None): | ||
"""List all the volumes created""" | ||
url = 'volumes' | ||
if params != None: | ||
param_list = [] | ||
for param, value in params.iteritems(): | ||
param_list.append("%s=%s&" % (param, value)) | ||
|
||
url += '?' + ' '.join(param_list) | ||
resp, body = self.get(url) | ||
body = json.loads(body) | ||
return resp, body['volumes'] | ||
|
||
def list_volumes_with_detail(self, params=None): | ||
"""List the details of all volumes""" | ||
url = 'volumes/detail' | ||
if params != None: | ||
param_list = [] | ||
for param, value in params.iteritems(): | ||
param_list.append("%s=%s&" % (param, value)) | ||
|
||
url = '?' + ' '.join(param_list) | ||
|
||
resp, body = self.get(url) | ||
body = json.loads(body) | ||
return resp, body['volumes'] | ||
|
||
def get_volume(self, volume_id): | ||
"""Returns the details of a single volume""" | ||
url = "volumes/%s" % str(volume_id) | ||
resp, body = self.get(url) | ||
body = json.loads(body) | ||
return resp, body['volume'] | ||
|
||
def create_volume(self, size, **kwargs): | ||
""" | ||
Creates a new Volume. | ||
size(Required): Size of volume in GB. | ||
Following optional keyword arguments are accepted: | ||
display_name: Optional Volume Name. | ||
metadata: A dictionary of values to be used as metadata. | ||
""" | ||
post_body = { | ||
'size': size, | ||
'display_name': kwargs.get('display_name'), | ||
'metadata': kwargs.get('metadata'), | ||
} | ||
|
||
post_body = json.dumps({'volume': post_body}) | ||
resp, body = self.post('volumes', post_body, self.headers) | ||
body = json.loads(body) | ||
return resp, body['volume'] | ||
|
||
def delete_volume(self, volume_id): | ||
"""Deletes the Specified Volume""" | ||
return self.delete("volumes/%s" % str(volume_id)) | ||
|
||
def wait_for_volume_status(self, volume_id, status): | ||
"""Waits for a Volume to reach a given status""" | ||
resp, body = self.get_volume(volume_id) | ||
volume_name = body['display_name'] | ||
volume_status = body['status'] | ||
start = int(time.time()) | ||
|
||
while volume_status != status: | ||
time.sleep(self.build_interval) | ||
resp, body = self.get_volume(volume_id) | ||
volume_status = body['status'] | ||
if volume_status == 'error': | ||
raise exceptions.VolumeBuildErrorException(volume_id=volume_id) | ||
|
||
if int(time.time()) - start >= self.build_timeout: | ||
message = 'Volume %s failed to reach %s status within '\ | ||
'the required time (%s s).' % (volume_name, status, | ||
self.build_timeout) | ||
raise exceptions.TimeoutException(message) | ||
|
||
def is_resource_deleted(self, id): | ||
try: | ||
self.get_volume(id) | ||
except exceptions.NotFound: | ||
return True | ||
return False |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.