Project

General

Profile

Statistics
| Branch: | Tag: | Revision:

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)