summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTzu-Mainn Chen <tzumainn@redhat.com>2013-07-23 14:11:02 -0400
committerTomas Sedovic <tomas@sedovic.cz>2013-08-01 16:18:56 +0200
commit06bfaffa1726c6a5a76fa272a7da915bad358e68 (patch)
treee50304668e23ad115e3c6d65c9845d0922807cf2
parentc7e8b4eb437224f1cf61fa30b2718978333ff586 (diff)
downloadtuskar-ui-06bfaffa1726c6a5a76fa272a7da915bad358e68.tar.gz
various API fixes/updates
* updated Flavor to support max_vms through API * updated tests * fixed count of flavors on resource class detail * fixed Flavor capacity retrieval Change-Id: I08cfad9d8af5b24730d17cdf0a5e5809b45d7f58
-rw-r--r--openstack_dashboard/api/tuskar.py23
-rw-r--r--openstack_dashboard/dashboards/infrastructure/resource_management/flavors/tests.py58
-rw-r--r--openstack_dashboard/dashboards/infrastructure/resource_management/resource_classes/tests.py20
-rw-r--r--openstack_dashboard/dashboards/infrastructure/resource_management/templates/resource_management/resource_classes/_detail_overview.html2
-rw-r--r--openstack_dashboard/test/api_tests/tuskar_tests.py27
-rw-r--r--openstack_dashboard/test/test_data/tuskar_data.py10
6 files changed, 75 insertions, 65 deletions
diff --git a/openstack_dashboard/api/tuskar.py b/openstack_dashboard/api/tuskar.py
index f80655ba..be4f690e 100644
--- a/openstack_dashboard/api/tuskar.py
+++ b/openstack_dashboard/api/tuskar.py
@@ -15,6 +15,7 @@
import copy
import logging
import re
+from collections import namedtuple
from datetime import timedelta
from random import randint
@@ -784,23 +785,20 @@ class FlavorTemplate(StringIdAPIResourceWrapper):
class Flavor(StringIdAPIResourceWrapper):
"""Wrapper for the Flavor object returned by Tuskar.
"""
- _attrs = ['name']
+ _attrs = ['name', 'max_vms']
@classmethod
def create(cls, request, resource_class_id, name, max_vms, capacities):
return cls(tuskarclient(request).flavors.create(
- resource_class_id, name=name, capacities=capacities))
+ resource_class_id,
+ name=name,
+ max_vms=max_vms,
+ capacities=capacities))
@classmethod
def delete(cls, request, resource_class_id, flavor_id):
tuskarclient(request).flavors.delete(resource_class_id, flavor_id)
- # FIXME: has to be implemented in API
- # https://github.com/tuskar/tuskar/issues/43
- @property
- def max_vms(self):
- return 2
-
# FIXME: returns flavor template for this flavor
@property
def flavor_template(self):
@@ -812,8 +810,13 @@ class Flavor(StringIdAPIResourceWrapper):
@property
def capacities(self):
if not hasattr(self, '_capacities'):
- self._capacities = [Capacity(c) for c in
- self._apiresource.capacities]
+ ## FIXME: should we distinguish between tuskar
+ ## capacities and our internal capacities?
+ CapacityStruct = namedtuple('CapacityStruct', 'name value unit')
+ self._capacities = [Capacity(CapacityStruct(
+ name=c['name'],
+ value=c['value'],
+ unit=c['unit'])) for c in self._apiresource.capacities]
return self._capacities
def capacity(self, capacity_name):
diff --git a/openstack_dashboard/dashboards/infrastructure/resource_management/flavors/tests.py b/openstack_dashboard/dashboards/infrastructure/resource_management/flavors/tests.py
index e0ca0e3b..9ad4b1e2 100644
--- a/openstack_dashboard/dashboards/infrastructure/resource_management/flavors/tests.py
+++ b/openstack_dashboard/dashboards/infrastructure/resource_management/flavors/tests.py
@@ -9,14 +9,14 @@ from openstack_dashboard.test import helpers as test
class FlavorTemplatesTests(test.BaseAdminViewTests):
@test.create_stubs({api.tuskar.FlavorTemplate: ('list', 'create')})
- def test_create_flavor(self):
- flavor = self.tuskar_flavors.first()
+ def test_create_flavor_template(self):
+ template = self.tuskar_flavor_templates.first()
api.tuskar.FlavorTemplate.list(
IsA(http.HttpRequest)).AndReturn([])
api.tuskar.FlavorTemplate.create(IsA(http.HttpRequest),
- flavor.name,
- 0, 0, 0, 0, 0).AndReturn(flavor)
+ template.name,
+ 0, 0, 0, 0, 0).AndReturn(template)
self.mox.ReplayAll()
url = reverse(
@@ -26,7 +26,7 @@ class FlavorTemplatesTests(test.BaseAdminViewTests):
self.assertTemplateUsed(
resp, "infrastructure/resource_management/flavors/create.html")
- data = {'name': flavor.name,
+ data = {'name': template.name,
'vcpu': 0,
'ram': 0,
'root_disk': 0,
@@ -37,37 +37,37 @@ class FlavorTemplatesTests(test.BaseAdminViewTests):
resp, reverse('horizon:infrastructure:resource_management:index'))
@test.create_stubs({api.tuskar.FlavorTemplate: ('list', 'update', 'get')})
- def test_edit_flavor_get(self):
- flavor = self.tuskar_flavors.first() # has no extra spec
+ def test_edit_flavor_template_get(self):
+ template = self.tuskar_flavor_templates.first() # has no extra spec
api.tuskar.FlavorTemplate.get(IsA(http.HttpRequest),
- flavor.id).AndReturn(flavor)
+ template.id).AndReturn(template)
self.mox.ReplayAll()
url = reverse(
'horizon:infrastructure:resource_management:flavors:edit',
- args=[flavor.id])
+ args=[template.id])
resp = self.client.get(url)
self.assertEqual(resp.status_code, 200)
self.assertTemplateUsed(
resp, "infrastructure/resource_management/flavors/edit.html")
@test.create_stubs({api.tuskar.FlavorTemplate: ('list', 'update', 'get')})
- def test_edit_flavor_post(self):
- flavor = self.tuskar_flavors.first() # has no extra spec
+ def test_edit_flavor_template_post(self):
+ template = self.tuskar_flavor_templates.first() # has no extra spec
- api.tuskar.FlavorTemplate.list(
- IsA(http.HttpRequest)).AndReturn(self.tuskar_flavors.list())
+ api.tuskar.FlavorTemplate.list(IsA(http.HttpRequest)).AndReturn(
+ self.tuskar_flavor_templates.list())
api.tuskar.FlavorTemplate.update(IsA(http.HttpRequest),
- flavor.id,
- flavor.name,
- 0, 0, 0, 0, 0).AndReturn(flavor)
+ template.id,
+ template.name,
+ 0, 0, 0, 0, 0).AndReturn(template)
api.tuskar.FlavorTemplate.get(IsA(http.HttpRequest),
- flavor.id).AndReturn(flavor)
+ template.id).AndReturn(template)
self.mox.ReplayAll()
- data = {'flavor_id': flavor.id,
- 'name': flavor.name,
+ data = {'flavor_id': template.id,
+ 'name': template.name,
'vcpu': 0,
'ram': 0,
'root_disk': 0,
@@ -75,7 +75,7 @@ class FlavorTemplatesTests(test.BaseAdminViewTests):
'swap_disk': 0}
url = reverse(
'horizon:infrastructure:resource_management:flavors:edit',
- args=[flavor.id])
+ args=[template.id])
resp = self.client.post(url, data)
self.assertNoFormErrors(resp)
self.assertMessageCount(success=1)
@@ -83,15 +83,15 @@ class FlavorTemplatesTests(test.BaseAdminViewTests):
resp, reverse('horizon:infrastructure:resource_management:index'))
@test.create_stubs({api.tuskar.FlavorTemplate: ('list', 'delete')})
- def test_delete_flavor(self):
- flavor = self.tuskar_flavors.first()
+ def test_delete_flavor_template(self):
+ template = self.tuskar_flavor_templates.first()
api.tuskar.FlavorTemplate.list(IsA(http.HttpRequest)).\
- AndReturn(self.tuskar_flavors.list())
- api.tuskar.FlavorTemplate.delete(IsA(http.HttpRequest), flavor.id)
+ AndReturn(self.tuskar_flavor_templates.list())
+ api.tuskar.FlavorTemplate.delete(IsA(http.HttpRequest), template.id)
self.mox.ReplayAll()
- form_data = {'action': 'flavors__delete__%s' % flavor.id}
+ form_data = {'action': 'flavors__delete__%s' % template.id}
res = self.client.post(
reverse('horizon:infrastructure:resource_management:index'),
form_data)
@@ -100,11 +100,11 @@ class FlavorTemplatesTests(test.BaseAdminViewTests):
res, reverse('horizon:infrastructure:resource_management:index'))
@test.create_stubs({api.tuskar.FlavorTemplate: ('get',)})
- def test_detail_flavor(self):
- flavor = self.tuskar_flavors.first()
+ def test_detail_flavor_template(self):
+ template = self.tuskar_flavor_templates.first()
api.tuskar.FlavorTemplate.get(IsA(http.HttpRequest),
- flavor.id).AndReturn(flavor)
+ template.id).AndReturn(template)
api.tuskar.FlavorTemplate.resource_classes = self. \
tuskar_resource_classes
@@ -112,7 +112,7 @@ class FlavorTemplatesTests(test.BaseAdminViewTests):
url = reverse(
'horizon:infrastructure:resource_management:flavors:detail',
- args=[flavor.id])
+ args=[template.id])
res = self.client.get(url)
self.assertTemplateUsed(
res, "infrastructure/resource_management/flavors/detail.html")
diff --git a/openstack_dashboard/dashboards/infrastructure/resource_management/resource_classes/tests.py b/openstack_dashboard/dashboards/infrastructure/resource_management/resource_classes/tests.py
index 2ae8be93..3679a3fd 100644
--- a/openstack_dashboard/dashboards/infrastructure/resource_management/resource_classes/tests.py
+++ b/openstack_dashboard/dashboards/infrastructure/resource_management/resource_classes/tests.py
@@ -22,15 +22,15 @@ from openstack_dashboard.test import helpers as test
class ResourceClassViewTests(test.BaseAdminViewTests):
@test.create_stubs({
- api.tuskar.Flavor: ('list',),
+ api.tuskar.FlavorTemplate: ('list',),
api.tuskar.Rack: ('list',)
})
def test_create_resource_class_get(self):
- all_flavors = self.tuskar_flavors.list()
+ all_templates = self.tuskar_flavor_templates.list()
all_racks = self.tuskar_racks.list()
- api.tuskar.Flavor.\
- list(IsA(http.HttpRequest)).AndReturn(all_flavors)
+ api.tuskar.FlavorTemplate.\
+ list(IsA(http.HttpRequest)).AndReturn(all_templates)
api.tuskar.Rack.\
list(IsA(http.HttpRequest), True).AndReturn(all_racks)
self.mox.ReplayAll()
@@ -78,7 +78,8 @@ class ResourceClassViewTests(test.BaseAdminViewTests):
("%s?tab=resource_management_tabs__resource_classes_tab" %
reverse("horizon:infrastructure:resource_management:index")))
- @test.create_stubs({api.tuskar.ResourceClass: ('get', 'racks_ids')})
+ @test.create_stubs({api.tuskar.ResourceClass: ('get', 'list_flavors',
+ 'racks_ids')})
def test_edit_resource_class_get(self):
resource_class = self.tuskar_resource_classes.first()
all_flavors = []
@@ -95,6 +96,7 @@ class ResourceClassViewTests(test.BaseAdminViewTests):
# properties set
api.tuskar.ResourceClass.all_racks = all_racks
api.tuskar.ResourceClass.all_flavors = all_flavors
+ api.tuskar.ResourceClass.list_flavors = all_flavors
url = reverse(
'horizon:infrastructure:resource_management:'
@@ -194,7 +196,8 @@ class ResourceClassViewTests(test.BaseAdminViewTests):
self.assertTemplateUsed(res,
'infrastructure/resource_management/resource_classes/detail.html')
- @test.create_stubs({api.tuskar.ResourceClass: ('get', 'racks_ids')})
+ @test.create_stubs({api.tuskar.ResourceClass: ('get', 'list_flavors',
+ 'racks_ids')})
def test_detail_edit_racks_get(self):
resource_class = self.tuskar_resource_classes.first()
all_flavors = []
@@ -210,6 +213,7 @@ class ResourceClassViewTests(test.BaseAdminViewTests):
# properties set
api.tuskar.ResourceClass.all_racks = all_racks
api.tuskar.ResourceClass.all_flavors = all_flavors
+ api.tuskar.ResourceClass.list_flavors = all_flavors
url = reverse(
'horizon:infrastructure:resource_management:'
@@ -264,7 +268,8 @@ class ResourceClassViewTests(test.BaseAdminViewTests):
reverse(detail_url, args=(resource_class.id,)))
self.assertRedirectsNoFollow(res, redirect_url)
- @test.create_stubs({api.tuskar.ResourceClass: ('get', 'racks_ids')})
+ @test.create_stubs({api.tuskar.ResourceClass: ('get', 'list_flavors',
+ 'racks_ids')})
def test_detail_edit_flavors_get(self):
resource_class = self.tuskar_resource_classes.first()
all_flavors = []
@@ -280,6 +285,7 @@ class ResourceClassViewTests(test.BaseAdminViewTests):
# properties set
api.tuskar.ResourceClass.all_racks = all_racks
api.tuskar.ResourceClass.all_flavors = all_flavors
+ api.tuskar.ResourceClass.list_flavors = all_flavors
url = reverse(
'horizon:infrastructure:resource_management:'
diff --git a/openstack_dashboard/dashboards/infrastructure/resource_management/templates/resource_management/resource_classes/_detail_overview.html b/openstack_dashboard/dashboards/infrastructure/resource_management/templates/resource_management/resource_classes/_detail_overview.html
index e3664beb..7a0db04d 100644
--- a/openstack_dashboard/dashboards/infrastructure/resource_management/templates/resource_management/resource_classes/_detail_overview.html
+++ b/openstack_dashboard/dashboards/infrastructure/resource_management/templates/resource_management/resource_classes/_detail_overview.html
@@ -20,7 +20,7 @@
<dt>{% trans "Type" %}</dt>
<dd>{{ resource_class.service_type }}</dd>
<dt>{% trans "Flavors" %}</dt>
- <dd>{{ resource_class.flavors|length }}</dd>
+ <dd>{{ resource_class.list_flavors|length }}</dd>
<dt>{% trans "Active Instances" %}</dt>
<dd>{{ resource_class.running_virtual_machines|length }}</dd>
</dl>
diff --git a/openstack_dashboard/test/api_tests/tuskar_tests.py b/openstack_dashboard/test/api_tests/tuskar_tests.py
index c5d05207..54350d9f 100644
--- a/openstack_dashboard/test/api_tests/tuskar_tests.py
+++ b/openstack_dashboard/test/api_tests/tuskar_tests.py
@@ -53,7 +53,7 @@ class TuskarApiTests(test.APITestCase):
def test_resource_class_flavor_counts(self):
rc = self.tuskar_resource_classes.first()
- for f in rc.resource_class_flavors:
+ for f in rc.list_flavors:
self.assertIsInstance(f, api.tuskar.ResourceClassFlavor)
self.assertEquals(7, len(rc.resource_class_flavors))
@@ -65,20 +65,21 @@ class TuskarApiTests(test.APITestCase):
def test_resource_class_nodes(self):
rc = self.tuskar_resource_classes.first()
- for node in rc.nodes:
+ for node in rc.list_nodes:
self.assertIsInstance(node, api.tuskar.Node)
self.assertEquals(4, len(rc.nodes))
# TODO: create, delete operations
- def test_flavor_list(self):
- flist = api.tuskar.Flavor.list(self.request)
- self.assertEquals(7, len(flist))
- for f in flist:
- self.assertIsInstance(f, api.tuskar.Flavor)
-
- def test_flavor_get(self):
- test_flavor = self.tuskar_flavors.first()
- flavor = api.tuskar.Flavor.get(self.request, test_flavor.id)
- self.assertIsInstance(flavor, api.tuskar.Flavor)
- self.assertEquals(flavor.name, test_flavor.name)
+ def test_flavor_template_list(self):
+ templates = api.tuskar.FlavorTemplate.list(self.request)
+ self.assertEquals(7, len(templates))
+ for t in templates:
+ self.assertIsInstance(t, api.tuskar.FlavorTemplate)
+
+ def test_flavor_template_get(self):
+ test_template = self.tuskar_flavor_templates.first()
+ template = api.tuskar.FlavorTemplate.get(self.request,
+ test_template.id)
+ self.assertIsInstance(template, api.tuskar.FlavorTemplate)
+ self.assertEquals(template.name, test_template.name)
diff --git a/openstack_dashboard/test/test_data/tuskar_data.py b/openstack_dashboard/test/test_data/tuskar_data.py
index fb5c85f9..936a2081 100644
--- a/openstack_dashboard/test/test_data/tuskar_data.py
+++ b/openstack_dashboard/test/test_data/tuskar_data.py
@@ -11,7 +11,7 @@
# under the License.
from openstack_dashboard.api.tuskar import (
- Flavor, ResourceClass, Node,
+ Flavor, FlavorTemplate, ResourceClass, Node,
Rack, Capacity)
from collections import namedtuple
@@ -24,8 +24,8 @@ def data(TEST):
FlavorStruct = namedtuple('FlavorStruct', 'id name\
capacities')
CapacityStruct = namedtuple('CapacityStruct', 'name value unit')
- TEST.tuskar_flavors = TestDataContainer()
- flavor_1 = Flavor(FlavorStruct(
+ TEST.tuskar_flavor_templates = TestDataContainer()
+ flavor_template_1 = FlavorTemplate(FlavorStruct(
id="1",
name='m1.tiny',
capacities=[
@@ -49,11 +49,11 @@ def data(TEST):
name='swap_disk',
unit='GB',
value='0'))]))
- flavor_2 = Flavor(FlavorStruct(
+ flavor_template_2 = FlavorTemplate(FlavorStruct(
id="2",
name='m1.large',
capacities=[]))
- TEST.tuskar_flavors.add(flavor_1, flavor_2)
+ TEST.tuskar_flavor_templates.add(flavor_template_1, flavor_template_2)
# Flavors
TEST.tuskar_flavors = TestDataContainer()