Project

General

Profile

Statistics
| Branch: | Tag: | Revision:

vigigraph / vigigraph / tests / functional / test_search_form.py @ 77b7746d

History | View | Annotate | Download (19.4 KB)

1
# -*- coding: utf-8 -*-
2
# Copyright (C) 2006-2016 CS-SI
3
# License: GNU GPL v2 <http://www.gnu.org/licenses/gpl-2.0.html>
4

    
5
"""
6
Suite de tests du formulaire de recherche de VigiGraph.
7
"""
8
import transaction
9
import urllib
10

    
11
from vigigraph.tests import TestController
12
from vigilo.models.session import DBSession
13
from vigilo.models.tables import Host, SupItemGroup, Graph, GraphGroup
14
from vigigraph.tests.functional.helpers import populateDB, addGraphs
15

    
16

    
17
class TestSearchForm(TestController):
18
    """
19
    Teste le formulaire de recherche des
20
    hôtes et des graphes de Vigigraph.
21
    """
22

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

    
26
        # Initialisation de la base
27
        super(TestSearchForm, self).setUp()
28

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

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

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

    
39
    def test_select_host_when_allowed(self):
40
        """
41
        Résultats de la recherche sur un hôte avec les bons droits
42
        """
43

    
44
        # Récupération du groupe d'hôtes 'mhg' dans la base de données
45
        DBSession.query(SupItemGroup).filter(
46
            SupItemGroup.name == u'mhg').first()
47

    
48
        # Récupération du groupe d'hôtes 'hg1' dans la base de données
49
        DBSession.query(SupItemGroup).filter(
50
            SupItemGroup.name == u'hg1').first()
51

    
52
        # Récupération de l'hôte 'host1' dans la base de données
53
        host1 = DBSession.query(Host).filter(
54
            Host.name == u'host1 éà').first()
55

    
56
        # Récupération de l'hôte 'host2' dans la base de données
57
        host2 = DBSession.query(Host).filter(
58
            Host.name == u'host2 éà').first()
59

    
60
        # Récupération des résultats obtenus après une recherche
61
        # sur l'hôte 'host1' pour l'utilisateur 'manager'
62
        response = self.app.post(
63
            '/rpc/searchHostAndGraph',
64
            {'search_form_host': host1.name},
65
            extra_environ={'REMOTE_USER': 'manager'}
66
        )
67
        json = response.json
68

    
69
        # On s'assure que les deux listes retournées contiennent
70
        # respectivement le nom de l'hôte et son identifiant
71
        self.assertEqual(
72
            json, {
73
                'labels': [[u'host1 éà', None]],
74
                'ids': [[1, None]],
75
                'more': False,
76
            }
77
        )
78

    
79
        # Récupération des résultats obtenus après une recherche
80
        # sur l'hôte 'host1' pour l'utilisateur 'poweruser'
81
        response = self.app.post(
82
            '/rpc/searchHostAndGraph',
83
            {'search_form_host': host1.name},
84
            extra_environ={'REMOTE_USER': 'poweruser'}
85
        )
86
        json = response.json
87

    
88
        # On s'assure que les deux listes retournées contiennent
89
        # respectivement le nom de l'hôte et son identifiant
90
        self.assertEqual(
91
            json, {
92
                'labels': [[host1.name, None]],
93
                'ids': [[host1.idhost, None]],
94
                'more': False,
95
            }
96
        )
97

    
98
        # Récupération des résultats obtenus après une recherche
99
        # sur l'hôte 'host2' pour l'utilisateur 'poweruser'
100
        response = self.app.post(
101
            '/rpc/searchHostAndGraph',
102
            {'search_form_host': host2.name},
103
            extra_environ={'REMOTE_USER': 'poweruser'}
104
        )
105
        json = response.json
106

    
107
        # On s'assure que les deux listes retournées contiennent
108
        # respectivement le nom de l'hôte et son identifiant
109
        self.assertEqual(
110
            json, {
111
                'labels': [[host2.name, None]],
112
                'ids': [[host2.idhost, None]],
113
                'more': False,
114
            }
115
        )
