Moving back to using python-tuskarclient instead of mocking it
Change-Id: I06afd8c98e26b1fb0278622e54bf4ae03755ae9e
This commit is contained in:
parent
4450b19acc
commit
f4126ab431
@ -22,4 +22,5 @@ pytz>=2010h
|
|||||||
lockfile>=0.8
|
lockfile>=0.8
|
||||||
|
|
||||||
python-ironicclient>=0.2.1
|
python-ironicclient>=0.2.1
|
||||||
http://tarballs.openstack.org/python-tuskarclient/python-tuskarclient-master.tar.gz#egg=python-tuskarclient
|
#http://tarballs.openstack.org/python-tuskarclient/python-tuskarclient-master.tar.gz#egg=python-tuskarclient
|
||||||
|
-e git+http://git.openstack.org/cgit/openstack/python-tuskarclient/#egg=python-tuskarclient
|
||||||
|
@ -16,18 +16,11 @@ import logging
|
|||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
from openstack_dashboard.api import base
|
from openstack_dashboard.api import base
|
||||||
from openstack_dashboard.api import glance
|
from openstack_dashboard.api import glance
|
||||||
from openstack_dashboard.test.test_data import utils
|
from tuskarclient import client as tuskar_client
|
||||||
from tuskarclient.v1 import client as tuskar_client
|
|
||||||
|
|
||||||
from tuskar_ui.api import flavor
|
from tuskar_ui.api import flavor
|
||||||
from tuskar_ui.cached_property import cached_property # noqa
|
from tuskar_ui.cached_property import cached_property # noqa
|
||||||
from tuskar_ui.handle_errors import handle_errors # noqa
|
from tuskar_ui.handle_errors import handle_errors # noqa
|
||||||
from tuskar_ui.test.test_data import tuskar_data
|
|
||||||
from tuskar_ui.test.test_driver import tuskar_driver as mock_tuskar
|
|
||||||
|
|
||||||
|
|
||||||
TEST_DATA = utils.TestDataContainer()
|
|
||||||
tuskar_data.data(TEST_DATA)
|
|
||||||
|
|
||||||
LOG = logging.getLogger(__name__)
|
LOG = logging.getLogger(__name__)
|
||||||
TUSKAR_ENDPOINT_URL = getattr(django.conf.settings, 'TUSKAR_ENDPOINT_URL')
|
TUSKAR_ENDPOINT_URL = getattr(django.conf.settings, 'TUSKAR_ENDPOINT_URL')
|
||||||
@ -36,11 +29,12 @@ TUSKAR_ENDPOINT_URL = getattr(django.conf.settings, 'TUSKAR_ENDPOINT_URL')
|
|||||||
# FIXME: request isn't used right in the tuskar client right now,
|
# FIXME: request isn't used right in the tuskar client right now,
|
||||||
# but looking at other clients, it seems like it will be in the future
|
# but looking at other clients, it seems like it will be in the future
|
||||||
def tuskarclient(request):
|
def tuskarclient(request):
|
||||||
c = tuskar_client.Client(TUSKAR_ENDPOINT_URL)
|
c = tuskar_client.get_client('2', tuskar_url=TUSKAR_ENDPOINT_URL,
|
||||||
|
os_auth_token=request.user.token.id)
|
||||||
return c
|
return c
|
||||||
|
|
||||||
|
|
||||||
class OvercloudPlan(base.APIDictWrapper):
|
class OvercloudPlan(base.APIResourceWrapper):
|
||||||
_attrs = ('id', 'name', 'description', 'created_at', 'modified_at',
|
_attrs = ('id', 'name', 'description', 'created_at', 'modified_at',
|
||||||
'roles', 'parameters', 'template')
|
'roles', 'parameters', 'template')
|
||||||
|
|
||||||
@ -64,11 +58,12 @@ class OvercloudPlan(base.APIDictWrapper):
|
|||||||
:return: the created OvercloudPlan object
|
:return: the created OvercloudPlan object
|
||||||
:rtype: tuskar_ui.api.tuskar.OvercloudPlan
|
:rtype: tuskar_ui.api.tuskar.OvercloudPlan
|
||||||
"""
|
"""
|
||||||
plan = mock_tuskar.Plan.create(name, description)
|
plan = tuskarclient(request).plans.create(name=name,
|
||||||
|
description=description)
|
||||||
return cls(plan, request=request)
|
return cls(plan, request=request)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def update(cls, request, plan_id, name, description):
|
def patch(cls, request, plan_id, name, description):
|
||||||
"""Update an OvercloudPlan in Tuskar
|
"""Update an OvercloudPlan in Tuskar
|
||||||
|
|
||||||
:param request: request object
|
:param request: request object
|
||||||
@ -86,7 +81,9 @@ class OvercloudPlan(base.APIDictWrapper):
|
|||||||
:return: the updated OvercloudPlan object
|
:return: the updated OvercloudPlan object
|
||||||
:rtype: tuskar_ui.api.tuskar.OvercloudPlan
|
:rtype: tuskar_ui.api.tuskar.OvercloudPlan
|
||||||
"""
|
"""
|
||||||
plan = mock_tuskar.Plan.update(plan_id, name, description)
|
plan = tuskarclient(request).plans.patch(plan_uuid=plan_id,
|
||||||
|
name=name,
|
||||||
|
description=description)
|
||||||
return cls(plan, request=request)
|
return cls(plan, request=request)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
@ -99,8 +96,7 @@ class OvercloudPlan(base.APIDictWrapper):
|
|||||||
:return: list of OvercloudPlans, or an empty list if there are none
|
:return: list of OvercloudPlans, or an empty list if there are none
|
||||||
:rtype: list of tuskar_ui.api.tuskar.OvercloudPlan
|
:rtype: list of tuskar_ui.api.tuskar.OvercloudPlan
|
||||||
"""
|
"""
|
||||||
plans = mock_tuskar.Plan.list()
|
plans = tuskarclient(request).plans.list()
|
||||||
|
|
||||||
return [cls(plan, request=request) for plan in plans]
|
return [cls(plan, request=request) for plan in plans]
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
@ -118,7 +114,8 @@ class OvercloudPlan(base.APIDictWrapper):
|
|||||||
the ID
|
the ID
|
||||||
:rtype: tuskar_ui.api.tuskar.OvercloudPlan
|
:rtype: tuskar_ui.api.tuskar.OvercloudPlan
|
||||||
"""
|
"""
|
||||||
return cls(mock_tuskar.Plan.get(plan_id), request=request)
|
plan = tuskarclient(request).plans.get(plan_uuid=plan_id)
|
||||||
|
return cls(plan, request=request)
|
||||||
|
|
||||||
# TODO(lsmola) before will will support multiple overclouds, we
|
# TODO(lsmola) before will will support multiple overclouds, we
|
||||||
# can work only with overcloud that is named overcloud. Delete
|
# can work only with overcloud that is named overcloud. Delete
|
||||||
@ -147,11 +144,11 @@ class OvercloudPlan(base.APIDictWrapper):
|
|||||||
:param plan_id: plan id
|
:param plan_id: plan id
|
||||||
:type plan_id: int
|
:type plan_id: int
|
||||||
"""
|
"""
|
||||||
mock_tuskar.Plan.delete(plan_id)
|
tuskarclient(request).plans.delete(plan_uuid=plan_id)
|
||||||
|
|
||||||
@cached_property
|
@cached_property
|
||||||
def role_list(self):
|
def role_list(self):
|
||||||
return [OvercloudRole.get(self._request, role['id'])
|
return [OvercloudRole.get(self._request, role['uuid'])
|
||||||
for role in self.roles]
|
for role in self.roles]
|
||||||
|
|
||||||
def parameter_list(self, include_key_parameters=True):
|
def parameter_list(self, include_key_parameters=True):
|
||||||
@ -177,8 +174,8 @@ class OvercloudPlan(base.APIDictWrapper):
|
|||||||
return default
|
return default
|
||||||
|
|
||||||
|
|
||||||
class OvercloudRole(base.APIDictWrapper):
|
class OvercloudRole(base.APIResourceWrapper):
|
||||||
_attrs = ('id', 'name', 'version', 'description', 'created')
|
_attrs = ('uuid', 'name', 'version', 'description', 'created')
|
||||||
|
|
||||||
def __init__(self, apiresource, request=None):
|
def __init__(self, apiresource, request=None):
|
||||||
super(OvercloudRole, self).__init__(apiresource)
|
super(OvercloudRole, self).__init__(apiresource)
|
||||||
@ -196,7 +193,7 @@ class OvercloudRole(base.APIDictWrapper):
|
|||||||
are none
|
are none
|
||||||
:rtype: list of tuskar_ui.api.tuskar.OvercloudRole
|
:rtype: list of tuskar_ui.api.tuskar.OvercloudRole
|
||||||
"""
|
"""
|
||||||
roles = TEST_DATA.tuskarclient_roles.list()
|
roles = tuskarclient(request).roles.list()
|
||||||
return [cls(role, request=request) for role in roles]
|
return [cls(role, request=request) for role in roles]
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
@ -215,7 +212,7 @@ class OvercloudRole(base.APIDictWrapper):
|
|||||||
:rtype: tuskar_ui.api.tuskar.OvercloudRole
|
:rtype: tuskar_ui.api.tuskar.OvercloudRole
|
||||||
"""
|
"""
|
||||||
for role in OvercloudRole.list(request):
|
for role in OvercloudRole.list(request):
|
||||||
if role.id == role_id:
|
if role.uuid == role_id:
|
||||||
return role
|
return role
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
@ -276,3 +273,7 @@ class OvercloudRole(base.APIDictWrapper):
|
|||||||
flavor_id = plan.parameter_value(self.flavor_id_parameter_name)
|
flavor_id = plan.parameter_value(self.flavor_id_parameter_name)
|
||||||
if flavor_id:
|
if flavor_id:
|
||||||
return flavor.Flavor.get(self._request, flavor_id)
|
return flavor.Flavor.get(self._request, flavor_id)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def id(self):
|
||||||
|
return self.uuid
|
||||||
|
@ -67,13 +67,24 @@ def _prepare_create():
|
|||||||
class FlavorsTest(test.BaseAdminViewTests):
|
class FlavorsTest(test.BaseAdminViewTests):
|
||||||
|
|
||||||
def test_index(self):
|
def test_index(self):
|
||||||
|
plans = [api.tuskar.OvercloudPlan(plan, self.request)
|
||||||
|
for plan in TEST_DATA.tuskarclient_plans.list()]
|
||||||
|
roles = [api.tuskar.OvercloudRole(role)
|
||||||
|
for role in self.tuskarclient_roles.list()]
|
||||||
|
|
||||||
with contextlib.nested(
|
with contextlib.nested(
|
||||||
|
patch('tuskar_ui.api.tuskar.OvercloudPlan.list',
|
||||||
|
return_value=plans),
|
||||||
|
patch('tuskar_ui.api.tuskar.OvercloudRole.list',
|
||||||
|
return_value=roles),
|
||||||
patch('openstack_dashboard.api.nova.flavor_list',
|
patch('openstack_dashboard.api.nova.flavor_list',
|
||||||
return_value=TEST_DATA.novaclient_flavors.list()),
|
return_value=TEST_DATA.novaclient_flavors.list()),
|
||||||
patch('openstack_dashboard.api.nova.server_list',
|
patch('openstack_dashboard.api.nova.server_list',
|
||||||
return_value=([], False)),
|
return_value=([], False)),
|
||||||
) as (flavors_mock, servers_mock):
|
) as (plans_mock, roles_mock, flavors_mock, servers_mock):
|
||||||
res = self.client.get(INDEX_URL)
|
res = self.client.get(INDEX_URL)
|
||||||
|
self.assertEqual(plans_mock.call_count, 1)
|
||||||
|
self.assertEqual(roles_mock.call_count, 4)
|
||||||
self.assertEqual(flavors_mock.call_count, 1)
|
self.assertEqual(flavors_mock.call_count, 1)
|
||||||
self.assertEqual(servers_mock.call_count, 1)
|
self.assertEqual(servers_mock.call_count, 1)
|
||||||
|
|
||||||
@ -131,12 +142,14 @@ class FlavorsTest(test.BaseAdminViewTests):
|
|||||||
return_value=([], False)),
|
return_value=([], False)),
|
||||||
patch('tuskar_ui.api.tuskar.OvercloudRole.list',
|
patch('tuskar_ui.api.tuskar.OvercloudRole.list',
|
||||||
return_value=[]),
|
return_value=[]),
|
||||||
|
patch('tuskar_ui.api.tuskar.OvercloudPlan.list',
|
||||||
|
return_value=[]),
|
||||||
patch('openstack_dashboard.api.glance.image_list_detailed',
|
patch('openstack_dashboard.api.glance.image_list_detailed',
|
||||||
return_value=([], False)),
|
return_value=([], False)),
|
||||||
patch('openstack_dashboard.api.nova.flavor_list',
|
patch('openstack_dashboard.api.nova.flavor_list',
|
||||||
return_value=TEST_DATA.novaclient_flavors.list())
|
return_value=TEST_DATA.novaclient_flavors.list())
|
||||||
) as (delete_mock, server_list_mock, _role_list_mock, _glance_mock,
|
) as (delete_mock, server_list_mock, _role_list_mock, _plan_list_mock,
|
||||||
_flavors_mock):
|
_glance_mock, _flavors_mock):
|
||||||
res = self.client.post(INDEX_URL, data)
|
res = self.client.post(INDEX_URL, data)
|
||||||
self.assertNoFormErrors(res)
|
self.assertNoFormErrors(res)
|
||||||
self.assertRedirectsNoFollow(res, INDEX_URL)
|
self.assertRedirectsNoFollow(res, INDEX_URL)
|
||||||
@ -159,12 +172,14 @@ class FlavorsTest(test.BaseAdminViewTests):
|
|||||||
return_value=([server], False)),
|
return_value=([server], False)),
|
||||||
patch('tuskar_ui.api.tuskar.OvercloudRole.list',
|
patch('tuskar_ui.api.tuskar.OvercloudRole.list',
|
||||||
return_value=[]),
|
return_value=[]),
|
||||||
|
patch('tuskar_ui.api.tuskar.OvercloudPlan.list',
|
||||||
|
return_value=[]),
|
||||||
patch('openstack_dashboard.api.glance.image_list_detailed',
|
patch('openstack_dashboard.api.glance.image_list_detailed',
|
||||||
return_value=([], False)),
|
return_value=([], False)),
|
||||||
patch('openstack_dashboard.api.nova.flavor_list',
|
patch('openstack_dashboard.api.nova.flavor_list',
|
||||||
return_value=TEST_DATA.novaclient_flavors.list())
|
return_value=TEST_DATA.novaclient_flavors.list())
|
||||||
) as (delete_mock, server_list_mock, _role_list_mock, _glance_mock,
|
) as (delete_mock, server_list_mock, _role_list_mock, _plan_list_mock,
|
||||||
_flavors_mock):
|
_glance_mock, _flavors_mock):
|
||||||
res = self.client.post(INDEX_URL, data)
|
res = self.client.post(INDEX_URL, data)
|
||||||
self.assertMessageCount(error=1, warning=0)
|
self.assertMessageCount(error=1, warning=0)
|
||||||
self.assertNoFormErrors(res)
|
self.assertNoFormErrors(res)
|
||||||
|
@ -12,13 +12,15 @@
|
|||||||
# License for the specific language governing permissions and limitations
|
# License for the specific language governing permissions and limitations
|
||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
|
import contextlib
|
||||||
|
|
||||||
from django.core import urlresolvers
|
from django.core import urlresolvers
|
||||||
|
|
||||||
from mock import patch, call # noqa
|
from mock import patch, call # noqa
|
||||||
|
|
||||||
|
from tuskar_ui import api
|
||||||
from tuskar_ui.test import helpers as test
|
from tuskar_ui.test import helpers as test
|
||||||
|
|
||||||
|
|
||||||
INDEX_URL = urlresolvers.reverse(
|
INDEX_URL = urlresolvers.reverse(
|
||||||
'horizon:infrastructure:images:index')
|
'horizon:infrastructure:images:index')
|
||||||
|
|
||||||
@ -26,8 +28,18 @@ INDEX_URL = urlresolvers.reverse(
|
|||||||
class ImagesTest(test.BaseAdminViewTests):
|
class ImagesTest(test.BaseAdminViewTests):
|
||||||
|
|
||||||
def test_index(self):
|
def test_index(self):
|
||||||
with patch('openstack_dashboard.api.glance.image_list_detailed',
|
roles = [api.tuskar.OvercloudRole(role) for role in
|
||||||
return_value=[self.images.list(), False, False]):
|
self.tuskarclient_roles.list()]
|
||||||
|
plans = [api.tuskar.OvercloudPlan(plan) for plan in
|
||||||
|
self.tuskarclient_plans.list()]
|
||||||
|
|
||||||
|
with contextlib.nested(
|
||||||
|
patch('tuskar_ui.api.tuskar.OvercloudRole.list',
|
||||||
|
return_value=roles),
|
||||||
|
patch('tuskar_ui.api.tuskar.OvercloudPlan.list',
|
||||||
|
return_value=plans),
|
||||||
|
patch('openstack_dashboard.api.glance.image_list_detailed',
|
||||||
|
return_value=[self.images.list(), False, False]),):
|
||||||
res = self.client.get(INDEX_URL)
|
res = self.client.get(INDEX_URL)
|
||||||
|
|
||||||
self.assertTemplateUsed(res, 'infrastructure/images/index.html')
|
self.assertTemplateUsed(res, 'infrastructure/images/index.html')
|
||||||
|
@ -33,10 +33,16 @@ tuskar_data.data(TEST_DATA)
|
|||||||
class ParametersTest(test.BaseAdminViewTests):
|
class ParametersTest(test.BaseAdminViewTests):
|
||||||
|
|
||||||
def test_index(self):
|
def test_index(self):
|
||||||
plan = api.tuskar.OvercloudPlan(TEST_DATA.tuskarclient_plans.first())
|
plans = [api.tuskar.OvercloudPlan(plan)
|
||||||
|
for plan in self.tuskarclient_plans.list()]
|
||||||
|
roles = [api.tuskar.OvercloudRole(role)
|
||||||
|
for role in self.tuskarclient_roles.list()]
|
||||||
|
|
||||||
with contextlib.nested(
|
with contextlib.nested(
|
||||||
patch('tuskar_ui.api.tuskar.OvercloudPlan.get_the_plan',
|
patch('tuskar_ui.api.tuskar.OvercloudPlan.list',
|
||||||
return_value=plan),
|
return_value=plans),
|
||||||
|
patch('tuskar_ui.api.tuskar.OvercloudRole.list',
|
||||||
|
return_value=roles),
|
||||||
):
|
):
|
||||||
res = self.client.get(INDEX_URL)
|
res = self.client.get(INDEX_URL)
|
||||||
|
|
||||||
|
@ -29,6 +29,9 @@ class RolesTable(tables.DataTable):
|
|||||||
image = tables.Column('image',
|
image = tables.Column('image',
|
||||||
verbose_name=_("Image"))
|
verbose_name=_("Image"))
|
||||||
|
|
||||||
|
def get_object_id(self, datum):
|
||||||
|
return datum.uuid
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
name = "roles"
|
name = "roles"
|
||||||
verbose_name = _("Deployment Roles")
|
verbose_name = _("Deployment Roles")
|
||||||
|
@ -13,7 +13,6 @@
|
|||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
import contextlib
|
import contextlib
|
||||||
|
|
||||||
from django.core import urlresolvers
|
from django.core import urlresolvers
|
||||||
|
|
||||||
from mock import patch, call # noqa
|
from mock import patch, call # noqa
|
||||||
@ -44,35 +43,40 @@ class RolesTest(test.BaseAdminViewTests):
|
|||||||
|
|
||||||
def test_index_get(self):
|
def test_index_get(self):
|
||||||
roles = [api.tuskar.OvercloudRole(role)
|
roles = [api.tuskar.OvercloudRole(role)
|
||||||
for role in TEST_DATA.tuskarclient_roles.list()]
|
for role in self.tuskarclient_roles.list()]
|
||||||
flavor = TEST_DATA.novaclient_flavors.first()
|
plans = [api.tuskar.OvercloudPlan(plan)
|
||||||
|
for plan in self.tuskarclient_plans.list()]
|
||||||
|
flavor = self.novaclient_flavors.first()
|
||||||
|
|
||||||
with contextlib.nested(
|
with contextlib.nested(
|
||||||
|
patch('tuskar_ui.api.tuskar.OvercloudPlan.list',
|
||||||
|
return_value=plans),
|
||||||
patch('tuskar_ui.api.tuskar.OvercloudRole.list',
|
patch('tuskar_ui.api.tuskar.OvercloudRole.list',
|
||||||
return_value=roles),
|
return_value=roles),
|
||||||
patch('openstack_dashboard.api.nova.flavor_get',
|
patch('openstack_dashboard.api.glance.image_get',
|
||||||
return_value=flavor),
|
return_value=None),
|
||||||
):
|
patch('tuskar_ui.api.flavor.Flavor.get',
|
||||||
|
return_value=flavor)):
|
||||||
res = self.client.get(INDEX_URL)
|
res = self.client.get(INDEX_URL)
|
||||||
|
|
||||||
self.assertTemplateUsed(res, 'infrastructure/roles/index.html')
|
self.assertTemplateUsed(res, 'infrastructure/roles/index.html')
|
||||||
|
|
||||||
def test_detail_get(self):
|
def test_detail_get(self):
|
||||||
roles = [api.tuskar.OvercloudRole(role)
|
roles = [api.tuskar.OvercloudRole(role)
|
||||||
for role in TEST_DATA.tuskarclient_roles.list()]
|
for role in self.tuskarclient_roles.list()]
|
||||||
flavor = TEST_DATA.novaclient_flavors.first()
|
plans = [api.tuskar.OvercloudPlan(plan)
|
||||||
|
for plan in self.tuskarclient_plans.list()]
|
||||||
|
flavor = self.novaclient_flavors.first()
|
||||||
|
|
||||||
with contextlib.nested(
|
with contextlib.nested(
|
||||||
patch('tuskar_ui.api.tuskar.OvercloudRole', **{
|
patch('tuskar_ui.api.tuskar.OvercloudRole.list',
|
||||||
'spec_set': ['list', 'get'],
|
return_value=roles),
|
||||||
'list.return_value': roles,
|
|
||||||
'get.return_value': roles[0],
|
|
||||||
}),
|
|
||||||
patch('tuskar_ui.api.heat.Stack.events',
|
patch('tuskar_ui.api.heat.Stack.events',
|
||||||
return_value=[]),
|
return_value=[]),
|
||||||
patch('openstack_dashboard.api.nova.flavor_get',
|
patch('tuskar_ui.api.tuskar.OvercloudPlan.list',
|
||||||
return_value=flavor),
|
return_value=plans),
|
||||||
):
|
patch('tuskar_ui.api.flavor.Flavor.get',
|
||||||
|
return_value=flavor)):
|
||||||
res = self.client.get(DETAIL_URL)
|
res = self.client.get(DETAIL_URL)
|
||||||
|
|
||||||
self.assertTemplateUsed(
|
self.assertTemplateUsed(
|
||||||
|
@ -55,9 +55,7 @@ class IndexView(horizon_tables.DataTableView):
|
|||||||
plan = api.tuskar.OvercloudPlan.get_the_plan(self.request)
|
plan = api.tuskar.OvercloudPlan.get_the_plan(self.request)
|
||||||
for role in roles:
|
for role in roles:
|
||||||
role_flavor = role.flavor(plan)
|
role_flavor = role.flavor(plan)
|
||||||
# TODO(tzumainn): we don't mock images, so calling role.image(plan)
|
role_image = role.image(plan)
|
||||||
# won't work right now
|
|
||||||
role_image = None
|
|
||||||
if role_flavor:
|
if role_flavor:
|
||||||
role.flavor = role_flavor.name
|
role.flavor = role_flavor.name
|
||||||
else:
|
else:
|
||||||
|
@ -40,10 +40,11 @@ class HeatAPITests(test.APITestCase):
|
|||||||
self.assertIsInstance(ret_val, api.heat.Stack)
|
self.assertIsInstance(ret_val, api.heat.Stack)
|
||||||
|
|
||||||
def test_stack_plan(self):
|
def test_stack_plan(self):
|
||||||
stack = api.heat.Stack(self.heatclient_stacks.first())
|
stack = api.heat.Stack(self.heatclient_stacks.first(),
|
||||||
|
self.request)
|
||||||
plan = self.tuskarclient_plans.first()
|
plan = self.tuskarclient_plans.first()
|
||||||
|
|
||||||
with patch('tuskar_ui.test.test_driver.tuskar_driver.Plan.get',
|
with patch('tuskarclient.v2.plans.PlanManager.get',
|
||||||
return_value=plan):
|
return_value=plan):
|
||||||
ret_val = stack.plan
|
ret_val = stack.plan
|
||||||
self.assertIsInstance(ret_val, api.tuskar.OvercloudPlan)
|
self.assertIsInstance(ret_val, api.tuskar.OvercloudPlan)
|
||||||
@ -146,7 +147,13 @@ class HeatAPITests(test.APITestCase):
|
|||||||
self.assertIsInstance(ret_val, api.heat.Resource)
|
self.assertIsInstance(ret_val, api.heat.Resource)
|
||||||
|
|
||||||
def test_resource_role(self):
|
def test_resource_role(self):
|
||||||
resource = api.heat.Resource(self.heatclient_resources.first())
|
# The api needs to get the role, and getting the role means listing
|
||||||
|
# all roles, so we mock that.
|
||||||
|
roles = self.tuskarclient_roles.list()
|
||||||
|
with patch('tuskarclient.v2.roles.RoleManager.list',
|
||||||
|
return_value=roles):
|
||||||
|
resource = api.heat.Resource(self.heatclient_resources.first(),
|
||||||
|
self.request)
|
||||||
ret_val = resource.role
|
ret_val = resource.role
|
||||||
self.assertIsInstance(ret_val, api.tuskar.OvercloudRole)
|
self.assertIsInstance(ret_val, api.tuskar.OvercloudRole)
|
||||||
self.assertEqual('Compute', ret_val.name)
|
self.assertEqual('Compute', ret_val.name)
|
||||||
|
@ -23,7 +23,7 @@ class TuskarAPITests(test.APITestCase):
|
|||||||
def test_plan_create(self):
|
def test_plan_create(self):
|
||||||
plan = self.tuskarclient_plans.first()
|
plan = self.tuskarclient_plans.first()
|
||||||
|
|
||||||
with patch('tuskar_ui.test.test_driver.tuskar_driver.Plan.create',
|
with patch('tuskarclient.v2.plans.PlanManager.create',
|
||||||
return_value=plan):
|
return_value=plan):
|
||||||
ret_val = api.tuskar.OvercloudPlan.create(self.request, {}, {})
|
ret_val = api.tuskar.OvercloudPlan.create(self.request, {}, {})
|
||||||
self.assertIsInstance(ret_val, api.tuskar.OvercloudPlan)
|
self.assertIsInstance(ret_val, api.tuskar.OvercloudPlan)
|
||||||
@ -31,7 +31,7 @@ class TuskarAPITests(test.APITestCase):
|
|||||||
def test_plan_list(self):
|
def test_plan_list(self):
|
||||||
plans = self.tuskarclient_plans.list()
|
plans = self.tuskarclient_plans.list()
|
||||||
|
|
||||||
with patch('tuskar_ui.test.test_driver.tuskar_driver.Plan.list',
|
with patch('tuskarclient.v2.plans.PlanManager.list',
|
||||||
return_value=plans):
|
return_value=plans):
|
||||||
ret_val = api.tuskar.OvercloudPlan.list(self.request)
|
ret_val = api.tuskar.OvercloudPlan.list(self.request)
|
||||||
for plan in ret_val:
|
for plan in ret_val:
|
||||||
@ -41,18 +41,18 @@ class TuskarAPITests(test.APITestCase):
|
|||||||
def test_plan_get(self):
|
def test_plan_get(self):
|
||||||
plan = self.tuskarclient_plans.first()
|
plan = self.tuskarclient_plans.first()
|
||||||
|
|
||||||
with patch('tuskar_ui.test.test_driver.tuskar_driver.Plan.get',
|
with patch('tuskarclient.v2.plans.PlanManager.get',
|
||||||
return_value=plan):
|
return_value=plan):
|
||||||
ret_val = api.tuskar.OvercloudPlan.get(self.request, plan['id'])
|
ret_val = api.tuskar.OvercloudPlan.get(self.request, plan.id)
|
||||||
|
|
||||||
self.assertIsInstance(ret_val, api.tuskar.OvercloudPlan)
|
self.assertIsInstance(ret_val, api.tuskar.OvercloudPlan)
|
||||||
|
|
||||||
def test_plan_get_the_plan(self):
|
def test_plan_get_the_plan(self):
|
||||||
plan = self.tuskarclient_plans.first()
|
plan = self.tuskarclient_plans.first()
|
||||||
|
|
||||||
with patch('tuskar_ui.test.test_driver.tuskar_driver.Plan.list',
|
with patch('tuskarclient.v2.plans.PlanManager.list',
|
||||||
return_value=[]):
|
return_value=[plan]):
|
||||||
with patch('tuskar_ui.test.test_driver.tuskar_driver.Plan.create',
|
with patch('tuskarclient.v2.plans.PlanManager.create',
|
||||||
return_value=plan):
|
return_value=plan):
|
||||||
ret_val = api.tuskar.OvercloudPlan.get_the_plan(self.request)
|
ret_val = api.tuskar.OvercloudPlan.get_the_plan(self.request)
|
||||||
|
|
||||||
@ -60,17 +60,29 @@ class TuskarAPITests(test.APITestCase):
|
|||||||
|
|
||||||
def test_plan_delete(self):
|
def test_plan_delete(self):
|
||||||
plan = self.tuskarclient_plans.first()
|
plan = self.tuskarclient_plans.first()
|
||||||
api.tuskar.OvercloudPlan.delete(self.request, plan['id'])
|
|
||||||
|
with patch('tuskarclient.v2.plans.PlanManager.delete',
|
||||||
|
return_value=None):
|
||||||
|
api.tuskar.OvercloudPlan.delete(self.request, plan.id)
|
||||||
|
|
||||||
def test_plan_role_list(self):
|
def test_plan_role_list(self):
|
||||||
plan = api.tuskar.OvercloudPlan(self.tuskarclient_plans.first())
|
with patch('tuskarclient.v2.plans.PlanManager.get',
|
||||||
|
return_value=[]):
|
||||||
|
plan = api.tuskar.OvercloudPlan(self.tuskarclient_plans.first(),
|
||||||
|
self.request)
|
||||||
|
|
||||||
|
with patch('tuskarclient.v2.roles.RoleManager.list',
|
||||||
|
return_value=self.tuskarclient_roles.list()):
|
||||||
ret_val = plan.role_list
|
ret_val = plan.role_list
|
||||||
self.assertEqual(4, len(ret_val))
|
self.assertEqual(4, len(ret_val))
|
||||||
for r in ret_val:
|
for r in ret_val:
|
||||||
self.assertIsInstance(r, api.tuskar.OvercloudRole)
|
self.assertIsInstance(r, api.tuskar.OvercloudRole)
|
||||||
|
|
||||||
def test_role_list(self):
|
def test_role_list(self):
|
||||||
|
roles = self.tuskarclient_roles.list()
|
||||||
|
|
||||||
|
with patch('tuskarclient.v2.roles.RoleManager.list',
|
||||||
|
return_value=roles):
|
||||||
ret_val = api.tuskar.OvercloudRole.list(self.request)
|
ret_val = api.tuskar.OvercloudRole.list(self.request)
|
||||||
|
|
||||||
for r in ret_val:
|
for r in ret_val:
|
||||||
@ -78,18 +90,20 @@ class TuskarAPITests(test.APITestCase):
|
|||||||
self.assertEqual(4, len(ret_val))
|
self.assertEqual(4, len(ret_val))
|
||||||
|
|
||||||
def test_role_get(self):
|
def test_role_get(self):
|
||||||
role = self.tuskarclient_roles.first()
|
roles = self.tuskarclient_roles.list()
|
||||||
ret_val = api.tuskar.OvercloudRole.get(self.request, role['id'])
|
|
||||||
|
|
||||||
|
with patch('tuskarclient.v2.roles.RoleManager.list',
|
||||||
|
return_value=roles):
|
||||||
|
ret_val = api.tuskar.OvercloudRole.get(self.request,
|
||||||
|
roles[0].uuid)
|
||||||
self.assertIsInstance(ret_val, api.tuskar.OvercloudRole)
|
self.assertIsInstance(ret_val, api.tuskar.OvercloudRole)
|
||||||
|
|
||||||
def test_role_get_by_image(self):
|
def test_role_get_by_image(self):
|
||||||
plan = api.tuskar.OvercloudPlan(self.tuskarclient_plans.first())
|
plan = api.tuskar.OvercloudPlan(self.tuskarclient_plans.first())
|
||||||
image = self.glanceclient_images.first()
|
image = self.glanceclient_images.first()
|
||||||
roles = [api.tuskar.OvercloudRole(role) for role in
|
roles = self.tuskarclient_roles.list()
|
||||||
self.tuskarclient_roles.list()]
|
|
||||||
|
|
||||||
with patch('tuskar_ui.api.tuskar.OvercloudRole.list',
|
with patch('tuskarclient.v2.roles.RoleManager.list',
|
||||||
return_value=roles):
|
return_value=roles):
|
||||||
ret_val = api.tuskar.OvercloudRole.get_by_image(
|
ret_val = api.tuskar.OvercloudRole.get_by_image(
|
||||||
self.request, plan, image)
|
self.request, plan, image)
|
||||||
|
@ -11,33 +11,39 @@
|
|||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
from openstack_dashboard.test.test_data import utils as test_data_utils
|
from openstack_dashboard.test.test_data import utils as test_data_utils
|
||||||
|
from tuskarclient.v2 import plans
|
||||||
|
from tuskarclient.v2 import roles
|
||||||
|
|
||||||
|
planmanager = plans.PlanManager(None)
|
||||||
|
rolemanager = roles.RoleManager(None)
|
||||||
|
|
||||||
|
|
||||||
def data(TEST):
|
def data(TEST):
|
||||||
|
|
||||||
# OvercloudPlan
|
# Plan
|
||||||
TEST.tuskarclient_plans = test_data_utils.TestDataContainer()
|
TEST.tuskarclient_plans = test_data_utils.TestDataContainer()
|
||||||
plan_1 = {
|
plan_1 = plans.Plan(planmanager, {
|
||||||
'id': 'plan-1',
|
'id': 'plan-1',
|
||||||
'name': 'overcloud',
|
'name': 'overcloud',
|
||||||
'description': 'this is an overcloud deployment plan',
|
'description': 'this is an overcloud deployment plan',
|
||||||
'template': '',
|
'template': '',
|
||||||
'created_at': '2014-05-27T21:11:09Z',
|
'created_at': '2014-05-27T21:11:09Z',
|
||||||
'modified_at': '2014-05-30T21:11:09Z',
|
'modified_at': '2014-05-30T21:11:09Z',
|
||||||
'roles': [{
|
'roles': [
|
||||||
'id': 'role-1',
|
{
|
||||||
|
'uuid': 'role-1',
|
||||||
'name': 'Controller',
|
'name': 'Controller',
|
||||||
'version': 1,
|
'version': 1,
|
||||||
}, {
|
}, {
|
||||||
'id': 'role-2',
|
'uuid': 'role-2',
|
||||||
'name': 'Compute',
|
'name': 'Compute',
|
||||||
'version': 1,
|
'version': 1,
|
||||||
}, {
|
}, {
|
||||||
'id': 'role-3',
|
'uuid': 'role-3',
|
||||||
'name': 'Object Storage',
|
'name': 'Object Storage',
|
||||||
'version': 1,
|
'version': 1,
|
||||||
}, {
|
}, {
|
||||||
'id': 'role-4',
|
'uuid': 'role-4',
|
||||||
'name': 'Block Storage',
|
'name': 'Block Storage',
|
||||||
'version': 1,
|
'version': 1,
|
||||||
}],
|
}],
|
||||||
@ -137,37 +143,37 @@ def data(TEST):
|
|||||||
'hidden': 'false',
|
'hidden': 'false',
|
||||||
'value': 'unset',
|
'value': 'unset',
|
||||||
}],
|
}],
|
||||||
}
|
})
|
||||||
TEST.tuskarclient_plans.add(plan_1)
|
TEST.tuskarclient_plans.add(plan_1)
|
||||||
|
|
||||||
# OvercloudRole
|
# Role
|
||||||
TEST.tuskarclient_roles = test_data_utils.TestDataContainer()
|
TEST.tuskarclient_roles = test_data_utils.TestDataContainer()
|
||||||
r_1 = {
|
r_1 = roles.Role(rolemanager, {
|
||||||
'id': 'role-1',
|
'uuid': 'role-1',
|
||||||
'name': 'Controller',
|
'name': 'Controller',
|
||||||
'version': 1,
|
'version': 1,
|
||||||
'description': 'controller role',
|
'description': 'controller role',
|
||||||
'created_at': '2014-05-27T21:11:09Z'
|
'created_at': '2014-05-27T21:11:09Z'
|
||||||
}
|
})
|
||||||
r_2 = {
|
r_2 = roles.Role(rolemanager, {
|
||||||
'id': 'role-2',
|
'uuid': 'role-2',
|
||||||
'name': 'Compute',
|
'name': 'Compute',
|
||||||
'version': 1,
|
'version': 1,
|
||||||
'description': 'compute role',
|
'description': 'compute role',
|
||||||
'created_at': '2014-05-27T21:11:09Z'
|
'created_at': '2014-05-27T21:11:09Z'
|
||||||
}
|
})
|
||||||
r_3 = {
|
r_3 = roles.Role(rolemanager, {
|
||||||
'id': 'role-3',
|
'uuid': 'role-3',
|
||||||
'name': 'Object Storage',
|
'name': 'Object Storage',
|
||||||
'version': 1,
|
'version': 1,
|
||||||
'description': 'object storage role',
|
'description': 'object storage role',
|
||||||
'created_at': '2014-05-27T21:11:09Z'
|
'created_at': '2014-05-27T21:11:09Z'
|
||||||
}
|
})
|
||||||
r_4 = {
|
r_4 = roles.Role(rolemanager, {
|
||||||
'id': 'role-4',
|
'uuid': 'role-4',
|
||||||
'name': 'Block Storage',
|
'name': 'Block Storage',
|
||||||
'version': 1,
|
'version': 1,
|
||||||
'description': 'block storage role',
|
'description': 'block storage role',
|
||||||
'created_at': '2014-05-27T21:11:09Z'
|
'created_at': '2014-05-27T21:11:09Z'
|
||||||
}
|
})
|
||||||
TEST.tuskarclient_roles.add(r_1, r_2, r_3, r_4)
|
TEST.tuskarclient_roles.add(r_1, r_2, r_3, r_4)
|
||||||
|
@ -1,47 +0,0 @@
|
|||||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
||||||
# not use this file except in compliance with the License. You may obtain
|
|
||||||
# a copy of the License at
|
|
||||||
#
|
|
||||||
# http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
#
|
|
||||||
# Unless required by applicable law or agreed to in writing, software
|
|
||||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
||||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
||||||
# License for the specific language governing permissions and limitations
|
|
||||||
# under the License.
|
|
||||||
|
|
||||||
from openstack_dashboard.test.test_data import utils
|
|
||||||
|
|
||||||
from tuskar_ui.test.test_data import tuskar_data
|
|
||||||
|
|
||||||
TEST_DATA = utils.TestDataContainer()
|
|
||||||
tuskar_data.data(TEST_DATA)
|
|
||||||
|
|
||||||
|
|
||||||
class Plan:
|
|
||||||
|
|
||||||
_plans = {}
|
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def create(cls, name, description):
|
|
||||||
plan = TEST_DATA.tuskarclient_plans.first()
|
|
||||||
cls._plans[plan['id']] = plan
|
|
||||||
return plan
|
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def update(cls, plan_id, name, description):
|
|
||||||
plan = cls.get(plan_id)
|
|
||||||
# no updates for now
|
|
||||||
return plan
|
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def list(cls):
|
|
||||||
return cls._plans.values()
|
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def get(cls, plan_id):
|
|
||||||
return cls._plans.get(plan_id, None)
|
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def delete(cls, plan_id):
|
|
||||||
cls._plans.pop(plan_id, None)
|
|
Loading…
x
Reference in New Issue
Block a user