Project

General

Profile

Statistics
| Branch: | Tag: | Revision:

vigigraph / vigigraph / tests / functional / test_host_selection_form.py @ 3e3db819

History | View | Annotate | Download (20.6 KB)

1 63ab2c06 Vincent QUEMENER
# -*- coding: utf-8 -*-
2
"""
3 b6d2af46 Vincent QUEMENER
Suite de tests de l'arbre de sélection des hôtes et groupes d'hôtes.
4 63ab2c06 Vincent QUEMENER
"""
5
import transaction
6
7
from vigigraph.tests import TestController
8
from vigilo.models.session import DBSession
9 b6d2af46 Vincent QUEMENER
from vigilo.models.tables import Host, SupItemGroup, Permission
10 7e6517fe Francois POIROTTE
from vigilo.models.demo.functions import add_supitemgroup, \
11
    add_host, add_host2group, add_usergroup, add_user, \
12
    add_supitemgrouppermission, add_usergroup_permission
13 63ab2c06 Vincent QUEMENER
14
15 fae18e45 Vincent QUEMENER
def populateDB():
16
    """
17
    Peuple la base de données en ajoutant :
18 2256d3db Aurelien BOMPARD
     - 3 groupes d'hôtes ;
19
     - 3 hôtes ;
20
     - 3 utilisateurs.
21 fae18e45 Vincent QUEMENER
    Affecte les permissions nécessaires aux utilisateurs en vue des tests.
22
    Retourne les 3 hôtes créés.
23

24
    @return: Tuple contenant les trois hôtes.
25 2256d3db Aurelien BOMPARD
    @rtype:  C{tuple} of C{vigilo.models.tables.Host}
26 fae18e45 Vincent QUEMENER
    """
27
28
    # Ajout d'un groupe d'hôtes principal
29 7e6517fe Francois POIROTTE
    mainhostgroup = add_supitemgroup(u'mhg', None)
30 fae18e45 Vincent QUEMENER
31
    # Ajout d'un premier groupe d'hôtes de second niveau
32
    hostgroup1 = add_supitemgroup(u'hg1', mainhostgroup)
33
34
    # Ajout d'un second groupe d'hôtes de second niveau
35
    hostgroup2 = add_supitemgroup(u'hg2', mainhostgroup)
36
37
    # Ajout de trois hôtes
38
    host1 = add_host(u'host1')
39
    host2 = add_host(u'host2')
40
    host3 = add_host(u'host3')
41
42
    # Ajout du premier hôte dans le groupe d'hôtes principal.
43
    add_host2group(host1, mainhostgroup)
44
    # Ajout du deuxième hôte dans le premier
45
    # groupe d'hôtes de second niveau.
46
    add_host2group(host2, hostgroup1)
47
    # Ajout du troisième hôte dans le second
48
    # groupe d'hôtes de second niveau.
49
    add_host2group(host3, hostgroup2)
50
51
    # Ajout de trois groupes d'utilisateurs
52
    poweruser_group = add_usergroup(u'powerusers')
53
    user_group = add_usergroup(u'users')
54
    visitor_group = add_usergroup(u'visitor')
55
56
    # Ajout de trois utilisateurs
57
    add_user(u'poweruser', u'some.power@us.er',
58
        u'Power User', u'poweruserpass', u'powerusers')
59
    add_user(u'user', u'some.random@us.er',
60
        u'User', u'userpass', u'users')
61
    add_user(u'visitor', u'some.visiting@us.er',
62
        u'', u'visitorpass', u'visitor')
63
64
    # Ajout des permissions sur le groupe d'hôtes
65
    # principal pour le premier groupe d'utilisateurs
66
    add_supitemgrouppermission(mainhostgroup, poweruser_group)
67
68
    # Ajout des permissions sur le premier groupe d'hôtes
69
    # secondaire pour le second groupe d'utilisateurs
70
    add_supitemgrouppermission(hostgroup1, user_group)
71
72
    # Ajout de la permission 'vigigraph-access' aux groupes d'utilisateurs
73
    perm = Permission.by_permission_name(u'vigigraph-access')
74
    add_usergroup_permission(poweruser_group, perm)
75
    add_usergroup_permission(user_group, perm)
76
    add_usergroup_permission(visitor_group, perm)
77
78
    return (host1, host2, host3)
