Project

General

Profile

Revision 8bdfad89

ID8bdfad89830879d3b89963bc45e716bada40d549
Parent e4dedc04
Child 7bc39b34

Added by Francois POIROTTE over 13 years ago

Vérification des permissions lors de l'affichage de tous les graphes d'un hôte et dans les recherches via le plugin OpenSearch.
Ajouts de tests sur les permissions pour ces 2 pages.
Légères adaptations dans le test sur la sélection d'hôte (descriptions plus explicites des tests faits).

git-svn-id: https://vigilo-dev.si.c-s.fr/svn@5766 b22e2e97-25c9-44ff-b637-2e5ceca36478

View differences:

vigigraph/controllers/rpc.py
353 353
        is_manager = in_group('managers').is_met(request.environ)
354 354
        if not is_manager:
355 355
            supitemgroups = [sig[0] for sig in user.supitemgroups() if sig[1]]
356
            graphs = graphs.filter(
357
                SUPITEM_GROUP_TABLE.c.idgroup.in_(supitemgroups))
356
            graphs = graphs.join(
357
                    (GroupHierarchy, GroupHierarchy.idchild == \
358
                        SUPITEM_GROUP_TABLE.c.idgroup)
359
                ).filter(GroupHierarchy.idparent.in_(supitemgroups))
358 360

  
359 361
        graphs = graphs.all()