116

    
117
        # Récupération des résultats obtenus après une recherche
118
        # sur l'hôte 'host2' pour l'utilisateur 'user'
119
        response = self.app.post(
120
            '/rpc/searchHostAndGraph',
121
            {'search_form_host': host2.name},
122
            extra_environ={'REMOTE_USER': 'user'}
123
        )
124
        json = response.json
125

    
126
        # On s'assure que les deux listes retournées contiennent
127
        # respectivement le nom de l'hôte et son identifiant
128
        self.assertEqual(
129
            json, {
130
                'labels': [[host2.name, None]],
131
                'ids': [[host2.idhost, None]],
132
                'more': False,
133
            }
134
        )
135

    
136
    def test_select_host_when_not_allowed(self):
137
        """
138
        Résultats de la recherche sur un hôte sans les droits
139
        """
140

    
141
        # Récupération de l'hôte 'host1' dans la base de données
142
        host1 = DBSession.query(Host).filter(
143
            Host.name == u'host1 éà').first()
144

    
145
        # Récupération de l'hôte 'host3' dans la base de données
146
        host3 = DBSession.query(Host).filter(
147
            Host.name == u'host3 éà').first()
148

    
149
        # Récupération des résultats obtenus après une recherche
150
        # sur l'hôte 'host1' pour l'utilisateur 'user'
151
        response = self.app.post(
152
            '/rpc/searchHostAndGraph',
153
            {'search_form_host': host1.name},
154
            extra_environ={'REMOTE_USER': 'user'}
155
        )
156
        json = response.json
157

    
158
        # On s'assure que la liste retournée est vide
159
        self.assertEqual(
160
            json, {
161
                'labels': [],
162
                'ids': [],
163
                'more': False,
164
            }
165
        )
166

    
167
        # Récupération des résultats obtenus après une recherche
168
        # sur l'hôte 'host3' pour l'utilisateur 'user'
169
        response = self.app.post(
170
            '/rpc/searchHostAndGraph',
171
            {'search_form_host': host3.name},
172
            extra_environ={'REMOTE_USER': 'user'}
173
        )
174
        json = response.json
175

    
176
        # On s'assure que la liste
177
        # retournée est vide
178
        self.assertEqual(
179
            json, {
180
                'labels': [],
181
                'ids': [],
182
                'more': False,
183
            }
184
        )
185

    
186
        # Récupération des résultats obtenus après une recherche
187
        # sur l'hôte 'host1' pour l'utilisateur 'visitor'
188
        response = self.app.post(
189
            '/rpc/searchHostAndGraph',
190
            {'search_form_host': host1.name},
191
            extra_environ={'REMOTE_USER': 'visitor'}
192
        )
193
        json = response.json
194

    
195
        # On s'assure que la liste
196
        # retournée est vide
197
        self.assertEqual(
198
            json, {
199
                'labels': [],
200
                'ids': [],
201
                'more': False,
202
            }
203
        )
204

    
205
        # Récupération des résultats obtenus après une recherche
206
        # sur l'hôte 'host3' pour l'utilisateur 'visitor'
207
        response = self.app.post(
208
            '/rpc/searchHostAndGraph',
209
            {'search_form_host': host3.name},
210
            extra_environ={'REMOTE_USER': 'visitor'}
211
        )
212
        json = response.json
213

    
214
        # On s'assure que la liste
215
        # retournée est vide
216
        self.assertEqual(
217
            json, {
218
                'labels': [],
219
                'ids': [],
220
                'more': False,
221
            }
222
        )
223

    
224
    def test_select_host_as_anonymous(self):
225
        """
226
        Résultats de la recherche sur un hôte en tant qu'anonyme
227
        """
228

    
229
        # Récupération de l'hôte 'host1' dans la base de données
230
        host1 = DBSession.query(Host).filter(
231
            Host.name == u'host1 éà').first()
232

    
233
        # Récupération des résultats obtenus après une recherche
234
        # sur l'hôte 'host1' pour un utilisateur anonyme :
235
        # le contrôleur doit retourner une erreur 401.
236
        self.app.post(
237
            '/rpc/searchHostAndGraph',
238
            {'search_form_host': host1.name},
239
            status=401
240
        )
