From f9ee106ac484e390171d43f5c8aee77af127ddaf Mon Sep 17 00:00:00 2001 From: Ben Swartzlander Date: Fri, 13 Jul 2012 17:22:38 -0400 Subject: Add support for snapshots and volume types to netapp driver. This is a continuation of blueprint netapp-volume-driver. Change-Id: Ic79a98f3949c815f532e52a9b9d45ad7d8aa99ec --- nova/tests/test_netapp.py | 119 +++++++++++++++++++++++++++++++++++----------- 1 file changed, 91 insertions(+), 28 deletions(-) (limited to 'nova/tests') diff --git a/nova/tests/test_netapp.py b/nova/tests/test_netapp.py index 50b0f9c7e..1fd95308d 100644 --- a/nova/tests/test_netapp.py +++ b/nova/tests/test_netapp.py @@ -397,6 +397,12 @@ WSDL_TYPES = """ type="na:DatasetMemberParameter"/> + + + + + + + @@ -456,6 +464,12 @@ WSDL_TYPES = """ + + + + + + @@ -503,6 +517,7 @@ WSDL_TYPES = """ + @@ -642,19 +657,43 @@ class FakeDfmServerHandler(BaseHTTPServer.BaseHTTPRequestHandler): global iter_count global iter_table if 'DatasetListInfoIterStart' == api: + iter_name = 'dataset_%s' % iter_count + iter_count = iter_count + 1 + iter_table[iter_name] = 0 body = """ 1 - dataset - """ + %s + """ % iter_name elif 'DatasetListInfoIterNext' == api: - body = """ - - - 0 - - - 1 - """ + tags = body.xpath('na:DatasetListInfoIterNext/na:Tag', + namespaces=nsmap) + iter_name = tags[0].text + if iter_table[iter_name]: + body = """ + + 0 + """ + else: + iter_table[iter_name] = 1 + body = """ + + + 0 + + + OpenStackProject + testproj + + + OpenStackVolType + + + + OpenStack_testproj + + + 1 + """ elif 'DatasetListInfoIterEnd' == api: body = """""" elif 'DatasetEditBegin' == api: @@ -692,6 +731,8 @@ class FakeDfmServerHandler(BaseHTTPServer.BaseHTTPRequestHandler): body = """""" else: iter_table[iter_name] = 1 + name = ('filer:/OpenStack_testproj/volume-00000001/' + 'volume-00000001') body = """ @@ -699,6 +740,7 @@ class FakeDfmServerHandler(BaseHTTPServer.BaseHTTPRequestHandler): lun-create 0 + %s @@ -707,25 +749,39 @@ class FakeDfmServerHandler(BaseHTTPServer.BaseHTTPRequestHandler): 2 - """ + """ % name elif 'DpJobProgressEventListIterEnd' == api: body = """""" elif 'DatasetMemberListInfoIterStart' == api: + iter_name = 'datasetmember_%s' % iter_count + iter_count = iter_count + 1 + iter_table[iter_name] = 0 body = """ 1 - dataset-member - """ + %s + """ % iter_name elif 'DatasetMemberListInfoIterNext' == api: - name = 'filer:/OpenStack_testproj/volume-00000001/volume-00000001' - body = """ - - - 0 - %s - - - 1 - """ % name + tags = body.xpath('na:DatasetMemberListInfoIterNext/na:Tag', + namespaces=nsmap) + iter_name = tags[0].text + if iter_table[iter_name]: + body = """ + + 0 + """ + else: + iter_table[iter_name] = 1 + name = ('filer:/OpenStack_testproj/volume-00000001/' + 'volume-00000001') + body = """ + + + 0 + %s + + + 1 + """ % name elif 'DatasetMemberListInfoIterEnd' == api: body = """""" elif 'HostListInfoIterStart' == api: @@ -889,9 +945,11 @@ class FakeHTTPConnection(object): class NetAppDriverTestCase(test.TestCase): """Test case for NetAppISCSIDriver""" - STORAGE_SERVICE = 'Thin Provisioned Space for VMFS Datastores' + STORAGE_SERVICE = 'Openstack Service' + STORAGE_SERVICE_PREFIX = 'Openstack Service-' PROJECT_ID = 'testproj' VOLUME_NAME = 'volume-00000001' + VOLUME_TYPE = '' VOLUME_SIZE = 2147483648L # 2 GB INITIATOR = 'iqn.1993-08.org.debian:01:23456789' @@ -899,22 +957,27 @@ class NetAppDriverTestCase(test.TestCase): super(NetAppDriverTestCase, self).setUp() driver = netapp.NetAppISCSIDriver() self.stubs.Set(httplib, 'HTTPConnection', FakeHTTPConnection) - driver._create_client('http://localhost:8088/dfm.wsdl', - 'root', 'password', 'localhost', 8088) + driver._create_client(wsdl_url='http://localhost:8088/dfm.wsdl', + login='root', password='password', + hostname='localhost', port=8088, cache=False) driver._set_storage_service(self.STORAGE_SERVICE) + driver._set_storage_service_prefix(self.STORAGE_SERVICE_PREFIX) + driver._set_vfiler('') self.driver = driver def test_connect(self): self.driver.check_for_setup_error() def test_create_destroy(self): + self.driver._discover_luns() self.driver._provision(self.VOLUME_NAME, None, self.PROJECT_ID, - self.VOLUME_SIZE) + self.VOLUME_TYPE, self.VOLUME_SIZE) self.driver._remove_destroy(self.VOLUME_NAME, self.PROJECT_ID) def test_map_unmap(self): + self.driver._discover_luns() self.driver._provision(self.VOLUME_NAME, None, self.PROJECT_ID, - self.VOLUME_SIZE) + self.VOLUME_TYPE, self.VOLUME_SIZE) volume = {'name': self.VOLUME_NAME, 'project_id': self.PROJECT_ID, 'id': 0, 'provider_auth': None} updates = self.driver._get_export(volume) -- cgit