vigiboard / vigiboard / tests / functional / test_search_form_misc.py @ 011743be
History | View | Annotate | Download (8.85 KB)
1 | 64ed9170 | Vincent QUEMENER | # -*- coding: utf-8 -*-
|
---|---|---|---|
2 | 011743be | Francois POIROTTE | # Copyright (C) 2006-2020 CS GROUP - France
|
3 | b373a5de | Aurelien BOMPARD | # License: GNU GPL v2 <http://www.gnu.org/licenses/gpl-2.0.html>
|
4 | |||
5 | 64ed9170 | Vincent QUEMENER | """
|
6 | Teste le formulaire de recherche avec divers champs.
|
||
7 | """
|
||
8 | 0dff1e21 | Francois POIROTTE | from __future__ import print_function |
9 | 64ed9170 | Vincent QUEMENER | from nose.tools import assert_true, assert_equal |
10 | from datetime import datetime |
||
11 | 9332c7c0 | Yves OUATTARA | from datetime import timedelta |
12 | 64ed9170 | Vincent QUEMENER | import transaction |
13 | |||
14 | from vigiboard.tests import TestController |
||
15 | e7e3d45e | Francois POIROTTE | from vigilo.models.session import DBSession |
16 | 0bd9c069 | Francois POIROTTE | from vigilo.models.tables import SupItemGroup, Host, Permission, \ |
17 | 60d02e7f | Francois POIROTTE | Event, CorrEvent, StateName, \ |
18 | User, UserGroup, DataPermission |
||
19 | 64ed9170 | Vincent QUEMENER | |
20 | def insert_deps(): |
||
21 | """Insère les dépendances nécessaires aux tests."""
|
||
22 | 1c5486c7 | Francois POIROTTE | timestamp = datetime.utcnow() + timedelta(seconds=-10)
|
23 | 64ed9170 | Vincent QUEMENER | |
24 | host = Host( |
||
25 | name=u'bar',
|
||
26 | description=u'',
|
||
27 | hosttpl=u'',
|
||
28 | 0dcb87f7 | Francois POIROTTE | address=u'127.0.0.1',
|
29 | 64ed9170 | Vincent QUEMENER | snmpport=42,
|
30 | snmpcommunity=u'public',
|
||
31 | snmpversion=u'3',
|
||
32 | ) |
||
33 | DBSession.add(host) |
||
34 | DBSession.flush() |
||
35 | |||
36 | 03059edd | Francois POIROTTE | hostgroup = SupItemGroup(name=u'foo', parent=None) |
37 | 24d74687 | Francois POIROTTE | hostgroup.supitems.append(host) |
38 | 0bd9c069 | Francois POIROTTE | DBSession.add(hostgroup) |
39 | DBSession.flush() |
||
40 | 64ed9170 | Vincent QUEMENER | |
41 | event = Event( |
||
42 | supitem=host, |
||
43 | timestamp=timestamp, |
||
44 | current_state=StateName.statename_to_value(u'WARNING'),
|
||
45 | message=u'Hello world',
|
||
46 | ) |
||
47 | DBSession.add(event) |
||
48 | DBSession.flush() |
||
49 | |||
50 | correvent = CorrEvent( |
||
51 | priority=42,
|
||
52 | 32b2c767 | Thomas BURGUIERE | trouble_ticket=u'FOO BAR BAZ éçà',
|
53 | 8ba2de75 | Francois POIROTTE | ack=CorrEvent.ACK_NONE, |
54 | 64ed9170 | Vincent QUEMENER | occurrence=42,
|
55 | timestamp_active=timestamp, |
||
56 | cause=event, |
||
57 | ) |
||
58 | correvent.events.append(event) |
||
59 | DBSession.add(correvent) |
||
60 | DBSession.flush() |
||
61 | |||
62 | 60d02e7f | Francois POIROTTE | # On donne l'accès aux données.
|
63 | usergroup = UserGroup.by_group_name(u'users')
|
||
64 | DBSession.add(DataPermission( |
||
65 | group=hostgroup, |
||
66 | usergroup=usergroup, |
||
67 | access=u'r',
|
||
68 | )) |
||
69 | 64ed9170 | Vincent QUEMENER | DBSession.flush() |
70 | return timestamp
|
||
71 | |||
72 | class TestSearchFormMisc(TestController): |
||
73 | """Teste la récupération d'événements selon le nom d'hôte."""
|
||
74 | 60d02e7f | Francois POIROTTE | def setUp(self): |
75 | super(TestSearchFormMisc, self).setUp() |
||
76 | perm = Permission.by_permission_name(u'vigiboard-access')
|
||
77 | user = User( |
||
78 | user_name=u'user',
|
||
79 | fullname=u'',
|
||
80 | email=u'some.random@us.er',
|
||
81 | ) |
||
82 | 03059edd | Francois POIROTTE | usergroup = UserGroup(group_name=u'users')
|
83 | 60d02e7f | Francois POIROTTE | user.usergroups.append(usergroup) |
84 | usergroup.permissions.append(perm) |
||
85 | DBSession.add(user) |
||
86 | DBSession.add(usergroup) |
||
87 | DBSession.flush() |
||
88 | |||
89 | 9332c7c0 | Yves OUATTARA | def get_number_of_rows(self, from_date, to_date): |
90 | """Détermine le nombre de lignes parmi les résultats d'une recherche sur le formulaire."""
|
||
91 | response = self.app.get(
|
||
92 | '/?from_date=%(from_date)s&to_date=%(to_date)s' % {
|
||
93 | 'from_date': from_date,
|
||
94 | 'to_date': to_date,
|
||
95 | }, |
||
96 | extra_environ={'REMOTE_USER': 'user'}) |
||
97 | 7bde24ad | Francois POIROTTE | rows = self.get_rows(response)
|
98 | 0dff1e21 | Francois POIROTTE | print("There are %d rows in the result set" % len(rows)) |
99 | 9332c7c0 | Yves OUATTARA | return len(rows) |
100 | |||
101 | 64ed9170 | Vincent QUEMENER | def test_search_by_output(self): |
102 | """Teste la recherche sur le message issu de Nagios."""
|
||
103 | insert_deps() |
||
104 | transaction.commit() |
||
105 | |||
106 | # Permet également de vérifier que la recherche est
|
||
107 | # insensible à la casse.
|
||
108 | d36c37eb | Francois POIROTTE | response = self.app.get('/?output=hello*', |
109 | 60d02e7f | Francois POIROTTE | extra_environ={'REMOTE_USER': 'user'}) |
110 | 64ed9170 | Vincent QUEMENER | |
111 | # Il doit y avoir 1 seule ligne de résultats.
|
||
112 | 7bde24ad | Francois POIROTTE | rows = self.get_rows(response)
|
113 | 0dff1e21 | Francois POIROTTE | print("There are %d rows in the result set" % len(rows)) |
114 | 64ed9170 | Vincent QUEMENER | assert_equal(len(rows), 1) |
115 | |||
116 | # Il doit y avoir plusieurs colonnes dans la ligne de résultats.
|
||
117 | 7bde24ad | Francois POIROTTE | cols = self.get_cells(response)
|
118 | 0dff1e21 | Francois POIROTTE | print("There are %d columns in the result set" % len(cols)) |
119 | 64ed9170 | Vincent QUEMENER | assert_true(len(cols) > 1) |
120 | |||
121 | def test_search_by_trouble_ticket(self): |
||
122 | """Teste la recherche sur le ticket d'incident."""
|
||
123 | insert_deps() |
||
124 | transaction.commit() |
||
125 | |||
126 | # Permet également de vérifier que la recherche est
|
||
127 | # insensible à la casse.
|
||
128 | d36c37eb | Francois POIROTTE | response = self.app.get('/?trouble_ticket=*bar*', |
129 | 60d02e7f | Francois POIROTTE | extra_environ={'REMOTE_USER': 'user'}) |
130 | 64ed9170 | Vincent QUEMENER | transaction.commit() |
131 | |||
132 | # Il doit y avoir 1 seule ligne de résultats.
|
||
133 | 7bde24ad | Francois POIROTTE | rows = self.get_rows(response)
|
134 | 0dff1e21 | Francois POIROTTE | print("There are %d rows in the result set" % len(rows)) |
135 | 64ed9170 | Vincent QUEMENER | assert_equal(len(rows), 1) |
136 | |||
137 | # Il doit y avoir plusieurs colonnes dans la ligne de résultats.
|
||
138 | 7bde24ad | Francois POIROTTE | cols = self.get_cells(response)
|
139 | 0dff1e21 | Francois POIROTTE | print("There are %d columns in the result set" % len(cols)) |
140 | 64ed9170 | Vincent QUEMENER | assert_true(len(cols) > 1) |
141 | |||
142 | def test_search_by_dates(self): |
||
143 | """Teste la recherche par dates."""
|
||
144 | timestamp = insert_deps() |
||
145 | transaction.commit() |
||
146 | 9211ef65 | Francois POIROTTE | |
147 | # Préparation des dates/heures.
|
||
148 | 27140946 | Francois POIROTTE | from_date = timestamp.strftime("%Y-%m-%d %I:%M:%S %p")
|
149 | 1c5486c7 | Francois POIROTTE | to_date = datetime.utcnow().strftime("%Y-%m-%d %I:%M:%S %p")
|
150 | 64ed9170 | Vincent QUEMENER | |
151 | # Permet également de vérifier que la recherche
|
||
152 | # par date est inclusive.
|
||
153 | response = self.app.get(
|
||
154 | '/?from_date=%(from_date)s&to_date=%(to_date)s' % {
|
||
155 | 'from_date': from_date,
|
||
156 | 'to_date': to_date,
|
||
157 | }, |
||
158 | 60d02e7f | Francois POIROTTE | extra_environ={'REMOTE_USER': 'user'}) |
159 | 64ed9170 | Vincent QUEMENER | |
160 | # Il doit y avoir 1 seule ligne de résultats.
|
||
161 | 7bde24ad | Francois POIROTTE | rows = self.get_rows(response)
|
162 | 0dff1e21 | Francois POIROTTE | print("There are %d rows in the result set" % len(rows)) |
163 | 64ed9170 | Vincent QUEMENER | assert_equal(len(rows), 1) |
164 | |||
165 | # Il doit y avoir plusieurs colonnes dans la ligne de résultats.
|
||
166 | 7bde24ad | Francois POIROTTE | cols = self.get_cells(response)
|
167 | 0dff1e21 | Francois POIROTTE | print("There are %d columns in the result set" % len(cols)) |
168 | 64ed9170 | Vincent QUEMENER | assert_true(len(cols) > 1) |
169 | 9332c7c0 | Yves OUATTARA | |
170 | def test_future_begin_date(self): |
||
171 | """Contrôle des dates. Vérifie que date de début < date courante."""
|
||
172 | timestamp = insert_deps() |
||
173 | transaction.commit() |
||
174 | |||
175 | # Préparation des dates/heures.
|
||
176 | 1c5486c7 | Francois POIROTTE | from_date = datetime.utcnow() + timedelta(seconds=60)
|
177 | 9332c7c0 | Yves OUATTARA | from_date = from_date.strftime("%Y-%m-%d %I:%M:%S %p")
|
178 | 1c5486c7 | Francois POIROTTE | to_date = datetime.utcnow().strftime("%Y-%m-%d %I:%M:%S %p")
|
179 | 9332c7c0 | Yves OUATTARA | |
180 | 02c4a1e7 | Francois POIROTTE | # La recherche en utilisant une date de début supérieure
|
181 | # à la date actuelle doit générer une erreur/redirection.
|
||
182 | environ = {'REMOTE_USER': 'user'} |
||
183 | resp = self.app.get(
|
||
184 | '/?from_date=%(from_date)s&to_date=%(to_date)s' % {
|
||
185 | 'from_date': from_date,
|
||
186 | 'to_date': to_date,
|
||
187 | }, |
||
188 | extra_environ=environ, |
||
189 | status=302)
|
||
190 | 9332c7c0 | Yves OUATTARA | |
191 | 02c4a1e7 | Francois POIROTTE | # Après redirection, le message d'erreur apparait dans la page.
|
192 | resp = resp.follow(extra_environ=environ) |
||
193 | error = '<div id="flash"><div class="error">%s</div></div>' % \
|
||
194 | 'Start date cannot be greater than current date'
|
||
195 | assert_true(error in resp.body)
|
||
196 | 9332c7c0 | Yves OUATTARA | |
197 | def test_future_end_date(self): |
||
198 | """Contrôle des dates. Vérifie que date de fin < date courante."""
|
||
199 | timestamp = insert_deps() |
||
200 | transaction.commit() |
||
201 | |||
202 | # Préparation des dates/heures.
|
||
203 | from_date = timestamp.strftime("%Y-%m-%d %I:%M:%S %p")
|
||
204 | 1c5486c7 | Francois POIROTTE | to_date = datetime.utcnow() + timedelta(seconds=60)
|
205 | 9332c7c0 | Yves OUATTARA | to_date = to_date.strftime("%Y-%m-%d %I:%M:%S %p")
|
206 | |||
207 | 02c4a1e7 | Francois POIROTTE | # La recherche en utilisant une date de fin supérieure
|
208 | # à la date courante doit générer une erreur/redirection.
|
||
209 | environ = {'REMOTE_USER': 'user'} |
||
210 | resp = self.app.get(
|
||
211 | '/?from_date=%(from_date)s&to_date=%(to_date)s' % {
|
||
212 | 'from_date': from_date,
|
||
213 | 'to_date': to_date,
|
||
214 | }, |
||
215 | extra_environ=environ, |
||
216 | status=302)
|
||
217 | 9332c7c0 | Yves OUATTARA | |
218 | 02c4a1e7 | Francois POIROTTE | # Après redirection, le message d'erreur apparait dans la page.
|
219 | resp = resp.follow(extra_environ=environ) |
||
220 | error = '<div id="flash"><div class="error">%s</div></div>' % \
|
||
221 | 'End date cannot be greater than current date'
|
||
222 | assert_true(error in resp.body)
|
||
223 | 9332c7c0 | Yves OUATTARA | |
224 | def test_dates_inconsistency(self): |
||
225 | """Contrôle des dates. Vérifie date de début <= date de fin."""
|
||
226 | timestamp = insert_deps() |
||
227 | transaction.commit() |
||
228 | |||
229 | # Préparation des dates/heures.
|
||
230 | from_date = timestamp + timedelta(seconds=5)
|
||
231 | from_date = from_date.strftime("%Y-%m-%d %I:%M:%S %p")
|
||
232 | to_date = timestamp.strftime("%Y-%m-%d %I:%M:%S %p")
|
||
233 | |||
234 | 02c4a1e7 | Francois POIROTTE | # La recherche en utilisant une date de début supérieure
|
235 | # à la date de fin doit générer une erreur/redirection.
|
||
236 | environ = {'REMOTE_USER': 'user'} |
||
237 | resp = self.app.get(
|
||
238 | '/?from_date=%(from_date)s&to_date=%(to_date)s' % {
|
||
239 | 'from_date': from_date,
|
||
240 | 'to_date': to_date,
|
||
241 | }, |
||
242 | extra_environ=environ, |
||
243 | status=302)
|
||
244 | |||
245 | # Après redirection, le message d'erreur apparait dans la page.
|
||
246 | resp = resp.follow(extra_environ=environ) |
||
247 | error = '<div id="flash"><div class="error">%s</div></div>' % \
|
||
248 | 'Start date cannot be greater than end date'
|
||
249 | assert_true(error in resp.body)
|