79
80
81 b6d2af46 Vincent QUEMENER
class TestHostTree(TestController):
82 63ab2c06 Vincent QUEMENER
    """
83 b6d2af46 Vincent QUEMENER
    Teste l'arbre de sélection des hôtes
84
    et groupes d'hôtes de Vigigraph.
85 63ab2c06 Vincent QUEMENER
    """
86
87
    def setUp(self):
88
        """Préparation de la base de données de tests."""
89
90
        # Initialisation de la base
91 b6d2af46 Vincent QUEMENER
        super(TestHostTree, self).setUp()
92 63ab2c06 Vincent QUEMENER
93 fae18e45 Vincent QUEMENER
        # Ajout de données de tests dans la base
94
        populateDB()
95 63ab2c06 Vincent QUEMENER
96
        # Validation des ajouts dans la base
97
        DBSession.flush()
98
        transaction.commit()
99
100 3ec8080a Vincent QUEMENER
##### Premier onglet déroulant du formulaire #####
101 63ab2c06 Vincent QUEMENER
102 8bdfad89 Francois POIROTTE
    def test_get_root_host_groups_as_manager(self):
103 63ab2c06 Vincent QUEMENER
        """
104 8bdfad89 Francois POIROTTE
        Récupération des groupes d'hôtes racines en tant que manager
105 63ab2c06 Vincent QUEMENER

106 8bdfad89 Francois POIROTTE
        L'utilisateur "manager" appartient au groupe "managers",
107
        qui a accès à tout et doit donc pouvoir lister tous
108
        les groupes racines.
109
        """
110 63ab2c06 Vincent QUEMENER
        # Récupération du groupe d'hôtes 'mhg' dans la base de données
111
        mainhostgroup = DBSession.query(SupItemGroup).filter(
112 3ec8080a Vincent QUEMENER
            SupItemGroup.name == u'mhg').first()
113 63ab2c06 Vincent QUEMENER
114
        # Récupération des groupes d'hôtes principaux
115 fae18e45 Vincent QUEMENER
        # accessibles à l'utilisateur 'manager'
116
        response = self.app.post(
117 b6d2af46 Vincent QUEMENER
            '/rpc/hosttree', {
118 fae18e45 Vincent QUEMENER
            }, extra_environ={'REMOTE_USER': 'manager'})
119
        json = response.json
120
121
        # On s'assure que la liste de groupes
122
        # d'hôtes retournée contient bien 'mhg'
123 131b409a Francois POIROTTE
        self.assertEqual(
124 b6d2af46 Vincent QUEMENER
            json, {
125 3e3db819 Aurelien BOMPARD
                'items': [], 'groups': [{
126 b6d2af46 Vincent QUEMENER
                    'id': mainhostgroup.idgroup,
127 3e3db819 Aurelien BOMPARD
                    'name': mainhostgroup.name,
128
                    'type': 'group',
129 b6d2af46 Vincent QUEMENER
                }]
130
            }
131 fae18e45 Vincent QUEMENER
        )
132
133 8bdfad89 Francois POIROTTE
    def test_get_main_host_groups_when_directly_allowed(self):
134
        """
135
        Récupération des groupes d'hôtes racines avec permissions directes
136

137
        L'utilisateur "poweruser" a les permissions sur le
138
        groupe racine "mhg" et peut donc le lister.
139
        """
140
        # Récupération du groupe d'hôtes 'mhg' dans la base de données
141
        mainhostgroup = DBSession.query(SupItemGroup).filter(
142
            SupItemGroup.name == u'mhg').first()
143
144 fae18e45 Vincent QUEMENER
        # Récupération des groupes d'hôtes principaux
145 63ab2c06 Vincent QUEMENER
        # accessibles à l'utilisateur 'poweruser'
146
        response = self.app.post(
147 b6d2af46 Vincent QUEMENER
            '/rpc/hosttree', {
148 63ab2c06 Vincent QUEMENER
            }, extra_environ={'REMOTE_USER': 'poweruser'})
149
        json = response.json
150
151
        # On s'assure que la liste de groupes
152
        # d'hôtes retournée contient bien 'mhg'
153 131b409a Francois POIROTTE
        self.assertEqual(
154 b6d2af46 Vincent QUEMENER
            json, {
155 3e3db819 Aurelien BOMPARD
                'items': [], 'groups': [{
156 b6d2af46 Vincent QUEMENER
                    'id': mainhostgroup.idgroup,
157 3e3db819 Aurelien BOMPARD
                    'name': mainhostgroup.name,
158
                    'type': 'group',
159 b6d2af46 Vincent QUEMENER
                }]
160
            }
161 63ab2c06 Vincent QUEMENER
        )
