Project

General

Profile

Statistics
| Branch: | Tag: | Revision:

vigiboard / vigiboard / tests / functional / test_search_form_misc.py @ b373a5de

History | View | Annotate | Download (5.24 KB)

1 64ed9170 Vincent QUEMENER
# -*- coding: utf-8 -*-
2 b373a5de Aurelien BOMPARD
# Copyright (C) 2006-2011 CS-SI
3
# 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 9211ef65 Francois POIROTTE
from pylons.i18n import ugettext as _
9 64ed9170 Vincent QUEMENER
from nose.tools import assert_true, assert_equal
10
from datetime import datetime
11
import transaction
12
13
from vigiboard.tests import TestController
14 e7e3d45e Francois POIROTTE
from vigilo.models.session import DBSession
15 0bd9c069 Francois POIROTTE
from vigilo.models.tables import SupItemGroup, Host, Permission, \
16 60d02e7f Francois POIROTTE
                                    Event, CorrEvent, StateName, \
17
                                    User, UserGroup, DataPermission
18 64ed9170 Vincent QUEMENER
19
def insert_deps():
20
    """Insère les dépendances nécessaires aux tests."""
21
    timestamp = datetime.now()
22
23
    host = Host(
24
        name=u'bar',
25
        checkhostcmd=u'',
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
        weight=42,
33
    )
34
    DBSession.add(host)
35
    DBSession.flush()
36
37 03059edd Francois POIROTTE
    hostgroup = SupItemGroup(name=u'foo', parent=None)
38 24d74687 Francois POIROTTE
    hostgroup.supitems.append(host)
39 0bd9c069 Francois POIROTTE
    DBSession.add(hostgroup)
40
    DBSession.flush()
41 64ed9170 Vincent QUEMENER
42
    event = Event(
43
        supitem=host,
44
        timestamp=timestamp,
45
        current_state=StateName.statename_to_value(u'WARNING'),
46
        message=u'Hello world',
47
    )
48
    DBSession.add(event)
49
    DBSession.flush()
50
51
    correvent = CorrEvent(
52
        impact=42,
53
        priority=42,
54
        trouble_ticket=u'FOO BAR BAZ',
55
        status=u'None',
56
        occurrence=42,
57
        timestamp_active=timestamp,
58
        cause=event,
59
    )
60
    correvent.events.append(event)
61
    DBSession.add(correvent)
62
    DBSession.flush()
63
64 60d02e7f Francois POIROTTE
    # On donne l'accès aux données.
65
    usergroup = UserGroup.by_group_name(u'users')
66
    DBSession.add(DataPermission(
67
        group=hostgroup,
68
        usergroup=usergroup,
69
        access=u'r',
70
    ))
71 64ed9170 Vincent QUEMENER
    DBSession.flush()
72
    return timestamp
73
74
75
class TestSearchFormMisc(TestController):
76
    """Teste la récupération d'événements selon le nom d'hôte."""
77 60d02e7f Francois POIROTTE
    def setUp(self):
78
        super(TestSearchFormMisc, self).setUp()
79
        perm = Permission.by_permission_name(u'vigiboard-access')
80
        user = User(
81
            user_name=u'user',
82
            fullname=u'',
83
            email=u'some.random@us.er',
84
        )
85 03059edd Francois POIROTTE
        usergroup = UserGroup(group_name=u'users')
86 60d02e7f Francois POIROTTE
        user.usergroups.append(usergroup)
87
        usergroup.permissions.append(perm)
88
        DBSession.add(user)
89
        DBSession.add(usergroup)
90
        DBSession.flush()
91
92 64ed9170 Vincent QUEMENER
    def test_search_by_output(self):
93
        """Teste la recherche sur le message issu de Nagios."""
94
        insert_deps()
95
        transaction.commit()
96
97
        # Permet également de vérifier que la recherche est
98
        # insensible à la casse.
99 d36c37eb Francois POIROTTE
        response = self.app.get('/?output=hello*',
100 60d02e7f Francois POIROTTE
            extra_environ={'REMOTE_USER': 'user'})
101 64ed9170 Vincent QUEMENER
102
        # Il doit y avoir 1 seule ligne de résultats.
103
        rows = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr')
104
        print "There are %d rows in the result set" % len(rows)
105
        assert_equal(len(rows), 1)
106
107
        # Il doit y avoir plusieurs colonnes dans la ligne de résultats.
108
        cols = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr/td')
109
        print "There are %d columns in the result set" % len(cols)
110
        assert_true(len(cols) > 1)
111
112
    def test_search_by_trouble_ticket(self):
113
        """Teste la recherche sur le ticket d'incident."""
114
        insert_deps()
115
        transaction.commit()
116
117
        # Permet également de vérifier que la recherche est
118
        # insensible à la casse.
119 d36c37eb Francois POIROTTE
        response = self.app.get('/?trouble_ticket=*bar*',
120 60d02e7f Francois POIROTTE
            extra_environ={'REMOTE_USER': 'user'})
121 64ed9170 Vincent QUEMENER
        transaction.commit()
122
123
        # Il doit y avoir 1 seule ligne de résultats.
124
        rows = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr')
125
        print "There are %d rows in the result set" % len(rows)
126
        assert_equal(len(rows), 1)
127
128
        # Il doit y avoir plusieurs colonnes dans la ligne de résultats.
129
        cols = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr/td')
130
        print "There are %d columns in the result set" % len(cols)
131
        assert_true(len(cols) > 1)
132
133
    def test_search_by_dates(self):
134
        """Teste la recherche par dates."""
135
        timestamp = insert_deps()
136
        transaction.commit()
137 9211ef65 Francois POIROTTE
138
        # Préparation des dates/heures.
139 27140946 Francois POIROTTE
        from_date = timestamp.strftime("%Y-%m-%d %I:%M:%S %p")
140
        to_date = datetime.max.strftime("%Y-%m-%d %I:%M:%S %p")
141 64ed9170 Vincent QUEMENER
142
        # Permet également de vérifier que la recherche
143
        # par date est inclusive.
144
        response = self.app.get(
145
            '/?from_date=%(from_date)s&to_date=%(to_date)s' % {
146
                'from_date': from_date,
147
                'to_date': to_date,
148
            },
149 60d02e7f Francois POIROTTE
            extra_environ={'REMOTE_USER': 'user'})
150 64ed9170 Vincent QUEMENER
151
        # Il doit y avoir 1 seule ligne de résultats.
152
        rows = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr')
153
        print "There are %d rows in the result set" % len(rows)
154
        assert_equal(len(rows), 1)
155
156
        # Il doit y avoir plusieurs colonnes dans la ligne de résultats.
157
        cols = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr/td')
158
        print "There are %d columns in the result set" % len(cols)
159
        assert_true(len(cols) > 1)