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>'])
Beispiel #2
0
    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>'])
Beispiel #3
0
    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>"]
        )
Beispiel #4
0
    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>'])
Beispiel #5
0
 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")
Beispiel #6
0
    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))
Beispiel #7
0
    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
Beispiel #8
0
    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)
Beispiel #9
0
 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])
Beispiel #10
0
    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)
Beispiel #11
0
    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)
Beispiel #12
0
    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)
Beispiel #13
0
    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)
Beispiel #14
0
    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)
Beispiel #15
0
 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])
Beispiel #17
0
 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())
Beispiel #18
0
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 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])
Beispiel #21
0
 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()
Beispiel #22
0
 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/')
Beispiel #23
0
 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])
Beispiel #24
0
 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])
Beispiel #25
0
 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()
Beispiel #26
0
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)
Beispiel #27
0
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()
Beispiel #28
0
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()
Beispiel #29
0
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()
Beispiel #30
0
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()
Beispiel #31
0
 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()
Beispiel #32
0
 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()
Beispiel #33
0
    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)
Beispiel #34
0
    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)
Beispiel #35
0
 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'])
Beispiel #36
0
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()
Beispiel #37
0
    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>'
        ])
Beispiel #38
0
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()
Beispiel #39
0
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()
Beispiel #40
0
    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)
Beispiel #41
0
    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>'])
Beispiel #42
0
    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")
Beispiel #43
0
    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"])
Beispiel #44
0
 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]))
Beispiel #45
0
    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
Beispiel #46
0
 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]))
Beispiel #47
0
    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
Beispiel #48
0
    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))
Beispiel #51
0
 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"))
Beispiel #52
0
 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")
Beispiel #53
0
 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/")
Beispiel #54
0
def user_home(user):
    if user.admin:
        return horizon.get_dashboard('syspanel').get_absolute_url()
    return horizon.get_dashboard('nova').get_absolute_url()
Beispiel #55
0
 def test_horizon_test_isolation_1(self):
     """Isolation Test Part 1: sets a value."""
     cats = horizon.get_dashboard("cats")
     cats.evil = True
Beispiel #56
0
 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())
Beispiel #57
0
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__)
Beispiel #58
0
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)