162
163 8bdfad89 Francois POIROTTE
    def test_get_root_host_groups_for_children(self):
164
        """
165
        Récupération des groupes d'hôtes racines pour un sous-groupe
166

167
        L'utilisateur "user" n'a pas les permissions sur "mhg",
168
        mais il a accès au sous-groupe "hg1". Il doit pouvoir
169
        lister le groupe racine "mhg" pour pouvoir accéder à "hg1".
170
        """
171
        # Récupération du groupe d'hôtes 'mhg' dans la base de données
172
        mainhostgroup = DBSession.query(SupItemGroup).filter(
173
            SupItemGroup.name == u'mhg').first()
174
175 63ab2c06 Vincent QUEMENER
        # Récupération des groupes d'hôtes principaux
176
        # accessibles à l'utilisateur 'user'
177
        response = self.app.post(
178 b6d2af46 Vincent QUEMENER
            '/rpc/hosttree', {
179 63ab2c06 Vincent QUEMENER
            }, extra_environ={'REMOTE_USER': 'user'})
180
        json = response.json
181
182
        # On s'assure que la liste de groupes
183
        # d'hôtes retournée contient bien 'mhg'
184 131b409a Francois POIROTTE
        self.assertEqual(
185 b6d2af46 Vincent QUEMENER
            json, {
186 3e3db819 Aurelien BOMPARD
                'items': [], 'groups': [{
187 b6d2af46 Vincent QUEMENER
                    'id': mainhostgroup.idgroup,
188 3e3db819 Aurelien BOMPARD
                    'name': mainhostgroup.name,
189
                    'type': 'group',
190 b6d2af46 Vincent QUEMENER
                }]
191
            }
192 63ab2c06 Vincent QUEMENER
        )
193
194
    def test_get_main_host_groups_when_not_allowed(self):
195
        """
196
        Récupération des groupes d'hôtes principaux sans les bons droits
197 8bdfad89 Francois POIROTTE

198
        L'utilisateur "visitor" n'a accès à rien et ne doit donc
199
        pas pouvoir lister le groupe racine "mhg".
200 63ab2c06 Vincent QUEMENER
        """
201
202
        # Récupération des groupes d'hôtes principaux
203
        # accessibles à l'utilisateur 'visitor'
204
        response = self.app.post(
205 b6d2af46 Vincent QUEMENER
            '/rpc/hosttree', {
206 63ab2c06 Vincent QUEMENER
            }, extra_environ={'REMOTE_USER': 'visitor'})
207
        json = response.json
208
209
        # On s'assure que la liste de groupes d'hôtes retournée est bien vide
210 131b409a Francois POIROTTE
        self.assertEqual(
211 3e3db819 Aurelien BOMPARD
            json, {'items': [], 'groups': []}
212 63ab2c06 Vincent QUEMENER
        )
213
214 fae18e45 Vincent QUEMENER
    def test_get_main_host_groups_as_anonymous(self):
215
        """
216
        Récupération des groupes d'hôtes principaux en tant qu'anonyme
217 8bdfad89 Francois POIROTTE

218
        Une tentative de récupération des groupes racines
219
        sans être authentifié doit demander à l'utilisateur
220
        de s'authentifier.
221 fae18e45 Vincent QUEMENER
        """
222
223
        # Récupération des groupes d'hôtes principaux
224
        # par un utilisateur anonyme : le contrôleur doit
225
        # retourner une erreur 401 (HTTPUnauthorized)
226
        self.app.post(
227 b6d2af46 Vincent QUEMENER
            '/rpc/hosttree', {
228 fae18e45 Vincent QUEMENER
            }, status=401)
229
230 3ec8080a Vincent QUEMENER
##### Deuxième onglet déroulant du formulaire #####
231 63ab2c06 Vincent QUEMENER
232
    def test_get_host_groups_when_allowed(self):
233
        """
234
        Récupération des groupes d'hôtes secondaires avec les bons droits
235
        """
236
237
        # Récupération du groupe d'hôtes 'mhg' dans la base de données
238
        mainhostgroup = DBSession.query(SupItemGroup).filter(
239 3ec8080a Vincent QUEMENER
            SupItemGroup.name == u'mhg').first()
