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 |
) |