vigiboard / vigiboard / tests / functional / test_vigiboardrequest.py @ 35cea70e
History | View | Annotate | Download (6.78 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 DBSession, Events, EventHistory, Groups, \ |
9 |
Permission, GroupPermissions, Host, Service, HostGroups, ServiceGroups |
10 |
from vigiboard.tests import TestController |
11 |
from vigiboard.controllers.vigiboard_ctl import VigiboardRequest, \ |
12 |
VigiboardRequestPlugin
|
13 |
from vigiboard.tests import setup_db, teardown_db |
14 |
import tg |
15 |
import transaction |
16 |
|
17 |
#Create an empty database before we start our tests for this module
|
18 |
def setup(): |
19 |
"""Function called by nose on module load"""
|
20 |
setup_db() |
21 |
|
22 |
#Teardown that database
|
23 |
def teardown(): |
24 |
"""Function called by nose after all tests in this module ran"""
|
25 |
teardown_db() |
26 |
|
27 |
class TestVigiboardRequest(TestController): |
28 |
"""Test de la classe Vigiboard Request"""
|
29 |
|
30 |
def test_creation_requete(self): |
31 |
"""
|
32 |
Génération d'une requête avec application d'un plugin et
|
33 |
des permissions
|
34 |
"""
|
35 |
|
36 |
# On commence par peupler la base de donnée actuellement vide
|
37 |
|
38 |
# les groups et leurs dépendances
|
39 |
DBSession.add(Groups(name="hostmanagers"))
|
40 |
DBSession.add(Groups(name="hosteditors", parent = "hostmanagers")) |
41 |
idmanagers = DBSession.query(Permission).filter( |
42 |
Permission.permission_name == 'manage')[0].permission_id |
43 |
ideditors = DBSession.query(Permission |
44 |
).filter(Permission.permission_name == 'edit')[0].permission_id |
45 |
DBSession.add(GroupPermissions(groupname = "hostmanagers",
|
46 |
idpermission = idmanagers)) |
47 |
DBSession.add(GroupPermissions(groupname = "hosteditors",
|
48 |
idpermission = ideditors)) |
49 |
|
50 |
# Les évènements et leurs dépendances
|
51 |
DBSession.add(Host(name = "monhost"))
|
52 |
DBSession.add(Service(name = "monservice"))
|
53 |
DBSession.add(Host(name = "monhostuser"))
|
54 |
DBSession.add(Service(name = "monserviceuser"))
|
55 |
DBSession.flush() |
56 |
event1 = Events(hostname = "monhost", servicename = "monservice") |
57 |
event2 = Events(hostname = "monhostuser", servicename = "monservice") |
58 |
event3 = Events(hostname = "monhost", servicename = "monserviceuser") |
59 |
event4 = Events(hostname = "monhostuser",
|
60 |
servicename = "monserviceuser")
|
61 |
|
62 |
# Les historiques
|
63 |
DBSession.add(event1) |
64 |
DBSession.add(event2) |
65 |
DBSession.add(event3) |
66 |
DBSession.add(event4) |
67 |
DBSession.flush() |
68 |
DBSession.add(EventHistory(type_action = 'Nagios update state',
|
69 |
idevent = event1.idevent)) |
70 |
DBSession.add(EventHistory(type_action = 'Acknowlegement change state',
|
71 |
idevent = event1.idevent)) |
72 |
DBSession.add(EventHistory(type_action = 'Nagios update state',
|
73 |
idevent = event2.idevent)) |
74 |
DBSession.add(EventHistory(type_action = 'Acknowlegement change state',
|
75 |
idevent = event2.idevent)) |
76 |
DBSession.add(EventHistory(type_action = 'Nagios update state',
|
77 |
idevent = event3.idevent)) |
78 |
DBSession.add(EventHistory(type_action = 'Acknowlegement change state',
|
79 |
idevent = event3.idevent)) |
80 |
DBSession.add(EventHistory(type_action = 'Nagios update state',
|
81 |
idevent = event4.idevent)) |
82 |
DBSession.add(EventHistory(type_action = 'Acknowlegement change state',
|
83 |
idevent = event4.idevent)) |
84 |
|
85 |
# Table de jointure entre les hôtes et services et les groups
|
86 |
DBSession.add(HostGroups(hostname = "monhost",
|
87 |
groupname = "hostmanagers"))
|
88 |
DBSession.add(HostGroups(hostname = "monhostuser",
|
89 |
groupname = "hosteditors"))
|
90 |
DBSession.add(ServiceGroups(servicename = "monservice",
|
91 |
groupname = "hostmanagers"))
|
92 |
DBSession.add(ServiceGroups(servicename = "monserviceuser",
|
93 |
groupname = "hosteditors"))
|
94 |
DBSession.flush() |
95 |
|
96 |
# On commit tout car app.get fait un rollback ou équivalent
|
97 |
transaction.commit() |
98 |
|
99 |
# On indique qui on est et on requête l'index pour obtenir
|
100 |
# toutes les variables de sessions
|
101 |
environ = {'REMOTE_USER': 'editor'} |
102 |
response = self.app.get('/', extra_environ=environ) |
103 |
tg.request = response.request |
104 |
|
105 |
vigi_req = VigiboardRequest() |
106 |
|
107 |
# On cré notre plugin, ici il ne sert qu'à lier l'historique
|
108 |
# avec chaque évènement
|
109 |
|
110 |
class MonPlugin(VigiboardRequestPlugin): |
111 |
"""Plugin de test"""
|
112 |
|
113 |
def show(self, req): |
114 |
"""Fonction d'affichage"""
|
115 |
return req[1] |
116 |
|
117 |
vigi_req.add_plugin(MonPlugin( |
118 |
table = [EventHistory.idevent], |
119 |
join = [(EventHistory, EventHistory.idevent == Events.idevent)])) |
120 |
|
121 |
# On effectu les tests suivants :
|
122 |
# le nombre de ligne (historique et évènements) doivent
|
123 |
# correspondre (vérification des droits imposé par les groupes)
|
124 |
# le plugin fonctionne correctement
|
125 |
|
126 |
num_rows = vigi_req.num_rows() |
127 |
assert_true(num_rows == 2, msg = "2 historiques devrait " +\ |
128 |
"être disponible pour l'utilisateur 'editor' mais il " +\
|
129 |
"y en a %d" % num_rows)
|
130 |
vigi_req.format_events(0, 10) |
131 |
vigi_req.format_history() |
132 |
assert_true(len(vigi_req.events) == 1 + 1, |
133 |
msg = "1 évènement devrait être disponible pour " +\
|
134 |
"l'utilisateur 'editor' mais il y en a %d" % \
|
135 |
len(vigi_req.events))
|
136 |
assert_true(vigi_req.events[1][6][0][0] != 'Error', |
137 |
msg = "Problème d'exécution des plugins ou de " +\
|
138 |
"formatage des évènements")
|
139 |
|
140 |
# On recommence les tests précédents avec l'utilisateur
|
141 |
# manager (plus de droits)
|
142 |
|
143 |
environ = {'REMOTE_USER': 'manager'} |
144 |
response = self.app.get('/', extra_environ=environ) |
145 |
tg.request = response.request |
146 |
|
147 |
vigi_req = VigiboardRequest() |
148 |
|
149 |
vigi_req.add_plugin(MonPlugin( |
150 |
table = [EventHistory.idevent], |
151 |
join = [(EventHistory, EventHistory.idevent == Events.idevent)])) |
152 |
|
153 |
num_rows = vigi_req.num_rows() |
154 |
assert_true(num_rows == 8,
|
155 |
msg = "8 historiques devrait être disponible pour " +\
|
156 |
"l'utilisateur 'manager' mais il y en a %d" % num_rows)
|
157 |
vigi_req.format_events(0, 10) |
158 |
vigi_req.format_history() |
159 |
assert_true(len(vigi_req.events) == 4 + 1, |
160 |
msg = "4 évènement devrait être disponible pour " +\
|
161 |
"l'utilisateur 'editor' mais il y en a %d" % \
|
162 |
len(vigi_req.events))
|
163 |
assert_true(vigi_req.events[1][6][0][0] != 'Error', |
164 |
msg = "Problème d'exécution des plugins")
|
165 |
|