240 63ab2c06 Vincent QUEMENER
241
        # Récupération du groupe d'hôtes 'hg1' dans la base de données
242
        hostgroup1 = DBSession.query(SupItemGroup).filter(
243 3ec8080a Vincent QUEMENER
            SupItemGroup.name == u'hg1').first()
244
245
        # Récupération du groupe d'hôtes 'hg2' dans la base de données
246
        hostgroup2 = DBSession.query(SupItemGroup).filter(
247
            SupItemGroup.name == u'hg2').first()
248 63ab2c06 Vincent QUEMENER
249 5acc6853 Vincent QUEMENER
        # Récupération de l'hôte 'host1' dans la base de données
250
        host1 = DBSession.query(Host).filter(
251
            Host.name == u'host1').first()
252
253 63ab2c06 Vincent QUEMENER
        # Récupération des groupes d'hôtes
254 fae18e45 Vincent QUEMENER
        # accessibles à l'utilisateur 'manager'
255
        response = self.app.post(
256 b6d2af46 Vincent QUEMENER
            '/rpc/hosttree?parent_id=%s' % (mainhostgroup.idgroup, ), {
257 fae18e45 Vincent QUEMENER
            }, extra_environ={'REMOTE_USER': 'manager'})
258
        json = response.json
259
260
        # On s'assure que la liste de groupes d'hôtes retournée
261
        # contient bien 'No subgroup', 'hg1', et 'hg2'
262 131b409a Francois POIROTTE
        self.assertEqual(
263 5acc6853 Vincent QUEMENER
            json, {
264 3e3db819 Aurelien BOMPARD
                'items': [
265
                    {'id': host1.idhost, 'name': host1.name, 'type': 'item'}
266 5acc6853 Vincent QUEMENER
                ],
267
                'groups': [
268 3e3db819 Aurelien BOMPARD
                    {'id': hostgroup1.idgroup, 'name': hostgroup1.name, 'type': 'group'},
269
                    {'id': hostgroup2.idgroup, 'name': hostgroup2.name, 'type': 'group'},
270 5acc6853 Vincent QUEMENER
                ]
271
            }
272 fae18e45 Vincent QUEMENER
        )
273
274
        # Récupération des groupes d'hôtes
275 63ab2c06 Vincent QUEMENER
        # accessibles à l'utilisateur 'poweruser'
276
        response = self.app.post(
277 7e6517fe Francois POIROTTE
            '/rpc/hosttree?parent_id=%s' % (mainhostgroup.idgroup, ), {
278
            }, extra_environ={'REMOTE_USER': 'poweruser'})
279 63ab2c06 Vincent QUEMENER
        json = response.json
280
281 3ec8080a Vincent QUEMENER
        # On s'assure que la liste de groupes d'hôtes retournée
282
        # contient bien 'No subgroup', 'hg1', et 'hg2'
283 131b409a Francois POIROTTE
        self.assertEqual(
284 5acc6853 Vincent QUEMENER
            json, {
285 3e3db819 Aurelien BOMPARD
                'items': [
286
                    {'id': host1.idhost, 'name': host1.name, 'type': 'item'}
287 5acc6853 Vincent QUEMENER
                ],
288
                'groups': [
289 3e3db819 Aurelien BOMPARD
                    {'id': hostgroup1.idgroup, 'name': hostgroup1.name, 'type': 'group'},
290
                    {'id': hostgroup2.idgroup, 'name': hostgroup2.name, 'type': 'group'},
291 5acc6853 Vincent QUEMENER
                ]
292
            }
293 63ab2c06 Vincent QUEMENER
        )
294
295 3ec8080a Vincent QUEMENER
        # Récupération des groupes d'hôtes
296
        # accessibles à l'utilisateur 'user'
297 63ab2c06 Vincent QUEMENER
        response = self.app.post(
298 b6d2af46 Vincent QUEMENER
            '/rpc/hosttree?parent_id=%s' % (mainhostgroup.idgroup, ), {
299 63ab2c06 Vincent QUEMENER
            }, extra_environ={'REMOTE_USER': 'user'})
300
        json = response.json
301
302
        # On s'assure que la liste de groupes
303 3ec8080a Vincent QUEMENER
        # d'hôtes retournée contient bien 'hg1'
