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