def test_dashboard(self): syspanel = horizon.get_dashboard("syspanel") self.assertEqual(syspanel._registered_with, base.Horizon) self.assertQuerysetEqual(syspanel.get_panels(), ['<Panel: overview>', '<Panel: instances>', '<Panel: services>', '<Panel: flavors>', '<Panel: images>', '<Panel: projects>', '<Panel: users>', '<Panel: quotas>']) self.assertEqual(syspanel.get_absolute_url(), "/syspanel/") # Test registering a module with a dashboard that defines panels # as a dictionary. syspanel.register(MyPanel) self.assertQuerysetEqual(syspanel.get_panel_groups()['other'], ['<Panel: myslug>']) # Test that panels defined as a tuple still return a PanelGroup settings_dash = horizon.get_dashboard("settings") self.assertQuerysetEqual(settings_dash.get_panel_groups().values(), ['<PanelGroup: default>']) # Test registering a module with a dashboard that defines panels # as a tuple. settings_dash = horizon.get_dashboard("settings") settings_dash.register(MyPanel) self.assertQuerysetEqual(settings_dash.get_panels(), ['<Panel: user>', '<Panel: project>', '<Panel: ec2>', '<Panel: myslug>'])
def test_dashboard(self): cats = horizon.get_dashboard("cats") self.assertEqual(base.Horizon, cats._registered_with) self.assertQuerysetEqual(cats.get_panels(), ['<Panel: kittens>', '<Panel: tigers>']) self.assertEqual("/cats/", cats.get_absolute_url()) self.assertEqual("Cats", cats.name) # Test registering a module with a dashboard that defines panels # as a panel group. cats.register(MyPanel) self.assertQuerysetEqual(cats.get_panel_groups()['other'], ['<Panel: myslug>']) # Test that panels defined as a tuple still return a PanelGroup dogs = horizon.get_dashboard("dogs") self.assertQuerysetEqual(dogs.get_panel_groups().values(), ['<PanelGroup: default>']) # Test registering a module with a dashboard that defines panels # as a tuple. dogs = horizon.get_dashboard("dogs") dogs.register(MyPanel) self.assertQuerysetEqual(dogs.get_panels(), ['<Panel: puppies>', '<Panel: myslug>'])
def test_dashboard(self): syspanel = horizon.get_dashboard("syspanel") self.assertEqual(syspanel._registered_with, base.Horizon) self.assertQuerysetEqual( syspanel.get_panels().values()[0], [ "<Panel: overview>", "<Panel: instances>", "<Panel: services>", "<Panel: flavors>", "<Panel: images>", "<Panel: projects>", "<Panel: users>", "<Panel: quotas>", ], ) self.assertEqual(syspanel.get_absolute_url(), "/syspanel/") # Test registering a module with a dashboard that defines panels # as a dictionary. syspanel.register(MyPanel) self.assertQuerysetEqual(syspanel.get_panels()["Other"], ["<Panel: myslug>"]) # Test registering a module with a dashboard that defines panels # as a tuple. settings_dash = horizon.get_dashboard("settings") settings_dash.register(MyPanel) self.assertQuerysetEqual( settings_dash.get_panels(), ["<Panel: user>", "<Panel: project>", "<Panel: ec2>", "<Panel: myslug>"] )
def test_dashboard(self): syspanel = horizon.get_dashboard("syspanel") self.assertEqual(syspanel._registered_with, Horizon) self.assertQuerysetEqual(syspanel.get_panels()['System Panel'], ['<Panel: Overview>', '<Panel: Instances>', '<Panel: Services>', '<Panel: Flavors>', '<Panel: Images>', '<Panel: Projects>', '<Panel: Users>', '<Panel: Quotas>']) self.assertEqual(syspanel.get_absolute_url(), "/syspanel/") # Test registering a module with a dashboard that defines panels # as a dictionary. syspanel.register(MyPanel) self.assertQuerysetEqual(syspanel.get_panels()['Other'], ['<Panel: My Panel>']) # Test registering a module with a dashboard that defines panels # as a tuple. settings_dash = horizon.get_dashboard("settings") settings_dash.register(MyPanel) self.assertQuerysetEqual(settings_dash.get_panels(), ['<Panel: User Settings>', '<Panel: Project Settings>', '<Panel: My Panel>'])
def test_customize_dashboard(self): cats = horizon.get_dashboard("cats") self.assertEqual("WildCats", cats.name) self.assertQuerysetEqual(cats.get_panels(), ['<Panel: kittens>']) with self.assertRaises(base.NotRegistered): horizon.get_dashboard("dogs")
def test_rbac_panels(self): context = {"request": self.request} cats = horizon.get_dashboard("cats") self.assertEqual(cats._registered_with, base.Horizon) self.assertQuerysetEqual(cats.get_panels(), ["<Panel: rbac_panel_no>"]) self.assertFalse(cats.can_access(context)) dogs = horizon.get_dashboard("dogs") self.assertEqual(dogs._registered_with, base.Horizon) self.assertQuerysetEqual(dogs.get_panels(), ["<Panel: rbac_panel_yes>"]) self.assertTrue(dogs.can_access(context))
def test_ssl_redirect_by_proxy(self): dogs = horizon.get_dashboard("dogs") puppies = dogs.get_panel("puppies") url = puppies.get_absolute_url() redirect_url = "?".join([settings.LOGIN_URL, "next=%s" % url]) self.client.logout() resp = self.client.get(url) if django.VERSION >= (1, 9): self.assertRedirects(resp, settings.TESTSERVER + redirect_url) else: self.assertRedirects(resp, redirect_url) # Set SSL settings for test server settings.SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTOCOL', 'https') resp = self.client.get(url, HTTP_X_FORWARDED_PROTOCOL="https") self.assertEqual(302, resp.status_code) self.assertEqual('https://testserver:80%s' % redirect_url, resp['location']) # Restore settings settings.SECURE_PROXY_SSL_HEADER = None
def test_required_services(self): horizon.register(MyDash) MyDash.register(MyPanel) dash = horizon.get_dashboard("mydash") panel = dash.get_panel('myslug') self._reload_urls() # Set roles for admin user self.setActiveUser(token=self.token, username=self.user.name, tenant_id=self.tenant.id, service_catalog=self.request.user.service_catalog, roles=[{'name': 'admin'}]) # With the required service, the page returns fine. resp = self.client.get(panel.get_absolute_url()) self.assertEqual(resp.status_code, 200) # Remove the required service from the service catalog and we # should get a 404. service_name = MyPanel.permissions[0].split(".")[-1] new_catalog = [service for service in self.request.user.service_catalog if service['type'] != service_name] tenants = self.context['authorized_tenants'] self.setActiveUser(token=self.token, username=self.user.name, tenant_id=self.tenant.id, service_catalog=new_catalog, authorized_tenants=tenants) resp = self.client.get(panel.get_absolute_url()) self.assertEqual(resp.status_code, 302)
def test_add_second_panel(self): # Check that the second panel is in its configured dashboard and panel # group. dashboard = horizon.get_dashboard("admin") second_panel_group = dashboard.get_panel_group(SECOND_PANEL_GROUP_SLUG) self.assertIn(second_panel.SecondPanel, [p.__class__ for p in dashboard.get_panels()]) self.assertIn(second_panel.SecondPanel, [p.__class__ for p in second_panel_group])
def test_customized_permissions(self): dogs = horizon.get_dashboard("dogs") panel = dogs.get_panel('puppies') # Non-admin user self.assertQuerysetEqual(self.user.get_all_permissions(), []) resp = self.client.get(panel.get_absolute_url()) self.assertEqual(302, resp.status_code) resp = self.client.get(panel.get_absolute_url(), follow=False, HTTP_X_REQUESTED_WITH='XMLHttpRequest') self.assertEqual(401, resp.status_code) # Test customized permissions for logged-in user resp = self.client.get(panel.get_absolute_url(), follow=True) self.assertEqual(200, resp.status_code) self.assertTemplateUsed(resp, "auth/login.html") self.assertContains(resp, "Login as different user", 1, 200) # Set roles for admin user self.set_permissions(permissions=['test']) resp = self.client.get(panel.get_absolute_url()) self.assertEqual(200, resp.status_code) # Test modal form resp = self.client.get(panel.get_absolute_url(), follow=False, HTTP_X_REQUESTED_WITH='XMLHttpRequest') self.assertEqual(resp.status_code, 200)
def test_required_permissions(self): dash = horizon.get_dashboard("cats") panel = dash.get_panel('tigers') # Non-admin user self.assertQuerysetEqual(self.user.get_all_permissions(), []) resp = self.client.get(panel.get_absolute_url()) self.assertEqual(resp.status_code, 302) resp = self.client.get(panel.get_absolute_url(), follow=False, HTTP_X_REQUESTED_WITH='XMLHttpRequest') self.assertEqual(resp.status_code, 401) # Test insufficient permissions for logged-in user resp = self.client.get(panel.get_absolute_url(), follow=True) self.assertEqual(resp.status_code, 200) self.assertTemplateUsed(resp, "auth/login.html") self.assertContains(resp, "Login as different user", 1, 200) # Set roles for admin user self.set_permissions(permissions=['test']) resp = self.client.get(panel.get_absolute_url()) self.assertEqual(resp.status_code, 200) # Test modal form resp = self.client.get(panel.get_absolute_url(), follow=False, HTTP_X_REQUESTED_WITH='XMLHttpRequest') self.assertEqual(resp.status_code, 200)
def test_required_permissions(self): dash = horizon.get_dashboard("cats") panel = dash.get_panel('tigers') # Non-admin user self.assertQuerysetEqual(self.user.get_all_permissions(), []) resp = self.client.get(panel.get_absolute_url()) self.assertEqual(resp.status_code, 302) resp = self.client.get(panel.get_absolute_url(), follow=False, HTTP_X_REQUESTED_WITH='XMLHttpRequest') self.assertEqual(resp.status_code, 401) # Set roles for admin user self.set_permissions(permissions=['test']) resp = self.client.get(panel.get_absolute_url()) self.assertEqual(resp.status_code, 200) # Test modal form resp = self.client.get(panel.get_absolute_url(), follow=False, HTTP_X_REQUESTED_WITH='XMLHttpRequest') self.assertEqual(resp.status_code, 200)
def test_required_roles(self): dash = horizon.get_dashboard("cats") panel = dash.get_panel("tigers") # Non-admin user self.setActiveUser( token=self.token.id, username=self.user.name, tenant_id=self.tenant.id, service_catalog=self.service_catalog, roles=[], ) resp = self.client.get(panel.get_absolute_url()) self.assertEqual(resp.status_code, 302) resp = self.client.get(panel.get_absolute_url(), follow=False, HTTP_X_REQUESTED_WITH="XMLHttpRequest") self.assertEqual(resp.status_code, 401) # Set roles for admin user self.setActiveUser( token=self.token.id, username=self.user.name, tenant_id=self.tenant.id, service_catalog=self.request.user.service_catalog, roles=[{"name": "admin"}], ) resp = self.client.get(panel.get_absolute_url()) self.assertEqual(resp.status_code, 200) # Test modal form resp = self.client.get(panel.get_absolute_url(), follow=False, HTTP_X_REQUESTED_WITH="XMLHttpRequest") self.assertEqual(resp.status_code, 200)
def test_required_services(self): horizon.register(MyDash) MyDash.register(MyPanel) dash = horizon.get_dashboard("mydash") panel = dash.get_panel("myslug") self._reload_urls() # With the required service, the page returns fine. resp = self.client.get(panel.get_absolute_url()) self.assertEqual(resp.status_code, 200) # Remove the required service from the service catalog and we # should get a 404. new_catalog = [ service for service in self.request.user.service_catalog if service["type"] != MyPanel.services[0] ] tenants = self.context["authorized_tenants"] self.setActiveUser( token=self.token.id, username=self.user.name, tenant_id=self.tenant.id, service_catalog=new_catalog, authorized_tenants=tenants, ) resp = self.client.get(panel.get_absolute_url()) self.assertEqual(resp.status_code, 404)
def test_index_url_name(self): syspanel = horizon.get_dashboard("syspanel") instances = syspanel.get_panel("instances") instances.index_url_name = "does_not_exist" with self.assertRaises(NoReverseMatch): instances.get_absolute_url() instances.index_url_name = "index" self.assertEqual(instances.get_absolute_url(), "/syspanel/instances/")
def test_add_panel(self): # Check that the panel is in its configured dashboard and panel group. dashboard = horizon.get_dashboard("admin") panel_group = dashboard.get_panel_group(PANEL_GROUP_SLUG) self.assertIn(plugin_panel.PluginPanel, [p.__class__ for p in dashboard.get_panels()]) self.assertIn(plugin_panel.PluginPanel, [p.__class__ for p in panel_group])
def test_index_url_name(self): cats = horizon.get_dashboard("cats") tigers = cats.get_panel("tigers") tigers.index_url_name = "does_not_exist" with self.assertRaises(urlresolvers.NoReverseMatch): tigers.get_absolute_url() tigers.index_url_name = "index" self.assertEqual("/cats/tigers/", tigers.get_absolute_url())
def get_user_home(user): dashboard = None if user.is_superuser: try: dashboard = horizon.get_dashboard('virtual') except base.NotRegistered: pass if dashboard is None: dashboard = horizon.get_default_dashboard() # Domain Admin, Project Admin will default to identity if (user.token.project.get('id') is None or (user.is_superuser and user.token.project.get('id'))): dashboard = horizon.get_dashboard('virtual') return dashboard.get_absolute_url()
def test_registered(self): project_dashboard = horizon.get_dashboard('project') panel_1 = project_dashboard.get_panel('rating') self.assertEqual(rating_panel.Project_rating, panel_1.__class__) panel_2 = project_dashboard.get_panel('reporting') self.assertEqual(reporting_panel.Project_reporting, panel_2.__class__)
def tearDown(self): # Restore permissions dogs = horizon.get_dashboard("dogs") puppies = dogs.get_panel("puppies") puppies.permissions = tuple([]) super(CustomPermissionsTests, self).tearDown() settings.HORIZON_CONFIG.pop('customization_module') # refresh config conf.HORIZON_CONFIG._setup()
def test_public(self): settings = horizon.get_dashboard("settings") # Known to have no restrictions on it other than being logged in. user_panel = settings.get_panel("user") url = user_panel.get_absolute_url() client = Client() # Get a clean, logged out client instance. client.logout() resp = client.get(url) self.assertRedirectsNoFollow(resp, '/accounts/login/?next=/settings/')
def test_add_panel(self): dashboard = horizon.get_dashboard("admin") panel_group = dashboard.get_panel_group('admin') # Check that the panel is in its configured dashboard. self.assertIn(plugin_panel.PluginPanel, [p.__class__ for p in dashboard.get_panels()]) # Check that the panel is in its configured panel group. self.assertIn(plugin_panel.PluginPanel, [p.__class__ for p in panel_group])
def test_remove_panel(self): dashboard = horizon.get_dashboard("admin") panel_group = dashboard.get_panel_group('admin') # Check that the panel is no longer in the configured dashboard. self.assertNotIn(info_panel.Info, [p.__class__ for p in dashboard.get_panels()]) # Check that the panel is no longer in the configured panel group. self.assertNotIn(info_panel.Info, [p.__class__ for p in panel_group])
def usage(request, tenant_id=None): tenant_id = tenant_id or request.user.tenant_id today = time.today() date_start = datetime.date(today.year, today.month, 1) datetime_start = datetime.datetime.combine(date_start, time.time()) datetime_end = time.utcnow() show_terminated = request.GET.get('show_terminated', False) try: usage = api.usage_get(request, tenant_id, datetime_start, datetime_end) except: usage = api.nova.Usage(None) redirect = reverse("horizon:nova:overview:index") exceptions.handle(request, _('Unable to retrieve usage information.')) total_ram = 0 ram_unit = "MB" instances = [] terminated = [] if hasattr(usage, 'server_usages'): total_ram = usage.total_active_memory_mb now = datetime.datetime.now() for i in usage.server_usages: i['uptime_at'] = now - datetime.timedelta(seconds=i['uptime']) if i['ended_at'] and not show_terminated: terminated.append(i) else: instances.append(i) if total_ram >= 1024: ram_unit = "GB" total_ram /= 1024 if request.GET.get('format', 'html') == 'csv': template = 'nova/overview/usage.csv' mimetype = "text/csv" else: template = 'nova/overview/usage.html' mimetype = "text/html" dash_url = horizon.get_dashboard('nova').get_absolute_url() return shortcuts.render(request, template, { 'usage': usage, 'ram_unit': ram_unit, 'total_ram': total_ram, 'csv_link': '?format=csv', 'show_terminated': show_terminated, 'datetime_start': datetime_start, 'datetime_end': datetime_end, 'instances': instances, 'dash_url': dash_url}, content_type=mimetype)
def get_user_home(user): try: if user.is_superuser: return get_dashboard('admin').get_absolute_url() if user.has_perms(('openstack.roles.' + TENANTADMIN_ROLE,)): q_args = { 'project__projectname' : user.tenant_name, 'flowstatus__in' : [ PSTATUS_PENDING, PSTATUS_RENEW_MEMB ] } if PrjRequest.objects.filter(**q_args).count() > 0: idmanager_url = get_dashboard('idmanager').get_absolute_url() return idmanager_url + 'subscription_manager/' except NotRegistered: LOG.error("Cannot retrieve user home", exc_info=True) return get_default_dashboard().get_absolute_url()
def get_user_home(user): dashboard = None if user.is_superuser: try: dashboard = horizon.get_dashboard('admin') except base.NotRegistered: pass if dashboard is None: dashboard = horizon.get_default_dashboard() return dashboard.get_absolute_url()
def get_user_home(user): try: if user.is_superuser: return horizon.get_dashboard('admin').get_absolute_url() if user.has_perms(('openstack.roles.' + TENANTADMIN_ROLE,)): q_args = { 'project__projectname' : user.tenant_name, 'flowstatus__in' : [ PSTATUS_PENDING, PSTATUS_RENEW_MEMB ] } if PrjRequest.objects.filter(**q_args).count() > 0: idmanager_url = horizon.get_dashboard('idmanager').get_absolute_url() return idmanager_url + 'subscription_manager/' except horizon.base.NotRegistered: LOG.error("Cannot retrieve user home", exc_info=True) return horizon.get_default_dashboard().get_absolute_url()
def tearDown(self): # Restore dash cats = horizon.get_dashboard("cats") cats.name = "Cats" horizon.register(Dogs) self._discovered_dashboards.append(Dogs) Dogs.register(Puppies) Cats.register(Tigers) super(CustomPanelTests, self).tearDown() settings.HORIZON_CONFIG.pop('customization_module') # refresh config conf.HORIZON_CONFIG._setup()
def test_registry(self): """Verify registration and autodiscovery work correctly. Please note that this implicitly tests that autodiscovery works by virtue of the fact that the dashboards listed in ``settings.INSTALLED_APPS`` are loaded from the start. """ # Registration self.assertEqual(2, len(base.Horizon._registry)) horizon.register(MyDash) self.assertEqual(3, len(base.Horizon._registry)) with self.assertRaises(ValueError): horizon.register(MyPanel) with self.assertRaises(ValueError): horizon.register("MyPanel") # Retrieval my_dash_instance_by_name = horizon.get_dashboard("mydash") self.assertIsInstance(my_dash_instance_by_name, MyDash) my_dash_instance_by_class = horizon.get_dashboard(MyDash) self.assertEqual(my_dash_instance_by_name, my_dash_instance_by_class) with self.assertRaises(base.NotRegistered): horizon.get_dashboard("fake") self.assertQuerysetEqual( horizon.get_dashboards(), ['<Dashboard: cats>', '<Dashboard: dogs>', '<Dashboard: mydash>']) # Removal self.assertEqual(3, len(base.Horizon._registry)) horizon.unregister(MyDash) self.assertEqual(2, len(base.Horizon._registry)) with self.assertRaises(base.NotRegistered): horizon.get_dashboard(MyDash)
def test_registry(self): """Verify registration and autodiscovery work correctly. Please note that this implicitly tests that autodiscovery works by virtue of the fact that the dashboards listed in ``settings.INSTALLED_APPS`` are loaded from the start. """ # Registration self.assertEqual(2, len(base.Horizon._registry)) horizon.register(MyDash) self.assertEqual(3, len(base.Horizon._registry)) with self.assertRaises(ValueError): horizon.register(MyPanel) with self.assertRaises(ValueError): horizon.register("MyPanel") # Retrieval my_dash_instance_by_name = horizon.get_dashboard("mydash") self.assertIsInstance(my_dash_instance_by_name, MyDash) my_dash_instance_by_class = horizon.get_dashboard(MyDash) self.assertEqual(my_dash_instance_by_name, my_dash_instance_by_class) with self.assertRaises(base.NotRegistered): horizon.get_dashboard("fake") self.assertQuerysetEqual(horizon.get_dashboards(), ['<Dashboard: cats>', '<Dashboard: dogs>', '<Dashboard: mydash>']) # Removal self.assertEqual(3, len(base.Horizon._registry)) horizon.unregister(MyDash) self.assertEqual(2, len(base.Horizon._registry)) with self.assertRaises(base.NotRegistered): horizon.get_dashboard(MyDash)
def test_add_panel(self): dashboard = horizon.get_dashboard("admin") panel_group = dashboard.get_panel_group('admin') # Check that the panel is in its configured dashboard. self.assertIn(plugin_panel.PluginPanel, [p.__class__ for p in dashboard.get_panels()]) # Check that the panel is in its configured panel group. self.assertIn(plugin_panel.PluginPanel, [p.__class__ for p in panel_group]) # Ensure that static resources are properly injected pc = panel_config._10_admin_add_panel self.assertEqual(pc.ADD_JS_FILES, HORIZON_CONFIG['js_files']) self.assertEqual(pc.ADD_JS_SPEC_FILES, HORIZON_CONFIG['js_spec_files']) self.assertEqual(pc.ADD_SCSS_FILES, HORIZON_CONFIG['scss_files'])
def get_user_home(user): dashboard = horizon.get_default_dashboard() dc_mode = getattr(settings, 'DC_MODE', False) if user.is_superuser: if getattr(user, 'services_region', None) == 'SystemController': try: dashboard = horizon.get_dashboard('dc_admin') except base.NotRegistered: pass if getattr(user, 'services_region', None) == 'RegionOne' and dc_mode: try: if user.is_superuser: dashboard = horizon.get_dashboard('admin'). \ get_panel("inventory") else: dashboard = horizon.get_dashboard('project'). \ get_panel("api_access") except base.NotRegistered: pass return dashboard.get_absolute_url()
def test_dashboard(self): syspanel = horizon.get_dashboard("syspanel") self.assertEqual(syspanel._registered_with, Horizon) self.assertQuerysetEqual(syspanel.get_panels()['System Panel'], [ '<Panel: Overview>', '<Panel: Instances>', '<Panel: Services>', '<Panel: Flavors>', '<Panel: Images>', '<Panel: Tenants>', '<Panel: Users>', '<Panel: Quotas>' ]) self.assertEqual(syspanel.get_absolute_url(), "/syspanel/") # Test registering a module with a dashboard that defines panels # as a dictionary. syspanel.register(MyPanel) self.assertQuerysetEqual(syspanel.get_panels()['Other'], ['<Panel: My Panel>']) # Test registering a module with a dashboard that defines panels # as a tuple. settings_dash = horizon.get_dashboard("settings") settings_dash.register(MyPanel) self.assertQuerysetEqual(settings_dash.get_panels(), [ '<Panel: User Settings>', '<Panel: Tenant Settings>', '<Panel: My Panel>' ])
def get_user_home(user): try: token = user.token except AttributeError: raise exceptions.NotAuthenticated() # Domain Admin, Project Admin will default to identity if token.project.get('id') is None or user.is_superuser: try: dashboard = horizon.get_dashboard('identity') except base.NotRegistered: pass else: dashboard = horizon.get_default_dashboard() return dashboard.get_absolute_url()
def get_user_home(user): try: token = user.token except AttributeError: raise exceptions.NotAuthenticated() # Domain Admin, Project Admin will default to identity dashboard = None if token.project.get('id') is None or user.is_superuser: try: dashboard = horizon.get_dashboard('admin') #dashboard = horizon.get_dashboard('identity') except base.NotRegistered: pass if dashboard is None: roles = [r['name'] for r in user.roles] if settings.EXPERTCONSTANT['expert_certified_role'] in roles: dashboard = horizon.get_default_dashboard() elif settings.EXPERTCONSTANT['expert_uncertified_role'] in roles: dashboard = horizon.get_dashboard('settings') else: dashboard = horizon.get_dashboard('admin') return dashboard.get_absolute_url()
def test_registry_two_dashboards(self): "Verify registration of 2 dashboards" # Registration self.assertEqual(2, len(base.Horizon._registry)) horizon.register(MyDash) horizon.register(MyOtherDash) self.assertEqual(4, len(base.Horizon._registry)) # Retrieval self.assertQuerysetEqual(horizon.get_dashboards(), [ '<Dashboard: cats>', '<Dashboard: dogs>', '<Dashboard: mydash>', '<Dashboard: mydash2>' ]) # Removal self.assertEqual(4, len(base.Horizon._registry)) horizon.unregister(MyDash) horizon.unregister(MyOtherDash) self.assertEqual(2, len(base.Horizon._registry)) with self.assertRaises(base.NotRegistered): horizon.get_dashboard(MyDash) with self.assertRaises(base.NotRegistered): horizon.get_dashboard(MyOtherDash)
def test_dashboard(self): cats = horizon.get_dashboard("cats") self.assertEqual(cats._registered_with, base.Horizon) self.assertQuerysetEqual(cats.get_panels(), ['<Panel: kittens>', '<Panel: tigers>']) self.assertEqual(cats.get_absolute_url(), "/cats/") # Test registering a module with a dashboard that defines panels # as a panel group. cats.register(MyPanel) self.assertQuerysetEqual(cats.get_panel_groups()['other'], ['<Panel: myslug>']) # Test that panels defined as a tuple still return a PanelGroup dogs = horizon.get_dashboard("dogs") self.assertQuerysetEqual(dogs.get_panel_groups().values(), ['<PanelGroup: default>']) # Test registering a module with a dashboard that defines panels # as a tuple. dogs = horizon.get_dashboard("dogs") dogs.register(MyPanel) self.assertQuerysetEqual(dogs.get_panels(), ['<Panel: puppies>', '<Panel: myslug>'])
def test_required_roles(self): syspanel = horizon.get_dashboard("syspanel") user_panel = syspanel.get_panel("users") # Non-admin user self.setActiveUser(token=self.token.id, username=self.user.name, tenant_id=self.tenant.id, service_catalog=self.service_catalog, roles=[]) resp = self.client.get(user_panel.get_absolute_url()) self.assertEqual(resp.status_code, 302) resp = self.client.get(user_panel.get_absolute_url(), follow=False, HTTP_X_REQUESTED_WITH='XMLHttpRequest') self.assertEqual(resp.status_code, 401) self.mox.StubOutWithMock(api, 'flavor_list') api.flavor_list(IsA(http.HttpRequest)).AndReturn(self.flavors.list()) api.flavor_list(IsA(http.HttpRequest)).AndReturn(self.flavors.list()) self.mox.ReplayAll() # Set roles for admin user self.setActiveUser(token=self.token.id, username=self.user.name, tenant_id=self.tenant.id, service_catalog=self.request.user.service_catalog, roles=[{ 'name': 'admin' }]) resp = self.client.get( urlresolvers.reverse('horizon:syspanel:flavors:create')) self.assertEqual(resp.status_code, 200) self.assertTemplateUsed(resp, "syspanel/flavors/create.html") # Test modal form resp = self.client.get( urlresolvers.reverse('horizon:syspanel:flavors:create'), follow=False, HTTP_X_REQUESTED_WITH='XMLHttpRequest') self.assertEqual(resp.status_code, 200) self.assertTemplateUsed(resp, "syspanel/flavors/_create.html")
def test_public(self): dogs = horizon.get_dashboard("dogs") # Known to have no restrictions on it other than being logged in. puppies = dogs.get_panel("puppies") url = puppies.get_absolute_url() # Get a clean, logged out client instance. self.client.logout() resp = self.client.get(url) redirect_url = "?".join( ['http://testserver' + settings.LOGIN_URL, "next=%s" % url]) self.assertRedirects(resp, redirect_url) # Simulate ajax call resp = self.client.get(url, HTTP_X_REQUESTED_WITH='XMLHttpRequest') # Response should be HTTP 401 with redirect header self.assertEqual(401, resp.status_code) self.assertEqual(redirect_url, resp["X-Horizon-Location"])
def test_public(self): backend.get_user = self._real_get_user dogs = horizon.get_dashboard("dogs") # Known to have no restrictions on it other than being logged in. puppies = dogs.get_panel("puppies") url = puppies.get_absolute_url() # Get a clean, logged out client instance. self.setActiveUser() resp = self.client.get(url) redirect_url = "?".join( [urlresolvers.reverse("login"), "next=%s" % url]) self.assertRedirectsNoFollow(resp, redirect_url) # Simulate ajax call resp = self.client.get(url, HTTP_X_REQUESTED_WITH='XMLHttpRequest') # Response should be HTTP 401 with redirect header self.assertEquals(resp.status_code, 401) self.assertEquals( resp["X-Horizon-Location"], "?".join([urlresolvers.reverse("login"), "next=%s" % url]))
def test_ssl_redirect_by_proxy(self): dogs = horizon.get_dashboard("dogs") puppies = dogs.get_panel("puppies") url = puppies.get_absolute_url() redirect_url = "?".join([settings.LOGIN_URL, "next=%s" % url]) self.client.logout() resp = self.client.get(url) self.assertRedirects(resp, redirect_url) # Set SSL settings for test server settings.SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTOCOL', 'https') resp = self.client.get(url, HTTP_X_FORWARDED_PROTOCOL="https") self.assertEqual(302, resp.status_code) self.assertEqual('https://testserver:80%s' % redirect_url, resp['location']) # Restore settings settings.SECURE_PROXY_SSL_HEADER = None
def test_public(self): users.get_user_from_request = self._real_get_user_from_request settings = horizon.get_dashboard("settings") # Known to have no restrictions on it other than being logged in. user_panel = settings.get_panel("user") url = user_panel.get_absolute_url() # Get a clean, logged out client instance. client = Client() client.logout() resp = client.get(url) redirect_url = "?".join( [urlresolvers.reverse("horizon:auth_login"), "next=%s" % url]) self.assertRedirectsNoFollow(resp, redirect_url) # Simulate ajax call resp = client.get(url, HTTP_X_REQUESTED_WITH='XMLHttpRequest') # Response should be HTTP 401 with redirect header self.assertEquals(resp.status_code, 401) self.assertEquals( resp["X-Horizon-Location"], "?".join( [urlresolvers.reverse("horizon:auth_login"), "next=%s" % url]))
def test_ssl_redirect_by_proxy(self): backend.get_user = self._real_get_user dogs = horizon.get_dashboard("dogs") puppies = dogs.get_panel("puppies") url = puppies.get_absolute_url() redirect_url = "?".join( [urlresolvers.reverse("login"), "next=%s" % url]) self.setActiveUser() resp = self.client.get(url) self.assertRedirectsNoFollow(resp, redirect_url) # Set SSL settings for test server settings.TESTSERVER = 'https://testserver:80' settings.SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTOCOL', 'https') resp = self.client.get(url, HTTP_X_FORWARDED_PROTOCOL="https") self.assertRedirectsNoFollow(resp, redirect_url) # Restore settings settings.TESTSERVER = 'http://testserver' settings.SECURE_PROXY_SSL_HEADER = None
def test_required_roles(self): dash = horizon.get_dashboard("cats") panel = dash.get_panel('tigers') # Non-admin user self.setActiveUser(token=self.token.id, username=self.user.name, tenant_id=self.tenant.id, service_catalog=self.service_catalog, roles=[]) resp = self.client.get(panel.get_absolute_url()) self.assertEqual(resp.status_code, 302) resp = self.client.get(panel.get_absolute_url(), follow=False, HTTP_X_REQUESTED_WITH='XMLHttpRequest') self.assertEqual(resp.status_code, 401) # Set roles for admin user self.setActiveUser(token=self.token.id, username=self.user.name, tenant_id=self.tenant.id, service_catalog=self.request.user.service_catalog, roles=[{ 'name': 'admin' }]) resp = self.client.get(panel.get_absolute_url()) self.assertEqual(resp.status_code, 200) # Test modal form resp = self.client.get(panel.get_absolute_url(), follow=False, HTTP_X_REQUESTED_WITH='XMLHttpRequest') self.assertEqual(resp.status_code, 200)
def test_add_panel(self): dashboard = horizon.get_dashboard("admin") self.assertIn(plugin_panel.PluginPanel, [p.__class__ for p in dashboard.get_panels()])
def test_add_panel_group(self): dashboard = horizon.get_dashboard("admin") self.assertIsNotNone(dashboard.get_panel_group(PANEL_GROUP_SLUG))
def test_horizon_test_isolation_2(self): """Isolation Test Part 2: The value set in part 1 should be gone.""" cats = horizon.get_dashboard("cats") self.assertFalse(hasattr(cats, "evil"))
def test_panels(self): syspanel = horizon.get_dashboard("syspanel") instances = syspanel.get_panel("instances") self.assertEqual(instances._registered_with, syspanel) self.assertEqual(instances.get_absolute_url(), "/syspanel/instances/")
def user_home(user): if user.admin: return horizon.get_dashboard('syspanel').get_absolute_url() return horizon.get_dashboard('nova').get_absolute_url()
def test_horizon_test_isolation_1(self): """Isolation Test Part 1: sets a value.""" cats = horizon.get_dashboard("cats") cats.evil = True
def test_panels(self): cats = horizon.get_dashboard("cats") tigers = cats.get_panel("tigers") self.assertEqual(cats, tigers._registered_with) self.assertEqual("/cats/tigers/", tigers.get_absolute_url())
from django.utils.translation import ugettext_lazy as _ import horizon # Rename "cats" to "wildcats" cats = horizon.get_dashboard("cats") cats.name = _("WildCats") # Disable tigers panel tigers = cats.get_panel("tigers") cats.unregister(tigers.__class__) # Remove dogs dashboard dogs = horizon.get_dashboard("dogs") horizon.unregister(dogs.__class__)
import horizon dogs = horizon.get_dashboard("dogs") puppies = dogs.get_panel("puppies") permissions = list(getattr(puppies, 'permissions', [])) permissions.append('horizon.test') puppies.permissions = tuple(permissions)