Project

General

Profile

Statistics
| Branch: | Tag: | Revision:

vigiboard / vigiboard / tests / functional / test_search_form_misc.py @ 7bde24ad

History | View | Annotate | Download (7.12 KB)

1
# -*- coding: utf-8 -*-
2
# Copyright (C) 2006-2015 CS-SI
3
# License: GNU GPL v2 <http://www.gnu.org/licenses/gpl-2.0.html>
4

    
5
"""
6
Teste le formulaire de recherche avec divers champs.
7
"""
8
from nose.tools import assert_true, assert_equal
9
from datetime import datetime
10
from datetime import timedelta
11
import transaction
12

    
13
from vigiboard.tests import TestController
14
from vigilo.models.session import DBSession
15
from vigilo.models.tables import SupItemGroup, Host, Permission, \
16
                                    Event, CorrEvent, StateName, \
17
                                    User, UserGroup, DataPermission
18

    
19
def insert_deps():
20
    """Insère les dépendances nécessaires aux tests."""
21
    timestamp = datetime.now() + timedelta(seconds=-10)
22

    
23
    host = Host(
24
        name=u'bar',
25
        description=u'',
26
        hosttpl=u'',
27
        address=u'127.0.0.1',
28
        snmpport=42,
29
        snmpcommunity=u'public',
30
        snmpversion=u'3',
31
    )
32
    DBSession.add(host)
33
    DBSession.flush()
34

    
35
    hostgroup = SupItemGroup(name=u'foo', parent=None)
36
    hostgroup.supitems.append(host)
37
    DBSession.add(hostgroup)
38
    DBSession.flush()
39

    
40
    event = Event(
41
        supitem=host,
42
        timestamp=timestamp,
43
        current_state=StateName.statename_to_value(u'WARNING'),
44
        message=u'Hello world',
45
    )
46
    DBSession.add(event)
47
    DBSession.flush()
48

    
49
    correvent = CorrEvent(
50
        priority=42,
51
        trouble_ticket=u'FOO BAR BAZ éçà',
52
        ack=CorrEvent.ACK_NONE,
53
        occurrence=42,
54
        timestamp_active=timestamp,
55
        cause=event,
56
    )
57
    correvent.events.append(event)
58
    DBSession.add(correvent)
59
    DBSession.flush()
60

    
61
    # On donne l'accès aux données.
62
    usergroup = UserGroup.by_group_name(u'users')
63
    DBSession.add(DataPermission(
64
        group=hostgroup,
65
        usergroup=usergroup,
66
        access=u'r',
67
    ))
68
    DBSession.flush()
69
    return timestamp
70

    
71
class TestSearchFormMisc(TestController):
72
    """Teste la récupération d'événements selon le nom d'hôte."""
73
    def setUp(self):
74
        super(TestSearchFormMisc, self).setUp()
75
        perm = Permission.by_permission_name(u'vigiboard-access')
76
        user = User(
77
            user_name=u'user',
78
            fullname=u'',
79
            email=u'some.random@us.er',
80
        )
81
        usergroup = UserGroup(group_name=u'users')
82
        user.usergroups.append(usergroup)
83
        usergroup.permissions.append(perm)
84
        DBSession.add(user)
85
        DBSession.add(usergroup)
86
        DBSession.flush()
87

    
88
    def get_number_of_rows(self, from_date, to_date):
89
        """Détermine le nombre de lignes parmi les résultats d'une recherche sur le formulaire."""
90
        response = self.app.get(
91
            '/?from_date=%(from_date)s&to_date=%(to_date)s' % {
92
                'from_date': from_date,
93
                'to_date': to_date,
94
            },
95
            extra_environ={'REMOTE_USER': 'user'})
96
        rows = self.get_rows(response)
97
        print "There are %d rows in the result set" % len(rows)
98
        return len(rows)
99

    
100
    def test_search_by_output(self):
101
        """Teste la recherche sur le message issu de Nagios."""
102
        insert_deps()
103
        transaction.commit()
104

    
105
        # Permet également de vérifier que la recherche est
106
        # insensible à la casse.
107
        response = self.app.get('/?output=hello*',
108
            extra_environ={'REMOTE_USER': 'user'})
109

    
110
        # Il doit y avoir 1 seule ligne de résultats.
111
        rows = self.get_rows(response)
112
        print "There are %d rows in the result set" % len(rows)
