vigiboard / vigiboard / tests / functional / test_vigiboardrequest.py @ 20367931
History | View | Annotate | Download (5.69 KB)
1 |
# -*- coding: utf-8 -*-
|
---|---|
2 |
# vim:set expandtab tabstop=4 shiftwidth=4:
|
3 |
"""
|
4 |
Test de la classe Vigiboard Request
|
5 |
"""
|
6 |
from nose.tools import assert_true |
7 |
|
8 |
from vigiboard.model import * |
9 |
from vigiboard.tests import TestController |
10 |
from vigiboard.controllers.vigiboard_ctl import VigiboardRequest, VigiboardRequestPlugin |
11 |
from vigiboard.tests import setup_db, teardown_db |
12 |
import tg |
13 |
import transaction |
14 |
|
15 |
#Create an empty database before we start our tests for this module
|
16 |
def setup(): |
17 |
"""Function called by nose on module load"""
|
18 |
setup_db() |
19 |
|
20 |
#Teardown that database
|
21 |
def teardown(): |
22 |
"""Function called by nose after all tests in this module ran"""
|
23 |
teardown_db() |
24 |
|
25 |
class TestVigiboardRequest(TestController): |
26 |
|
27 |
def test_creation_requete(self): |
28 |
"""Génération d'une requête avec application d'un plugin et des permissions"""
|
29 |
|
30 |
# On commence par peupler la base de donnée actuellement vide
|
31 |
|
32 |
# les groups et leurs dépendances
|
33 |
DBSession.add(Groups(name="hostmanagers"))
|
34 |
DBSession.add(Groups(name="hosteditors",parent="hostmanagers")) |
35 |
idmanagers = DBSession.query(Permission).filter(Permission.permission_name=='manage')[0].permission_id |
36 |
ideditors = DBSession.query(Permission).filter(Permission.permission_name=='edit')[0].permission_id |
37 |
DBSession.add(GroupPermissions(groupname="hostmanagers",idpermission=idmanagers))
|
38 |
DBSession.add(GroupPermissions(groupname="hosteditors",idpermission=ideditors))
|
39 |
|
40 |
# Les évènements et leurs dépendances
|
41 |
DBSession.add(Host(name="monhost"))
|
42 |
DBSession.add(Service(name="monservice"))
|
43 |
DBSession.add(Host(name="monhostuser"))
|
44 |
DBSession.add(Service(name="monserviceuser"))
|
45 |
DBSession.flush() |
46 |
a = Events(hostname="monhost",servicename="monservice") |
47 |
b = Events(hostname="monhostuser",servicename="monservice") |
48 |
c = Events(hostname="monhost",servicename="monserviceuser") |
49 |
d = Events(hostname="monhostuser",servicename="monserviceuser") |
50 |
|
51 |
# Les historiques
|
52 |
DBSession.add(a) |
53 |
DBSession.add(b) |
54 |
DBSession.add(c) |
55 |
DBSession.add(d) |
56 |
DBSession.flush() |
57 |
DBSession.add(EventHistory(type_action='Nagios update state',idevent=a.idevent))
|
58 |
DBSession.add(EventHistory(type_action='Acknowlegement change state',idevent=a.idevent))
|
59 |
DBSession.add(EventHistory(type_action='Nagios update state',idevent=b.idevent))
|
60 |
DBSession.add(EventHistory(type_action='Acknowlegement change state',idevent=b.idevent))
|
61 |
DBSession.add(EventHistory(type_action='Nagios update state',idevent=c.idevent))
|
62 |
DBSession.add(EventHistory(type_action='Acknowlegement change state',idevent=c.idevent))
|
63 |
DBSession.add(EventHistory(type_action='Nagios update state',idevent=d.idevent))
|
64 |
DBSession.add(EventHistory(type_action='Acknowlegement change state',idevent=d.idevent))
|
65 |
|
66 |
# Table de jointure entre les hôtes et services et les groups
|
67 |
DBSession.add(HostGroups(hostname="monhost",groupname="hostmanagers")) |
68 |
DBSession.add(HostGroups(hostname="monhostuser",groupname="hosteditors")) |
69 |
DBSession.add(ServiceGroups(servicename="monservice",groupname="hostmanagers")) |
70 |
DBSession.add(ServiceGroups(servicename="monserviceuser",groupname="hosteditors")) |
71 |
DBSession.flush() |
72 |
|
73 |
# On commit tout car app.get fait un rollback ou équivalent
|
74 |
transaction.commit() |
75 |
|
76 |
# On indique qui on est et on requête l'index pour obtenir toutes les variables de sessions
|
77 |
environ = {'REMOTE_USER': 'editor'} |
78 |
response = self.app.get('/', extra_environ=environ) |
79 |
tg.request = response.request |
80 |
|
81 |
self.vr = VigiboardRequest()
|
82 |
|
83 |
# On cré notre plugin, ici il ne sert qu'à lier l'historique avec chaque évènement
|
84 |
class MonPlugin(VigiboardRequestPlugin): |
85 |
def show(self,rq): |
86 |
return rq[1] |
87 |
|
88 |
self.vr.AddPlugin(MonPlugin(table=[EventHistory.idevent],
|
89 |
join=[(EventHistory,EventHistory.idevent == Events.idevent)])) |
90 |
|
91 |
# On effectu les tests suivants :
|
92 |
# le nombre de ligne (historique et évènements) doivt correspondre (vérification des droits imposé par les groupes)
|
93 |
# le plugin fonctionne correctement
|
94 |
nb = self.vr.NumRows()
|
95 |
assert_true(nb == 2,msg="2 historiques devrait être disponible pour l'utilisateur 'editor' mais il y en a %d" % nb) |
96 |
self.vr.FormatEvents(0,10) |
97 |
self.vr.FormatHistory()
|
98 |
assert_true(len(self.vr.events) == 1+1,msg="1 évènement devrait être disponible pour l'utilisateur 'editor' mais il y en a %d" % len(self.vr.events)) |
99 |
assert_true(self.vr.events[1][6][0][0] != 'Error',msg="Problème d'exécution des plugins ou de formatage des évènements") |
100 |
|
101 |
# On recommence les tests précédents avec l'utilisateur manager (plus de droits)
|
102 |
environ = {'REMOTE_USER': 'manager'} |
103 |
response = self.app.get('/', extra_environ=environ) |
104 |
tg.request = response.request |
105 |
|
106 |
self.vr = VigiboardRequest()
|
107 |
|
108 |
self.vr.AddPlugin(MonPlugin(table=[EventHistory.idevent],
|
109 |
join=[(EventHistory,EventHistory.idevent == Events.idevent)])) |
110 |
|
111 |
nb = self.vr.NumRows()
|
112 |
assert_true(nb == 8,msg="8 historiques devrait être disponible pour l'utilisateur 'manager' mais il y en a %d" % nb) |
113 |
self.vr.FormatEvents(0,10) |
114 |
self.vr.FormatHistory()
|
115 |
assert_true(len(self.vr.events) == 4+1,msg="4 évènement devrait être disponible pour l'utilisateur 'editor' mais il y en a %d" % len(self.vr.events)) |
116 |
assert_true(self.vr.events[1][6][0][0] != 'Error',msg="Problème d'exécution des plugins") |
117 |
|