Merge "Convert admin volume_types tests into mock"
This commit is contained in:
commit
232f8bba06
|
@ -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'])
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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()
|
||||
|
||||
|
|
Loading…
Reference in New Issue