ResourceClass tables inside forms (RC Flavors and Resources added) TESTS
- CRUD operations tests added - test data added Change-Id: Ie8f7b2a83bf9e4096cffaa11663c4d98fb52dedc
This commit is contained in:
committed by
Tomas Sedovic
parent
a99d052fb8
commit
50ea6f89af
@@ -12,7 +12,6 @@
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
from collections import namedtuple
|
||||
from django import http
|
||||
from django.core.urlresolvers import reverse
|
||||
from mox import IsA
|
||||
@@ -21,51 +20,157 @@ from openstack_dashboard.test import helpers as test
|
||||
|
||||
|
||||
class ResourceClassesTests(test.BaseAdminViewTests):
|
||||
@test.create_stubs({
|
||||
api.management.ResourceClass: (
|
||||
'create',
|
||||
'set_flavors',
|
||||
'set_resources'
|
||||
),
|
||||
api.management.Flavor: (
|
||||
'list',
|
||||
),
|
||||
api.management.Rack: (
|
||||
'list',
|
||||
)})
|
||||
def test_create_resource_class(self):
|
||||
ResourceClass = namedtuple('ResourceClass', 'id, name, service_type')
|
||||
resource_class = ResourceClass(1, 'test', 'compute')
|
||||
new_resource_class = self.management_resource_classes.first()
|
||||
|
||||
all_flavors = self.management_flavors.list()
|
||||
all_racks = self.management_racks.list()
|
||||
|
||||
add_flavors_ids = []
|
||||
add_max_vms = {}
|
||||
add_resources_ids = []
|
||||
|
||||
# get
|
||||
api.management.Flavor.list(
|
||||
IsA(http.HttpRequest)).\
|
||||
AndReturn(all_flavors)
|
||||
api.management.Rack.list(
|
||||
IsA(http.HttpRequest),
|
||||
True).\
|
||||
AndReturn(all_racks)
|
||||
|
||||
# post
|
||||
api.management.ResourceClass.create(
|
||||
IsA(http.HttpRequest),
|
||||
name=new_resource_class.name,
|
||||
service_type=new_resource_class.service_type).\
|
||||
AndReturn(new_resource_class)
|
||||
api.management.ResourceClass.set_resources(
|
||||
IsA(http.HttpRequest),
|
||||
add_resources_ids)
|
||||
api.management.ResourceClass.set_flavors(
|
||||
IsA(http.HttpRequest),
|
||||
add_flavors_ids,
|
||||
add_max_vms)
|
||||
|
||||
self.mox.ReplayAll()
|
||||
url = reverse(
|
||||
'horizon:infrastructure:resource_management:'
|
||||
'resource_classes:create')
|
||||
resp = self.client.get(url)
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
data = {'name': resource_class.name,
|
||||
'service_type': resource_class.service_type}
|
||||
resp = self.client.post(url, data)
|
||||
self.assertRedirectsNoFollow(
|
||||
resp, reverse('horizon:infrastructure:resource_management:index'))
|
||||
res = self.client.get(url)
|
||||
self.assertEqual(res.status_code, 200)
|
||||
|
||||
form_data = {'name': new_resource_class.name,
|
||||
'service_type': new_resource_class.service_type}
|
||||
res = self.client.post(url, form_data)
|
||||
self.assertNoFormErrors(res)
|
||||
self.assertMessageCount(success=1)
|
||||
|
||||
self.assertRedirectsNoFollow(
|
||||
res, reverse('horizon:infrastructure:resource_management:index'))
|
||||
|
||||
@test.create_stubs({
|
||||
api.management.ResourceClass: (
|
||||
'get',
|
||||
'flavors',
|
||||
'all_flavors',
|
||||
'resources',
|
||||
'all_resources',
|
||||
'update',
|
||||
'set_flavors',
|
||||
'set_resources'), })
|
||||
def test_edit_resource_class(self):
|
||||
ResourceClass = namedtuple('ResourceClass', 'id, name, service_type')
|
||||
resource_class = ResourceClass(1, 'test', 'compute')
|
||||
resource_class = self.management_resource_classes.first()
|
||||
|
||||
flavors = []
|
||||
all_flavors = []
|
||||
resources = []
|
||||
all_resources = []
|
||||
|
||||
add_flavors_ids = []
|
||||
add_max_vms = {}
|
||||
add_resources_ids = []
|
||||
|
||||
# FIXME I should probably track the resources and flavors methods
|
||||
# so maybe they shouldn't be a @property
|
||||
|
||||
# properties set
|
||||
api.management.ResourceClass.resources = resources
|
||||
api.management.ResourceClass.all_resources = all_resources
|
||||
|
||||
api.management.ResourceClass.flavors = flavors
|
||||
api.management.ResourceClass.all_flavors = all_flavors
|
||||
|
||||
# get
|
||||
api.management.ResourceClass.get(
|
||||
IsA(http.HttpRequest),
|
||||
resource_class.id).\
|
||||
MultipleTimes().AndReturn(resource_class)
|
||||
|
||||
# post
|
||||
api.management.ResourceClass.update(
|
||||
IsA(http.HttpRequest),
|
||||
resource_class.id,
|
||||
name=resource_class.name,
|
||||
service_type=resource_class.service_type).\
|
||||
AndReturn(resource_class)
|
||||
api.management.ResourceClass.set_resources(
|
||||
IsA(http.HttpRequest),
|
||||
add_resources_ids)
|
||||
api.management.ResourceClass.set_flavors(
|
||||
IsA(http.HttpRequest),
|
||||
add_flavors_ids,
|
||||
add_max_vms)
|
||||
|
||||
self.mox.ReplayAll()
|
||||
|
||||
# get_test
|
||||
url = reverse(
|
||||
'horizon:infrastructure:resource_management:'
|
||||
'resource_classes:update',
|
||||
args=[resource_class.id])
|
||||
resp = self.client.get(url)
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
res = self.client.get(url)
|
||||
self.assertEqual(res.status_code, 200)
|
||||
|
||||
# post test
|
||||
data = {'resource_class_id': resource_class.id,
|
||||
'name': resource_class.name,
|
||||
'service_type': resource_class.service_type}
|
||||
resp = self.client.post(url, data)
|
||||
self.assertNoFormErrors(resp)
|
||||
form_data = {'resource_class_id': resource_class.id,
|
||||
'name': resource_class.name,
|
||||
'service_type': resource_class.service_type}
|
||||
res = self.client.post(url, form_data)
|
||||
self.assertNoFormErrors(res)
|
||||
self.assertMessageCount(success=1)
|
||||
|
||||
self.assertRedirectsNoFollow(
|
||||
resp, reverse('horizon:infrastructure:resource_management:index'))
|
||||
|
||||
""" #I don't have update yet, it's not suported by API """
|
||||
res, reverse('horizon:infrastructure:resource_management:index'))
|
||||
|
||||
@test.create_stubs({api.management.ResourceClass: ('delete', 'list'), })
|
||||
def test_delete_resource_class(self):
|
||||
ResourceClass = namedtuple('ResourceClass', 'id, name, service_type')
|
||||
resource_class = ResourceClass(1, 'test', 'compute')
|
||||
resource_class = self.management_resource_classes.first()
|
||||
all_resource_classes = self.management_resource_classes.list()
|
||||
|
||||
api.management.ResourceClass.delete(
|
||||
IsA(http.HttpRequest),
|
||||
resource_class.id)
|
||||
api.management.ResourceClass.list(
|
||||
IsA(http.HttpRequest)).\
|
||||
AndReturn(all_resource_classes)
|
||||
|
||||
self.mox.ReplayAll()
|
||||
|
||||
form_data = {'action':
|
||||
'resource_classes__delete__%s' % resource_class.id}
|
||||
'resource_classes__delete__%s' % resource_class.id}
|
||||
res = self.client.post(
|
||||
reverse('horizon:infrastructure:resource_management:index'),
|
||||
form_data)
|
||||
@@ -74,10 +179,17 @@ class ResourceClassesTests(test.BaseAdminViewTests):
|
||||
|
||||
|
||||
class ResourceClassViewTests(test.BaseAdminViewTests):
|
||||
|
||||
@test.create_stubs({
|
||||
api.management.ResourceClass: ('get',), })
|
||||
def test_detail_get(self):
|
||||
ResourceClass = namedtuple('ResourceClass', 'id, name, service_type')
|
||||
resource_class = ResourceClass('1', 'test', 'compute')
|
||||
resource_class = self.management_resource_classes.first()
|
||||
|
||||
api.management.ResourceClass.get(
|
||||
IsA(http.HttpRequest),
|
||||
resource_class.id).\
|
||||
MultipleTimes().AndReturn(resource_class)
|
||||
|
||||
self.mox.ReplayAll()
|
||||
|
||||
url = reverse('horizon:infrastructure:resource_management:'
|
||||
'resource_classes:detail', args=[resource_class.id])
|
||||
|
||||
@@ -96,7 +96,7 @@ class CreateResourceClassInfoAndFlavors(workflows.TableStep):
|
||||
else:
|
||||
all_flavors = api.management.Flavor.list(self.workflow.request)
|
||||
except:
|
||||
flavors = []
|
||||
all_flavors = []
|
||||
exceptions.handle(self.workflow.request,
|
||||
_('Unable to retrieve resource flavors list.'))
|
||||
return all_flavors
|
||||
|
||||
@@ -27,17 +27,45 @@ class ResourceManagementTests(test.BaseAdminViewTests):
|
||||
def setUp(self):
|
||||
super(ResourceManagementTests, self).setUp()
|
||||
|
||||
@test.create_stubs({
|
||||
api.management.ResourceClass: (
|
||||
'list',
|
||||
'racks',
|
||||
'hosts'),
|
||||
api.management.Flavor: (
|
||||
'list',)})
|
||||
def test_index(self):
|
||||
# Flavor stubs
|
||||
flavors = self.management_flavors.list()
|
||||
self.mox.StubOutWithMock(api.management.Flavor, 'list')
|
||||
|
||||
api.management.Flavor.list(IsA(http.HttpRequest)).AndReturn(flavors)
|
||||
# Flavor stubs end
|
||||
|
||||
# ResourceClass stubs
|
||||
all_resource_classes = self.management_resource_classes.list()
|
||||
hosts = []
|
||||
racks = []
|
||||
|
||||
api.management.ResourceClass.hosts = hosts
|
||||
api.management.ResourceClass.racks = racks
|
||||
|
||||
api.management.ResourceClass.list(
|
||||
IsA(http.HttpRequest)).\
|
||||
AndReturn(all_resource_classes)
|
||||
# ResourceClass stubs end
|
||||
|
||||
self.mox.ReplayAll()
|
||||
|
||||
url = reverse('horizon:infrastructure:resource_management:index')
|
||||
res = self.client.get(url)
|
||||
|
||||
self.assertTemplateUsed(
|
||||
res, 'infrastructure/resource_management/index.html')
|
||||
|
||||
# Flavor asserts
|
||||
self.assertItemsEqual(res.context['flavors_table'].data, flavors)
|
||||
# Flavor asserts end
|
||||
|
||||
# ResourceClass asserts
|
||||
self.assertItemsEqual(res.context['resource_classes_table'].data,
|
||||
all_resource_classes)
|
||||
# ResourceClass asserts end
|
||||
|
||||
@@ -10,7 +10,9 @@
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
from openstack_dashboard.api.management import Flavor, ResourceClass
|
||||
from openstack_dashboard.api.management import (
|
||||
Flavor, ResourceClass,
|
||||
Rack, ResourceClassFlavor)
|
||||
|
||||
import openstack_dashboard.dashboards.infrastructure.models as dummymodels
|
||||
|
||||
@@ -18,9 +20,8 @@ from .utils import TestDataContainer
|
||||
|
||||
|
||||
def data(TEST):
|
||||
TEST.management_flavors = TestDataContainer()
|
||||
|
||||
# Flavors
|
||||
TEST.management_flavors = TestDataContainer()
|
||||
flavor_1 = Flavor(dummymodels.Flavor(
|
||||
id="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa",
|
||||
name='m1.tiny'))
|
||||
@@ -32,18 +33,58 @@ def data(TEST):
|
||||
# Resource Classes
|
||||
TEST.management_resource_classes = TestDataContainer()
|
||||
|
||||
resource_class_1 = ResourceClass({
|
||||
"id": "1",
|
||||
"model": "infrastructure.resourceclass",
|
||||
"fields": {"service_type": "compute",
|
||||
"flavors": ["aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"],
|
||||
"name": "rclass1"}})
|
||||
resource_class_1 = ResourceClass(dummymodels.ResourceClass(
|
||||
id="1",
|
||||
service_type="compute",
|
||||
name="rclass1"))
|
||||
|
||||
resource_class_2 = ResourceClass({
|
||||
"id": "2",
|
||||
"model": "infrastructure.resourceclass",
|
||||
"fields": {"service_type": "compute",
|
||||
"flavors": [],
|
||||
"name": "rclass2"}})
|
||||
resource_class_2 = ResourceClass(dummymodels.ResourceClass(
|
||||
id="2",
|
||||
service_type="compute",
|
||||
name="rclass2"))
|
||||
|
||||
"""
|
||||
# FIXME to make code below work, every @property has to have
|
||||
# setter defined in API model
|
||||
flavors = []
|
||||
all_flavors = []
|
||||
resources = []
|
||||
all_resources = []
|
||||
|
||||
@resources.setter
|
||||
def resources(self, value):
|
||||
self._resources = value
|
||||
resource_class_1.resources = resources
|
||||
resource_class_2.resources = resources
|
||||
|
||||
resource_class_1.all_resources = all_resources
|
||||
resource_class_2.all_resources = all_resources
|
||||
|
||||
resource_class_1.flavors = flavors
|
||||
resource_class_2.flavors = flavors
|
||||
|
||||
resource_class_1.all_flavors = all_flavors
|
||||
resource_class_2.all_flavors = all_flavors
|
||||
"""
|
||||
|
||||
TEST.management_resource_classes.add(resource_class_1, resource_class_2)
|
||||
|
||||
#Racks
|
||||
TEST.management_racks = TestDataContainer()
|
||||
rack_1 = Rack(dummymodels.Rack(
|
||||
id="1",
|
||||
name='rack1',
|
||||
resource_class_id='1'))
|
||||
|
||||
TEST.management_racks.add(rack_1)
|
||||
|
||||
#ResourceClassFlavors
|
||||
TEST.management_resource_class_flavors = TestDataContainer()
|
||||
resource_class_flavor_1 = ResourceClassFlavor(
|
||||
dummymodels.ResourceClassFlavor(
|
||||
id="1",
|
||||
max_vms='16',
|
||||
resource_class_id=1,
|
||||
flavor_id=1))
|
||||
|
||||
TEST.management_resource_class_flavors.add(resource_class_flavor_1)
|
||||
|
||||
Reference in New Issue
Block a user