360 362
        return dict(host=host, start=start, duration=duration,
......
442 444
        is_manager = in_group('managers').is_met(request.environ)
443 445
        if not is_manager:
444 446
            supitemgroups = [sig[0] for sig in user.supitemgroups() if sig[1]]
445
            hosts = hosts.filter(
446
                SUPITEM_GROUP_TABLE.c.idgroup.in_(supitemgroups))
447
            hosts = hosts.join(
448
                    (GroupHierarchy, GroupHierarchy.idchild == \
449
                        SUPITEM_GROUP_TABLE.c.idgroup)
450
                ).filter(GroupHierarchy.idparent.in_(supitemgroups))
447 451

  
448 452
        return dict(hosts=hosts)
449 453

  
......
733 737
            return {"mtime": None}
734 738
        mtime = change.last_modified.replace(microsecond=0)
735 739
        return {"mtime": mtime}
736

  
vigigraph/tests/functional/test_fullhostpage.py
1
# -*- coding: utf-8 -*-
2
"""
3
Tests les accès à la page rpc/fullHostPage
4
permettant d'afficher tous les graphes
5
associés à un hôte.
6
"""
7
import transaction
8

  
9
from vigigraph.tests import TestController
10
from vigilo.models.session import DBSession
11
from vigilo.models.tables import Host, SupItemGroup, Graph, GraphGroup
12

  
13
from vigigraph.tests.functional.test_host_selection_form import populateDB
14
from vigigraph.tests.functional.test_graph_selection_form import addGraphs
15

  
16

  
17
class TestFullHostPage(TestController):
18
    """
19
    Teste la page d'affichage de tous les graphs d'un hôte.
20
    """
21

  
22
    def setUp(self):
23
        """Préparation de la base de données de tests."""
24

  
25
        # Initialisation de la base
26
        super(TestFullHostPage, self).setUp()
27

  
28
        # Ajout de données de tests dans la base
29
        (host1, host2, host3) = populateDB()
30

  
31
        # Ajout de graphes dans la base
32
        addGraphs(host1, host2, host3)
33

  
34
        # Validation des ajouts dans la base
35
        DBSession.flush()
36
        transaction.commit()
37

  
38
    def _check_results(self, user, hosts):
39
        for host in hosts:
40
            response = self.app.get(
41
                '/rpc/fullHostPage?host=%s' % host,
42
                extra_environ={"REMOTE_USER": user}
43
            )
44
            index = int(host[-1:])
45
            if hosts[host]:
46
                self.assertTrue(
47
                    '/vigirrd/host%d/index?'
48
                    'graphtemplate=graph%d' % (index, index)
49
                    in response.body
50
                )
51
            else:
52
                self.assertTrue(
53
                    '/vigirrd/host%d/index?'
54
                    'graphtemplate=graph%d' % (index, index)
55
                    not in response.body
56
                )
57

  
58
    def test_direct_permission(self):
59
        """Accès à rpc/fullHostPage avec permission sur le groupe"""
60
        hosts = {
61
            'host1': False,
62
            'host2': True,
63
            'host3': False,
64
        }
65
        self._check_results('user', hosts)
66

  
67
    def test_permission_on_parent(self):
68
        """Accès à rpc/fullHostPage avec permission sur le parent du groupe"""
69
        hosts = {
70
            'host1': True,
71
            'host2': True,
72
            'host3': True,
73
        }
74
        self._check_results('poweruser', hosts)
75

  
76
    def test_no_permission(self):
77
        """Accès à rpc/fullHostPage sans permissions"""
78
        hosts = {
79
            'host1': False,
80
            'host2': False,
81
            'host3': False,
82
        }
83
        self._check_results('visitor', hosts)
84

  
85
    def test_anonymous(self):
86
        """Accès à rpc/fullHostPage en anonyme"""
87
        for host in ('host1', 'host2', 'host3'):
88
            response = self.app.get(
89
                '/rpc/fullHostPage?host=%s' % host,
90
                status=401
91
            )
92

  
93
    def test_managers(self):
94
        """Accès à rpc/fullHostPage depuis le compte manager"""
95
        hosts = {
96
            'host1': True,
97
            'host2': True,
98
            'host3': True,
99
        }
100
        self._check_results('manager', hosts)
vigigraph/tests/functional/test_host_selection_form.py
99 99

  
100 100
##### Premier onglet déroulant du formulaire #####
101 101

  
102
    def test_get_main_host_groups_when_allowed(self):
103
        """
104
        Récupération des groupes d'hôtes principaux avec les bons droits
102
    def test_get_root_host_groups_as_manager(self):
105 103
        """
104
        Récupération des groupes d'hôtes racines en tant que manager
106 105

  
106
        L'utilisateur "manager" appartient au groupe "managers",
107
        qui a accès à tout et doit donc pouvoir lister tous
108
        les groupes racines.
109
        """
107 110
        # Récupération du groupe d'hôtes 'mhg' dans la base de données
108 111
        mainhostgroup = DBSession.query(SupItemGroup).filter(
109 112
            SupItemGroup.name == u'mhg').first()
......
126 129
            }
127 130
        )
128 131

  
132
    def test_get_main_host_groups_when_directly_allowed(self):
133
        """
134
        Récupération des groupes d'hôtes racines avec permissions directes
135

  
136
        L'utilisateur "poweruser" a les permissions sur le
137
        groupe racine "mhg" et peut donc le lister.
138
        """
139
        # Récupération du groupe d'hôtes 'mhg' dans la base de données
140
        mainhostgroup = DBSession.query(SupItemGroup).filter(
141
            SupItemGroup.name == u'mhg').first()
142

  
129 143
        # Récupération des groupes d'hôtes principaux
130 144
        # accessibles à l'utilisateur 'poweruser'
131 145
        response = self.app.post(
......
144 158
            }
145 159
        )
146 160

  
161
    def test_get_root_host_groups_for_children(self):
162
        """
163
        Récupération des groupes d'hôtes racines pour un sous-groupe
164

  
165
        L'utilisateur "user" n'a pas les permissions sur "mhg",
166
        mais il a accès au sous-groupe "hg1". Il doit pouvoir
167
        lister le groupe racine "mhg" pour pouvoir accéder à "hg1".
168
        """
169
        # Récupération du groupe d'hôtes 'mhg' dans la base de données
170
        mainhostgroup = DBSession.query(SupItemGroup).filter(
171
            SupItemGroup.name == u'mhg').first()
172

  
147 173
        # Récupération des groupes d'hôtes principaux
148 174
        # accessibles à l'utilisateur 'user'
149 175
        response = self.app.post(
......
165 191
    def test_get_main_host_groups_when_not_allowed(self):
166 192
        """
167 193
        Récupération des groupes d'hôtes principaux sans les bons droits
194

  
195
        L'utilisateur "visitor" n'a accès à rien et ne doit donc
196
        pas pouvoir lister le groupe racine "mhg".
168 197
        """
169 198

  
170 199
        # Récupération des groupes d'hôtes principaux
......
182 211
    def test_get_main_host_groups_as_anonymous(self):
183 212
        """
184 213
        Récupération des groupes d'hôtes principaux en tant qu'anonyme
214

  
215
        Une tentative de récupération des groupes racines
216
        sans être authentifié doit demander à l'utilisateur
217
        de s'authentifier.
185 218
        """
186 219

  
187 220
        # Récupération des groupes d'hôtes principaux
......
508 541

  
509 542
    def test_get_hosts_as_anonymous(self):
510 543
        """
511
        Récupération des d'hôtes en tant qu'anonyme
544
        Récupération des hôtes en tant qu'anonyme
512 545
        """
513 546

  
514 547
        # Récupération du groupe d'hôtes 'mhg' dans la base de données
vigigraph/tests/functional/test_opensearch.py
1
# -*- coding: utf-8 -*-
2
"""
3
Teste l'utilisation du module de recherche
4
OpenSearch intégré au navigateur.
5
"""
6
import transaction
7

  
8
from vigigraph.tests import TestController
9
from vigilo.models.session import DBSession
10
from vigilo.models.tables import Host, SupItemGroup, Graph, GraphGroup
11

  
12
from vigigraph.tests.functional.test_host_selection_form import populateDB
13
from vigigraph.tests.functional.test_graph_selection_form import addGraphs
14

  
15

  
16
class TestOpenSearch(TestController):
17
    """
18
    Teste la page d'affichage de tous les graphs d'un hôte.
19
    """
20

  
21
    def setUp(self):
22
        """Préparation de la base de données de tests."""
23

  
24
        # Initialisation de la base
25
        super(TestOpenSearch, self).setUp()
26

  
27
        # Ajout de données de tests dans la base
28
        (host1, host2, host3) = populateDB()
29

  
30
        # Ajout de graphes dans la base
31
        addGraphs(host1, host2, host3)
32

  
33
        # Validation des ajouts dans la base
34
        DBSession.flush()
35
        transaction.commit()
36

  
37
    def _check_results(self, user, hosts):
38
        response = self.app.get(
39
            '/rpc/searchHost?query=host*',
40
            extra_environ={"REMOTE_USER": user}
41
        )
42
        for host in hosts:
43
            if hosts[host]:
44
                self.assertTrue(
45
                    '/rpc/fullHostPage?host=%s' % host
46
                    in response.body
47
                )
48
            else:
49
                self.assertTrue(
50
                    '/rpc/fullHostPage?host=%s' % host
51
                    not in response.body
52
                )
53

  
54
    def test_direct_permission(self):
55
        """OpenSearch avec permission sur le groupe"""
56
        hosts = {
57
            'host1': False,
58
            'host2': True,
59
            'host3': False,
60
        }
61
        self._check_results('user', hosts)
62

  
63
    def test_permission_on_parent(self):
64
        """OpenSearch avec permission sur le parent du groupe"""
65
        hosts = {
66
            'host1': True,
67
            'host2': True,
68
            'host3': True,
69
        }
70
        self._check_results('poweruser', hosts)
71

  
72
    def test_no_permission(self):
73
        """OpenSearch sans permissions"""
74
        hosts = {
75
            'host1': False,
76
            'host2': False,
77
            'host3': False,
78
        }
79
        self._check_results('visitor', hosts)
80

  
81
    def test_anonymous(self):
82
        """OpenSearch en anonyme"""
83
        for host in ('host1', 'host2', 'host3'):
84
            response = self.app.get(
85
                '/rpc/fullHostPage?host=%s' % host,
86
                status=401
87
            )
88

  
89
    def test_managers(self):
90
        """OpenSearch avec le compte manager"""
91
        hosts = {
92
            'host1': True,
93
            'host2': True,
94
            'host3': True,
95
        }
96
        self._check_results('manager', hosts)

Also available in: Unified diff