Project

General

Profile

Statistics
| Branch: | Tag: | Revision:

vigigraph / vigigraph / tests / functional / test_graph_selection_form.py @ b430ccc5

History | View | Annotate | Download (19.5 KB)

1
# -*- coding: utf-8 -*-
2
"""
3
Suite de tests de l'arbre de sélection des graphes et groupes de graphes.
4
"""
5
import transaction
6

    
7
from vigigraph.tests import TestController
8
from vigilo.models.session import DBSession
9
from vigilo.models.tables import Host, Graph, GraphGroup
10
from vigilo.models.demo.functions import *
11

    
12
from vigigraph.tests.functional.test_host_selection_form import populateDB
13

    
14

    
15
def addGraphs(host1, host2, host3):
16
    """
17
    Ajout d'un graphe pour chacun des trois hôtes passés en paramètres.
18

19
    @param host1: Premier hôte.
20
    @type  host1: L{vigilo.models.Host}
21
    @param host2: Deuxième hôte.
22
    @type  host2: L{vigilo.models.Host}
23
    @param host3: Troisième hôte.
24
    @type  host3: L{vigilo.models.Host}
25
    """
26

    
27
    # Ajout d'un serveur de supervision
28
    vigiloserver = add_vigiloserver(u'locahost')
29

    
30
    # Ajout d'une application 'vigirrd'
31
    add_application(u"vigirrd")
32

    
33
    # Ajout de trois graphes
34
    graph1 = add_graph("graph1")
35
    graph2 = add_graph("graph2")
36
    graph3 = add_graph("graph3")
37

    
38
    # Ajout d'une perfdatasource pour chaque hôte
39
    datasource1 = add_perfdatasource(
40
        u'load', host1, None, None, vigiloserver)
41
    datasource2 = add_perfdatasource(
42
        u'load', host2, None, None, vigiloserver)
43
    datasource3 = add_perfdatasource(
44
        u'load', host3, None, None, vigiloserver)
45

    
46
    # Ajout d'une perfdatsource à chaque graphe
47
    add_perfdatasource2graph(datasource1, graph1)
48
    add_perfdatasource2graph(datasource2, graph2)
49
    add_perfdatasource2graph(datasource3, graph3)
50

    
51
    # Ajout de trois groupes de graphes
52
    graphgroup1 = add_graphgroup("graphgroup1")
53
    graphgroup2 = add_graphgroup("graphgroup2")
54
    graphgroup3 = add_graphgroup("graphgroup3")
55

    
56
    # Ajout de chaque graphe à un groupe de graphes
57
    add_graph2group(graph1, graphgroup1)
58
    add_graph2group(graph2, graphgroup2)
59
    add_graph2group(graph3, graphgroup3)
60

    
61

    
62
class TestGraphTree(TestController):
63
    """
64
    Teste l'arbre de sélection des graphes
65
    et groupes de graphes de Vigigraph.
66
    """
67

    
68
    def setUp(self):
69
        """Préparation de la base de données de tests."""
70

    
71
        # Initialisation de la base
72
        super(TestGraphTree, self).setUp()
73

    
74
        # Ajout de données de tests dans la base
75
        (host1, host2, host3) = populateDB()
76

    
77
        # Ajout de graphes dans la base
78
        addGraphs(host1, host2, host3)
79

    
80
        # Validation des ajouts dans la base
81
        DBSession.flush()
82
        transaction.commit()
83

    
84
##### Quatrième onglet déroulant du formulaire #####
85

    
86
    def test_get_graph_groups_when_allowed(self):
87
        """
88
        Récupération des groupes de graphes avec les bons droits
89
        """
90

    
91
        # Récupération de l'hôte 'host1' dans la base de données
92
        host1 = DBSession.query(Host).filter(
93
            Host.name == u'host1').first()
94

    
95
        # Récupération de l'hôte 'host2' dans la base de données
96
        host2 = DBSession.query(Host).filter(
97
            Host.name == u'host2').first()
98

    
99
        # Récupération de l'hôte 'host3' dans la base de données
100
        host3 = DBSession.query(Host).filter(
101
            Host.name == u'host3').first()
102

    
103
        # Récupération du groupe de graphes
104
        # 'graphgroup1' dans la base de données
105
        graphgroup1 = DBSession.query(GraphGroup).filter(
106
            GraphGroup.name == u'graphgroup1').first()
107

    
108
        # Récupération du groupe de graphes
109
        # 'graphgroup2' dans la base de données
110
        graphgroup2 = DBSession.query(GraphGroup).filter(
111
            GraphGroup.name == u'graphgroup2').first()