113
        assert_equal(len(rows), 1)
114

    
115
        # Il doit y avoir plusieurs colonnes dans la ligne de résultats.
116
        cols = self.get_cells(response)
117
        print "There are %d columns in the result set" % len(cols)
118
        assert_true(len(cols) > 1)
119

    
120
    def test_search_by_trouble_ticket(self):
121
        """Teste la recherche sur le ticket d'incident."""
122
        insert_deps()
123
        transaction.commit()
124

    
125
        # Permet également de vérifier que la recherche est
126
        # insensible à la casse.
127
        response = self.app.get('/?trouble_ticket=*bar*',
128
            extra_environ={'REMOTE_USER': 'user'})
129
        transaction.commit()
130

    
131
        # Il doit y avoir 1 seule ligne de résultats.
132
        rows = self.get_rows(response)
133
        print "There are %d rows in the result set" % len(rows)
134
        assert_equal(len(rows), 1)
135

    
136
        # Il doit y avoir plusieurs colonnes dans la ligne de résultats.
137
        cols = self.get_cells(response)
138
        print "There are %d columns in the result set" % len(cols)
139
        assert_true(len(cols) > 1)
140

    
141
    def test_search_by_dates(self):
142
        """Teste la recherche par dates."""
143
        timestamp = insert_deps()
144
        transaction.commit()
145

    
146
        # Préparation des dates/heures.
147
        from_date = timestamp.strftime("%Y-%m-%d %I:%M:%S %p")
148
        to_date = datetime.now().strftime("%Y-%m-%d %I:%M:%S %p")
149

    
150
        # Permet également de vérifier que la recherche
151
        # par date est inclusive.
152
        response = self.app.get(
153
            '/?from_date=%(from_date)s&to_date=%(to_date)s' % {
154
                'from_date': from_date,
155
                'to_date': to_date,
156
            },
157
            extra_environ={'REMOTE_USER': 'user'})
158

    
159
        # Il doit y avoir 1 seule ligne de résultats.
160
        rows = self.get_rows(response)
161
        print "There are %d rows in the result set" % len(rows)
162
        assert_equal(len(rows), 1)
163

    
164
        # Il doit y avoir plusieurs colonnes dans la ligne de résultats.
165
        cols = self.get_cells(response)
166
        print "There are %d columns in the result set" % len(cols)
167
        assert_true(len(cols) > 1)
168

    
169
    def test_future_begin_date(self):
170
        """Contrôle des dates. Vérifie que date de début < date courante."""
171
        timestamp = insert_deps()
172
        transaction.commit()
173

    
174
        # Préparation des dates/heures.
175
        from_date = datetime.now() + timedelta(seconds=60)
176
        from_date = from_date.strftime("%Y-%m-%d %I:%M:%S %p")
177
        to_date = datetime.now().strftime("%Y-%m-%d %I:%M:%S %p")
178

    
179
        # Démarrage du test
180
        rows = self.get_number_of_rows(from_date, to_date)
181

    
182
        # Aucun résultat.
183
        assert_equal(rows, 0)
184

    
185
    def test_future_end_date(self):
186
        """Contrôle des dates. Vérifie que date de fin < date courante."""
187
        timestamp = insert_deps()
188
        transaction.commit()
189

    
190
        # Préparation des dates/heures.
191
        from_date = timestamp.strftime("%Y-%m-%d %I:%M:%S %p")
192
        to_date = datetime.now() + timedelta(seconds=60)
193
        to_date = to_date.strftime("%Y-%m-%d %I:%M:%S %p")
194

    
195
        # Démarrage du test
196
        rows = self.get_number_of_rows(from_date, to_date)
197

    
198
        # Aucun résultat.
199
        assert_equal(rows, 0)
200

    
201
    def test_dates_inconsistency(self):
202
        """Contrôle des dates. Vérifie date de début <= date de fin."""
203
        timestamp = insert_deps()
204
        transaction.commit()
205

    
206
        # Préparation des dates/heures.
207
        from_date = timestamp + timedelta(seconds=5)
208
        from_date = from_date.strftime("%Y-%m-%d %I:%M:%S %p")
209
        to_date = timestamp.strftime("%Y-%m-%d %I:%M:%S %p")
210

    
211
        # Démarrage du test
212
        rows = self.get_number_of_rows(from_date, to_date)
213

    
214
        # Aucun résultat.
215
        assert_equal(rows, 0)