304 131b409a Francois POIROTTE
        self.assertEqual(
305 5acc6853 Vincent QUEMENER
            json, {
306 3e3db819 Aurelien BOMPARD
                'items': [],
307 5acc6853 Vincent QUEMENER
                'groups': [
308 3e3db819 Aurelien BOMPARD
                    {'id': hostgroup1.idgroup, 'name': hostgroup1.name, 'type': 'group'},
309 5acc6853 Vincent QUEMENER
                ]
310
            }
311 63ab2c06 Vincent QUEMENER
        )
312
313
    def test_get_host_groups_when_not_allowed(self):
314
        """
315
        Récupération des groupes d'hôtes secondaires sans les bons droits
316
        """
317
318
        # Récupération du groupe d'hôtes 'mhg' dans la base de données
319
        mainhostgroup = DBSession.query(SupItemGroup).filter(
320 3ec8080a Vincent QUEMENER
            SupItemGroup.name == u'mhg').first()
321 63ab2c06 Vincent QUEMENER
322
        # Récupération des groupes d'hôtes
323
        # accessibles à l'utilisateur 'visitor'
324
        response = self.app.post(
325 b6d2af46 Vincent QUEMENER
            '/rpc/hosttree?parent_id=%s' % (mainhostgroup.idgroup, ), {
326 63ab2c06 Vincent QUEMENER
            }, extra_environ={'REMOTE_USER': 'visitor'})
327
        json = response.json
328
329 b6d2af46 Vincent QUEMENER
        # On s'assure que la liste de groupes d'hôtes retournée est bien vide
330 131b409a Francois POIROTTE
        self.assertEqual(
331 3e3db819 Aurelien BOMPARD
            json, {'items': [], 'groups': []}
332 63ab2c06 Vincent QUEMENER
        )
333
334 fae18e45 Vincent QUEMENER
    def test_get_host_groups_as_anonymous(self):
335
        """
336
        Récupération des groupes d'hôtes secondaires en tant qu'anonyme
337
        """
338
339
        # Récupération du groupe d'hôtes 'mhg' dans la base de données
340
        mainhostgroup = DBSession.query(SupItemGroup).filter(
341
            SupItemGroup.name == u'mhg').first()
342
343
        # Récupération des groupes d'hôtes par un
344
        # utilisateur anonyme : le contrôleur doit
345
        # retourner une erreur 401 (HTTPUnauthorized)
346
        self.app.post(
347 b6d2af46 Vincent QUEMENER
            '/rpc/hosttree?parent_id=%s' % (mainhostgroup.idgroup, ), {
348 fae18e45 Vincent QUEMENER
            }, status=401)
349
350 63ab2c06 Vincent QUEMENER
    def test_get_host_groups_from_inexisting_main_group(self):
351
        """
352
        Récupération des groupes d'hôtes d'un groupe principal inexistant
353
        """
354
355
        # Récupération des groupes d'hôtes accessibles à l'utilisateur
356 fae18e45 Vincent QUEMENER
        # 'manager' et appartenant à un groupe principal inexistant
357 63ab2c06 Vincent QUEMENER
        response = self.app.post(
358 b6d2af46 Vincent QUEMENER
            '/rpc/hosttree?parent_id=6666666', {
359 fae18e45 Vincent QUEMENER
            }, extra_environ={'REMOTE_USER': 'manager'})
360 63ab2c06 Vincent QUEMENER
        json = response.json
361
362 5acc6853 Vincent QUEMENER
        # On s'assure que la liste de groupes d'hôtes retournée est bien vide
363 131b409a Francois POIROTTE
        self.assertEqual(
364 3e3db819 Aurelien BOMPARD
            json, {'items': [], 'groups': []}
365 63ab2c06 Vincent QUEMENER
        )
366
367 3ec8080a Vincent QUEMENER
##### Troisième onglet déroulant du formulaire #####
368 63ab2c06 Vincent QUEMENER
369
    def test_get_hosts_when_allowed(self):
370
        """
371
        Récupération des hôtes avec les bons droits
372
        """
373
374
        # Récupération du groupe d'hôtes 'mhg' dans la base de données
375
        mainhostgroup = DBSession.query(SupItemGroup).filter(
376 3ec8080a Vincent QUEMENER
            SupItemGroup.name == u'mhg').first()
377 63ab2c06 Vincent QUEMENER
378
        # Récupération du groupe d'hôtes 'hg1' dans la base de données
379
        hostgroup1 = DBSession.query(SupItemGroup).filter(
380 3ec8080a Vincent QUEMENER
            SupItemGroup.name == u'hg1').first()
