Merge "Convert admin volume_types tests into mock"

This commit is contained in:
Zuul 2018-03-16 13:59:55 +00:00 committed by Gerrit Code Review
commit 232f8bba06
3 changed files with 280 additions and 268 deletions

View File

@ -10,53 +10,51 @@
# License for the specific language governing permissions and limitations
# under the License.
from django import http
from django.urls import reverse
from mox3.mox import IsA
from openstack_dashboard import api
from openstack_dashboard.test import helpers as test
class VolTypeExtrasTests(test.BaseAdminViewTests):
@test.create_stubs({api.cinder: ('volume_type_extra_get',
'volume_type_get'), })
@test.create_mocks({api.cinder: ('volume_type_extra_get',
'volume_type_get')})
def test_list_extras_when_none_exists(self):
vol_type = self.cinder_volume_types.first()
extras = [api.cinder.VolTypeExtraSpec(vol_type.id, 'k1', 'v1')]
api.cinder.volume_type_get(IsA(http.HttpRequest),
vol_type.id).AndReturn(vol_type)
api.cinder.volume_type_extra_get(IsA(http.HttpRequest),
vol_type.id).AndReturn(extras)
self.mox.ReplayAll()
self.mock_volume_type_get.return_value = vol_type
self.mock_volume_type_extra_get.return_value = extras
url = reverse('horizon:admin:volume_types:extras:index',
args=[vol_type.id])
resp = self.client.get(url)
self.assertEqual(resp.status_code, 200)
self.assertTemplateUsed(resp,
"admin/volume_types/extras/index.html")
self.mock_volume_type_get.assert_called_once_with(
test.IsHttpRequest(), vol_type.id)
self.mock_volume_type_extra_get.assert_called_once_with(
test.IsHttpRequest(), vol_type.id)
@test.create_stubs({api.cinder: ('volume_type_extra_get',
'volume_type_get'), })
@test.create_mocks({api.cinder: ('volume_type_extra_get',
'volume_type_get')})
def test_extras_view_with_exception(self):
vol_type = self.cinder_volume_types.first()
api.cinder.volume_type_get(IsA(http.HttpRequest),
vol_type.id).AndReturn(vol_type)
api.cinder.volume_type_extra_get(IsA(http.HttpRequest),
vol_type.id) \
.AndRaise(self.exceptions.cinder)
self.mox.ReplayAll()
self.mock_volume_type_get.return_value = vol_type
self.mock_volume_type_extra_get.side_effect = self.exceptions.cinder
url = reverse('horizon:admin:volume_types:extras:index',
args=[vol_type.id])
resp = self.client.get(url)
self.assertEqual(len(resp.context['extras_table'].data), 0)
self.assertMessageCount(resp, error=1)
self.mock_volume_type_get.assert_called_once_with(
test.IsHttpRequest(), vol_type.id)
self.mock_volume_type_extra_get.assert_called_once_with(
test.IsHttpRequest(), vol_type.id)
@test.create_stubs({api.cinder: ('volume_type_extra_set', ), })
@test.create_mocks({api.cinder: ('volume_type_extra_set', )})
def test_extra_create_post(self):
vol_type = self.cinder_volume_types.first()
create_url = reverse(
@ -69,34 +67,33 @@ class VolTypeExtrasTests(test.BaseAdminViewTests):
data = {'key': u'k1',
'value': u'v1'}
api.cinder.volume_type_extra_set(IsA(http.HttpRequest),
vol_type.id,
{data['key']: data['value']})
self.mox.ReplayAll()
self.mock_volume_type_extra_set.return_value = None
resp = self.client.post(create_url, data)
self.assertNoFormErrors(resp)
self.assertMessageCount(success=1)
self.assertRedirectsNoFollow(resp, index_url)
self.mock_volume_type_extra_set.assert_called_once_with(
test.IsHttpRequest(),
vol_type.id,
{data['key']: data['value']})
@test.create_stubs({api.cinder: ('volume_type_get', ), })
@test.create_mocks({api.cinder: ('volume_type_get', )})
def test_extra_create_get(self):
vol_type = self.cinder_volume_types.first()
create_url = reverse(
'horizon:admin:volume_types:extras:create',
args=[vol_type.id])
api.cinder.volume_type_get(IsA(http.HttpRequest),
vol_type.id).AndReturn(vol_type)
self.mox.ReplayAll()
self.mock_volume_type_get.return_value = vol_type
resp = self.client.get(create_url)
self.assertEqual(resp.status_code, 200)
self.assertTemplateUsed(
resp, 'admin/volume_types/extras/create.html')
self.mock_volume_type_get.assert_called_once_with(
test.IsHttpRequest(), vol_type.id)
@test.create_stubs({api.cinder: ('volume_type_extra_get',
'volume_type_extra_set',), })
@test.create_mocks({api.cinder: ('volume_type_extra_get',
'volume_type_extra_set',)})
def test_extra_edit(self):
vol_type = self.cinder_volume_types.first()
key = 'foo'
@ -108,21 +105,21 @@ class VolTypeExtrasTests(test.BaseAdminViewTests):
data = {'value': u'v1'}
extras = {key: data['value']}
api.cinder.volume_type_extra_get(IsA(http.HttpRequest),
vol_type.id,
raw=True).AndReturn(extras)
api.cinder.volume_type_extra_set(IsA(http.HttpRequest),
vol_type.id,
extras)
self.mox.ReplayAll()
self.mock_volume_type_extra_get.return_value = extras
self.mock_volume_type_extra_set.return_value = None
resp = self.client.post(edit_url, data)
self.assertNoFormErrors(resp)
self.assertMessageCount(success=1)
self.assertRedirectsNoFollow(resp, index_url)
@test.create_stubs({api.cinder: ('volume_type_extra_get',
'volume_type_extra_delete'), })
self.mock_volume_type_extra_get.assert_called_once_with(
test.IsHttpRequest(), vol_type.id, raw=True)
self.mock_volume_type_extra_set.assert_called_once_with(
test.IsHttpRequest(), vol_type.id, extras)
@test.create_mocks({api.cinder: ('volume_type_extra_get',
'volume_type_extra_delete')})
def test_extra_delete(self):
vol_type = self.cinder_volume_types.first()
extras = [api.cinder.VolTypeExtraSpec(vol_type.id, 'k1', 'v1')]
@ -130,13 +127,14 @@ class VolTypeExtrasTests(test.BaseAdminViewTests):
index_url = reverse('horizon:admin:volume_types:extras:index',
args=[vol_type.id])
api.cinder.volume_type_extra_get(IsA(http.HttpRequest),
vol_type.id).AndReturn(extras)
api.cinder.volume_type_extra_delete(IsA(http.HttpRequest),
vol_type.id,
'k1').AndReturn(vol_type)
self.mox.ReplayAll()
self.mock_volume_type_extra_get.return_value = extras
self.mock_volume_type_extra_delete.return_value = vol_type
res = self.client.post(index_url, formData)
self.assertNoFormErrors(res)
self.assertRedirectsNoFollow(res, index_url)
self.mock_volume_type_extra_get.assert_called_once_with(
test.IsHttpRequest(), vol_type.id)
self.mock_volume_type_extra_delete.assert_called_once_with(
test.IsHttpRequest(), vol_type.id, ['k1'])

View File

@ -10,10 +10,9 @@
# License for the specific language governing permissions and limitations
# under the License.
from django import http
from django.urls import reverse
from mox3.mox import IsA
import mock
from openstack_dashboard import api
from openstack_dashboard.dashboards.admin.volume_types.qos_specs \
@ -22,18 +21,14 @@ from openstack_dashboard.test import helpers as test
class QosSpecsTests(test.BaseAdminViewTests):
@test.create_stubs({api.cinder: ('qos_spec_get',), })
@test.create_mocks({api.cinder: ('qos_spec_get',)})
def test_manage_qos_spec(self):
qos_spec = self.cinder_qos_specs.first()
index_url = reverse(
'horizon:admin:volume_types:qos_specs:index',
args=[qos_spec.id])
api.cinder.qos_spec_get(IsA(http.HttpRequest),
qos_spec.id)\
.AndReturn(qos_spec)
self.mox.ReplayAll()
self.mock_qos_spec_get.return_value = qos_spec
res = self.client.get(index_url)
@ -47,15 +42,15 @@ class QosSpecsTests(test.BaseAdminViewTests):
self.assertEqual(row.cells['value'].data,
specs.get(key))
@test.create_stubs({api.cinder: ('qos_spec_create',)})
self.mock_qos_spec_get.assert_has_calls(
[mock.call(test.IsHttpRequest(), qos_spec.id)] * 2)
self.assertEqual(2, self.mock_qos_spec_get.call_count)
@test.create_mocks({api.cinder: ('qos_spec_create',)})
def test_create_qos_spec(self):
formData = {'name': 'qos-spec-1',
'consumer': 'back-end'}
api.cinder.qos_spec_create(IsA(http.HttpRequest),
formData['name'],
{'consumer': formData['consumer']}).\
AndReturn(self.cinder_qos_specs.first())
self.mox.ReplayAll()
self.mock_qos_spec_create.return_value = self.cinder_qos_specs.first()
res = self.client.post(
reverse('horizon:admin:volume_types:create_qos_spec'),
@ -66,24 +61,25 @@ class QosSpecsTests(test.BaseAdminViewTests):
self.assertRedirectsNoFollow(res, redirect)
self.assertMessageCount(success=1)
@test.create_stubs({api.cinder: ('volume_type_list_with_qos_associations',
self.mock_qos_spec_create.assert_called_once_with(
test.IsHttpRequest(),
formData['name'],
{'consumer': formData['consumer']})
@test.create_mocks({api.cinder: ('volume_type_list_with_qos_associations',
'volume_encryption_type_list',
'qos_spec_list',
'qos_spec_delete',)})
'qos_spec_delete')})
def test_delete_qos_spec(self):
qos_spec = self.cinder_qos_specs.first()
formData = {'action': 'qos_specs__delete__%s' % qos_spec.id}
api.cinder.volume_type_list_with_qos_associations(
IsA(http.HttpRequest)).\
AndReturn(self.cinder_volume_types.list())
api.cinder.volume_encryption_type_list(IsA(http.HttpRequest))\
.AndReturn(self.cinder_volume_encryption_types.list()[0:1])
api.cinder.qos_spec_list(IsA(http.HttpRequest)).\
AndReturn(self.cinder_qos_specs.list())
api.cinder.qos_spec_delete(IsA(http.HttpRequest),
str(qos_spec.id))
self.mox.ReplayAll()
self.mock_volume_type_list_with_qos_associations.return_value = \
self.cinder_volume_types.list()
self.mock_volume_encryption_type_list.return_value = \
self.cinder_volume_encryption_types.list()[0:1]
self.mock_qos_spec_list.return_value = self.cinder_qos_specs.list()
self.mock_qos_spec_delete.return_value = None
res = self.client.post(
reverse('horizon:admin:volume_types:index'),
@ -94,9 +90,16 @@ class QosSpecsTests(test.BaseAdminViewTests):
self.assertRedirectsNoFollow(res, redirect)
self.assertMessageCount(success=1)
@test.create_stubs({api.cinder: ('qos_spec_get',
self.mock_volume_type_list_with_qos_associations(test.IsHttpRequest())
self.mock_volume_encryption_type_list.assert_called_once_with(
test.IsHttpRequest())
self.mock_qos_spec_list.assert_called_once_with(test.IsHttpRequest())
self.mock_qos_spec_delete.assert_called_once_with(test.IsHttpRequest(),
str(qos_spec.id))
@test.create_mocks({api.cinder: ('qos_spec_get',
'qos_spec_get_keys',
'qos_spec_set_keys',), })
'qos_spec_set_keys')})
def test_spec_edit(self):
qos_spec = self.cinder_qos_specs.first()
key = 'minIOPS'
@ -107,17 +110,9 @@ class QosSpecsTests(test.BaseAdminViewTests):
data = {'value': '9999'}
qos_spec.specs[key] = data['value']
api.cinder.qos_spec_get(IsA(http.HttpRequest),
qos_spec.id)\
.AndReturn(qos_spec)
api.cinder.qos_spec_get_keys(IsA(http.HttpRequest),
qos_spec.id, raw=True)\
.AndReturn(qos_spec)
api.cinder.qos_spec_set_keys(IsA(http.HttpRequest),
qos_spec.id,
qos_spec.specs)
self.mox.ReplayAll()
self.mock_qos_spec_get.return_value = qos_spec
self.mock_qos_spec_get_keys.return_value = qos_spec
self.mock_qos_spec_set_keys.return_value = None
resp = self.client.post(edit_url, data)
self.assertEqual('admin/volume_types/qos_specs/edit.html',
@ -128,8 +123,15 @@ class QosSpecsTests(test.BaseAdminViewTests):
self.assertMessageCount(success=1)
self.assertRedirectsNoFollow(resp, index_url)
@test.create_stubs({api.cinder: ('qos_spec_get',
'qos_spec_set_keys',), })
self.mock_qos_spec_get.assert_called_once_with(test.IsHttpRequest(),
qos_spec.id)
self.mock_qos_spec_get_keys.assert_called_once_with(
test.IsHttpRequest(), qos_spec.id, raw=True)
self.mock_qos_spec_set_keys.assert_called_once_with(
test.IsHttpRequest(), qos_spec.id, qos_spec.specs)
@test.create_mocks({api.cinder: ('qos_spec_get',
'qos_spec_set_keys')})
def test_edit_consumer(self):
qos_spec = self.cinder_qos_specs.first()
@ -140,13 +142,8 @@ class QosSpecsTests(test.BaseAdminViewTests):
'horizon:admin:volume_types:edit_qos_spec_consumer',
args=[qos_spec.id])
api.cinder.qos_spec_get(IsA(http.HttpRequest),
qos_spec.id).AndReturn(qos_spec)
api.cinder.qos_spec_set_keys(IsA(http.HttpRequest),
qos_spec.id,
{'consumer': formData['consumer_choice']})
self.mox.ReplayAll()
self.mock_qos_spec_get.return_value = qos_spec
self.mock_qos_spec_set_keys.return_value = None
resp = self.client.post(edit_url, formData)
redirect = reverse('horizon:admin:volume_types:index')
@ -154,12 +151,18 @@ class QosSpecsTests(test.BaseAdminViewTests):
self.assertMessageCount(success=1)
self.assertRedirectsNoFollow(resp, redirect)
@test.create_stubs({api.cinder: ('qos_spec_list',
self.mock_qos_spec_get.assert_called_once_with(test.IsHttpRequest(),
qos_spec.id)
self.mock_qos_spec_set_keys.assert_called_once_with(
test.IsHttpRequest(), qos_spec.id,
{'consumer': formData['consumer_choice']})
@test.create_mocks({api.cinder: ('qos_spec_list',
'qos_spec_get',
'qos_spec_get_associations',
'volume_type_get',
'qos_spec_associate',
'qos_spec_disassociate'), })
'qos_spec_disassociate')})
def test_associate_qos_spec(self):
volume_type = self.cinder_volume_types.first()
volume_types = self.cinder_volume_types.list()
@ -174,31 +177,31 @@ class QosSpecsTests(test.BaseAdminViewTests):
# for maximum code coverage, this test swaps the QoS association
# on one volume type moving the QoS assigned from 1 to 0
api.cinder.volume_type_get(IsA(http.HttpRequest),
volume_type.id) \
.AndReturn(volume_type)
api.cinder.qos_spec_list(IsA(http.HttpRequest)) \
.MultipleTimes().AndReturn(qos_specs)
api.cinder.qos_spec_get_associations(IsA(http.HttpRequest),
qos_specs[0].id) \
.AndReturn([])
api.cinder.qos_spec_get_associations(IsA(http.HttpRequest),
qos_specs[1].id) \
.AndReturn(volume_types)
api.cinder.qos_spec_get(IsA(http.HttpRequest),
qos_specs[1].id).AndReturn(qos_specs[1])
api.cinder.qos_spec_disassociate(IsA(http.HttpRequest),
qos_specs[1],
volume_type.id)
api.cinder.qos_spec_get(IsA(http.HttpRequest),
qos_specs[0].id).AndReturn(qos_specs[0])
api.cinder.qos_spec_associate(IsA(http.HttpRequest),
qos_specs[0],
volume_type.id)
self.mox.ReplayAll()
self.mock_volume_type_get.return_value = volume_type
self.mock_qos_spec_list.return_value = qos_specs
self.mock_qos_spec_get_associations.side_effect = [[], volume_types]
self.mock_qos_spec_get.side_effect = [qos_specs[1], qos_specs[0]]
self.mock_qos_spec_disassociate.return_value = None
self.mock_qos_spec_associate.return_value = None
resp = self.client.post(edit_url, formData)
redirect = reverse('horizon:admin:volume_types:index')
self.assertNoFormErrors(resp)
self.assertMessageCount(success=1)
self.assertRedirectsNoFollow(resp, redirect)
self.mock_volume_type_get.assert_called_once_with(test.IsHttpRequest(),
volume_type.id)
self.mock_qos_spec_list.assert_called_once_with(test.IsHttpRequest())
self.mock_qos_spec_get_associations.assert_has_calls([
mock.call(test.IsHttpRequest(), qos_specs[0].id),
mock.call(test.IsHttpRequest(), qos_specs[1].id),
])
self.mock_qos_spec_get.assert_has_calls([
mock.call(test.IsHttpRequest(), qos_specs[1].id),
mock.call(test.IsHttpRequest(), qos_specs[0].id),
])
self.mock_qos_spec_disassociate.assert_called_once_with(
test.IsHttpRequest(), qos_specs[1], volume_type.id)
self.mock_qos_spec_associate.assert_called_once_with(
test.IsHttpRequest(), qos_specs[0], volume_type.id)

View File

@ -10,15 +10,12 @@
# License for the specific language governing permissions and limitations
# under the License.
from django import http
from django.urls import reverse
from mox3.mox import IsA
import mock
from horizon import exceptions
from openstack_dashboard import api
from openstack_dashboard.api import cinder
from openstack_dashboard.api import keystone
from openstack_dashboard.test import helpers as test
INDEX_URL = reverse('horizon:admin:volume_types:index')
@ -26,25 +23,19 @@ INDEX_URL = reverse('horizon:admin:volume_types:index')
class VolumeTypeTests(test.BaseAdminViewTests):
@test.create_stubs({cinder: ('volume_type_list_with_qos_associations',
'qos_spec_list',
'extension_supported',
'volume_encryption_type_list')})
@test.create_mocks({api.cinder: ('volume_type_list_with_qos_associations',
'qos_spec_list',
'extension_supported',
'volume_encryption_type_list')})
def test_volume_types_tab(self):
encryption_list = (self.cinder_volume_encryption_types.list()[0],
self.cinder_volume_encryption_types.list()[1])
cinder.volume_type_list_with_qos_associations(
IsA(http.HttpRequest)).\
AndReturn(self.cinder_volume_types.list())
cinder.qos_spec_list(IsA(http.HttpRequest)).\
AndReturn(self.cinder_qos_specs.list())
cinder.volume_encryption_type_list(IsA(http.HttpRequest))\
.AndReturn(encryption_list)
cinder.extension_supported(IsA(http.HttpRequest),
'VolumeTypeEncryption').MultipleTimes()\
.AndReturn(True)
self.mock_volume_type_list_with_qos_associations.return_value = \
self.cinder_volume_types.list()
self.mock_qos_spec_list.return_value = self.cinder_qos_specs.list()
self.mock_volume_encryption_type_list.return_value = encryption_list
self.mock_extension_supported.return_value = True
self.mox.ReplayAll()
res = self.client.get(INDEX_URL)
self.assertEqual(res.status_code, 200)
@ -55,18 +46,22 @@ class VolumeTypeTests(test.BaseAdminViewTests):
qos_specs = res.context['qos_specs_table'].data
self.assertItemsEqual(qos_specs, self.cinder_qos_specs.list())
@test.create_stubs({cinder: ('volume_type_create',)})
self.mock_volume_type_list_with_qos_associations.\
assert_called_once_with(test.IsHttpRequest())
self.mock_qos_spec_list.assert_called_once_with(test.IsHttpRequest())
self.mock_volume_encryption_type_list.assert_called_once_with(
test.IsHttpRequest())
self.mock_extension_supported.assert_has_calls(
[mock.call(test.IsHttpRequest(), 'VolumeTypeEncryption')] * 9)
self.assertEqual(9, self.mock_extension_supported.call_count)
@test.create_mocks({api.cinder: ('volume_type_create',)})
def test_create_volume_type(self):
formData = {'name': 'volume type 1',
'vol_type_description': 'test desc',
'is_public': True}
cinder.volume_type_create(
IsA(http.HttpRequest),
formData['name'],
formData['vol_type_description'],
formData['is_public']).AndReturn(
self.cinder_volume_types.first())
self.mox.ReplayAll()
self.mock_volume_type_create.return_value = \
self.cinder_volume_types.first()
res = self.client.post(
reverse('horizon:admin:volume_types:create_type'),
@ -74,22 +69,21 @@ class VolumeTypeTests(test.BaseAdminViewTests):
self.assertNoFormErrors(res)
self.assertRedirectsNoFollow(res, INDEX_URL)
@test.create_stubs({cinder: ('volume_type_get',
'volume_type_update')})
self.mock_volume_type_create.assert_called_once_with(
test.IsHttpRequest(),
formData['name'],
formData['vol_type_description'],
formData['is_public'])
@test.create_mocks({api.cinder: ('volume_type_get',
'volume_type_update')})
def _test_update_volume_type(self, is_public):
volume_type = self.cinder_volume_types.first()
formData = {'name': volume_type.name,
'description': 'test desc updated',
'is_public': is_public}
volume_type = cinder.volume_type_get(
IsA(http.HttpRequest), volume_type.id).AndReturn(volume_type)
cinder.volume_type_update(
IsA(http.HttpRequest),
volume_type.id,
formData['name'],
formData['description'],
formData['is_public']).AndReturn(volume_type)
self.mox.ReplayAll()
self.mock_volume_type_get.return_value = volume_type
self.mock_volume_type_update.return_value = volume_type
url = reverse('horizon:admin:volume_types:update_type',
args=[volume_type.id])
@ -97,73 +91,81 @@ class VolumeTypeTests(test.BaseAdminViewTests):
self.assertNoFormErrors(res)
self.assertRedirectsNoFollow(res, INDEX_URL)
self.mock_volume_type_get.assert_called_once_with(
test.IsHttpRequest(), volume_type.id)
self.mock_volume_type_update.assert_called_once_with(
test.IsHttpRequest(),
volume_type.id,
formData['name'],
formData['description'],
formData['is_public'])
def test_update_volume_type_public_true(self):
self._test_update_volume_type(True)
def test_update_volume_type_public_false(self):
self._test_update_volume_type(False)
@test.create_stubs({api.nova: ('server_list',),
cinder: ('volume_list',
'volume_type_list_with_qos_associations',
'qos_spec_list',
'volume_type_delete',
'volume_encryption_type_list'),
keystone: ('tenant_list',)})
@test.create_mocks({api.cinder: ('volume_type_list_with_qos_associations',
'qos_spec_list',
'volume_type_delete',
'volume_encryption_type_list')})
def test_delete_volume_type(self):
volume_type = self.cinder_volume_types.first()
formData = {'action': 'volume_types__delete__%s' % volume_type.id}
encryption_list = (self.cinder_volume_encryption_types.list()[0],
self.cinder_volume_encryption_types.list()[1])
cinder.volume_type_list_with_qos_associations(
IsA(http.HttpRequest)).\
AndReturn(self.cinder_volume_types.list())
cinder.qos_spec_list(IsA(http.HttpRequest)).\
AndReturn(self.cinder_qos_specs.list())
cinder.volume_encryption_type_list(IsA(http.HttpRequest))\
.AndReturn(encryption_list)
cinder.volume_type_delete(IsA(http.HttpRequest),
volume_type.id)
self.mox.ReplayAll()
self.mock_volume_type_list_with_qos_associations.return_value = \
self.cinder_volume_types.list()
self.mock_qos_spec_list.return_value = self.cinder_qos_specs.list()
self.mock_volume_encryption_type_list.return_value = encryption_list
self.mock_volume_type_delete.return_value = None
res = self.client.post(INDEX_URL, formData)
self.assertNoFormErrors(res)
self.assertRedirectsNoFollow(res, INDEX_URL)
@test.create_stubs({api.nova: ('server_list',),
cinder: ('volume_list',
'volume_type_list_with_qos_associations',
'qos_spec_list',
'volume_type_delete',
'volume_encryption_type_list'),
keystone: ('tenant_list',)})
self.mock_volume_type_list_with_qos_associations.\
assert_called_once_with(test.IsHttpRequest())
self.mock_qos_spec_list.assert_called_once_with(test.IsHttpRequest())
self.mock_volume_encryption_type_list.assert_called_once_with(
test.IsHttpRequest())
self.mock_volume_type_delete.assert_called_once_with(
test.IsHttpRequest(), volume_type.id)
@test.create_mocks({api.cinder: ('volume_type_list_with_qos_associations',
'qos_spec_list',
'volume_type_delete',
'volume_encryption_type_list')})
def test_delete_volume_type_exception(self):
volume_type = self.cinder_volume_types.first()
formData = {'action': 'volume_types__delete__%s' % volume_type.id}
encryption_list = (self.cinder_volume_encryption_types.list()[0],
self.cinder_volume_encryption_types.list()[1])
cinder.volume_type_list_with_qos_associations(
IsA(http.HttpRequest)).\
AndReturn(self.cinder_volume_types.list())
cinder.qos_spec_list(IsA(http.HttpRequest)).\
AndReturn(self.cinder_qos_specs.list())
cinder.volume_encryption_type_list(IsA(http.HttpRequest))\
.AndReturn(encryption_list)
cinder.volume_type_delete(IsA(http.HttpRequest),
str(volume_type.id))\
.AndRaise(exceptions.BadRequest())
self.mox.ReplayAll()
self.mock_volume_type_list_with_qos_associations.return_value = \
self.cinder_volume_types.list()
self.mock_qos_spec_list.return_value = self.cinder_qos_specs.list()
self.mock_volume_encryption_type_list.return_value = encryption_list
self.mock_volume_type_delete.side_effect = exceptions.BadRequest()
res = self.client.post(INDEX_URL, formData)
self.assertNoFormErrors(res)
self.assertRedirectsNoFollow(res, INDEX_URL)
@test.create_stubs({cinder: ('volume_encryption_type_create',
'volume_type_list',)})
self.mock_volume_type_list_with_qos_associations.\
assert_called_once_with(test.IsHttpRequest())
self.mock_qos_spec_list.assert_called_once_with(test.IsHttpRequest())
self.mock_volume_encryption_type_list.assert_called_once_with(
test.IsHttpRequest())
self.mock_volume_type_delete.assert_called_once_with(
test.IsHttpRequest(), str(volume_type.id))
@test.create_mocks({api.cinder: ('volume_encryption_type_create',
'volume_type_list',)})
def test_create_volume_type_encryption(self):
volume_type1 = self.cinder_volume_types.list()[0]
volume_type2 = self.cinder_volume_types.list()[1]
@ -177,13 +179,8 @@ class VolumeTypeTests(test.BaseAdminViewTests):
'key_size': 512,
'volume_type_id': volume_type1.id}
cinder.volume_type_list(IsA(http.HttpRequest))\
.AndReturn(volume_type_list)
cinder.volume_encryption_type_create(IsA(http.HttpRequest),
formData['volume_type_id'],
formData)
self.mox.ReplayAll()
self.mock_volume_type_list.return_value = volume_type_list
self.mock_volume_encryption_type_create.return_value = None
url = reverse('horizon:admin:volume_types:create_type_encryption',
args=[volume_type1.id])
@ -193,22 +190,23 @@ class VolumeTypeTests(test.BaseAdminViewTests):
self.assertTemplateUsed(
res,
'admin/volume_types/create_volume_type_encryption.html')
self.mock_volume_type_list.assert_called_once_with(
test.IsHttpRequest())
self.mock_volume_encryption_type_create.assert_called_once_with(
test.IsHttpRequest(),
formData['volume_type_id'],
formData)
@test.create_stubs({cinder: ('volume_encryption_type_get',
'volume_type_list',)})
@test.create_mocks({api.cinder: ('volume_encryption_type_get',
'volume_type_list',)})
def test_type_encryption_detail_view_unencrypted(self):
volume_type1 = self.cinder_volume_types.list()[0]
volume_type1.id = u'1'
volume_type_list = [volume_type1]
vol_unenc_type = self.cinder_volume_encryption_types.list()[2]
cinder.volume_encryption_type_get(IsA(http.HttpRequest),
volume_type1.id)\
.AndReturn(vol_unenc_type)
cinder.volume_type_list(IsA(http.HttpRequest))\
.AndReturn(volume_type_list)
self.mox.ReplayAll()
self.mock_volume_encryption_type_get.return_value = vol_unenc_type
self.mock_volume_type_list.return_value = volume_type_list
url = reverse('horizon:admin:volume_types:type_encryption_detail',
args=[volume_type1.id])
@ -221,9 +219,13 @@ class VolumeTypeTests(test.BaseAdminViewTests):
self.assertContains(res,
"<h3>Volume Type is Unencrypted.</h3>", 1, 200)
self.assertNoMessages()
self.mock_volume_encryption_type_get.assert_called_once_with(
test.IsHttpRequest(), volume_type1.id)
self.mock_volume_type_list.assert_called_once_with(
test.IsHttpRequest())
@test.create_stubs({cinder: ('volume_encryption_type_get',
'volume_type_list',)})
@test.create_mocks({api.cinder: ('volume_encryption_type_get',
'volume_type_list',)})
def test_type_encryption_detail_view_encrypted(self):
volume_type = self.cinder_volume_types.first()
volume_type.id = u'1'
@ -231,13 +233,8 @@ class VolumeTypeTests(test.BaseAdminViewTests):
volume_type_list = [volume_type]
vol_enc_type = self.cinder_volume_encryption_types.list()[0]
cinder.volume_encryption_type_get(IsA(http.HttpRequest),
volume_type.id)\
.AndReturn(vol_enc_type)
cinder.volume_type_list(IsA(http.HttpRequest))\
.AndReturn(volume_type_list)
self.mox.ReplayAll()
self.mock_volume_encryption_type_get.return_value = vol_enc_type
self.mock_volume_type_list.return_value = volume_type_list
url = reverse('horizon:admin:volume_types:type_encryption_detail',
args=[volume_type.id])
@ -258,11 +255,16 @@ class VolumeTypeTests(test.BaseAdminViewTests):
self.assertNoMessages()
@test.create_stubs({cinder: ('extension_supported',
'volume_type_list_with_qos_associations',
'qos_spec_list',
'volume_encryption_type_list',
'volume_encryption_type_delete',)})
self.mock_volume_encryption_type_get.assert_called_once_with(
test.IsHttpRequest(), volume_type.id)
self.mock_volume_type_list.assert_called_once_with(
test.IsHttpRequest())
@test.create_mocks({api.cinder: ('extension_supported',
'volume_type_list_with_qos_associations',
'qos_spec_list',
'volume_encryption_type_list',
'volume_encryption_type_delete',)})
def test_delete_volume_type_encryption(self):
volume_type = self.cinder_volume_types.first()
volume_type.id = u'1'
@ -271,28 +273,31 @@ class VolumeTypeTests(test.BaseAdminViewTests):
encryption_list = (self.cinder_volume_encryption_types.list()[0],
self.cinder_volume_encryption_types.list()[1])
cinder.extension_supported(IsA(http.HttpRequest),
'VolumeTypeEncryption')\
.AndReturn(True)
cinder.volume_type_list_with_qos_associations(
IsA(http.HttpRequest))\
.AndReturn(self.cinder_volume_types.list())
cinder.qos_spec_list(IsA(http.HttpRequest))\
.AndReturn(self.cinder_qos_specs.list())
cinder.volume_encryption_type_list(IsA(http.HttpRequest))\
.AndReturn(encryption_list)
cinder.volume_encryption_type_delete(IsA(http.HttpRequest),
volume_type.id)
self.mox.ReplayAll()
self.mock_extension_supported.return_value = True
self.mock_volume_type_list_with_qos_associations.return_value = \
self.cinder_volume_types.list()
self.mock_qos_spec_list.return_value = self.cinder_qos_specs.list()
self.mock_volume_encryption_type_list.return_value = encryption_list
self.mock_volume_encryption_type_delete.return_value = None
res = self.client.post(INDEX_URL, formData)
self.assertNoFormErrors(res)
self.assertRedirectsNoFollow(res, INDEX_URL)
@test.create_stubs({cinder: ('volume_encryption_type_update',
'volume_encryption_type_get',
'volume_type_list')})
self.mock_extension_supported.assert_called_once_with(
test.IsHttpRequest(), 'VolumeTypeEncryption')
self.mock_volume_type_list_with_qos_associations.\
assert_called_once_with(test.IsHttpRequest())
self.mock_qos_spec_list.assert_called_once_with(test.IsHttpRequest())
self.mock_volume_encryption_type_list.assert_called_once_with(
test.IsHttpRequest())
self.mock_volume_encryption_type_delete.assert_called_once_with(
test.IsHttpRequest(), volume_type.id)
@test.create_mocks({api.cinder: ('volume_encryption_type_update',
'volume_encryption_type_get',
'volume_type_list')})
def test_update_volume_type_encryption(self):
volume_type = self.cinder_volume_types.first()
volume_type.id = u'1'
@ -305,16 +310,9 @@ class VolumeTypeTests(test.BaseAdminViewTests):
'volume_type_id': volume_type.id}
vol_enc_type = self.cinder_volume_encryption_types.list()[0]
cinder.volume_encryption_type_get(IsA(http.HttpRequest),
volume_type.id)\
.AndReturn(vol_enc_type)
cinder.volume_type_list(IsA(http.HttpRequest))\
.AndReturn(volume_type_list)
cinder.volume_encryption_type_update(IsA(http.HttpRequest),
formData['volume_type_id'],
formData)
self.mox.ReplayAll()
self.mock_volume_encryption_type_get.return_value = vol_enc_type
self.mock_volume_type_list.return_value = volume_type_list
self.mock_volume_encryption_type_update.return_value = None
url = reverse('horizon:admin:volume_types:update_type_encryption',
args=[volume_type.id])
@ -325,33 +323,36 @@ class VolumeTypeTests(test.BaseAdminViewTests):
res,
'admin/volume_types/update_volume_type_encryption.html')
@test.create_stubs({cinder: ('volume_type_get',
'volume_type_access_list',
'volume_type_add_project_access',
'volume_type_remove_project_access'),
keystone: ('tenant_list',)})
self.mock_volume_encryption_type_get.assert_called_once_with(
test.IsHttpRequest(), volume_type.id)
self.mock_volume_type_list.assert_called_once_with(
test.IsHttpRequest())
self.mock_volume_encryption_type_update.assert_called_once_with(
test.IsHttpRequest(),
formData['volume_type_id'],
formData)
@test.create_mocks({api.cinder: ('volume_type_get',
'volume_type_access_list',
'volume_type_add_project_access',
'volume_type_remove_project_access'),
api.keystone: ('tenant_list',)})
def _test_edit_volume_type_access(self, exception=False):
volume_type = self.cinder_volume_types.list()[2]
volume_type.id = u'1'
keystone.tenant_list(
IsA(http.HttpRequest)).AndReturn([self.tenants.list(), False])
type_access = self.cinder_type_access.list()
formData = {'member': [u'3'],
'volume_type_id': volume_type.id}
volume_type = cinder.volume_type_get(
IsA(http.HttpRequest), volume_type.id).AndReturn(volume_type)
cinder.volume_type_access_list(
IsA(http.HttpRequest), volume_type.id).AndReturn(type_access)
cinder.volume_type_add_project_access(
IsA(http.HttpRequest), volume_type.id, u'3')
self.mock_tenant_list.return_value = [self.tenants.list(), False]
self.mock_volume_type_get.return_value = volume_type
self.mock_volume_type_access_list.return_value = type_access
self.mock_volume_type_add_project_access.return_value = None
if exception:
cinder.volume_type_remove_project_access(
IsA(http.HttpRequest), volume_type.id, u'1')\
.AndRaise(exceptions.BadRequest())
self.mock_volume_type_remove_project_access.side_effect = \
exceptions.BadRequest()
else:
cinder.volume_type_remove_project_access(
IsA(http.HttpRequest), volume_type.id, u'1')
self.mox.ReplayAll()
self.mock_volume_type_remove_project_access.return_value = None
url = reverse('horizon:admin:volume_types:edit_access',
args=[volume_type.id])
@ -359,6 +360,16 @@ class VolumeTypeTests(test.BaseAdminViewTests):
self.assertNoFormErrors(res)
self.assertRedirectsNoFollow(res, INDEX_URL)
self.mock_tenant_list.assert_called_once_with(test.IsHttpRequest())
self.mock_volume_type_get.assert_called_once_with(
test.IsHttpRequest(), volume_type.id)
self.mock_volume_type_access_list.assert_called_once_with(
test.IsHttpRequest(), volume_type.id)
self.mock_volume_type_add_project_access.assert_called_once_with(
test.IsHttpRequest(), volume_type.id, u'3')
self.mock_volume_type_remove_project_access.assert_called_once_with(
test.IsHttpRequest(), volume_type.id, u'1')
def test_edit_volume_type_access(self):
self._test_edit_volume_type_access()