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:
Ladislav Smola
2013-06-14 17:39:30 +02:00
committed by Tomas Sedovic
parent a99d052fb8
commit 50ea6f89af
4 changed files with 227 additions and 46 deletions

View File

@@ -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])

View File

@@ -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

View File

@@ -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

View File

@@ -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)