381
382 b6d2af46 Vincent QUEMENER
        # Récupération du groupe d'hôtes 'hg2' dans la base de données
383
        hostgroup2 = DBSession.query(SupItemGroup).filter(
384
            SupItemGroup.name == u'hg2').first()
385
386
        # Récupération de l'hôte 'host1' dans la base de données
387
        host1 = DBSession.query(Host).filter(
388
            Host.name == u'host1').first()
389
390
        # Récupération de l'hôte 'host2' dans la base de données
391
        host2 = DBSession.query(Host).filter(
392
            Host.name == u'host2').first()
393
394 63ab2c06 Vincent QUEMENER
        # Récupération des hôtes du groupe 'mhg'
395 fae18e45 Vincent QUEMENER
        # accessibles à l'utilisateur 'manager'
396 63ab2c06 Vincent QUEMENER
        response = self.app.post(
397 b6d2af46 Vincent QUEMENER
            '/rpc/hosttree?parent_id=%s' % (mainhostgroup.idgroup, ), {
398 fae18e45 Vincent QUEMENER
            }, extra_environ={'REMOTE_USER': 'manager'})
399 63ab2c06 Vincent QUEMENER
        json = response.json
400
401 3ec8080a Vincent QUEMENER
        # On s'assure que la liste d'hôtes retournée contient bien 'host1'
402 131b409a Francois POIROTTE
        self.assertEqual(
403 b6d2af46 Vincent QUEMENER
            json, {
404 3e3db819 Aurelien BOMPARD
                'items': [{'id': host1.idhost, 'name': host1.name, 'type': 'item'}],
405 b6d2af46 Vincent QUEMENER
                'groups': [
406 3e3db819 Aurelien BOMPARD
                    {'id': hostgroup1.idgroup, 'name': hostgroup1.name, 'type': 'group'},
407
                    {'id': hostgroup2.idgroup, 'name': hostgroup2.name, 'type': 'group'}
408 b6d2af46 Vincent QUEMENER
                ]
409
            }
410 63ab2c06 Vincent QUEMENER
        )
411
412 3ec8080a Vincent QUEMENER
        # Récupération des hôtes du groupe 'hg1'
413 fae18e45 Vincent QUEMENER
        # accessibles à l'utilisateur 'manager'
414 63ab2c06 Vincent QUEMENER
        response = self.app.post(
415 b6d2af46 Vincent QUEMENER
            '/rpc/hosttree?parent_id=%s' % (hostgroup1.idgroup, ), {
416 fae18e45 Vincent QUEMENER
            }, extra_environ={'REMOTE_USER': 'manager'})
417 63ab2c06 Vincent QUEMENER
        json = response.json
418
419 3ec8080a Vincent QUEMENER
        # On s'assure que la liste d'hotes retournée contient bien 'host2'
420 131b409a Francois POIROTTE
        self.assertEqual(
421 b6d2af46 Vincent QUEMENER
            json, {
422 3e3db819 Aurelien BOMPARD
                'items': [{'id': host2.idhost, 'name': host2.name, 'type': 'item'}],
423 b6d2af46 Vincent QUEMENER
                'groups': []
424
            }
425 63ab2c06 Vincent QUEMENER
        )
426
427 fae18e45 Vincent QUEMENER
        # Récupération des hôtes du groupe 'mhg'
428
        # accessibles à l'utilisateur 'poweruser'
429
        response = self.app.post(
430 b6d2af46 Vincent QUEMENER
            '/rpc/hosttree?parent_id=%s' % (mainhostgroup.idgroup, ), {
431 fae18e45 Vincent QUEMENER
            }, extra_environ={'REMOTE_USER': 'poweruser'})
432
        json = response.json
433
434
        # On s'assure que la liste d'hôtes retournée contient bien 'host1'
435 131b409a Francois POIROTTE
        self.assertEqual(
436 b6d2af46 Vincent QUEMENER
            json, {
437 3e3db819 Aurelien BOMPARD
                'items': [{'id': host1.idhost, 'name': host1.name, 'type': 'item'}],
438 b6d2af46 Vincent QUEMENER
                'groups': [
439 3e3db819 Aurelien BOMPARD
                    {'id': hostgroup1.idgroup, 'name': hostgroup1.name, 'type': 'group'},
440
                    {'id': hostgroup2.idgroup, 'name': hostgroup2.name, 'type': 'group'},
441 b6d2af46 Vincent QUEMENER
                ]
442
            }
443 fae18e45 Vincent QUEMENER
        )