112

    
113
        # Récupération du groupe de graphes
114
        # 'graphgroup3' dans la base de données
115
        graphgroup3 = DBSession.query(GraphGroup).filter(
116
            GraphGroup.name == u'graphgroup3').first()
117

    
118
        # Récupération des groupes de graphes de l'hôte
119
        # host1 accessibles à l'utilisateur 'manager'
120
        response = self.app.post(
121
        '/rpc/graphtree?host_id=%s' % (host1.idhost, ), {
122
            }, extra_environ={'REMOTE_USER': 'manager'})
123
        json = response.json
124

    
125
        # On s'assure que la liste de groupes
126
        # de graphes retournée contient bien 'graphgroup1'
127
        self.assertEqual(
128
            json, {
129
                'leaves': [],
130
                'groups': [{'id': graphgroup1.idgroup, 'name': graphgroup1.name}]
131
            }
132
        )
133

    
134
        # Récupération des groupes de graphes de l'hôte
135
        # host2 accessibles à l'utilisateur 'manager'
136
        response = self.app.post(
137
        '/rpc/graphtree?host_id=%s' % (host2.idhost, ), {
138
            }, extra_environ={'REMOTE_USER': 'manager'})
139
        json = response.json
140

    
141
        # On s'assure que la liste de groupes
142
        # de graphes retournée contient bien 'graphgroup2'
143
        self.assertEqual(
144
            json, {
145
                'leaves': [],
146
                'groups': [{'id': graphgroup2.idgroup, 'name': graphgroup2.name}]
147
            }
148
        )
149

    
150
        # Récupération des groupes de graphes de l'hôte
151
        # host1 accessibles à l'utilisateur 'poweruser'
152
        response = self.app.post(
153
        '/rpc/graphtree?host_id=%s' % (host1.idhost, ), {
154
            }, extra_environ={'REMOTE_USER': 'poweruser'})
155
        json = response.json
156

    
157
        # On s'assure que la liste de groupes
158
        # de graphes retournée contient bien 'graphgroup1'
159
        self.assertEqual(
160
            json, {
161
                'leaves': [],
162
                'groups': [{'id': graphgroup1.idgroup, 'name': graphgroup1.name}]
163
            }
164
        )
165

    
166
        # Récupération des groupes de graphes de l'hôte
167
        # host2 accessibles à l'utilisateur 'poweruser'
168
        response = self.app.post(
169
        '/rpc/graphtree?host_id=%s' % (host2.idhost, ), {
170
            }, extra_environ={'REMOTE_USER': 'poweruser'})
171
        json = response.json
172

    
173
        # On s'assure que la liste de groupes
174
        # de graphes retournée contient bien 'graphgroup2'
175
        self.assertEqual(
176
            json, {
177
                'leaves': [],
178
                'groups': [{'id': graphgroup2.idgroup, 'name': graphgroup2.name}]
179
            }
180
        )
181

    
182
        # Récupération des groupes de graphes de l'hôte
183
        # host2 accessibles à l'utilisateur 'user'
184
        response = self.app.post(
185
        '/rpc/graphtree?host_id=%s' % (host2.idhost, ), {
186
            }, extra_environ={'REMOTE_USER': 'user'})
187
        json = response.json
188

    
189
        # On s'assure que la liste de groupes
190
        # de graphes retournée contient bien 'graphgroup2'
191
        self.assertEqual(
192
            json, {
193
                'leaves': [],
194
                'groups': [{'id': graphgroup2.idgroup, 'name': graphgroup2.name}]
195
            }
196
        )
197

    
198
        # Récupération des groupes de graphes de l'hôte
199
        # host3 accessibles à l'utilisateur 'poweruser'
200
        response = self.app.post(
201
        '/rpc/graphtree?host_id=%s' % (host3.idhost, ), {
202
            }, extra_environ={'REMOTE_USER': 'poweruser'})
203
        json = response.json
204

    
205
        # On s'assure que la liste de groupes
206
        # de graphes retournée contient bien 'graphgroup3'
207
        self.assertEqual(
208
            json, {
209
                'leaves': [],
210
                'groups': [{'id': graphgroup3.idgroup, 'name': graphgroup3.name}]
211
            }
212
        )
213

    
214
    def test_get_graph_groups_when_not_allowed(self):
215
        """
216
        Récupération des groupes de graphes sans les bons droits
217
        """
218

    
219
        # Récupération de l'hôte 'host1' dans la base de données
220
        host1 = DBSession.query(Host).filter(
221
            Host.name == u'host1').first()
222

    
223
        # Récupération de l'hôte 'host3' dans la base de données
