Revision 0c8b0e15
Dans le RootController : passage des paramètres entrés au template (pour réutilisation dans les liens de pagination).
Quelques corrections dans les tests unitaires. Ils restent encore des tests qui échouent (en partie liés aux thèmes).
git-svn-id: https://vigilo-dev.si.c-s.fr/svn@2181 b22e2e97-25c9-44ff-b637-2e5ceca36478
vigiboard/tests/functional/test_raw_events_table.py | ||
---|---|---|
14 | 14 |
Host, HostGroup, LowLevelService, ServiceGroup |
15 | 15 |
from vigiboard.tests import TestController |
16 | 16 |
|
17 |
def populate_DB(): |
|
17 |
def populate_DB(caused_by_service):
|
|
18 | 18 |
""" Peuple la base de données. """ |
19 | 19 |
# On ajoute un groupe d'hôtes et un groupe de services. |
20 | 20 |
hostmanagers = HostGroup(name = u'managersgroup') |
... | ... | |
54 | 54 |
DBSession.add(managerservice) |
55 | 55 |
servicemanagers.services.append(managerservice) |
56 | 56 |
DBSession.flush() |
57 |
|
|
58 |
return (managerhost, managerservice) |
|
59 | 57 |
|
60 |
def add_correvent_caused_by(supitem, |
|
61 |
correvent_status=u"None", event_status=u"WARNING"): |
|
62 |
""" |
|
63 |
Ajoute dans la base de données un évènement corrélé causé |
|
64 |
par un incident survenu sur l'item passé en paramètre. |
|
65 |
Génère un historique pour les tests. |
|
66 |
""" |
|
58 |
if caused_by_service: |
|
59 |
supitem = managerservice |
|
60 |
else: |
|
61 |
supitem = managerhost |
|
67 | 62 |
|
68 | 63 |
# Ajout d'un événement |
69 | 64 |
event = Event( |
70 | 65 |
supitem = supitem, |
71 | 66 |
message = u'foo', |
72 |
current_state = StateName.statename_to_value(event_status), |
|
67 |
current_state = StateName.statename_to_value(u"WARNING"), |
|
68 |
timestamp = datetime.now(), |
|
73 | 69 |
) |
74 | 70 |
DBSession.add(event) |
75 | 71 |
DBSession.flush() |
... | ... | |
90 | 86 |
idcause = event.idevent, |
91 | 87 |
timestamp_active = datetime.now(), |
92 | 88 |
priority = 1, |
93 |
status = correvent_status)
|
|
89 |
status = u"None")
|
|
94 | 90 |
aggregate.events.append(event) |
95 | 91 |
DBSession.add(aggregate) |
96 | 92 |
DBSession.flush() |
97 |
|
|
98 |
return event.idevent |
|
99 |
|
|
93 |
return aggregate.idcorrevent |
|
100 | 94 |
|
101 |
class TestRawEventsTable(TestController): |
|
102 |
""" |
|
103 |
Test des historiques de Vigiboard. |
|
104 |
""" |
|
95 |
def add_masked_event(idcorrevent): |
|
96 |
transaction.begin() |
|
97 |
hostmanagers = HostGroup.by_group_name(u'managersgroup') |
|
98 |
nb_hosts = DBSession.query(Host).count() |
|
99 |
|
|
100 |
masked_host = Host( |
|
101 |
name = u'masked host #%d' % nb_hosts, |
|
102 |
checkhostcmd = u'halt', |
|
103 |
snmpcommunity = u'public', |
|
104 |
hosttpl = u'/dev/null', |
|
105 |
mainip = u'192.168.1.%d' % nb_hosts, |
|
106 |
snmpport = 42, |
|
107 |
weight = 42, |
|
108 |
) |
|
109 |
DBSession.add(masked_host) |
|
110 |
hostmanagers.hosts.append(masked_host) |
|
111 |
DBSession.flush() |
|
112 |
|
|
113 |
event = Event( |
|
114 |
supitem = masked_host, |
|
115 |
message = u'masked event #%d' % nb_hosts, |
|
116 |
current_state = StateName.statename_to_value(u"CRITICAL"), |
|
117 |
timestamp = datetime.now(), |
|
118 |
) |
|
119 |
DBSession.add(event) |
|
120 |
DBSession.flush() |
|
121 |
|
|
122 |
aggregate = DBSession.query(CorrEvent).filter( |
|
123 |
CorrEvent.idcorrevent == idcorrevent).one() |
|
124 |
aggregate.events.append(event) |
|
125 |
DBSession.add(aggregate) |
|
126 |
DBSession.flush() |
|
127 |
transaction.commit() |
|
105 | 128 |
|
106 |
def setUp(self): |
|
107 |
super(TestEventTable, self).setUp() |
|
108 | 129 |
|
109 |
def test_host_history(self): |
|
110 |
"""Affichage de l'historique d'un évènement corrélé pour un hôte.""" |
|
130 |
class TestRawEventsTableAnonymousLLS(TestController): |
|
131 |
""" |
|
132 |
Teste l'affichage des événements bruts masqués par un agrégat. |
|
133 |
Dans ces tests, l'utilisateur n'est pas authentifié et l'agrégat |
|
134 |
a été causé par un LLS. |
|
135 |
""" |
|
136 |
test_service = True |
|
111 | 137 |
|
138 |
def test_table(self): |
|
139 |
"""Événements masqués d'un agrégat sur un LLS en anonyme.""" |
|
112 | 140 |
# On peuple la BDD avec un hôte, un service de bas niveau, |
113 | 141 |
# et un groupe d'hôtes et de services associés à ces items. |
114 |
(managerhost, managerservice) = populate_DB() |
|
115 |
|
|
116 |
# On ajoute un évènement corrélé causé par l'hôte |
|
117 |
idevent = add_correvent_caused_by(managerhost) |
|
142 |
idcorrevent = populate_DB(self.test_service) |
|
118 | 143 |
transaction.commit() |
119 | 144 |
|
120 | 145 |
# L'utilisateur n'est pas authentifié. |
121 | 146 |
# On s'attend à ce qu'une erreur 401 soit renvoyée, |
122 | 147 |
# demandant à l'utilisateur de s'authentifier. |
123 | 148 |
response = self.app.get( |
124 |
'/event/%d' % idevent,
|
|
149 |
'/masked_events/%d' % idcorrevent,
|
|
125 | 150 |
status = 401) |
126 | 151 |
|
127 |
# L'utilisateur N'A PAS les bonnes permissions. |
|
128 |
environ = {'REMOTE_USER': 'editor'} |
|
129 |
|
|
152 |
class TestRawEventsTableAnonymousHost(TestRawEventsTableAnonymousLLS): |
|
153 |
"""Idem que TestRawEventsTableAnonymousLLS mais avec un hôte.""" |
|
154 |
test_service = False |
|
155 |
|
|
156 |
def test_table(self): |
|
157 |
"""Événements masqués d'un agrégat sur un hôte en anonyme.""" |
|
158 |
super(TestRawEventsTableAnonymousHost, self).test_table() |
|
159 |
|
|
160 |
|
|
161 |
class TestRawEventsTableWithoutPermsLLS(TestController): |
|
162 |
""" |
|
163 |
Teste l'affichage des événements bruts masqués par un agrégat. |
|
164 |
Dans ces tests, l'utilisateur n'a pas les bonnes permissions |
|
165 |
et l'agrégat a été causé par un LLS. |
|
166 |
""" |
|
167 |
test_service = True |
|
168 |
|
|
169 |
def test_table(self): |
|
170 |
"""Événements masqués d'un agrégat sur un LLS sans permissions.""" |
|
171 |
# On peuple la BDD avec un hôte, un service de bas niveau, |
|
172 |
# et un groupe d'hôtes et de services associés à ces items. |
|
173 |
idcorrevent = populate_DB(self.test_service) |
|
174 |
transaction.commit() |
|
175 |
|
|
176 |
environ = {'REMOTE_USER': 'manager'} |
|
177 |
|
|
130 | 178 |
# On s'attend à ce qu'une erreur 302 soit renvoyée, et à |
131 | 179 |
# ce qu'un message d'erreur précise à l'utilisateur qu'il |
132 | 180 |
# n'a pas accès aux informations concernant cet évènement. |
133 | 181 |
response = self.app.get( |
134 |
'/event/%d' % idevent,
|
|
182 |
'/masked_events/%d' % idcorrevent,
|
|
135 | 183 |
status = 302, |
136 | 184 |
extra_environ = environ) |
137 |
|
|
138 |
# On suit la redirection. |
|
139 | 185 |
response = response.follow(status = 200, extra_environ = environ) |
140 | 186 |
assert_true(len(response.lxml.xpath( |
141 | 187 |
'//div[@id="flash"]/div[@class="error"]'))) |
142 | 188 |
|
143 |
# L'utilisateur a les bonnes permissions. |
|
144 |
environ = {'REMOTE_USER': 'manager'} |
|
145 |
|
|
146 |
# On s'attend à ce que le statut de la requête soit 200. |
|
189 |
# L'erreur 302 peut venir de l'absence de permissions |
|
190 |
# ou bien simplement de l'absence d'événements masqués. |
|
191 |
# Pour vérifier qu'il s'agit bien d'un problème de permissions, |
|
192 |
# on ajoute un événement masqué. On doit à nouveau obtenir |
|
193 |
# une erreur 302. |
|
194 |
add_masked_event(idcorrevent) |
|
147 | 195 |
response = self.app.get( |
148 |
'/event/%d' % idevent,
|
|
149 |
status = 200,
|
|
196 |
'/masked_events/%d' % idcorrevent,
|
|
197 |
status = 302,
|
|
150 | 198 |
extra_environ = environ) |
199 |
response = response.follow(status = 200, extra_environ = environ) |
|
200 |
assert_true(len(response.lxml.xpath( |
|
201 |
'//div[@id="flash"]/div[@class="error"]'))) |
|
151 | 202 |
|
152 |
# Il doit y avoir 2 lignes de résultats.
|
|
153 |
rows = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr')
|
|
154 |
assert_equal(len(rows), 2)
|
|
203 |
class TestRawEventsTableWithoutPermsHost(TestRawEventsTableWithoutPermsLLS):
|
|
204 |
"""Idem que TestRawEventsTableWithoutPermsLLS mais avec un hôte."""
|
|
205 |
test_service = False
|
|
155 | 206 |
|
156 |
def test_service_history(self): |
|
157 |
"""Affichage de l'historique d'un évènement corrélé pour un SBN.""" |
|
207 |
def test_table(self): |
|
208 |
"""Événements masqués d'un agrégat sur un hôte sans permissions.""" |
|
209 |
super(TestRawEventsTableWithoutPermsHost, self).test_table() |
|
158 | 210 |
|
211 |
class TestRawEventsTableWithPermsLLS(TestController): |
|
212 |
""" |
|
213 |
Teste l'affichage d'une table des événements bruts |
|
214 |
rattachés à un agrégat, hormis la cause de cet agrégat. |
|
215 |
""" |
|
216 |
test_service = True |
|
217 |
|
|
218 |
def test_table(self): |
|
219 |
"""Événements masqués d'un agrégat sur un LLS avec permissions.""" |
|
159 | 220 |
# On peuple la BDD avec un hôte, un service de bas niveau, |
160 | 221 |
# et un groupe d'hôtes et de services associés à ces items. |
161 |
(managerhost, managerservice) = populate_DB() |
|
162 |
|
|
163 |
# On ajoute un évènement corrélé causé par le service |
|
164 |
idevent = add_correvent_caused_by(managerservice) |
|
165 |
|
|
222 |
idcorrevent = populate_DB(True) |
|
166 | 223 |
transaction.commit() |
167 | 224 |
|
168 |
# L'utilisateur n'est pas authentifié. |
|
169 |
# On s'attend à ce qu'une erreur 401 soit renvoyée, |
|
170 |
# demandant à l'utilisateur de s'authentifier. |
|
171 |
response = self.app.get( |
|
172 |
'/event/%d' % idevent, |
|
173 |
status = 401) |
|
225 |
environ = {'REMOTE_USER': 'manager'} |
|
174 | 226 |
|
175 |
# L'utilisateur N'A PAS les bonnes permissions. |
|
176 |
environ = {'REMOTE_USER': 'editor'} |
|
177 |
|
|
178 | 227 |
# On s'attend à ce qu'une erreur 302 soit renvoyée, et à |
179 | 228 |
# ce qu'un message d'erreur précise à l'utilisateur qu'il |
180 | 229 |
# n'a pas accès aux informations concernant cet évènement. |
181 | 230 |
response = self.app.get( |
182 |
'/event/%d' % idevent,
|
|
183 |
status = 302,
|
|
231 |
'/masked_events/%d' % idcorrevent,
|
|
232 |
status = 302, |
|
184 | 233 |
extra_environ = environ) |
185 |
|
|
186 |
# On suit la redirection. |
|
187 | 234 |
response = response.follow(status = 200, extra_environ = environ) |
188 | 235 |
assert_true(len(response.lxml.xpath( |
189 | 236 |
'//div[@id="flash"]/div[@class="error"]'))) |
190 | 237 |
|
191 |
# L'utilisateur a les bonnes permissions. |
|
192 |
environ = {'REMOTE_USER': 'manager'} |
|
193 |
|
|
194 |
# On s'attend à ce que le statut de la requête soit 200. |
|
238 |
# L'erreur 302 peut venir de l'absence de permissions |
|
239 |
# ou bien simplement de l'absence d'événements masqués. |
|
240 |
# Pour vérifier qu'il s'agit bien d'un problème de permissions, |
|
241 |
# on ajoute un événement masqué. On doit avoir accès à exactement |
|
242 |
# 1 événement masqué à présent. |
|
243 |
add_masked_event(idcorrevent) |
|
195 | 244 |
response = self.app.get( |
196 |
'/event/%d' % idevent,
|
|
197 |
status = 200,
|
|
245 |
'/masked_events/%d' % idcorrevent,
|
|
246 |
status = 200, |
|
198 | 247 |
extra_environ = environ) |
199 | 248 |
|
200 |
# Il doit y avoir 2 lignes de résultats. |
|
201 | 249 |
rows = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr') |
202 |
assert_equal(len(rows), 2) |
|
250 |
assert_equal(len(rows), 1) |
|
251 |
|
|
252 |
class TestRawEventsTableWithPermsHost(TestRawEventsTableWithPermsLLS): |
|
253 |
"""Idem que TestRawEventsTableWithPermsLLS mais avec un hôte.""" |
|
254 |
test_service = False |
|
255 |
|
|
256 |
def test_table(self): |
|
257 |
"""Événements masqués d'un agrégat sur un hôte avec permissions.""" |
|
258 |
super(TestRawEventsTableWithPermsHost, self).test_table() |
|
203 | 259 |
|
Also available in: Unified diff