444
445 63ab2c06 Vincent QUEMENER
        # Récupération des hôtes du groupe 'hg1'
446 fae18e45 Vincent QUEMENER
        # accessibles à l'utilisateur 'poweruser'
447 63ab2c06 Vincent QUEMENER
        response = self.app.post(
448 b6d2af46 Vincent QUEMENER
            '/rpc/hosttree?parent_id=%s' % (hostgroup1.idgroup, ), {
449 fae18e45 Vincent QUEMENER
            }, extra_environ={'REMOTE_USER': 'poweruser'})
450 63ab2c06 Vincent QUEMENER
        json = response.json
451
452 fae18e45 Vincent QUEMENER
        # On s'assure que la liste d'hotes retournée contient bien 'host2'
453 131b409a Francois POIROTTE
        self.assertEqual(
454 b6d2af46 Vincent QUEMENER
            json, {
455 3e3db819 Aurelien BOMPARD
                'items': [{'id': host2.idhost, 'name': host2.name, 'type': 'item'}],
456 b6d2af46 Vincent QUEMENER
                'groups': []
457
            }
458 63ab2c06 Vincent QUEMENER
        )
459
460 fae18e45 Vincent QUEMENER
        # Récupération des hôtes du groupe 'hg1'
461
        # accessibles à l'utilisateur 'user'
462 3ec8080a Vincent QUEMENER
        response = self.app.post(
463 b6d2af46 Vincent QUEMENER
            '/rpc/hosttree?parent_id=%s' % (hostgroup1.idgroup, ), {
464 fae18e45 Vincent QUEMENER
            }, extra_environ={'REMOTE_USER': 'user'})
465 3ec8080a Vincent QUEMENER
        json = response.json
466
467 fae18e45 Vincent QUEMENER
        # On s'assure que la liste d'hôtes retournée contient bien 'host2'
468 131b409a Francois POIROTTE
        self.assertEqual(
469 b6d2af46 Vincent QUEMENER
            json, {
470 3e3db819 Aurelien BOMPARD
                'items': [{'id': host2.idhost, 'name': host2.name, 'type': 'item'}],
471 b6d2af46 Vincent QUEMENER
                'groups': []
472
            }
473 3ec8080a Vincent QUEMENER
        )
474
475 63ab2c06 Vincent QUEMENER
    def test_get_hosts_when_not_allowed(self):
476
        """
477
        Récupération des hôtes sans les bons droits
478
        """
479
480
        # Récupération du groupe d'hôtes 'mhg' dans la base de données
481
        mainhostgroup = DBSession.query(SupItemGroup).filter(
482 3ec8080a Vincent QUEMENER
            SupItemGroup.name == u'mhg').first()
483 63ab2c06 Vincent QUEMENER
484
        # Récupération du groupe d'hôtes
485
        # secondaire 'hg1' dans la base de données
486
        hostgroup1 = DBSession.query(SupItemGroup).filter(
487 3ec8080a Vincent QUEMENER
            SupItemGroup.name == u'hg1').first()
488 63ab2c06 Vincent QUEMENER
489 3ec8080a Vincent QUEMENER
        # Récupération du groupe d'hôtes
490
        # secondaire 'hg2' dans la base de données
491
        hostgroup2 = DBSession.query(SupItemGroup).filter(
492
            SupItemGroup.name == u'hg2').first()
493
494
        # Récupération des hôtes du groupe 'mhg'
495
        # accessibles à l'utilisateur 'user'
496 63ab2c06 Vincent QUEMENER
        response = self.app.post(
497 b6d2af46 Vincent QUEMENER
            '/rpc/hosttree?parent_id=%s' % (mainhostgroup.idgroup, ), {
498 3ec8080a Vincent QUEMENER
            }, extra_environ={'REMOTE_USER': 'user'})
499 63ab2c06 Vincent QUEMENER
        json = response.json
500
501 b6d2af46 Vincent QUEMENER
        # On s'assure que la liste d'hôtes retournée est vide
502 131b409a Francois POIROTTE
        self.assertEqual(
503 cc1a971a Vincent QUEMENER
            json, {
504 3e3db819 Aurelien BOMPARD
                'items': [],
505
                'groups': [{'name': hostgroup1.name, 'id': hostgroup1.idgroup, 'type': 'group'}]
506 cc1a971a Vincent QUEMENER
            }
507 3ec8080a Vincent QUEMENER
        )