241

    
242
    def test_select_inexisting_host(self):
243
        """
244
        Résultats de la recherche sur un hôte inexistant
245
        """
246

    
247
        # Récupération des résultats obtenus après une recherche
248
        # sur un hôte inexistant pour l'utilisateur 'manager'
249
        response = self.app.post(
250
            '/rpc/searchHostAndGraph',
251
            {'search_form_host': 'hote_totalement_inexistant'},
252
            extra_environ={'REMOTE_USER': 'manager'}
253
        )
254
        json = response.json
255

    
256
        # On s'assure que la liste retournée est vide
257
        self.assertEqual(
258
            json, {
259
                'labels': [],
260
                'ids': [],
261
                'more': False,
262
            }
263
        )
264

    
265
    def test_select_graph_without_a_host(self):
266
        """
267
        Résultats de la recherche sur un graphe sans préciser d'hôte
268
        """
269

    
270
        # Récupération de l'hôte 'host1' dans la base de données
271
        host1 = DBSession.query(Host).filter(
272
            Host.name == u'host1 éà').first()
273

    
274
        # Récupération du graphe 'graph1' dans la base de données
275
        graph1 = DBSession.query(Graph).filter(
276
            Graph.name == u'graph1 éà').first()
277

    
278
        # Récupération des résultats obtenus après une recherche sur
279
        # un graphe sans préciser d'hôte par l'utilisateur 'manager'.
280
        response = self.app.post(
281
            '/rpc/searchHostAndGraph',
282
            {'search_form_graph': graph1.name},
283
            extra_environ={'REMOTE_USER': 'manager'}
284
        )
285
        json = response.json
286

    
287
        # On s'assure que la liste retournée est conforme à celle attendue
288
        self.assertEqual(
289
            json, {
290
                'labels': [[host1.name, graph1.name]],
291
                'ids': [[host1.idhost, graph1.idgraph]],
292
                'more': False,
293
            }
294
        )
295

    
296
    def test_select_graph_with_an_erroneous_host(self):
297
        """
298
        Résultats de la recherche sur un graphe en précisant un hôte erroné
299
        """
300

    
301
        # Récupération du graphe 'graph1' dans la base de données
302
        graph1 = DBSession.query(Graph).filter(
303
            Graph.name == u'graph1 éà').first()
304

    
305
        # On s'assure qu'une liste vide est retournée lorsque
306
        # l'on recherche un graphe en précisant un hôte erroné.
307
        response = self.app.post(
308
            '/rpc/searchHostAndGraph',
309
            {'search_form_host': graph1.name},
310
            extra_environ={'REMOTE_USER': 'manager'}
311
        )
312
        json = response.json
313

    
314
        # On s'assure que la liste retournée est vide
315
        self.assertEqual(
316
            json, {
317
                'labels': [],
318
                'ids': [],
319
                'more': False,
320
            }
321
        )
322

    
323
    def test_select_graph_when_allowed(self):
324
        """
325
        Résultats de la recherche sur un graphe avec les bons droits
326
        """
327

    
328
        # Récupération du groupe d'hôtes 'mhg' dans la base de données
329
        DBSession.query(SupItemGroup).filter(
330
            SupItemGroup.name == u'mhg').first()
331

    
332
        # Récupération du groupe d'hôtes 'hg1' dans la base de données
333
        DBSession.query(SupItemGroup).filter(
334
            SupItemGroup.name == u'hg1').first()
335

    
336
        # Récupération de l'hôte 'host1' dans la base de données
337
        host1 = DBSession.query(Host).filter(
338
            Host.name == u'host1 éà').first()
339

    
340
        # Récupération de l'hôte 'host2' dans la base de données
341
        host2 = DBSession.query(Host).filter(
342
            Host.name == u'host2 éà').first()
343

    
344
        # Récupération du groupe de graphes
345
        # 'graphgroup1' dans la base de données
346
        DBSession.query(GraphGroup).filter(
347
            GraphGroup.name == u'graphgroup1').first()
348

    
349
        # Récupération du groupe de graphes