224
        host3 = DBSession.query(Host).filter(
225
            Host.name == u'host3').first()
226

    
227
        # Récupération des groupes de graphes de l'hôte
228
        # host1 accessibles à l'utilisateur 'user'
229
        response = self.app.post(
230
        '/rpc/graphtree?host_id=%s' % (host1.idhost, ), {
231
            }, extra_environ={'REMOTE_USER': 'user'})
232
        json = response.json
233

    
234
        # On s'assure que la liste de groupes
235
        # de graphes retournée est vide
236
        self.assertEqual(
237
            json, {
238
                'leaves': [],
239
                'groups': []
240
            }
241
        )
242

    
243
        # Récupération des groupes de graphes de l'hôte
244
        # host3 accessibles à l'utilisateur 'user'
245
        response = self.app.post(
246
        '/rpc/graphtree?host_id=%s' % (host3.idhost, ), {
247
            }, extra_environ={'REMOTE_USER': 'user'})
248
        json = response.json
249

    
250
        # On s'assure que la liste de groupes
251
        # de graphes retournée est vide
252
        self.assertEqual(
253
            json, {
254
                'leaves': [],
255
                'groups': []
256
            }
257
        )
258

    
259
        # Récupération des groupes de graphes de l'hôte
260
        # host1 accessibles à l'utilisateur 'visitor'
261
        response = self.app.post(
262
        '/rpc/graphtree?host_id=%s' % (host1.idhost, ), {
263
            }, extra_environ={'REMOTE_USER': 'visitor'})
264
        json = response.json
265

    
266
        # On s'assure que la liste de groupes
267
        # de graphes retournée est vide
268
        self.assertEqual(
269
            json, {
270
                'leaves': [],
271
                'groups': []
272
            }
273
        )
274

    
275
    def test_get_graph_groups_as_anonymous(self):
276
        """
277
        Récupération des groupes de graphes en tant qu'anonyme
278
        """
279

    
280
        # Récupération de l'hôte 'host1' dans la base de données
281
        host1 = DBSession.query(Host).filter(
282
            Host.name == u'host1').first()
283

    
284
        # Récupération des groupes de graphes de l'hôte
285
        # 'host1' par un utilisateur anonyme : le contrôleur
286
        # doit retourner une erreur 401 (HTTPUnauthorized)
287
        self.app.post(
288
            '/rpc/graphtree?host_id=%s' % (host1.idhost, ), {
289
            }, status=401)
290

    
291
    def test_get_graph_groups_from_inexisting_host(self):
292
        """
293
        Récupération des groupes de graphes d'un hôte inexistant
294
        """
295

    
296
        # Récupération des groupes d'hôtes accessibles à l'utilisateur
297
        # 'visitor' et appartenant à un groupe principal inexistant
298
        response = self.app.post(
299
            '/rpc/graphtree?host_id=6666666', {
300
            }, extra_environ={'REMOTE_USER': 'visitor'})
301
        json = response.json
302

    
303
        # On s'assure que la liste de groupes
304
        # de graphes retournée est vide
305
        self.assertEqual(
306
            json, {
307
                'leaves': [],
308
                'groups': []
309
            }
310
        )
311

    
312
##### Cinquième onglet déroulant du formulaire #####
313

    
314
    def test_get_graphs_when_allowed(self):
315
        """
316
        Récupération des graphes avec les bons droits
317
        """
318

    
319
        # Récupération de l'hôte 'host1' dans la base de données
320
        host1 = DBSession.query(Host).filter(
321
            Host.name == u'host1').first()
322

    
323
        # Récupération de l'hôte 'host2' dans la base de données
324
        host2 = DBSession.query(Host).filter(
325
            Host.name == u'host2').first()
326

    
327
        # Récupération de l'hôte 'host3' dans la base de données
328
        host3 = DBSession.query(Host).filter(
329
            Host.name == u'host3').first()
330

    
331
        # Récupération du groupe de graphes
332
        # 'graphgroup1' dans la base de données
333
        graphgroup1 = DBSession.query(GraphGroup).filter(
334
            GraphGroup.name == u'graphgroup1').first()
335

    
336
        # Récupération du groupe de graphes
337
        # 'graphgroup2' dans la base de données
338
        graphgroup2 = DBSession.query(GraphGroup).filter(
339
            GraphGroup.name == u'graphgroup2').first()
340

    
341
        # Récupération du groupe de graphes
342
        # 'graphgroup3' dans la base de données
343
        graphgroup3 = DBSession.query(GraphGroup).filter(
344
            GraphGroup.name == u'graphgroup3').first()