508
509
        # Récupération des hôtes du groupe 'hg2'
510
        # accessibles à l'utilisateur 'user'
511
        response = self.app.post(
512 7e6517fe Francois POIROTTE
            '/rpc/hosttree?parent_id=%s' % (hostgroup2.idgroup, ), {
513
            }, extra_environ={'REMOTE_USER': 'user'})
514 3ec8080a Vincent QUEMENER
        json = response.json
515
516 b6d2af46 Vincent QUEMENER
        # On s'assure que la liste d'hôtes retournée est vide
517 131b409a Francois POIROTTE
        self.assertEqual(
518 3e3db819 Aurelien BOMPARD
            json, {'items': [], 'groups': []}
519 3ec8080a Vincent QUEMENER
        )
520
521
        # Récupération des hôtes du groupe 'mhg'
522
        # accessibles à l'utilisateur 'visitor'
523
        response = self.app.post(
524 7e6517fe Francois POIROTTE
            '/rpc/hosttree?parent_id=%s' % (mainhostgroup.idgroup, ), {
525
            }, extra_environ={'REMOTE_USER': 'visitor'})
526 3ec8080a Vincent QUEMENER
        json = response.json
527
528 b6d2af46 Vincent QUEMENER
        # On s'assure que la liste d'hôtes retournée est vide
529 131b409a Francois POIROTTE
        self.assertEqual(
530 3e3db819 Aurelien BOMPARD
            json, {'items': [], 'groups': []}
531 63ab2c06 Vincent QUEMENER
        )
532
533
        # Récupération des hôtes du groupe 'hg1'
534
        # accessibles à l'utilisateur 'visitor'
535
        response = self.app.post(
536 b6d2af46 Vincent QUEMENER
            '/rpc/hosttree?parent_id=%s' % (hostgroup1.idgroup, ), {
537 63ab2c06 Vincent QUEMENER
            }, extra_environ={'REMOTE_USER': 'visitor'})
538
        json = response.json
539
540
        # On s'assure que la liste d'hôtes retournée est vide
541 131b409a Francois POIROTTE
        self.assertEqual(
542 3e3db819 Aurelien BOMPARD
            json, {'items': [], 'groups': []}
543 63ab2c06 Vincent QUEMENER
        )
544
545 fae18e45 Vincent QUEMENER
    def test_get_hosts_as_anonymous(self):
546
        """
547 8bdfad89 Francois POIROTTE
        Récupération des hôtes en tant qu'anonyme
548 fae18e45 Vincent QUEMENER
        """
549 3ec8080a Vincent QUEMENER
550 fae18e45 Vincent QUEMENER
        # Récupération du groupe d'hôtes 'mhg' dans la base de données
551
        mainhostgroup = DBSession.query(SupItemGroup).filter(
552
            SupItemGroup.name == u'mhg').first()
553
554
        # Récupération des hôtes du groupe 'mhg' par
555
        # un utilisateur anonyme : le contrôleur doit
556
        # retourner une erreur 401 (HTTPUnauthorized)
557
        self.app.post(
558 b6d2af46 Vincent QUEMENER
            '/rpc/hosttree?parent_id=%s' % (mainhostgroup.idgroup, ), {
559 fae18e45 Vincent QUEMENER
            }, status=401)
560 3ec8080a Vincent QUEMENER
561 63ab2c06 Vincent QUEMENER
    def test_get_hosts_from_inexisting_secondary_group(self):
562
        """
563
        Récupération des hôtes d'un groupe secondaire inexistant
564
        """
565
566
        # Récupération des hôtes accessibles à l'utilisateur
567 fae18e45 Vincent QUEMENER
        # 'manager' et appartenant à un groupe secondaire inexistant
568 63ab2c06 Vincent QUEMENER
        response = self.app.post(
569 b6d2af46 Vincent QUEMENER
            '/rpc/hosttree?parent_id=6666666', {
570 fae18e45 Vincent QUEMENER
            }, extra_environ={'REMOTE_USER': 'manager'})
571 63ab2c06 Vincent QUEMENER
        json = response.json
572
573
        # On s'assure que la liste retournée est vide
574 131b409a Francois POIROTTE
        self.assertEqual(
575 3e3db819 Aurelien BOMPARD
            json, {'items': [], 'groups': []}
576 63ab2c06 Vincent QUEMENER
        )