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