350
        # 'graphgroup2' dans la base de données
351
        DBSession.query(GraphGroup).filter(
352
            GraphGroup.name == u'graphgroup2').first()
353

    
354
        # Récupération du graphe 'graph1' dans la base de données
355
        graph1 = DBSession.query(Graph).filter(
356
            Graph.name == u'graph1 éà').first()
357

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

    
362
        # Récupération des résultats obtenus après une recherche
363
        # sur le graphe 'graph1' pour l'utilisateur 'manager'
364
        response = self.app.post(
365
            '/rpc/searchHostAndGraph', {
366
                'search_form_host': host1.name,
367
                'search_form_graph': graph1.name,
368
            }, extra_environ={'REMOTE_USER': 'manager'})
369
        json = response.json
370

    
371
        # On s'assure que la liste retournée
372
        # est conforme à celle attendue
373
        self.assertEqual(
374
            json, {
375
                'labels': [[host1.name, graph1.name]],
376
                'ids': [[host1.idhost, graph1.idgraph]],
377
                'more': False,
378
            }
379
        )
380

    
381
        # Récupération des résultats obtenus après une recherche
382
        # sur le graphe 'graph1' pour l'utilisateur 'poweruser'
383
        response = self.app.post(
384
            '/rpc/searchHostAndGraph', {
385
                'search_form_host': host1.name,
386
                'search_form_graph': graph1.name,
387
            }, extra_environ={'REMOTE_USER': 'poweruser'})
388
        json = response.json
389

    
390
        # On s'assure que la liste retournée est conforme à celle attendue
391
        self.assertEqual(
392
            json, {
393
                'labels': [[host1.name, graph1.name]],
394
                'ids': [[host1.idhost, graph1.idgraph]],
395
                'more': False,
396
            }
397
        )
398

    
399
        # Récupération des résultats obtenus après une recherche
400
        # sur le graphe 'graph2' pour l'utilisateur 'poweruser'
401
        response = self.app.post(
402
            '/rpc/searchHostAndGraph', {
403
                'search_form_host': host2.name,
404
                'search_form_graph': graph2.name,
405
            }, extra_environ={'REMOTE_USER': 'poweruser'})
406
        json = response.json
407

    
408
        # On s'assure que la liste retournée
409
        # est conforme à celle attendue
410
        self.assertEqual(
411
            json, {
412
                'labels': [[host2.name, graph2.name]],
413
                'ids': [[host2.idhost, graph2.idgraph]],
414
                'more': False,
415
            }
416
        )
417

    
418
        # Récupération des résultats obtenus après une recherche
419
        # sur le graphe 'graph2' pour l'utilisateur 'user'
420
        response = self.app.post(
421
            '/rpc/searchHostAndGraph', {
422
                'search_form_host': host2.name,
423
                'search_form_graph': graph2.name,
424
            }, extra_environ={'REMOTE_USER': 'user'})
425
        json = response.json
426

    
427
        # On s'assure que la liste retournée
428
        # est conforme à celle attendue
429
        self.assertEqual(
430
            json, {
431
                'labels': [[host2.name, graph2.name]],
432
                'ids': [[host2.idhost, graph2.idgraph]],
433
                'more': False,
434
            }
435
        )
436

    
437
    def test_select_graph_when_not_allowed(self):
438
        """
439
        Résultats de la recherche sur un graphe sans les droits
440
        """
441

    
442
        # Récupération de l'hôte 'host1' dans la base de données
443
        host1 = DBSession.query(Host).filter(
444
            Host.name == u'host1 éà').first()
445

    
446
        # Récupération de l'hôte 'host3' dans la base de données
447
        host3 = DBSession.query(Host).filter(
448
            Host.name == u'host3 éà').first()
449

    
450
        # Récupération du graphe 'graph1' dans la base de données
451
        graph1 = DBSession.query(Graph).filter(
452
            Graph.name == u'graph1 éà').first()
453

    
454
        # Récupération du graphe 'graph3' dans la base de données
455
        graph3 = DBSession.query(Graph).filter(
456
            Graph.name == u'graph3 éà').first()
