horizon/horizon/dashboards/syspanel/flavors/tests.py

117 lines
4.7 KiB
Python

from django import http
from django.core.urlresolvers import reverse
from mox import IsA
from horizon import api
from horizon import test
class FlavorsTests(test.BaseAdminViewTests):
def test_create_new_flavor_when_none_exist(self):
flavor = self.flavors.first()
eph = getattr(flavor, 'OS-FLV-EXT-DATA:ephemeral')
self.mox.StubOutWithMock(api.nova, 'flavor_list')
self.mox.StubOutWithMock(api.nova, 'flavor_create')
# no pre-existing flavors
api.nova.flavor_list(IsA(http.HttpRequest)).AndReturn([])
api.nova.flavor_create(IsA(http.HttpRequest),
flavor.name,
flavor.ram,
flavor.vcpus,
flavor.disk,
1, # Flavor id 1 because there are no others.
ephemeral=eph).AndReturn(flavor)
api.nova.flavor_list(IsA(http.HttpRequest))
self.mox.ReplayAll()
url = reverse('horizon:syspanel:flavors:create')
resp = self.client.get(url)
self.assertEqual(resp.status_code, 200)
self.assertTemplateUsed(resp, "syspanel/flavors/create.html")
data = {'name': flavor.name,
'vcpus': flavor.vcpus,
'memory_mb': flavor.ram,
'disk_gb': flavor.disk,
'eph_gb': eph}
resp = self.client.post(url, data)
self.assertRedirectsNoFollow(resp,
reverse("horizon:syspanel:flavors:index"))
def test_edit_flavor(self):
flavors = self.flavors.list()
flavor = self.flavors.first()
next_id = int(max(flavors, key=lambda f: f.id).id) + 1
eph = getattr(flavor, 'OS-FLV-EXT-DATA:ephemeral')
self.mox.StubOutWithMock(api.nova, 'flavor_list')
self.mox.StubOutWithMock(api.nova, 'flavor_get')
self.mox.StubOutWithMock(api.nova, 'flavor_delete')
self.mox.StubOutWithMock(api.nova, 'flavor_create')
# GET
api.nova.flavor_get(IsA(http.HttpRequest), flavor.id).AndReturn(flavor)
# POST
api.nova.flavor_list(IsA(http.HttpRequest))
api.nova.flavor_get(IsA(http.HttpRequest), flavor.id).AndReturn(flavor)
api.nova.flavor_delete(IsA(http.HttpRequest), int(flavor.id))
api.nova.flavor_list(IsA(http.HttpRequest)) \
.AndReturn(flavors)
api.nova.flavor_create(IsA(http.HttpRequest),
flavor.name,
flavor.ram,
flavor.vcpus + 1,
flavor.disk,
next_id,
ephemeral=eph).AndReturn(flavor)
self.mox.ReplayAll()
url = reverse('horizon:syspanel:flavors:edit', args=[flavor.id])
resp = self.client.get(url)
self.assertEqual(resp.status_code, 200)
self.assertTemplateUsed(resp, "syspanel/flavors/edit.html")
data = {'flavor_id': flavor.id,
'name': flavor.name,
'vcpus': flavor.vcpus + 1,
'memory_mb': flavor.ram,
'disk_gb': flavor.disk,
'eph_gb': eph}
resp = self.client.post(url, data)
self.assertRedirectsNoFollow(resp,
reverse("horizon:syspanel:flavors:index"))
def test_edit_flavor_set_existing_name(self):
flavor_a = self.flavors.list()[0]
flavor_b = self.flavors.list()[1]
eph = getattr(flavor_a, 'OS-FLV-EXT-DATA:ephemeral')
self.mox.StubOutWithMock(api.nova, 'flavor_list')
self.mox.StubOutWithMock(api.nova, 'flavor_get')
# GET
api.nova.flavor_get(IsA(http.HttpRequest), flavor_a.id) \
.AndReturn(flavor_a)
# POST
api.nova.flavor_list(IsA(http.HttpRequest)) \
.AndReturn(self.flavors.list())
api.nova.flavor_get(IsA(http.HttpRequest),
flavor_a.id).AndReturn(flavor_a)
self.mox.ReplayAll()
url = reverse('horizon:syspanel:flavors:edit', args=[flavor_a.id])
resp = self.client.get(url)
self.assertEqual(resp.status_code, 200)
self.assertTemplateUsed(resp, "syspanel/flavors/edit.html")
data = {'flavor_id': flavor_a.id,
'name': flavor_b.name,
'vcpus': flavor_a.vcpus + 1,
'memory_mb': flavor_a.ram,
'disk_gb': flavor_a.disk,
'eph_gb': eph}
resp = self.client.post(url, data)
self.assertFormErrors(resp, 1, 'The name "m1.massive" '
'is already used by another flavor.')