Skip to content

Commit

Permalink
Improve error message when the default role doesn't exist
Browse files Browse the repository at this point in the history
To add members to a project, Horizon requires a default role to exist
in Keystone.  This provides a clearer error message when the role
cannot be found.

Fixes bug #1108063

Change-Id: I0e3cd4cb96c7896c675055671e0875840b1a41d3
  • Loading branch information
jpichon committed Feb 19, 2013
1 parent 0a42fa0 commit abe2f61
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 2 deletions.
31 changes: 31 additions & 0 deletions horizon/dashboards/syspanel/projects/tests.py
Expand Up @@ -14,11 +14,14 @@
# License for the specific language governing permissions and limitations
# under the License.

import logging

from django import http
from django.core.urlresolvers import reverse
from mox import IsA

from horizon import api
from horizon import exceptions
from horizon import test

from .workflows import CreateProject, UpdateProject
Expand Down Expand Up @@ -840,3 +843,31 @@ def test_update_project_member_update_error(self):

self.assertNoFormErrors(res)
self.assertRedirectsNoFollow(res, INDEX_URL)

@test.create_stubs({api: ('tenant_get',
'tenant_quota_get',
'get_default_role',)})
def test_update_project_when_default_role_does_not_exist(self):
project = self.tenants.first()
quota = self.quotas.first()

# Default role doesn't exist
api.get_default_role(IsA(http.HttpRequest)).AndReturn(None)

api.tenant_get(IsA(http.HttpRequest), self.tenant.id, admin=True) \
.AndReturn(project)
api.tenant_quota_get(IsA(http.HttpRequest), self.tenant.id) \
.AndReturn(quota)
self.mox.ReplayAll()

url = reverse('horizon:syspanel:projects:update',
args=[self.tenant.id])

try:
# Avoid the log message in the test output when the workflow's
# step action cannot be instantiated
logging.disable(logging.ERROR)
with self.assertRaises(exceptions.NotFound):
res = self.client.get(url)
finally:
logging.disable(logging.NOTSET)
12 changes: 10 additions & 2 deletions horizon/dashboards/syspanel/projects/workflows.py
Expand Up @@ -19,6 +19,7 @@
# under the License.


from django.conf import settings
from django.utils.translation import ugettext as _
from django.core.urlresolvers import reverse

Expand Down Expand Up @@ -105,12 +106,19 @@ def __init__(self, request, *args, **kwargs):

# Get the default role
try:
default_role = api.get_default_role(self.request).id
default_role = api.get_default_role(self.request)
# Default role is necessary to add members to a project
if default_role is None:
default = getattr(settings,
"OPENSTACK_KEYSTONE_DEFAULT_ROLE", None)
msg = _('Could not find default role "%s" in Keystone'
% default)
raise exceptions.NotFound(msg)
except:
exceptions.handle(self.request,
err_msg,
redirect=reverse(INDEX_URL))
self.fields['default_role'].initial = default_role
self.fields['default_role'].initial = default_role.id

# Get list of available users
all_users = []
Expand Down

0 comments on commit abe2f61

Please sign in to comment.