457

    
458
        # Récupération des résultats obtenus après une recherche
459
        # sur le graphe 'graph1' pour l'utilisateur 'user'
460
        response = self.app.post(
461
            '/rpc/searchHostAndGraph', {
462
                'search_form_host': host1.name,
463
                'search_form_graph': graph1.name,
464
            }, extra_environ={'REMOTE_USER': 'user'})
465
        json = response.json
466

    
467
        # On s'assure que la liste retournée est vide
468
        self.assertEqual(
469
            json, {
470
                'labels': [],
471
                'ids': [],
472
                'more': False,
473
            }
474
        )
475

    
476
        # Récupération des résultats obtenus après une recherche
477
        # sur le graphe 'graph3' pour l'utilisateur 'user'
478
        response = self.app.post(
479
            '/rpc/searchHostAndGraph', {
480
                'search_form_host': host3.name,
481
                'search_form_graph': graph3.name,
482
            }, extra_environ={'REMOTE_USER': 'user'})
483
        json = response.json
484

    
485
        # On s'assure que la liste retournée est vide
486
        self.assertEqual(
487
            json, {
488
                'labels': [],
489
                'ids': [],
490
                'more': False,
491
            }
492
        )
493

    
494
        # Récupération des résultats obtenus après une recherche
495
        # sur le graphe 'graph1' pour l'utilisateur 'visitor'
496
        response = self.app.post(
497
            '/rpc/searchHostAndGraph', {
498
                'search_form_host': host1.name,
499
                'search_form_graph': graph1.name,
500
            }, extra_environ={'REMOTE_USER': 'visitor'})
501
        json = response.json
502

    
503
        # On s'assure que la liste retournée est vide
504
        self.assertEqual(
505
            json, {
506
                'labels': [],
507
                'ids': [],
508
                'more': False,
509
            }
510
        )
511

    
512
        # Récupération des résultats obtenus après une recherche
513
        # sur le graphe 'graph3' pour l'utilisateur 'visitor'
514
        response = self.app.post(
515
            '/rpc/searchHostAndGraph', {
516
                'search_form_host': host3.name,
517
                'search_form_graph': graph3.name,
518
            }, extra_environ={'REMOTE_USER': 'visitor'})
519
        json = response.json
520

    
521
        # On s'assure que la liste retournée est vide
522
        self.assertEqual(
523
            json, {
524
                'labels': [],
525
                'ids': [],
526
                'more': False,
527
            }
528
        )
529

    
530
    def test_select_graph_as_anonymous(self):
531
        """
532
        Résultats de la recherche sur un graphe en tant qu'anonyme
533
        """
534

    
535
        # Récupération de l'hôte 'host1' dans la base de données
536
        host1 = DBSession.query(Host).filter(
537
            Host.name == u'host1 éà').first()
538

    
539
        # Récupération du graphe 'graph1' dans la base de données
540
        graph1 = DBSession.query(Graph).filter(
541
            Graph.name == u'graph1 éà').first()
542

    
543
        # Récupération des résultats obtenus après une recherche
544
        # sur le graphe 'graph1' pour un utilisateur anonyme :
545
        # le contrôleur doit retourner une erreur 401
546
        self.app.post(
547
            '/rpc/searchHostAndGraph', {
548
                'search_form_host': host1.name,
549
                'search_form_graph': graph1.name,
550
            }, status=401)
551

    
552
    def test_select_inexisting_graph(self):
553
        """
554
        Résultats de la recherche sur un graphe inexistant
555
        """
556

    
557
        # Récupération de l'hôte 'host1' dans la base de données
558
        host1 = DBSession.query(Host).filter(
559
            Host.name == u'host1 éà').first()
560

    
561
        # Récupération des résultats obtenus après une recherche
562
        # sur un graphe inexistant pour l'utilisateur 'manager'
563
        response = self.app.post(
564
            '/rpc/searchHostAndGraph', {
565
                'search_form_host': host1.name,
566
                'search_form_graph': 'graphe_totalement_inexistant',
567
            }, extra_environ={'REMOTE_USER': 'manager'}
568
        )
569
        json = response.json
570

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