345

    
346
        # Récupération du graphe 'graph1'
347
        # dans la base de données
348
        graph1 = DBSession.query(Graph).filter(
349
            Graph.name == u'graph1').first()
350

    
351
        # Récupération du graphe 'graph2'
352
        # dans la base de données
353
        graph2 = DBSession.query(Graph).filter(
354
            Graph.name == u'graph2').first()
355

    
356
        # Récupération du graphe 'graph3'
357
        # dans la base de données
358
        graph3 = DBSession.query(Graph).filter(
359
            Graph.name == u'graph3').first()
360

    
361
        # Récupération des graphes du groupe de graphes
362
        # 'graphgroup1' accessibles à l'utilisateur 'manager'
363
        response = self.app.post(
364
        '/rpc/graphtree?parent_id=%s&host_id=%s' %
365
            (graphgroup1.idgroup, host1.idhost), {},
366
            extra_environ={'REMOTE_USER': 'manager'})
367
        json = response.json
368

    
369
        # On s'assure que la liste de
370
        # graphes retournée contient 'graph1'
371
        self.assertEqual(
372
            json, {
373
                'leaves': [{'id': graph1.idgraph, 'name': graph1.name}],
374
                'groups': []
375
            }
376
        )
377

    
378
        # Récupération des graphes du groupe de graphes
379
        # 'graphgroup2' accessibles à l'utilisateur 'manager'
380
        response = self.app.post(
381
        '/rpc/graphtree?parent_id=%s&host_id=%s' %
382
            (graphgroup2.idgroup, host2.idhost), {},
383
            extra_environ={'REMOTE_USER': 'manager'})
384
        json = response.json
385

    
386
        # On s'assure que la liste de
387
        # graphes retournée contient 'graph2'
388
        self.assertEqual(
389
            json, {
390
                'leaves': [{'id': graph2.idgraph, 'name': graph2.name}],
391
                'groups': []
392
            }
393
        )
394

    
395
        # Récupération des graphes du groupe de graphes
396
        # 'graphgroup1' accessibles à l'utilisateur 'poweruser'
397
        response = self.app.post(
398
        '/rpc/graphtree?parent_id=%s&host_id=%s' %
399
            (graphgroup1.idgroup, host1.idhost), {},
400
            extra_environ={'REMOTE_USER': 'poweruser'})
401
        json = response.json
402

    
403
        # On s'assure que la liste de
404
        # graphes retournée contient 'graph1'
405
        self.assertEqual(
406
            json, {
407
                'leaves': [{'id': graph1.idgraph, 'name': graph1.name}],
408
                'groups': []
409
            }
410
        )
411

    
412
        # Récupération des graphes du groupe de graphes
413
        # 'graphgroup2' accessibles à l'utilisateur 'poweruser'
414
        response = self.app.post(
415
        '/rpc/graphtree?parent_id=%s&host_id=%s' %
416
            (graphgroup2.idgroup, host2.idhost), {},
417
            extra_environ={'REMOTE_USER': 'poweruser'})
418
        json = response.json
419

    
420
        # On s'assure que la liste de
421
        # graphes retournée contient 'graph2'
422
        self.assertEqual(
423
            json, {
424
                'leaves': [{'id': graph2.idgraph, 'name': graph2.name}],
425
                'groups': []
426
            }
427
        )
428

    
429
        # Récupération des graphes du groupe de graphes
430
        # 'graphgroup2' accessibles à l'utilisateur 'user'
431
        response = self.app.post(
432
        '/rpc/graphtree?parent_id=%s&host_id=%s' %
433
            (graphgroup2.idgroup, host2.idhost), {},
434
            extra_environ={'REMOTE_USER': 'user'})
435
        json = response.json
436

    
437
        # On s'assure que la liste de
438
        # graphes retournée contient 'graph2'
439
        self.assertEqual(
440
            json, {
441
                'leaves': [{'id': graph2.idgraph, 'name': graph2.name}],
442
                'groups': []
443
            }
444
        )
445

    
446
        # Récupération des graphes du groupe de graphes
447
        # 'graphgroup3' accessibles à l'utilisateur 'poweruser'
448
        response = self.app.post(
449
        '/rpc/graphtree?parent_id=%s&host_id=%s' %
450
            (graphgroup3.idgroup, host3.idhost), {},
451
            extra_environ={'REMOTE_USER': 'poweruser'})
452
        json = response.json
453

    
454
        # On s'assure que la liste de
455
        # graphes retournée contient 'graph3'
