Project

General

Profile

Statistics
| Branch: | Tag: | Revision:

vigiboard / vigiboard / tests / functional / test_search_form_misc.py @ 4cd0f170

History | View | Annotate | Download (7.39 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
        weight=42,
32
    )
33
    DBSession.add(host)
34
    DBSession.flush()
35

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

    
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
        trouble_ticket=u'FOO BAR BAZ éçà',
53
        ack=CorrEvent.ACK_NONE,
54
        occurrence=42,
55
        timestamp_active=timestamp,
56
        cause=event,
57
    )
58
    correvent.events.append(event)
59
    DBSession.add(correvent)
60
    DBSession.flush()
61

    
62
    # 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
    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
    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
        usergroup = UserGroup(group_name=u'users')
83
        user.usergroups.append(usergroup)
84
        usergroup.permissions.append(perm)
85
        DBSession.add(user)
86
        DBSession.add(usergroup)
87
        DBSession.flush()
88

    
89
    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
        rows = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr')
98
        print "There are %d rows in the result set" % len(rows)
99
        return len(rows)
100

    
101
    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
        response = self.app.get('/?output=hello*',
109
            extra_environ={'REMOTE_USER': 'user'})
110

    
111
        # Il doit y avoir 1 seule ligne de résultats.
112
        rows = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr')
113
        print "There are %d rows in the result set" % len(rows)
114
        assert_equal(len(rows), 1)
115

    
116
        # Il doit y avoir plusieurs colonnes dans la ligne de résultats.
117
        cols = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr/td')
118
        print "There are %d columns in the result set" % len(cols)
119
        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
        response = self.app.get('/?trouble_ticket=*bar*',
129
            extra_environ={'REMOTE_USER': 'user'})
130
        transaction.commit()
131

    
132
        # Il doit y avoir 1 seule ligne de résultats.
133
        rows = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr')
134
        print "There are %d rows in the result set" % len(rows)
135
        assert_equal(len(rows), 1)
136

    
137
        # Il doit y avoir plusieurs colonnes dans la ligne de résultats.
138
        cols = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr/td')
139
        print "There are %d columns in the result set" % len(cols)
140
        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

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

    
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
            extra_environ={'REMOTE_USER': 'user'})
159

    
160
        # Il doit y avoir 1 seule ligne de résultats.
161
        rows = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr')
162
        print "There are %d rows in the result set" % len(rows)
163
        assert_equal(len(rows), 1)
164

    
165
        # Il doit y avoir plusieurs colonnes dans la ligne de résultats.
166
        cols = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr/td')
167
        print "There are %d columns in the result set" % len(cols)
168
        assert_true(len(cols) > 1)
169

    
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
        from_date = datetime.now() + timedelta(seconds=60)
177
        from_date = from_date.strftime("%Y-%m-%d %I:%M:%S %p")
178
        to_date = datetime.now().strftime("%Y-%m-%d %I:%M:%S %p")
179

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

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

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

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

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

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

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

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

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

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