Revision cfed65e0
Meilleure gestion des encodages dans VigiGraph
- Utilisation de caractères accentués dans plusieurs tests pour mettre
en évidence les éventuels problèmes liés à des conversions explicites
ou implicites de/vers Unicode.
- Correction des templates de VigiGraph pour gérer correctement les
caractères accentués.
- Ajout d'un pseudo-décorateur de pagination utilisant la même API que
pour les autres (pseudo-)décorateurs de !TurboGears (nécessaire à
cause d'un conflit entre le (vrai) décorateur "paginate" de
!TurboGears et le pseudo-décorateur "validate".
Voir ticket 2302 dans le trac de !TurboGears.
- Utilisation de ce décorateur pour valider correctement les paramètres
passés à la méthode searchHost du contrôleur rpc de VigiGraph.
Change-Id: I209700c586943ba6b60a4f4f68940b33617c77ba
Reviewed-on: https://vigilo-dev.si.c-s.fr/review/272
Tested-by: Build system <qa@vigilo-dev.si.c-s.fr>
Reviewed-by: Aurelien BOMPARD <aurelien.bompard@c-s.fr>
vigigraph/controllers/rpc.py | ||
---|---|---|
17 | 17 |
from webob.exc import HTTPPreconditionFailed |
18 | 18 |
from tg import expose, request, redirect, tmpl_context, \ |
19 | 19 |
config, validate, flash, exceptions as http_exc |
20 |
from tg.decorators import paginate |
|
21 | 20 |
|
22 | 21 |
from repoze.what.predicates import not_anonymous, has_permission, \ |
23 | 22 |
in_group, Any, All |
24 |
from formencode import validators, schema |
|
23 |
from formencode import schema |
|
24 |
from tw.forms import validators |
|
25 | 25 |
from sqlalchemy import or_ |
26 | 26 |
from sqlalchemy.sql.expression import literal_column |
27 | 27 |
from sqlalchemy.orm import aliased, lazyload |
... | ... | |
29 | 29 |
from vigilo.turbogears.controllers import BaseController |
30 | 30 |
from vigilo.turbogears.helpers import get_current_user |
31 | 31 |
from vigilo.turbogears.controllers.proxy import get_through_proxy |
32 |
from vigilo.turbogears.decorators import paginate |
|
32 | 33 |
|
33 | 34 |
from vigilo.models.session import DBSession |
34 | 35 |
from vigilo.models.tables import Host, SupItemGroup, PerfDataSource |
... | ... | |
87 | 88 |
|
88 | 89 |
class SearchHostAndGraphSchema(schema.Schema): |
89 | 90 |
"""Schéma de validation pour la méthode L{searchHostAndGraph}.""" |
90 |
search_form_host = validators.String(if_missing=None) |
|
91 |
search_form_graph = validators.String(if_missing=None) |
|
91 |
search_form_host = validators.UnicodeString(if_missing=None)
|
|
92 |
search_form_graph = validators.UnicodeString(if_missing=None)
|
|
92 | 93 |
|
93 | 94 |
# @TODO définir un error_handler différent pour remonter l'erreur via JS. |
94 | 95 |
@validate( |
... | ... | |
260 | 261 |
|
261 | 262 |
class GetIndicatorsSchema(schema.Schema): |
262 | 263 |
"""Schéma de validation pour la méthode L{getIndicators}.""" |
263 |
host = validators.String(not_empty=True) |
|
264 |
graph = validators.String(not_empty=True) |
|
265 |
nocache = validators.String(if_missing=None) |
|
264 |
host = validators.UnicodeString(not_empty=True)
|
|
265 |
graph = validators.UnicodeString(not_empty=True)
|
|
266 |
nocache = validators.UnicodeString(if_missing=None)
|
|
266 | 267 |
|
267 | 268 |
# @TODO définir un error_handler différent pour remonter l'erreur via JS. |
268 | 269 |
@validate( |
... | ... | |
286 | 287 |
|
287 | 288 |
class StartTimeSchema(schema.Schema): |
288 | 289 |
"""Schéma de validation pour la méthode L{getIndicators}.""" |
289 |
host = validators.String(not_empty=True) |
|
290 |
nocache = validators.String(if_missing=None) |
|
290 |
host = validators.UnicodeString(not_empty=True)
|
|
291 |
nocache = validators.UnicodeString(if_missing=None)
|
|
291 | 292 |
|
292 | 293 |
# @TODO définir un error_handler différent pour remonter l'erreur via JS. |
293 | 294 |
@validate( |
... | ... | |
306 | 307 |
|
307 | 308 |
class FullHostPageSchema(schema.Schema): |
308 | 309 |
"""Schéma de validation pour la méthode L{fullHostPage}.""" |
309 |
host = validators.String(not_empty=True) |
|
310 |
host = validators.UnicodeString(not_empty=True)
|
|
310 | 311 |
start = validators.Int(if_missing=None) |
311 | 312 |
duration = validators.Int(if_missing=86400) |
312 | 313 |
|
... | ... | |
335 | 336 |
@return: page avec les images des graphes et boutons de deplacement dans le temps |
336 | 337 |
@rtype: page html |
337 | 338 |
""" |
338 |
|
|
339 | 339 |
if start is None: |
340 | 340 |
start = int(time.time()) - int(duration) |
341 | 341 |
else: |
... | ... | |
352 | 352 |
if not is_manager: |
353 | 353 |
# Récupération des groupes auxquels l'utilisateur a accès. |
354 | 354 |
supitemgroups = [sig[0] for sig in user.supitemgroups() if sig[1]] |
355 |
|
|
356 |
# On vérifie que l'hôte en question existe bel et bien. |
|
357 |
host_obj = Host.by_host_name(host) |
|
358 |
if not host_obj: |
|
359 |
message = _('No such host "%s"') % host |
|
360 |
LOGGER.warning(message) |
|
361 |
raise http_exc.HTTPNotFound(message) |
|
362 |
|
|
355 | 363 |
# Récupération des groupes dont l'hôte fait partie |
356 |
hostgroups = [g.idgroup for g in Host.by_host_name(host).groups]
|
|
364 |
hostgroups = [g.idgroup for g in host_obj.groups]
|
|
357 | 365 |
# Si aucun des groupes de l'hôte ne fait partie des groupes |
358 | 366 |
# auxquels l'utilisateur a accès, on affiche une erreur 403. |
359 | 367 |
if len(set(hostgroups).intersection(set(supitemgroups))) < 1: |
... | ... | |
374 | 382 |
).filter(Host.name == host) |
375 | 383 |
|
376 | 384 |
graphs = graphs.all() |
377 |
|
|
378 | 385 |
return dict(host=host, start=start, duration=duration, |
379 | 386 |
presets=self.presets, graphs=graphs) |
380 | 387 |
|
381 | 388 |
|
389 |
class SearchHostSchema(schema.Schema): |
|
390 |
"""Schéma de validation pour la méthode L{getIndicators}.""" |
|
391 |
allow_extra_fields = True |
|
392 |
filter_extra_fields = True |
|
393 |
query = validators.UnicodeString(not_empty=True) |
|
394 |
|
|
382 | 395 |
@expose('searchhost.html') |
396 |
@validate( |
|
397 |
validators = SearchHostSchema(), |
|
398 |
error_handler = process_form_errors) |
|
383 | 399 |
@paginate('hosts', items_per_page=10) |
384 |
def searchHost(self, *args, **kwargs):
|
|
400 |
def searchHost(self, query):
|
|
385 | 401 |
""" |
386 | 402 |
Affiche les résultats de la recherche par nom d'hôte. |
387 | 403 |
La requête de recherche (C{query}) correspond à un préfixe |
... | ... | |
392 | 408 |
@keyword query: Prefixe de recherche sur les noms d'hôtes |
393 | 409 |
@type query: C{unicode} |
394 | 410 |
""" |
395 |
query = kwargs.get('query') |
|
396 | 411 |
if not query: |
397 | 412 |
redirect("searchHostForm") |
413 |
return |
|
398 | 414 |
|
399 | 415 |
query = sql_escape_like(query.strip()) |
400 | 416 |
user = get_current_user() |
... | ... | |
409 | 425 |
(SUPITEM_GROUP_TABLE, SUPITEM_GROUP_TABLE.c.idsupitem == \ |
410 | 426 |
Host.idhost), |
411 | 427 |
).filter(Host.name.like(query + u'%') |
412 |
).order_by( |
|
413 |
Host.name.asc(), |
|
414 |
) |
|
428 |
).order_by(Host.name.asc(),) |
|
415 | 429 |
|
416 | 430 |
# Les managers ont accès à tout. |
417 | 431 |
# Les autres ont un accès restreint. |
... | ... | |
423 | 437 |
SUPITEM_GROUP_TABLE.c.idgroup) |
424 | 438 |
).filter(GroupHierarchy.idparent.in_(supitemgroups)) |
425 | 439 |
|
426 |
return dict(hosts=hosts)
|
|
440 |
return dict(hosts=[h.name for h in hosts])
|
|
427 | 441 |
|
428 | 442 |
# VIGILO_EXIG_VIGILO_PERF_0030:Moteur de recherche des graphes |
429 | 443 |
@expose('getopensearch.xml', content_type='text/xml') |
vigigraph/tests/functional/helpers.py | ||
---|---|---|
57 | 57 |
hostgroup2 = add_supitemgroup(u'hg2', mainhostgroup) |
58 | 58 |
|
59 | 59 |
# Ajout de trois hôtes |
60 |
host1 = add_host(u'host1') |
|
61 |
host2 = add_host(u'host2') |
|
62 |
host3 = add_host(u'host3') |
|
60 |
# On ajoute des caractères spéciaux pour détecter les |
|
61 |
# conversions implicites Unicode <-> ASCII (et leurs erreurs). |
|
62 |
host1 = add_host(u'host1 éà') |
|
63 |
host2 = add_host(u'host2 éà') |
|
64 |
host3 = add_host(u'host3 éà') |
|
63 | 65 |
|
64 | 66 |
# Ajout du premier hôte dans le groupe d'hôtes principal. |
65 | 67 |
add_host2group(host1, mainhostgroup) |
... | ... | |
119 | 121 |
add_application(u"vigirrd") |
120 | 122 |
|
121 | 123 |
# Ajout de trois graphes |
122 |
graph1 = add_graph("graph1") |
|
123 |
graph2 = add_graph("graph2") |
|
124 |
graph3 = add_graph("graph3") |
|
124 |
# On ajoute des caractères spéciaux pour détecter les |
|
125 |
# conversions implicites Unicode <-> ASCII (et leurs erreurs). |
|
126 |
graph1 = add_graph(u"graph1 éà") |
|
127 |
graph2 = add_graph(u"graph2 éà") |
|
128 |
graph3 = add_graph(u"graph3 éà") |
|
125 | 129 |
|
126 | 130 |
# Ajout d'une perfdatasource pour chaque hôte |
127 | 131 |
datasource1 = add_perfdatasource( |
vigigraph/tests/functional/test_fullhostpage.py | ||
---|---|---|
7 | 7 |
permettant d'afficher tous les graphes |
8 | 8 |
associés à un hôte. |
9 | 9 |
""" |
10 |
import transaction |
|
10 |
import transaction, urllib2
|
|
11 | 11 |
|
12 | 12 |
from vigigraph.tests import TestController |
13 | 13 |
from vigilo.models.session import DBSession |
14 | 14 |
from vigilo.models.tables import Host, SupItemGroup, Graph, GraphGroup |
15 |
|
|
16 |
from vigigraph.tests.functional.test_host_selection_form import populateDB |
|
17 |
from vigigraph.tests.functional.test_graph_selection_form import addGraphs |
|
15 |
from helpers import populateDB, addGraphs |
|
18 | 16 |
|
19 | 17 |
|
20 | 18 |
class TestFullHostPage(TestController): |
... | ... | |
42 | 40 |
for host in hosts: |
43 | 41 |
if hosts[host]: |
44 | 42 |
response = self.app.get( |
45 |
'/rpc/fullHostPage?host=%s' % host, |
|
43 |
'/rpc/fullHostPage?host=%s' % |
|
44 |
urllib2.quote(host.encode('utf-8')), |
|
46 | 45 |
extra_environ={"REMOTE_USER": user} |
47 | 46 |
) |
48 |
index = int(host[-1:])
|
|
47 |
index = int(host[4])
|
|
49 | 48 |
self.assertTrue( |
50 |
'/vigirrd/host%d/index?' |
|
51 |
'graphtemplate=graph%d' % (index, index) |
|
52 |
in response.body |
|
49 |
'/vigirrd/%s/index?graphtemplate=%s' % ( |
|
50 |
urllib2.quote((u'host%d éà' % index).encode('utf-8')), |
|
51 |
urllib2.quote((u'graph%d éà' % index).encode('utf-8')), |
|
52 |
) in response.unicode_body |
|
53 | 53 |
) |
54 | 54 |
else: |
55 | 55 |
response = self.app.get( |
56 |
'/rpc/fullHostPage?host=%s' % host, |
|
56 |
'/rpc/fullHostPage?host=%s' % |
|
57 |
urllib2.quote(host.encode('utf-8')), |
|
57 | 58 |
extra_environ={"REMOTE_USER": user}, |
58 | 59 |
status = 403 |
59 | 60 |
) |
... | ... | |
61 | 62 |
def test_direct_permission(self): |
62 | 63 |
"""Accès à rpc/fullHostPage avec permission sur le groupe""" |
63 | 64 |
hosts = { |
64 |
'host1': False,
|
|
65 |
'host2': True,
|
|
66 |
'host3': False,
|
|
65 |
u'host1 éà': False,
|
|
66 |
u'host2 éà': True,
|
|
67 |
u'host3 éà': False,
|
|
67 | 68 |
} |
68 | 69 |
self._check_results('user', hosts) |
69 | 70 |
|
70 | 71 |
def test_permission_on_parent(self): |
71 | 72 |
"""Accès à rpc/fullHostPage avec permission sur le parent du groupe""" |
72 | 73 |
hosts = { |
73 |
'host1': True,
|
|
74 |
'host2': True,
|
|
75 |
'host3': True,
|
|
74 |
u'host1 éà': True,
|
|
75 |
u'host2 éà': True,
|
|
76 |
u'host3 éà': True,
|
|
76 | 77 |
} |
77 | 78 |
self._check_results('poweruser', hosts) |
78 | 79 |
|
79 | 80 |
def test_no_permission(self): |
80 | 81 |
"""Accès à rpc/fullHostPage sans permissions""" |
81 | 82 |
hosts = { |
82 |
'host1': False,
|
|
83 |
'host2': False,
|
|
84 |
'host3': False,
|
|
83 |
u'host1 éà': False,
|
|
84 |
u'host2 éà': False,
|
|
85 |
u'host3 éà': False,
|
|
85 | 86 |
} |
86 | 87 |
self._check_results('visitor', hosts) |
87 | 88 |
|
88 | 89 |
def test_anonymous(self): |
89 | 90 |
"""Accès à rpc/fullHostPage en anonyme""" |
90 |
for host in ('host1', 'host2', 'host3'):
|
|
91 |
for host in (u'host1 éà', u'host2 éà', u'host3 éà'):
|
|
91 | 92 |
response = self.app.get( |
92 |
'/rpc/fullHostPage?host=%s' % host, |
|
93 |
'/rpc/fullHostPage?host=%s' % |
|
94 |
urllib2.quote(host.encode('utf-8'), ''), |
|
93 | 95 |
status=401 |
94 | 96 |
) |
95 | 97 |
|
96 | 98 |
def test_managers(self): |
97 | 99 |
"""Accès à rpc/fullHostPage depuis le compte manager""" |
98 | 100 |
hosts = { |
99 |
'host1': True,
|
|
100 |
'host2': True,
|
|
101 |
'host3': True,
|
|
101 |
u'host1 éà': True,
|
|
102 |
u'host2 éà': True,
|
|
103 |
u'host3 éà': True,
|
|
102 | 104 |
} |
103 | 105 |
self._check_results('manager', hosts) |
vigigraph/tests/functional/test_graph_selection_form.py | ||
---|---|---|
44 | 44 |
|
45 | 45 |
# Récupération de l'hôte 'host1' dans la base de données |
46 | 46 |
host1 = DBSession.query(Host).filter( |
47 |
Host.name == u'host1').first() |
|
47 |
Host.name == u'host1 éà').first()
|
|
48 | 48 |
|
49 | 49 |
# Récupération de l'hôte 'host2' dans la base de données |
50 | 50 |
host2 = DBSession.query(Host).filter( |
51 |
Host.name == u'host2').first() |
|
51 |
Host.name == u'host2 éà').first()
|
|
52 | 52 |
|
53 | 53 |
# Récupération de l'hôte 'host3' dans la base de données |
54 | 54 |
host3 = DBSession.query(Host).filter( |
55 |
Host.name == u'host3').first() |
|
55 |
Host.name == u'host3 éà').first()
|
|
56 | 56 |
|
57 | 57 |
# Récupération du groupe de graphes |
58 | 58 |
# 'graphgroup1' dans la base de données |
... | ... | |
184 | 184 |
|
185 | 185 |
# Récupération de l'hôte 'host1' dans la base de données |
186 | 186 |
host1 = DBSession.query(Host).filter( |
187 |
Host.name == u'host1').first() |
|
187 |
Host.name == u'host1 éà').first()
|
|
188 | 188 |
|
189 | 189 |
# Récupération de l'hôte 'host3' dans la base de données |
190 | 190 |
host3 = DBSession.query(Host).filter( |
191 |
Host.name == u'host3').first() |
|
191 |
Host.name == u'host3 éà').first()
|
|
192 | 192 |
|
193 | 193 |
# Récupération des groupes de graphes de l'hôte |
194 | 194 |
# host1 accessibles à l'utilisateur 'user' |
... | ... | |
245 | 245 |
|
246 | 246 |
# Récupération de l'hôte 'host1' dans la base de données |
247 | 247 |
host1 = DBSession.query(Host).filter( |
248 |
Host.name == u'host1').first() |
|
248 |
Host.name == u'host1 éà').first()
|
|
249 | 249 |
|
250 | 250 |
# Récupération des groupes de graphes de l'hôte |
251 | 251 |
# 'host1' par un utilisateur anonyme : le contrôleur |
... | ... | |
284 | 284 |
|
285 | 285 |
# Récupération de l'hôte 'host1' dans la base de données |
286 | 286 |
host1 = DBSession.query(Host).filter( |
287 |
Host.name == u'host1').first() |
|
287 |
Host.name == u'host1 éà').first()
|
|
288 | 288 |
|
289 | 289 |
# Récupération de l'hôte 'host2' dans la base de données |
290 | 290 |
host2 = DBSession.query(Host).filter( |
291 |
Host.name == u'host2').first() |
|
291 |
Host.name == u'host2 éà').first()
|
|
292 | 292 |
|
293 | 293 |
# Récupération de l'hôte 'host3' dans la base de données |
294 | 294 |
host3 = DBSession.query(Host).filter( |
295 |
Host.name == u'host3').first() |
|
295 |
Host.name == u'host3 éà').first()
|
|
296 | 296 |
|
297 | 297 |
# Récupération du groupe de graphes |
298 | 298 |
# 'graphgroup1' dans la base de données |
... | ... | |
312 | 312 |
# Récupération du graphe 'graph1' |
313 | 313 |
# dans la base de données |
314 | 314 |
graph1 = DBSession.query(Graph).filter( |
315 |
Graph.name == u'graph1').first() |
|
315 |
Graph.name == u'graph1 éà').first()
|
|
316 | 316 |
|
317 | 317 |
# Récupération du graphe 'graph2' |
318 | 318 |
# dans la base de données |
319 | 319 |
graph2 = DBSession.query(Graph).filter( |
320 |
Graph.name == u'graph2').first() |
|
320 |
Graph.name == u'graph2 éà').first()
|
|
321 | 321 |
|
322 | 322 |
# Récupération du graphe 'graph3' |
323 | 323 |
# dans la base de données |
324 | 324 |
graph3 = DBSession.query(Graph).filter( |
325 |
Graph.name == u'graph3').first() |
|
325 |
Graph.name == u'graph3 éà').first()
|
|
326 | 326 |
|
327 | 327 |
# Récupération des graphes du groupe de graphes |
328 | 328 |
# 'graphgroup1' accessibles à l'utilisateur 'manager' |
... | ... | |
445 | 445 |
|
446 | 446 |
# Récupération de l'hôte 'host1' dans la base de données |
447 | 447 |
host1 = DBSession.query(Host).filter( |
448 |
Host.name == u'host1').first() |
|
448 |
Host.name == u'host1 éà').first()
|
|
449 | 449 |
|
450 | 450 |
# Récupération de l'hôte 'host3' dans la base de données |
451 | 451 |
host3 = DBSession.query(Host).filter( |
452 |
Host.name == u'host3').first() |
|
452 |
Host.name == u'host3 éà').first()
|
|
453 | 453 |
|
454 | 454 |
# Récupération du groupe de graphes |
455 | 455 |
# 'graphgroup1' dans la base de données |
... | ... | |
519 | 519 |
|
520 | 520 |
# Récupération de l'hôte 'host1' dans la base de données |
521 | 521 |
host1 = DBSession.query(Host).filter( |
522 |
Host.name == u'host1').first() |
|
522 |
Host.name == u'host1 éà').first()
|
|
523 | 523 |
|
524 | 524 |
# Récupération du groupe de graphes |
525 | 525 |
# 'graphgroup1' dans la base de données |
vigigraph/tests/functional/test_host_selection_form.py | ||
---|---|---|
178 | 178 |
|
179 | 179 |
# Récupération de l'hôte 'host1' dans la base de données |
180 | 180 |
host1 = DBSession.query(Host).filter( |
181 |
Host.name == u'host1').first() |
|
181 |
Host.name == u'host1 éà').first()
|
|
182 | 182 |
|
183 | 183 |
# Récupération des groupes d'hôtes |
184 | 184 |
# accessibles à l'utilisateur 'manager' |
... | ... | |
333 | 333 |
|
334 | 334 |
# Récupération de l'hôte 'host1' dans la base de données |
335 | 335 |
host1 = DBSession.query(Host).filter( |
336 |
Host.name == u'host1').first() |
|
336 |
Host.name == u'host1 éà').first()
|
|
337 | 337 |
|
338 | 338 |
# Récupération de l'hôte 'host2' dans la base de données |
339 | 339 |
host2 = DBSession.query(Host).filter( |
340 |
Host.name == u'host2').first() |
|
340 |
Host.name == u'host2 éà').first()
|
|
341 | 341 |
|
342 | 342 |
# Récupération des hôtes du groupe 'mhg' |
343 | 343 |
# accessibles à l'utilisateur 'manager' |
vigigraph/tests/functional/test_opensearch.py | ||
---|---|---|
6 | 6 |
Teste l'utilisation du module de recherche |
7 | 7 |
OpenSearch intégré au navigateur. |
8 | 8 |
""" |
9 |
import transaction |
|
9 |
import transaction, urllib2
|
|
10 | 10 |
|
11 | 11 |
from vigigraph.tests import TestController |
12 | 12 |
from vigilo.models.session import DBSession |
13 | 13 |
from vigilo.models.tables import Host, SupItemGroup, Graph, GraphGroup |
14 |
|
|
15 |
from vigigraph.tests.functional.test_host_selection_form import populateDB |
|
16 |
from vigigraph.tests.functional.test_graph_selection_form import addGraphs |
|
14 |
from helpers import populateDB, addGraphs |
|
17 | 15 |
|
18 | 16 |
|
19 | 17 |
class TestOpenSearch(TestController): |
... | ... | |
42 | 40 |
'/rpc/searchHost?query=host*', |
43 | 41 |
extra_environ={"REMOTE_USER": user} |
44 | 42 |
) |
43 |
print repr(response.body) |
|
45 | 44 |
for host in hosts: |
46 | 45 |
if hosts[host]: |
47 | 46 |
self.assertTrue( |
48 |
'/rpc/fullHostPage?host=%s' % host |
|
49 |
in response.body |
|
47 |
u'/rpc/fullHostPage?host=%s' % |
|
48 |
urllib2.quote(host.encode('utf-8')) |
|
49 |
in response.unicode_body |
|
50 | 50 |
) |
51 | 51 |
else: |
52 | 52 |
self.assertTrue( |
53 |
'/rpc/fullHostPage?host=%s' % host |
|
54 |
not in response.body |
|
53 |
u'/rpc/fullHostPage?host=%s' % |
|
54 |
urllib2.quote(host.encode('utf-8')) |
|
55 |
not in response.unicode_body |
|
55 | 56 |
) |
56 | 57 |
|
57 | 58 |
def test_direct_permission(self): |
58 | 59 |
"""OpenSearch avec permission sur le groupe""" |
59 | 60 |
hosts = { |
60 |
'host1': False,
|
|
61 |
'host2': True,
|
|
62 |
'host3': False,
|
|
61 |
u'host1 éà': False,
|
|
62 |
u'host2 éà': True,
|
|
63 |
u'host3 éà': False,
|
|
63 | 64 |
} |
64 | 65 |
self._check_results('user', hosts) |
65 | 66 |
|
66 | 67 |
def test_permission_on_parent(self): |
67 | 68 |
"""OpenSearch avec permission sur le parent du groupe""" |
68 | 69 |
hosts = { |
69 |
'host1': True,
|
|
70 |
'host2': True,
|
|
71 |
'host3': True,
|
|
70 |
u'host1 éà': True,
|
|
71 |
u'host2 éà': True,
|
|
72 |
u'host3 éà': True,
|
|
72 | 73 |
} |
73 | 74 |
self._check_results('poweruser', hosts) |
74 | 75 |
|
75 | 76 |
def test_no_permission(self): |
76 | 77 |
"""OpenSearch sans permissions""" |
77 | 78 |
hosts = { |
78 |
'host1': False,
|
|
79 |
'host2': False,
|
|
80 |
'host3': False,
|
|
79 |
u'host1 éà': False,
|
|
80 |
u'host2 éà': False,
|
|
81 |
u'host3 éà': False,
|
|
81 | 82 |
} |
82 | 83 |
self._check_results('visitor', hosts) |
83 | 84 |
|
84 | 85 |
def test_anonymous(self): |
85 | 86 |
"""OpenSearch en anonyme""" |
86 |
for host in ('host1', 'host2', 'host3'):
|
|
87 |
for host in (u'host1 éà', u'host2 éà', u'host3 éà'):
|
|
87 | 88 |
response = self.app.get( |
88 |
'/rpc/fullHostPage?host=%s' % host, |
|
89 |
'/rpc/fullHostPage?host=%s' % |
|
90 |
urllib2.quote(host.encode('utf-8'), ''), |
|
89 | 91 |
status=401 |
90 | 92 |
) |
91 | 93 |
|
92 | 94 |
def test_managers(self): |
93 | 95 |
"""OpenSearch avec le compte manager""" |
94 | 96 |
hosts = { |
95 |
'host1': True,
|
|
96 |
'host2': True,
|
|
97 |
'host3': True,
|
|
97 |
u'host1 éà': True,
|
|
98 |
u'host2 éà': True,
|
|
99 |
u'host3 éà': True,
|
|
98 | 100 |
} |
99 | 101 |
self._check_results('manager', hosts) |
vigigraph/tests/functional/test_search_form.py | ||
---|---|---|
5 | 5 |
""" |
6 | 6 |
Suite de tests du formulaire de recherche de VigiGraph. |
7 | 7 |
""" |
8 |
import transaction |
|
8 |
import transaction, urllib2
|
|
9 | 9 |
|
10 | 10 |
from vigigraph.tests import TestController |
11 | 11 |
from vigilo.models.session import DBSession |
... | ... | |
50 | 50 |
|
51 | 51 |
# Récupération de l'hôte 'host1' dans la base de données |
52 | 52 |
host1 = DBSession.query(Host).filter( |
53 |
Host.name == u'host1').first() |
|
53 |
Host.name == u'host1 éà').first()
|
|
54 | 54 |
|
55 | 55 |
# Récupération de l'hôte 'host2' dans la base de données |
56 | 56 |
host2 = DBSession.query(Host).filter( |
57 |
Host.name == u'host2').first() |
|
57 |
Host.name == u'host2 éà').first()
|
|
58 | 58 |
|
59 | 59 |
# Récupération des résultats obtenus après une recherche |
60 | 60 |
# sur l'hôte 'host1' pour l'utilisateur 'manager' |
61 | 61 |
response = self.app.post( |
62 |
'/rpc/searchHostAndGraph?search_form_host=%s' % (str(host1.name), ), { |
|
63 |
}, extra_environ={'REMOTE_USER': 'manager'}) |
|
62 |
'/rpc/searchHostAndGraph?search_form_host=%s' % |
|
63 |
urllib2.quote(host1.name.encode('utf-8'), ''), |
|
64 |
{}, |
|
65 |
extra_environ={'REMOTE_USER': 'manager'} |
|
66 |
) |
|
64 | 67 |
json = response.json |
65 | 68 |
|
66 | 69 |
# On s'assure que les deux listes retournées contiennent |
67 | 70 |
# respectivement le nom de l'hôte et son identifiant |
68 | 71 |
self.assertEqual( |
69 | 72 |
json, { |
70 |
'labels': [['host1', None]],
|
|
73 |
'labels': [[u'host1 éà', None]],
|
|
71 | 74 |
'ids': [[1, None]], |
72 | 75 |
'more': False, |
73 | 76 |
} |
... | ... | |
76 | 79 |
# Récupération des résultats obtenus après une recherche |
77 | 80 |
# sur l'hôte 'host1' pour l'utilisateur 'poweruser' |
78 | 81 |
response = self.app.post( |
79 |
'/rpc/searchHostAndGraph?search_form_host=%s' % (str(host1.name), ), { |
|
80 |
}, extra_environ={'REMOTE_USER': 'poweruser'}) |
|
82 |
'/rpc/searchHostAndGraph?search_form_host=%s' % |
|
83 |
urllib2.quote(host1.name.encode('utf-8'), ''), |
|
84 |
{}, |
|
85 |
extra_environ={'REMOTE_USER': 'poweruser'} |
|
86 |
) |
|
81 | 87 |
json = response.json |
82 | 88 |
|
83 | 89 |
# On s'assure que les deux listes retournées contiennent |
... | ... | |
93 | 99 |
# Récupération des résultats obtenus après une recherche |
94 | 100 |
# sur l'hôte 'host2' pour l'utilisateur 'poweruser' |
95 | 101 |
response = self.app.post( |
96 |
'/rpc/searchHostAndGraph?search_form_host=%s' % (str(host2.name), ), { |
|
97 |
}, extra_environ={'REMOTE_USER': 'poweruser'}) |
|
102 |
'/rpc/searchHostAndGraph?search_form_host=%s' % |
|
103 |
urllib2.quote(host2.name.encode('utf-8'), ''), |
|
104 |
{}, |
|
105 |
extra_environ={'REMOTE_USER': 'poweruser'} |
|
106 |
) |
|
98 | 107 |
json = response.json |
99 | 108 |
|
100 | 109 |
# On s'assure que les deux listes retournées contiennent |
... | ... | |
110 | 119 |
# Récupération des résultats obtenus après une recherche |
111 | 120 |
# sur l'hôte 'host2' pour l'utilisateur 'user' |
112 | 121 |
response = self.app.post( |
113 |
'/rpc/searchHostAndGraph?search_form_host=%s' % (str(host2.name), ), { |
|
114 |
}, extra_environ={'REMOTE_USER': 'user'}) |
|
122 |
'/rpc/searchHostAndGraph?search_form_host=%s' % |
|
123 |
urllib2.quote(host2.name.encode('utf-8'), ''), |
|
124 |
{}, |
|
125 |
extra_environ={'REMOTE_USER': 'user'} |
|
126 |
) |
|
115 | 127 |
json = response.json |
116 | 128 |
|
117 | 129 |
# On s'assure que les deux listes retournées contiennent |
... | ... | |
131 | 143 |
|
132 | 144 |
# Récupération de l'hôte 'host1' dans la base de données |
133 | 145 |
host1 = DBSession.query(Host).filter( |
134 |
Host.name == u'host1').first() |
|
146 |
Host.name == u'host1 éà').first()
|
|
135 | 147 |
|
136 | 148 |
# Récupération de l'hôte 'host3' dans la base de données |
137 | 149 |
host3 = DBSession.query(Host).filter( |
138 |
Host.name == u'host3').first() |
|
150 |
Host.name == u'host3 éà').first()
|
|
139 | 151 |
|
140 | 152 |
# Récupération des résultats obtenus après une recherche |
141 | 153 |
# sur l'hôte 'host1' pour l'utilisateur 'user' |
142 | 154 |
response = self.app.post( |
143 |
'/rpc/searchHostAndGraph?search_form_host=%s' % (str(host1.name), ), { |
|
144 |
}, extra_environ={'REMOTE_USER': 'user'}) |
|
155 |
'/rpc/searchHostAndGraph?search_form_host=%s' % |
|
156 |
urllib2.quote(host1.name.encode('utf-8'), ''), |
|
157 |
{}, |
|
158 |
extra_environ={'REMOTE_USER': 'user'} |
|
159 |
) |
|
145 | 160 |
json = response.json |
146 | 161 |
|
147 | 162 |
# On s'assure que la liste retournée est vide |
... | ... | |
156 | 171 |
# Récupération des résultats obtenus après une recherche |
157 | 172 |
# sur l'hôte 'host3' pour l'utilisateur 'user' |
158 | 173 |
response = self.app.post( |
159 |
'/rpc/searchHostAndGraph?search_form_host=%s' % (str(host3.name), ), { |
|
160 |
}, extra_environ={'REMOTE_USER': 'user'}) |
|
174 |
'/rpc/searchHostAndGraph?search_form_host=%s' % |
|
175 |
urllib2.quote(host3.name.encode('utf-8'), ''), |
|
176 |
{}, |
|
177 |
extra_environ={'REMOTE_USER': 'user'} |
|
178 |
) |
|
161 | 179 |
json = response.json |
162 | 180 |
|
163 | 181 |
# On s'assure que la liste |
... | ... | |
173 | 191 |
# Récupération des résultats obtenus après une recherche |
174 | 192 |
# sur l'hôte 'host1' pour l'utilisateur 'visitor' |
175 | 193 |
response = self.app.post( |
176 |
'/rpc/searchHostAndGraph?search_form_host=%s' % (str(host1.name), ), { |
|
177 |
}, extra_environ={'REMOTE_USER': 'visitor'}) |
|
194 |
'/rpc/searchHostAndGraph?search_form_host=%s' % |
|
195 |
urllib2.quote(host1.name.encode('utf-8'), ''), |
|
196 |
{}, |
|
197 |
extra_environ={'REMOTE_USER': 'visitor'} |
|
198 |
) |
|
178 | 199 |
json = response.json |
179 | 200 |
|
180 | 201 |
# On s'assure que la liste |
... | ... | |
190 | 211 |
# Récupération des résultats obtenus après une recherche |
191 | 212 |
# sur l'hôte 'host3' pour l'utilisateur 'visitor' |
192 | 213 |
response = self.app.post( |
193 |
'/rpc/searchHostAndGraph?search_form_host=%s' % (str(host3.name), ), { |
|
194 |
}, extra_environ={'REMOTE_USER': 'visitor'}) |
|
214 |
'/rpc/searchHostAndGraph?search_form_host=%s' % |
|
215 |
urllib2.quote(host3.name.encode('utf-8'), ''), |
|
216 |
{}, |
|
217 |
extra_environ={'REMOTE_USER': 'visitor'} |
|
218 |
) |
|
195 | 219 |
json = response.json |
196 | 220 |
|
197 | 221 |
# On s'assure que la liste |
... | ... | |
211 | 235 |
|
212 | 236 |
# Récupération de l'hôte 'host1' dans la base de données |
213 | 237 |
host1 = DBSession.query(Host).filter( |
214 |
Host.name == u'host1').first() |
|
238 |
Host.name == u'host1 éà').first()
|
|
215 | 239 |
|
216 | 240 |
# Récupération des résultats obtenus après une recherche |
217 | 241 |
# sur l'hôte 'host1' pour un utilisateur anonyme : |
218 | 242 |
# le contrôleur doit retourner une erreur 401. |
219 | 243 |
self.app.post( |
220 |
'/rpc/searchHostAndGraph?' |
|
221 |
'search_form_host=%s' % (str(host1.name), ), { |
|
222 |
}, status=401) |
|
244 |
'/rpc/searchHostAndGraph?search_form_host=%s' % |
|
245 |
urllib2.quote(host1.name.encode('utf-8'), ''), |
|
246 |
{}, |
|
247 |
status=401 |
|
248 |
) |
|
223 | 249 |
|
224 | 250 |
def test_select_inexisting_host(self): |
225 | 251 |
""" |
... | ... | |
249 | 275 |
|
250 | 276 |
# Récupération de l'hôte 'host1' dans la base de données |
251 | 277 |
host1 = DBSession.query(Host).filter( |
252 |
Host.name == u'host1').first() |
|
278 |
Host.name == u'host1 éà').first()
|
|
253 | 279 |
|
254 | 280 |
# Récupération du graphe 'graph1' dans la base de données |
255 | 281 |
graph1 = DBSession.query(Graph).filter( |
256 |
Graph.name == u'graph1').first() |
|
282 |
Graph.name == u'graph1 éà').first()
|
|
257 | 283 |
|
258 | 284 |
# Récupération des résultats obtenus après une recherche sur |
259 | 285 |
# un graphe sans préciser d'hôte par l'utilisateur 'manager'. |
260 | 286 |
response = self.app.post( |
261 |
'/rpc/searchHostAndGraph?search_form_graph=%s' % (str(graph1.name), ), { |
|
262 |
}, extra_environ={'REMOTE_USER': 'manager'}) |
|
287 |
'/rpc/searchHostAndGraph?search_form_graph=%s' % |
|
288 |
urllib2.quote(graph1.name.encode('utf-8'), ''), |
|
289 |
{}, |
|
290 |
extra_environ={'REMOTE_USER': 'manager'} |
|
291 |
) |
|
263 | 292 |
json = response.json |
264 | 293 |
|
265 | 294 |
# On s'assure que la liste retournée est conforme à celle attendue |
266 | 295 |
self.assertEqual( |
267 | 296 |
json, { |
268 |
'labels': [[str(host1.name), str(graph1.name)]],
|
|
297 |
'labels': [[host1.name, graph1.name]],
|
|
269 | 298 |
'ids': [[host1.idhost, graph1.idgraph]], |
270 | 299 |
'more': False, |
271 | 300 |
} |
... | ... | |
278 | 307 |
|
279 | 308 |
# Récupération du graphe 'graph1' dans la base de données |
280 | 309 |
graph1 = DBSession.query(Graph).filter( |
281 |
Graph.name == u'graph1').first() |
|
310 |
Graph.name == u'graph1 éà').first()
|
|
282 | 311 |
|
283 | 312 |
# On s'assure qu'une liste vide est retournée lorsque |
284 | 313 |
# l'on recherche un graphe en précisant un hôte erroné. |
285 | 314 |
response = self.app.post( |
286 |
'/rpc/searchHostAndGraph?search_form_host=%s' % (str(graph1.name), ), { |
|
287 |
}, extra_environ={'REMOTE_USER': 'manager'}) |
|
315 |
'/rpc/searchHostAndGraph?search_form_host=%s' % |
|
316 |
urllib2.quote(graph1.name.encode('utf-8'), ''), |
|
317 |
{}, |
|
318 |
extra_environ={'REMOTE_USER': 'manager'} |
|
319 |
) |
|
288 | 320 |
json = response.json |
289 | 321 |
|
290 | 322 |
# On s'assure que la liste retournée est vide |
... | ... | |
311 | 343 |
|
312 | 344 |
# Récupération de l'hôte 'host1' dans la base de données |
313 | 345 |
host1 = DBSession.query(Host).filter( |
314 |
Host.name == u'host1').first() |
|
346 |
Host.name == u'host1 éà').first()
|
|
315 | 347 |
|
316 | 348 |
# Récupération de l'hôte 'host2' dans la base de données |
317 | 349 |
host2 = DBSession.query(Host).filter( |
318 |
Host.name == u'host2').first() |
|
350 |
Host.name == u'host2 éà').first()
|
|
319 | 351 |
|
320 | 352 |
# Récupération du groupe de graphes |
321 | 353 |
# 'graphgroup1' dans la base de données |
... | ... | |
329 | 361 |
|
330 | 362 |
# Récupération du graphe 'graph1' dans la base de données |
331 | 363 |
graph1 = DBSession.query(Graph).filter( |
332 |
Graph.name == u'graph1').first() |
|
364 |
Graph.name == u'graph1 éà').first()
|
|
333 | 365 |
|
334 | 366 |
# Récupération du graphe 'graph2' dans la base de données |
335 | 367 |
graph2 = DBSession.query(Graph).filter( |
336 |
Graph.name == u'graph2').first() |
|
368 |
Graph.name == u'graph2 éà').first()
|
|
337 | 369 |
|
338 | 370 |
# Récupération des résultats obtenus après une recherche |
339 | 371 |
# sur le graphe 'graph1' pour l'utilisateur 'manager' |
340 | 372 |
response = self.app.post( |
341 |
'/rpc/searchHostAndGraph?search_form_host=%s&search_form_graph=%s' % |
|
342 |
(str(host1.name), str(graph1.name)), { |
|
343 |
}, extra_environ={'REMOTE_USER': 'manager'}) |
|
373 |
'/rpc/searchHostAndGraph?search_form_host=%s&search_form_graph=%s' % ( |
|
374 |
urllib2.quote(host1.name.encode('utf-8'), ''), |
|
375 |
urllib2.quote(graph1.name.encode('utf-8'), ''), |
|
376 |
), {}, extra_environ={'REMOTE_USER': 'manager'}) |
|
344 | 377 |
json = response.json |
345 | 378 |
|
346 | 379 |
# On s'assure que la liste retournée |
... | ... | |
356 | 389 |
# Récupération des résultats obtenus après une recherche |
357 | 390 |
# sur le graphe 'graph1' pour l'utilisateur 'poweruser' |
358 | 391 |
response = self.app.post( |
359 |
'/rpc/searchHostAndGraph?search_form_host=%s&search_form_graph=%s' % |
|
360 |
(str(host1.name), str(graph1.name)), { |
|
361 |
}, extra_environ={'REMOTE_USER': 'poweruser'}) |
|
392 |
'/rpc/searchHostAndGraph?search_form_host=%s&' \ |
|
393 |
'search_form_graph=%s' % ( |
|
394 |
urllib2.quote(host1.name.encode('utf-8'), ''), |
|
395 |
urllib2.quote(graph1.name.encode('utf-8'), ''), |
|
396 |
), {}, extra_environ={'REMOTE_USER': 'poweruser'}) |
|
362 | 397 |
json = response.json |
363 | 398 |
|
364 | 399 |
# On s'assure que la liste retournée est conforme à celle attendue |
... | ... | |
373 | 408 |
# Récupération des résultats obtenus après une recherche |
374 | 409 |
# sur le graphe 'graph2' pour l'utilisateur 'poweruser' |
375 | 410 |
response = self.app.post( |
376 |
'/rpc/searchHostAndGraph?search_form_host=%s&search_form_graph=%s' % |
|
377 |
(str(host2.name), str(graph2.name)), { |
|
378 |
}, extra_environ={'REMOTE_USER': 'poweruser'}) |
|
411 |
'/rpc/searchHostAndGraph?search_form_host=%s&' \ |
|
412 |
'search_form_graph=%s' % ( |
|
413 |
urllib2.quote(host2.name.encode('utf-8'), ''), |
|
414 |
urllib2.quote(graph2.name.encode('utf-8'), ''), |
|
415 |
), {}, extra_environ={'REMOTE_USER': 'poweruser'}) |
|
379 | 416 |
json = response.json |
380 | 417 |
|
381 | 418 |
# On s'assure que la liste retournée |
... | ... | |
391 | 428 |
# Récupération des résultats obtenus après une recherche |
392 | 429 |
# sur le graphe 'graph2' pour l'utilisateur 'user' |
393 | 430 |
response = self.app.post( |
394 |
'/rpc/searchHostAndGraph?search_form_host=%s&search_form_graph=%s' % |
|
395 |
(str(host2.name), str(graph2.name)), { |
|
396 |
}, extra_environ={'REMOTE_USER': 'user'}) |
|
431 |
'/rpc/searchHostAndGraph?search_form_host=%s&' \ |
|
432 |
'search_form_graph=%s' % ( |
|
433 |
urllib2.quote(host2.name.encode('utf-8'), ''), |
|
434 |
urllib2.quote(graph2.name.encode('utf-8'), ''), |
|
435 |
), {}, extra_environ={'REMOTE_USER': 'user'}) |
|
397 | 436 |
json = response.json |
398 | 437 |
|
399 | 438 |
# On s'assure que la liste retournée |
... | ... | |
413 | 452 |
|
414 | 453 |
# Récupération de l'hôte 'host1' dans la base de données |
415 | 454 |
host1 = DBSession.query(Host).filter( |
416 |
Host.name == u'host1').first() |
|
455 |
Host.name == u'host1 éà').first()
|
|
417 | 456 |
|
418 | 457 |
# Récupération de l'hôte 'host3' dans la base de données |
419 | 458 |
host3 = DBSession.query(Host).filter( |
420 |
Host.name == u'host3').first() |
|
459 |
Host.name == u'host3 éà').first()
|
|
421 | 460 |
|
422 | 461 |
# Récupération du graphe 'graph1' dans la base de données |
423 | 462 |
graph1 = DBSession.query(Graph).filter( |
424 |
Graph.name == u'graph1').first() |
|
463 |
Graph.name == u'graph1 éà').first()
|
|
425 | 464 |
|
426 | 465 |
# Récupération du graphe 'graph3' dans la base de données |
427 | 466 |
graph3 = DBSession.query(Graph).filter( |
428 |
Graph.name == u'graph1').first()
|
|
467 |
Graph.name == u'graph3 éà').first()
|
|
429 | 468 |
|
430 | 469 |
# Récupération des résultats obtenus après une recherche |
431 | 470 |
# sur le graphe 'graph1' pour l'utilisateur 'user' |
432 | 471 |
response = self.app.post( |
433 |
'/rpc/searchHostAndGraph?search_form_host=%s&search_form_graph=%s' % |
|
434 |
(str(host1.name), str(graph1.name)), { |
|
435 |
}, extra_environ={'REMOTE_USER': 'user'}) |
|
472 |
'/rpc/searchHostAndGraph?search_form_host=%s&' \ |
|
473 |
'search_form_graph=%s' % ( |
|
474 |
urllib2.quote(host1.name.encode('utf-8'), ''), |
|
475 |
urllib2.quote(graph1.name.encode('utf-8'), ''), |
|
476 |
), {}, extra_environ={'REMOTE_USER': 'user'}) |
|
436 | 477 |
json = response.json |
437 | 478 |
|
438 | 479 |
# On s'assure que la liste retournée est vide |
... | ... | |
447 | 488 |
# Récupération des résultats obtenus après une recherche |
448 | 489 |
# sur le graphe 'graph3' pour l'utilisateur 'user' |
449 | 490 |
response = self.app.post( |
450 |
'/rpc/searchHostAndGraph?search_form_host=%s&search_form_graph=%s' % |
|
451 |
(str(host3.name), str(graph3.name)), { |
|
452 |
}, extra_environ={'REMOTE_USER': 'user'}) |
|
491 |
'/rpc/searchHostAndGraph?search_form_host=%s&' \ |
|
492 |
'search_form_graph=%s' % ( |
|
493 |
urllib2.quote(host3.name.encode('utf-8'), ''), |
|
494 |
urllib2.quote(graph3.name.encode('utf-8'), ''), |
|
495 |
), {}, extra_environ={'REMOTE_USER': 'user'}) |
|
453 | 496 |
json = response.json |
454 | 497 |
|
455 | 498 |
# On s'assure que la liste retournée est vide |
... | ... | |
464 | 507 |
# Récupération des résultats obtenus après une recherche |
465 | 508 |
# sur le graphe 'graph1' pour l'utilisateur 'visitor' |
466 | 509 |
response = self.app.post( |
467 |
'/rpc/searchHostAndGraph?search_form_host=%s&search_form_graph=%s' % |
|
468 |
(str(host1.name), str(graph1.name)), { |
|
469 |
}, extra_environ={'REMOTE_USER': 'visitor'}) |
|
510 |
'/rpc/searchHostAndGraph?search_form_host=%s&' \ |
|
511 |
'search_form_graph=%s' % ( |
|
512 |
urllib2.quote(host1.name.encode('utf-8'), ''), |
|
513 |
urllib2.quote(graph1.name.encode('utf-8'), ''), |
|
514 |
), {}, extra_environ={'REMOTE_USER': 'visitor'}) |
|
470 | 515 |
json = response.json |
471 | 516 |
|
472 | 517 |
# On s'assure que la liste retournée est vide |
... | ... | |
481 | 526 |
# Récupération des résultats obtenus après une recherche |
482 | 527 |
# sur le graphe 'graph3' pour l'utilisateur 'visitor' |
483 | 528 |
response = self.app.post( |
484 |
'/rpc/searchHostAndGraph?search_form_host=%s&search_form_graph=%s' % |
|
485 |
(str(host3.name), str(graph3.name)), { |
|
486 |
}, extra_environ={'REMOTE_USER': 'visitor'}) |
|
529 |
'/rpc/searchHostAndGraph?search_form_host=%s&' \ |
|
530 |
'search_form_graph=%s' % ( |
|
531 |
urllib2.quote(host3.name.encode('utf-8'), ''), |
|
532 |
urllib2.quote(graph3.name.encode('utf-8'), ''), |
|
533 |
), {}, extra_environ={'REMOTE_USER': 'visitor'}) |
|
487 | 534 |
json = response.json |
488 | 535 |
|
489 | 536 |
# On s'assure que la liste retournée est vide |
... | ... | |
502 | 549 |
|
503 | 550 |
# Récupération de l'hôte 'host1' dans la base de données |
504 | 551 |
host1 = DBSession.query(Host).filter( |
505 |
Host.name == u'host1').first() |
|
552 |
Host.name == u'host1 éà').first()
|
|
506 | 553 |
|
507 | 554 |
# Récupération du graphe 'graph1' dans la base de données |
508 | 555 |
graph1 = DBSession.query(Graph).filter( |
509 |
Graph.name == u'graph1').first() |
|
556 |
Graph.name == u'graph1 éà').first()
|
|
510 | 557 |
|
511 | 558 |
# Récupération des résultats obtenus après une recherche |
512 | 559 |
# sur le graphe 'graph1' pour un utilisateur anonyme : |
513 | 560 |
# le contrôleur doit retourner une erreur 401 |
514 | 561 |
self.app.post( |
515 |
'/rpc/searchHostAndGraph?search_form_host=%s&search_form_graph=%s' % |
|
516 |
(str(host1.name), str(graph1.name)), { |
|
517 |
}, status=401) |
|
562 |
'/rpc/searchHostAndGraph?search_form_host=%s&' \ |
|
563 |
'search_form_graph=%s' % ( |
|
564 |
urllib2.quote(host1.name.encode('utf-8'), ''), |
|
565 |
urllib2.quote(graph1.name.encode('utf-8'), ''), |
|
566 |
), {}, status=401) |
|
518 | 567 |
|
519 | 568 |
def test_select_inexisting_graph(self): |
520 | 569 |
""" |
... | ... | |
523 | 572 |
|
524 | 573 |
# Récupération de l'hôte 'host1' dans la base de données |
525 | 574 |
host1 = DBSession.query(Host).filter( |
526 |
Host.name == u'host1').first() |
|
575 |
Host.name == u'host1 éà').first()
|
|
527 | 576 |
|
528 | 577 |
# Récupération des résultats obtenus après une recherche |
529 | 578 |
# sur un graphe inexistant pour l'utilisateur 'manager' |
530 | 579 |
response = self.app.post( |
531 |
'/rpc/searchHostAndGraph?search_form_host=%s&search_form_graph=%s' % |
|
532 |
(str(host1.name), 'graphe_totalement_inexistant'), { |
|
533 |
}, extra_environ={'REMOTE_USER': 'manager'}) |
|
580 |
'/rpc/searchHostAndGraph?search_form_host=%s&' \ |
|
581 |
'search_form_graph=%s' % ( |
|
582 |
urllib2.quote(host1.name.encode('utf-8'), ''), |
|
583 |
'graphe_totalement_inexistant', |
|
584 |
), {}, extra_environ={'REMOTE_USER': 'manager'} |
|
585 |
) |
|
534 | 586 |
json = response.json |
535 | 587 |
|
536 | 588 |
# On s'assure que la liste retournée est vide |
Also available in: Unified diff