456
        self.assertEqual(
457
            json, {
458
                'leaves': [{'id': graph3.idgraph, 'name': graph3.name}],
459
                'groups': []
460
            }
461
        )
462

    
463
    def test_get_graphs_when_not_allowed(self):
464
        """
465
        Récupération des graphes sans les bons droits
466
        """
467

    
468
        # Récupération de l'hôte 'host1' dans la base de données
469
        host1 = DBSession.query(Host).filter(
470
            Host.name == u'host1').first()
471

    
472
        # Récupération de l'hôte 'host3' dans la base de données
473
        host3 = DBSession.query(Host).filter(
474
            Host.name == u'host3').first()
475

    
476
        # Récupération du groupe de graphes
477
        # 'graphgroup1' dans la base de données
478
        graphgroup1 = DBSession.query(GraphGroup).filter(
479
            GraphGroup.name == u'graphgroup1').first()
480

    
481
        # Récupération du groupe de graphes
482
        # 'graphgroup3' dans la base de données
483
        graphgroup3 = DBSession.query(GraphGroup).filter(
484
            GraphGroup.name == u'graphgroup3').first()
485

    
486
        # Récupération des graphes du groupe de graphes
487
        # graphgroup1 accessibles à l'utilisateur 'user'
488
        response = self.app.post(
489
        '/rpc/graphtree?parent_id=%s&host_id=%s' %
490
            (graphgroup1.idgroup, host1.idhost), {},
491
            extra_environ={'REMOTE_USER': 'user'})
492
        json = response.json
493

    
494
        # On s'assure que la liste de groupes
495
        # de graphes retournée est vide
496
        self.assertEqual(
497
            json, {
498
                'leaves': [],
499
                'groups': []
500
            }
501
        )
502

    
503
        # Récupération des graphes du groupe de graphes
504
        # 'graphgroup1' accessibles à l'utilisateur 'visitor'
505
        response = self.app.post(
506
        '/rpc/graphtree?parent_id=%s&host_id=%s' %
507
            (graphgroup1.idgroup, host1.idhost), {},
508
            extra_environ={'REMOTE_USER': 'visitor'})
509
        json = response.json
510

    
511
        # On s'assure que la liste de groupes
512
        # de graphes retournée est vide
513
        self.assertEqual(
514
            json, {
515
                'leaves': [],
516
                'groups': []
517
            }
518
        )
519

    
520
        # Récupération des graphes du groupe de graphes
521
        # 'graphgroup3' accessibles à l'utilisateur 'user'
522
        response = self.app.post(
523
        '/rpc/graphtree?parent_id=%s&host_id=%s' %
524
            (graphgroup3.idgroup, host3.idhost), {},
525
            extra_environ={'REMOTE_USER': 'user'})
526
        json = response.json
527

    
528
        # On s'assure que la liste de groupes
529
        # de graphes retournée est vide
530
        self.assertEqual(
531
            json, {
532
                'leaves': [],
533
                'groups': []
534
            }
535
        )
536

    
537
    def test_get_graphs_as_anonymous(self):
538
        """
539
        Récupération des graphes en tant qu'anonyme
540
        """
541

    
542
        # Récupération de l'hôte 'host1' dans la base de données
543
        host1 = DBSession.query(Host).filter(
544
            Host.name == u'host1').first()
545

    
546
        # Récupération du groupe de graphes
547
        # 'graphgroup1' dans la base de données
548
        graphgroup1 = DBSession.query(GraphGroup).filter(
549
            GraphGroup.name == u'graphgroup1').first()
550

    
551
        # Récupération des graphes du groupe de graphes
552
        # 'graphgroup1' par un utilisateur anonyme : le contrôleur
553
        # doit retourner une erreur 401 (HTTPUnauthorized)
554
        self.app.post(
555
            '/rpc/graphtree?parent_id=%s&host_id=%s' %
556
            (graphgroup1.idgroup, host1.idhost),
557
            {}, status=401)
558

    
559
    def test_get_graphs_from_inexisting_graph_group(self):
560
        """
561
        Récupération des graphes d'un groupe de graphes inexistant
562
        """
563

    
564
        # Récupération des graphes accessibles à l'utilisateur
565
        # 'manager' et appartenant à un groupe inexistant
566
        response = self.app.post(
567
            '/rpc/graphtree?parent_id=6666666&host_id=6666666', {
568
            }, extra_environ={'REMOTE_USER': 'manager'})
569
        json = response.json
570

    
571
        # On s'assure que la liste de
572
        # graphes retournée est vide
573
        self.assertEqual(
574
            json, {
575
                'leaves': [],
576
                'groups': []
577
            }
578
        )