summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorvladimir.p <vladimir@zadarastorage.com>2011-07-22 20:25:32 -0700
committervladimir.p <vladimir@zadarastorage.com>2011-07-22 20:25:32 -0700
commit61781dae931ced36db0f2735da474d0bd38a53cf (patch)
tree55d9c7d9556a810f31ae583de2a3a0e8fc153873
parenta4f1ac011cdb086bf77ba3d2e14b9a34001cc8a7 (diff)
more unittest changes
-rw-r--r--nova/api/openstack/contrib/virtual_storage_arrays.py4
-rw-r--r--nova/tests/api/openstack/contrib/test_vsa.py238
-rw-r--r--nova/virt/libvirt/netutils.py1
3 files changed, 224 insertions, 19 deletions
diff --git a/nova/api/openstack/contrib/virtual_storage_arrays.py b/nova/api/openstack/contrib/virtual_storage_arrays.py
index 3c1362f0c..6139b494e 100644
--- a/nova/api/openstack/contrib/virtual_storage_arrays.py
+++ b/nova/api/openstack/contrib/virtual_storage_arrays.py
@@ -353,6 +353,10 @@ class VsaDriveController(VsaVolumeDriveController):
"""Update a drive. Should be done through VSA APIs"""
return faults.Fault(exc.HTTPBadRequest())
+ def delete(self, req, vsa_id, id):
+ """Delete a volume. Should be done through VSA APIs"""
+ return faults.Fault(exc.HTTPBadRequest())
+
class VsaVPoolController(object):
"""The vPool VSA API controller for the OpenStack API."""
diff --git a/nova/tests/api/openstack/contrib/test_vsa.py b/nova/tests/api/openstack/contrib/test_vsa.py
index bc0b7eaa6..c3150fa9c 100644
--- a/nova/tests/api/openstack/contrib/test_vsa.py
+++ b/nova/tests/api/openstack/contrib/test_vsa.py
@@ -15,18 +15,26 @@
import json
import stubout
+import unittest
import webob
-#from nova import compute
-from nova import vsa
+
from nova import exception
+from nova import flags
+from nova import vsa
+from nova import db
+from nova import volume
from nova import context
from nova import test
from nova import log as logging
+from nova.api import openstack
from nova.tests.api.openstack import fakes
+import nova.wsgi
from nova.api.openstack.contrib.virtual_storage_arrays import _vsa_view
+FLAGS = flags.FLAGS
+
LOG = logging.getLogger('nova.tests.api.openstack.vsa')
last_param = {}
@@ -103,7 +111,7 @@ class VSAApiTest(test.TestCase):
self.stubs.UnsetAll()
super(VSAApiTest, self).tearDown()
- def test_vsa_api_create(self):
+ def test_vsa_create(self):
global last_param
last_param = {}
@@ -128,7 +136,7 @@ class VSAApiTest(test.TestCase):
self.assertEqual(resp_dict['vsa']['displayDescription'],
vsa['displayDescription'])
- def test_vsa_api_create_no_body(self):
+ def test_vsa_create_no_body(self):
req = webob.Request.blank('/v1.1/zadr-vsa')
req.method = 'POST'
req.body = json.dumps({})
@@ -137,7 +145,7 @@ class VSAApiTest(test.TestCase):
resp = req.get_response(fakes.wsgi_app())
self.assertEqual(resp.status_int, 422)
- def test_vsa_api_delete(self):
+ def test_vsa_delete(self):
global last_param
last_param = {}
@@ -149,7 +157,7 @@ class VSAApiTest(test.TestCase):
self.assertEqual(resp.status_int, 200)
self.assertEqual(str(last_param['vsa_id']), str(vsa_id))
- def test_vsa_api_delete_invalid_id(self):
+ def test_vsa_delete_invalid_id(self):
global last_param
last_param = {}
@@ -161,7 +169,7 @@ class VSAApiTest(test.TestCase):
self.assertEqual(resp.status_int, 404)
self.assertEqual(str(last_param['vsa_id']), str(vsa_id))
- def test_vsa_api_show(self):
+ def test_vsa_show(self):
global last_param
last_param = {}
@@ -176,7 +184,7 @@ class VSAApiTest(test.TestCase):
self.assertTrue('vsa' in resp_dict)
self.assertEqual(resp_dict['vsa']['id'], str(vsa_id))
- def test_vsa_api_show_invalid_id(self):
+ def test_vsa_show_invalid_id(self):
global last_param
last_param = {}
@@ -187,7 +195,7 @@ class VSAApiTest(test.TestCase):
self.assertEqual(resp.status_int, 404)
self.assertEqual(str(last_param['vsa_id']), str(vsa_id))
- def test_vsa_api_index(self):
+ def test_vsa_index(self):
req = webob.Request.blank('/v1.1/zadr-vsa')
req.method = 'GET'
resp = req.get_response(fakes.wsgi_app())
@@ -202,7 +210,7 @@ class VSAApiTest(test.TestCase):
resp_vsa = resp_vsas.pop()
self.assertEqual(resp_vsa['id'], 123)
- def test_vsa_api_detail(self):
+ def test_vsa_detail(self):
req = webob.Request.blank('/v1.1/zadr-vsa/detail')
req.method = 'GET'
resp = req.get_response(fakes.wsgi_app())
@@ -218,22 +226,216 @@ class VSAApiTest(test.TestCase):
self.assertEqual(resp_vsa['id'], 123)
-class VSAVolumeDriveApiTest(test.TestCase):
- def setUp(self):
- super(VSAVolumeDriveApiTest, self).setUp()
+def _get_default_volume_param():
+ return {
+ 'id': 123,
+ 'status': 'available',
+ 'size': 100,
+ 'availability_zone': 'nova',
+ 'created_at': None,
+ 'attach_status': 'detached',
+ 'display_name': 'Default vol name',
+ 'display_description': 'Default vol description',
+ 'from_vsa_id': None,
+ 'to_vsa_id': None,
+ }
+
+
+def stub_volume_create(self, context, size, snapshot_id, name, description,
+ **param):
+ LOG.debug(_("_create: param=%s"), size)
+ vol = _get_default_volume_param()
+ for k, v in param.iteritems():
+ vol[k] = v
+ vol['size'] = size
+ vol['display_name'] = name
+ vol['display_description'] = description
+ return vol
+
+
+def stub_volume_update(self, context, **param):
+ LOG.debug(_("_volume_update: param=%s"), param)
+ pass
+
+
+def stub_volume_delete(self, context, **param):
+ LOG.debug(_("_volume_delete: param=%s"), param)
+ pass
+
+
+def stub_volume_get(self, context, volume_id):
+ LOG.debug(_("_volume_get: volume_id=%s"), volume_id)
+ vol = _get_default_volume_param()
+ vol['id'] = volume_id
+ if volume_id == '234':
+ vol['from_vsa_id'] = 123
+ if volume_id == '345':
+ vol['to_vsa_id'] = 123
+ return vol
+
+
+def stub_volume_get_notfound(self, context, volume_id):
+ raise exception.NotFound
+
+
+def stub_volume_get_all_by_vsa(self, context, vsa_id, direction):
+ vol = stub_volume_get(self, context, '123')
+ vol['%s_vsa_id' % direction] = vsa_id
+ return [vol]
+
+
+def return_vsa(context, vsa_id):
+ return {'id': vsa_id}
+
+
+class VSAVolumeApiTest(test.TestCase):
+
+ def setUp(self, test_obj=None, test_objs=None):
+ super(VSAVolumeApiTest, self).setUp()
self.stubs = stubout.StubOutForTesting()
fakes.FakeAuthManager.reset_fake_data()
fakes.FakeAuthDatabase.data = {}
fakes.stub_out_networking(self.stubs)
fakes.stub_out_rate_limiting(self.stubs)
fakes.stub_out_auth(self.stubs)
- self.stubs.Set(vsa.api.API, "create", stub_vsa_create)
- self.stubs.Set(vsa.api.API, "delete", stub_vsa_delete)
- self.stubs.Set(vsa.api.API, "get", stub_vsa_get)
- self.stubs.Set(vsa.api.API, "get_all", stub_vsa_get_all)
+ self.stubs.Set(nova.db.api, 'vsa_get', return_vsa)
+
+ self.stubs.Set(volume.api.API, "create", stub_volume_create)
+ self.stubs.Set(volume.api.API, "update", stub_volume_update)
+ self.stubs.Set(volume.api.API, "delete", stub_volume_delete)
+ self.stubs.Set(volume.api.API, "get_all_by_vsa",
+ stub_volume_get_all_by_vsa)
+ self.stubs.Set(volume.api.API, "get", stub_volume_get)
self.context = context.get_admin_context()
+ self.test_obj = test_obj if test_obj else "volume"
+ self.test_objs = test_objs if test_objs else "volumes"
+
+ def tearDown(self):
+ self.stubs.UnsetAll()
+ super(VSAVolumeApiTest, self).tearDown()
+
+ def test_vsa_volume_create(self):
+ vol = {"size": 100,
+ "displayName": "VSA Volume Test Name",
+ "displayDescription": "VSA Volume Test Desc"}
+ body = {self.test_obj: vol}
+ req = webob.Request.blank('/v1.1/zadr-vsa/123/%s' % self.test_objs)
+ req.method = 'POST'
+ req.body = json.dumps(body)
+ req.headers['content-type'] = 'application/json'
+ resp = req.get_response(fakes.wsgi_app())
+
+ if self.test_obj == "volume":
+ self.assertEqual(resp.status_int, 200)
+
+ resp_dict = json.loads(resp.body)
+ self.assertTrue(self.test_obj in resp_dict)
+ self.assertEqual(resp_dict[self.test_obj]['size'],
+ vol['size'])
+ self.assertEqual(resp_dict[self.test_obj]['displayName'],
+ vol['displayName'])
+ self.assertEqual(resp_dict[self.test_obj]['displayDescription'],
+ vol['displayDescription'])
+ else:
+ self.assertEqual(resp.status_int, 400)
+
+ def test_vsa_volume_create_no_body(self):
+ req = webob.Request.blank('/v1.1/zadr-vsa/123/%s' % self.test_objs)
+ req.method = 'POST'
+ req.body = json.dumps({})
+ req.headers['content-type'] = 'application/json'
+
+ resp = req.get_response(fakes.wsgi_app())
+ if self.test_obj == "volume":
+ self.assertEqual(resp.status_int, 422)
+ else:
+ self.assertEqual(resp.status_int, 400)
+
+ def test_vsa_volume_index(self):
+ req = webob.Request.blank('/v1.1/zadr-vsa/123/%s' % self.test_objs)
+ resp = req.get_response(fakes.wsgi_app())
+ self.assertEqual(resp.status_int, 200)
+
+ def test_vsa_volume_detail(self):
+ req = webob.Request.blank('/v1.1/zadr-vsa/123/%s/detail' % \
+ self.test_objs)
+ resp = req.get_response(fakes.wsgi_app())
+ self.assertEqual(resp.status_int, 200)
+
+ def test_vsa_volume_show(self):
+ obj_num = 234 if self.test_objs == "volumes" else 345
+ req = webob.Request.blank('/v1.1/zadr-vsa/123/%s/%s' % \
+ (self.test_objs, obj_num))
+ resp = req.get_response(fakes.wsgi_app())
+ self.assertEqual(resp.status_int, 200)
+
+ def test_vsa_volume_show_no_vsa_assignment(self):
+ req = webob.Request.blank('/v1.1/zadr-vsa/123/%s/333' % \
+ (self.test_objs))
+ resp = req.get_response(fakes.wsgi_app())
+ self.assertEqual(resp.status_int, 400)
+
+ def test_vsa_volume_show_no_volume(self):
+ self.stubs.Set(volume.api.API, "get", stub_volume_get_notfound)
+
+ req = webob.Request.blank('/v1.1/zadr-vsa/123/%s/333' % \
+ (self.test_objs))
+ resp = req.get_response(fakes.wsgi_app())
+ self.assertEqual(resp.status_int, 404)
+
+ def test_vsa_volume_update(self):
+ obj_num = 234 if self.test_objs == "volumes" else 345
+ update = {"status": "available"}
+ body = {self.test_obj: update}
+ req = webob.Request.blank('/v1.1/zadr-vsa/123/%s/%s' % \
+ (self.test_objs, obj_num))
+ req.method = 'PUT'
+ req.body = json.dumps(body)
+ req.headers['content-type'] = 'application/json'
+
+ resp = req.get_response(fakes.wsgi_app())
+ if self.test_obj == "volume":
+ self.assertEqual(resp.status_int, 202)
+ else:
+ self.assertEqual(resp.status_int, 400)
+
+ def test_vsa_volume_delete(self):
+ obj_num = 234 if self.test_objs == "volumes" else 345
+ req = webob.Request.blank('/v1.1/zadr-vsa/123/%s/%s' % \
+ (self.test_objs, obj_num))
+ req.method = 'DELETE'
+ resp = req.get_response(fakes.wsgi_app())
+ if self.test_obj == "volume":
+ self.assertEqual(resp.status_int, 202)
+ else:
+ self.assertEqual(resp.status_int, 400)
+
+ def test_vsa_volume_delete_no_vsa_assignment(self):
+ req = webob.Request.blank('/v1.1/zadr-vsa/123/%s/333' % \
+ (self.test_objs))
+ req.method = 'DELETE'
+ resp = req.get_response(fakes.wsgi_app())
+ self.assertEqual(resp.status_int, 400)
+
+ def test_vsa_volume_delete_no_volume(self):
+ self.stubs.Set(volume.api.API, "get", stub_volume_get_notfound)
+
+ req = webob.Request.blank('/v1.1/zadr-vsa/123/%s/333' % \
+ (self.test_objs))
+ req.method = 'DELETE'
+ resp = req.get_response(fakes.wsgi_app())
+ if self.test_obj == "volume":
+ self.assertEqual(resp.status_int, 404)
+ else:
+ self.assertEqual(resp.status_int, 400)
+
+
+class VSADriveApiTest(VSAVolumeApiTest):
+ def setUp(self):
+ super(VSADriveApiTest, self).setUp(test_obj="drive",
+ test_objs="drives")
def tearDown(self):
self.stubs.UnsetAll()
- super(VSAVolumeDriveApiTest, self).tearDown()
+ super(VSADriveApiTest, self).tearDown()
diff --git a/nova/virt/libvirt/netutils.py b/nova/virt/libvirt/netutils.py
index c0d808cd3..041eacb2d 100644
--- a/nova/virt/libvirt/netutils.py
+++ b/nova/virt/libvirt/netutils.py
@@ -99,7 +99,6 @@ def get_network_info(instance):
if network['dns2']:
mapping['dns'].append(network['dns2'])
-
if FLAGS.use_ipv6:
mapping['ip6s'] = [ip6_dict()]
mapping['gateway6'] = network['gateway_v6']