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
# -*- coding: utf-8 -*-
2
# Copyright (C) 2006-2011 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 pylons.i18n import ugettext as _
9
from nose.tools import assert_true, assert_equal
10
from datetime import datetime
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()
22

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

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

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

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

    
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
        response = self.app.get('/?trouble_ticket=*bar*',
120
            extra_environ={'REMOTE_USER': 'user'})
121
        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

    
138
        # Préparation des dates/heures.
139
        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

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

    
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)